{"version":3,"file":"static/js/application.async.landing~3d0406ed.dc2ea453.chunk.js","mappings":"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","sources":["../../../node_modules/@bingads-webui-campaign/popup/view/index.js","../../../node_modules/@bingads-webui-campaign/projection-grid-auction-insight/src/navigate-to-competition-tab.js","../../../node_modules/@bingads-webui-campaign/projection-grid-auction-insight/src/navigate-to-legacy-auction-insights.js","../../../node_modules/@bingads-webui-campaign/projection-grid-auction-insight/src/get-dropdown-menu-items.js","../../../node_modules/@bingads-webui-campaign/projection-grid-auction-insight/src/plugin.js","../../../node_modules/@bingads-webui-campaign/projection-grid-automated-rules/src/automated-rules-menu.js","../../../node_modules/@bingads-webui-campaign/projection-grid-automated-rules/src/plugin.js","../../../node_modules/@bingads-webui-campaign/projection-grid-bid-strategy/src/bidding-strategy-type.js","../../../node_modules/@bingads-webui-campaign/projection-grid-bid-strategy/src/menu-items.js","../../../node_modules/@bingads-webui-campaign/projection-grid-bid-strategy/src/plugin.js","../../../node_modules/@bingads-webui-campaign/projection-grid-bulk-edit/src/plugin.js","../../../node_modules/@bingads-webui-campaign/projection-grid-column-resize-helper/src/local-preference-service.js","../../../node_modules/@bingads-webui-campaign/projection-grid-column-resize-helper/src/plugins.js","../../../node_modules/@bingads-webui-campaign/projection-grid-column-resize-helper/src/get-pgrid-column-resize-plugin.js","../../../node_modules/@bingads-webui-campaign/projection-grid-editable/src/plugin.js","../../../node_modules/@bingads-webui-campaign/projection-grid-flex-column-resize/src/plugin.js","../../../node_modules/@bingads-webui-campaign/projection-grid-paste/src/plugin.js","../../../node_modules/@bingads-webui-campaign/projection-grid-popup/src/plugin.js","../../../node_modules/@bingads-webui-campaign/projection-grid-scope-navigator/src/plugin.js","../../../node_modules/@bingads-webui-campaign/projection-grid-scrollbar/src/plugin.js","../../../node_modules/@bingads-webui-campaign/promotion-extension/src/i18n/occasion-i18n-keys.js","../../../node_modules/@bingads-webui-campaign/promotion-extension/src/controls/occasion-select.js","../../../node_modules/@bingads-webui-campaign/promotion-extension/src/controls/currency-select.js","../../../node_modules/@bingads-webui-campaign/promotion-extension/src/rules/promotion-type.js","../../../node_modules/@bingads-webui-campaign/promotion-extension/src/controls/promotion-type.js","../../../node_modules/@bingads-webui-campaign/promotion-extension/src/promotion-extension-editor-style.js","../../../node_modules/@bingads-webui-campaign/promotion-extension/src/rules/promotion-detail.js","../../../node_modules/@bingads-webui-campaign/promotion-extension/src/controls/promotion-detail.js","../../../node_modules/@bingads-webui-campaign/promotion-extension/src/controls/start-and-end-date.js","../../../node_modules/@bingads-webui-campaign/promotion-extension/src/rules/currency.js","../../../node_modules/@bingads-webui-campaign/promotion-extension/src/promotion-extension-editor.js","../../../node_modules/@bingads-webui-campaign/promotion-extension/src/i18n/item-preview-i18n-keys.js","../../../node_modules/@bingads-webui-campaign/promotion-extension/src/templates/index.js","../../../node_modules/@bingads-webui-campaign/reach-estimate-control/src/audience-meter.js","../../../node_modules/@bingads-webui-campaign/reach-estimate-control/src/utils.js","../../../node_modules/@bingads-webui-campaign/reach-estimate-control/src/view.js","../../../node_modules/@bingads-webui-campaign/reach-estimate-control/src/estimate-request-factory.js","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/utils/merge-i18n.js","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/asset-suggestion/asset-suggestion-repository.js","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/constants.js","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/asset-suggestion/asset-suggestion-picker.js","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/asset-suggestion/asset-suggestion-helper.js","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/utils/test-mock-data/mock.js","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/utils/ad-recommend-repository.js","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/ad-recommend/recommend-ad-list.tsx","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/ad-recommend/recommend-ad-preview-carousel.tsx","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/ad-recommend/recommend-ad-carousel.tsx","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/types.ts","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/ad-recommend/recommend-ad-button.tsx","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/call-to-action-text/index.tsx","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/ad-edit/view.js","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/utils/account-setting-repository.js","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/utils/video-repository-util.js","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/asset-suggestion/asset-suggestion-log.js","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/boost-image/style.js","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/boost-image/image-repository.js","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/boost-image/index.js","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/crud-audience-ad-react.js","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/utils/save-ad-logging.js","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/crud-audience-ad-react-with-context.js","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/responsive-ad-repository.js","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/view.js","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/mma-creation-rsa/index.js","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/config.js","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/copilot-search-mma-editor-styles.js","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/advanced-settings-styles.js","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/advanced-settings.js","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/useEvaluatedAssets.js","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/copilot-search-mma-editor-container.js","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/useAutomatedCTA.js","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/useInitAdCustomizer.js","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/copilot-search-mma-editor.js","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/useAppliedLog.js","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/get-unified-ad-preview-config.js","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/mma-creation-rsa/bulk-mma-convert-editor-style.js","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/mma-creation-rsa/image-experience-with-suggestion-poller.js","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/mma-creation-rsa/bulk-mma-convert-editor-header.js","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/mma-creation-rsa/bulk-mma-convert-editor-container.js","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/mma-creation-rsa/bulk-mma-convert-editor-footer.js","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/mma-creation-rsa/bulk-mma-convert-progress.js","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/mma-creation-rsa/bulk-mma-convert-error.js","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/mma-creation-rsa/bulk-mma-convert-editor.js","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/mma-creation-rsa/data-util.js","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/mma-creation-rsa/repository.js","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/placeholder-mma-editor.js","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/search-mma-ad-preview.js","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/utils/errors-util.js","../../../node_modules/@bingads-webui-campaign/responsive-search-ad-recommendation/src/style/index.js","../../../node_modules/@bingads-webui-campaign/responsive-search-ad-recommendation/src/text-asset-recommendations-panel.js","../../../node_modules/@bingads-webui-campaign/responsive-search-ad-recommendation/src/inline-recommendation.js","../../../node_modules/@bingads-webui-campaign/responsive-search-ad-recommendation/src/use-circular-buffer-view.js","../../../node_modules/@bingads-webui-campaign/responsive-search-ad-recommendation/src/config/text-asset-collection-config.js","../../../node_modules/@bingads-webui-campaign/responsive-search-ad-recommendation/src/recommendation-context/util.js","../../../node_modules/@bingads-webui-campaign/responsive-search-ad-recommendation/src/recommendation-context/recommendation-context.js","../../../node_modules/@bingads-webui-campaign/responsive-search-ad-recommendation/src/recommendation-context/use-copilot-recommendations.js","../../../node_modules/@bingads-webui-campaign/responsive-search-ad-recommendation/src/text-asset-collection-with-recommendations.js","../../../node_modules/@bingads-webui-campaign/responsive-search-ad-recommendation/src/headline-asset-collection.js","../../../node_modules/@bingads-webui-campaign/responsive-search-ad-recommendation/src/description-asset-collection.js","../../../node_modules/@bingads-webui-campaign/responsive-search-ad-recommendation/src/format-llm-suggestion.js","../../../node_modules/@bingads-webui-campaign/responsive-search-ad-strength/src/ad-strength-helper.js","../../../node_modules/@bingads-webui-campaign/responsive-search-ad-strength/src/ad-strength-score.js","../../../node_modules/@bingads-webui-campaign/responsive-search-ad-strength/src/ad-strength-repository.js","../../../node_modules/@bingads-webui-campaign/responsive-search-ad-strength/src/rsa-ad-strength-suggestion-repository.js","../../../node_modules/@bingads-webui-campaign/responsive-search-ad-strength/src/rsa-ad-strength-suggestion-picker.js","../../../node_modules/@bingads-webui-campaign/responsive-search-ad-strength/src/rsa-ad-strength-suggestion.js","../../../node_modules/@bingads-webui-campaign/responsive-search-ad-strength/src/rsa-ad-strength-suggestion-helper.js","../../../node_modules/@bingads-webui-campaign/responsive-search-ad-strength/src/ad-strength-view.js","../../../node_modules/@bingads-webui-campaign/responsive-search-ad-strength/src/rsa-ad-strength-view.js","../../../node_modules/@bingads-webui-campaign/responsive-search-ad-strength/src/rsa-ad-strength-suggestion-contextual-attribute.js","../../../node_modules/@bingads-webui-campaign/rsa-ad-customizer-attribute-column/src/inline-editor-view.js","../../../node_modules/@bingads-webui-campaign/rsa-ad-customizer-attribute-column/src/style.js","../../../node_modules/@bingads-webui-campaign/rsa-ad-customizer-attribute-column/src/column.js","../../../node_modules/@bingads-webui-campaign/rsa-ad-customizer-attribute-column/src/editorial-reasons/get-editorial-reasons.js","../../../node_modules/@bingads-webui-campaign/rsa-ad-customizer-attribute-column/src/editorial-reasons/show-rejection-reasons.js","../../../node_modules/@bingads-webui-campaign/shared-budget/src/legacy-shared-budget.js","../../../node_modules/@bingads-webui-campaign/shared-budget/src/validated-shared-budget.js","../../../node_modules/@bingads-webui-campaign/shared-budget/src/utils.js","../../../node_modules/@bingads-webui-campaign/shared-image-experience-styles/src/palette.js","../../../node_modules/@bingads-webui-campaign/shared-image-experience-styles/src/imageCommonStyle.js","../../../node_modules/@bingads-webui-campaign/sponsored-campaign-shared/src/rules.js","../../../node_modules/@bingads-webui-campaign/sponsored-campaign-shared/src/utils.js","../../../node_modules/@bingads-webui-campaign/stock-image-data-service/src/stock-image-data-service.js","../../../node_modules/@bingads-webui-campaign/target-bid-adjustment/src/bid-adjustment-utils.js","../../../node_modules/@bingads-webui-campaign/target-bid-adjustment/src/grid-config-generator.js","../../../node_modules/@bingads-webui-campaign/target-bid-adjustment/src/bid-adjustment.js","../../../node_modules/@bingads-webui-campaign/target-bid-adjustment/src/bid-adjustment-control-view.js","../../../node_modules/@bingads-webui-campaign/top-panel-cashback-settings/src/view-model.js","../../../node_modules/@bingads-webui-campaign/top-panel-cashback-settings/src/view.js","../../../node_modules/@bingads-webui-campaign/upgrade-url-string-map/index.js","../../../node_modules/@bingads-webui-campaign/upgrade-url/src/tracking-template/viewmodel.js","../../../node_modules/@bingads-webui-campaign/upgrade-url/src/tracking-template/view.js","../../../node_modules/@bingads-webui-campaign/upgrade-url/src/shared/inline-edit/viewmodel.js","../../../node_modules/@bingads-webui-campaign/upgrade-url/src/tracking-template/inline-edit-view.js","../../../node_modules/@bingads-webui-campaign/upgrade-url/src/final-url-suffix/viewmodel.js","../../../node_modules/@bingads-webui-campaign/upgrade-url/src/final-url-suffix/view.js","../../../node_modules/@bingads-webui-campaign/upgrade-url/src/final-url-suffix/inline-edit-view.js","../../../node_modules/@bingads-webui-campaign/upgrade-url/src/custom-params/viewmodel.js","../../../node_modules/@bingads-webui-campaign/upgrade-url/src/custom-params/view.js","../../../node_modules/@bingads-webui-campaign/upgrade-url/src/custom-params/inline-edit-view.js","../../../node_modules/@bingads-webui-campaign/upgrade-url/src/upgraded-url/final-url-viewmodel.js","../../../node_modules/@bingads-webui-campaign/upgrade-url/src/upgraded-url/final-url-view.js","../../../node_modules/@bingads-webui-campaign/upgrade-url/src/upgraded-url/url-input/url-input-viewmodel.js","../../../node_modules/@bingads-webui-campaign/upgrade-url/src/upgraded-url/url-input/url-input-view.js","../../../node_modules/@bingads-webui-campaign/upgrade-url/src/upgraded-url/upgraded-url-viewmodel.js","../../../node_modules/@bingads-webui-campaign/upgrade-url/src/upgraded-url/upgraded-url-view.js","../../../node_modules/@bingads-webui-campaign/upgrade-url/src/upgraded-url/inline-edit-view.js","../../../node_modules/@bingads-webui-campaign/popup/template/popup.pug","../../../node_modules/@bingads-webui-campaign/projection-grid-column-resize-helper/src/header.pug","../../../node_modules/@bingads-webui-campaign/projection-grid-editable/src/editable-template.pug","../../../node_modules/@bingads-webui-campaign/projection-grid-flex-column-resize/src/header.pug","../../../node_modules/@bingads-webui-campaign/projection-grid-scrollbar/src/template.pug","../../../node_modules/@bingads-webui-campaign/promotion-extension/src/templates/universal-item-template.pug","../../../node_modules/@bingads-webui-campaign/quality-score/src/content.pug","../../../node_modules/@bingads-webui-campaign/quality-score/src/title.pug","../../../node_modules/@bingads-webui-campaign/reach-estimate-control/src/audience-meter.pug","../../../node_modules/@bingads-webui-campaign/reach-estimate-control/src/template.pug","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/ad-edit/editorHeadlineDescriptionOnly.pug","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/ad-edit/inlineErrors.pug","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/ad-edit/template.pug","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/template.pug","../../../node_modules/@bingads-webui-campaign/rsa-ad-customizer-attribute-column/src/rsa-ad-customizer-attribute-template.pug","../../../node_modules/@bingads-webui-campaign/target-bid-adjustment/src/bid-adjustment-template.pug","../../../node_modules/@bingads-webui-campaign/target-bid-adjustment/src/bid-adjustment.pug","../../../node_modules/@bingads-webui-campaign/target-bid-adjustment/src/target-exclude.pug","../../../node_modules/@bingads-webui-campaign/top-panel-cashback-settings/src/error-message.pug","../../../node_modules/@bingads-webui-campaign/top-panel-cashback-settings/src/template.pug","../../../node_modules/@bingads-webui-campaign/upgrade-url/src/custom-params/template.pug","../../../node_modules/@bingads-webui-campaign/upgrade-url/src/final-url-suffix/template.pug","../../../node_modules/@bingads-webui-campaign/upgrade-url/src/shared/inline-edit/template.pug","../../../node_modules/@bingads-webui-campaign/upgrade-url/src/tracking-template/template.pug","../../../node_modules/@bingads-webui-campaign/upgrade-url/src/upgraded-url/final-url-template.pug","../../../node_modules/@bingads-webui-campaign/upgrade-url/src/upgraded-url/upgraded-url.pug","../../../node_modules/@bingads-webui-campaign/upgrade-url/src/upgraded-url/url-input/url-input-core.pug","../../../node_modules/@bingads-webui-campaign/upgrade-url/src/upgraded-url/url-input/url-input.pug","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/ad-recommend/recommend-ad-cache.ts","../../../node_modules/@bingads-webui-campaign/responsive-ad-editor/src/utils/ad-recommend-util.ts"],"sourcesContent":["/* eslint-disable no-mixed-operators */\r\n\r\nimport $ from 'jquery';\r\nimport _ from 'underscore';\r\nimport Backbone from 'backbone';\r\nimport Promise from 'bluebird';\r\nimport { focusLockInstanceDecorator } from '@bingads-webui/focus-lock-decorator';\r\nimport controlTemplate from '../template/popup.pug';\r\n\r\nfunction getDimensions(element) {\r\n const $element = $(element);\r\n\r\n return {\r\n width: $element.outerWidth(),\r\n height: $element.outerHeight(),\r\n };\r\n}\r\n\r\nfunction getBoundingRectPosition(element) {\r\n const position = element.position();\r\n const { width, height } = getDimensions(element);\r\n\r\n return {\r\n top: position.top,\r\n left: position.left,\r\n width,\r\n height,\r\n };\r\n}\r\n\r\nfunction getBoundingRectOffset(element) {\r\n const position = element.offset();\r\n const { width, height } = getDimensions(element);\r\n\r\n return {\r\n top: position.top,\r\n left: position.left,\r\n width,\r\n height,\r\n };\r\n}\r\n\r\nfunction testFit(containerDimensions, elementDimentions, position) {\r\n // Calculating how much of the element intersects with the container\r\n const verticalFit = Math.max(\r\n 0,\r\n Math.min(containerDimensions.height, position.top + elementDimentions.height) -\r\n Math.max(0, position.top)\r\n ) / elementDimentions.height;\r\n\r\n const horizontalFit = Math.max(\r\n 0,\r\n Math.min(containerDimensions.width, position.left + elementDimentions.width) -\r\n Math.max(0, position.left)\r\n ) / elementDimentions.width;\r\n\r\n return {\r\n verticalFit,\r\n horizontalFit,\r\n get areaFit() {\r\n return verticalFit * horizontalFit;\r\n },\r\n };\r\n}\r\n\r\nexport const FixedPositionLocation = Object.freeze({\r\n buttomLeft: 'buttomLeft',\r\n topRight: 'topRight',\r\n topLeft: 'topLeft',\r\n buttomRight: 'buttomRight',\r\n right: 'right',\r\n left: 'left',\r\n top: 'top',\r\n bottom: 'bottom',\r\n});\r\n\r\nexport const PositionAttribute = Object.freeze({\r\n fixed: 'fixed',\r\n absolute: 'absolute',\r\n});\r\n\r\nfunction getFixedPosition(positionOptions, container, anchor, element) {\r\n const popupDimensions = getDimensions(element);\r\n const anchorBoundingRect = positionOptions.positionAttribute === PositionAttribute.fixed ?\r\n getBoundingRectOffset(anchor) :\r\n getBoundingRectPosition(anchor);\r\n\r\n switch (positionOptions.location) {\r\n case FixedPositionLocation.buttomLeft: return {\r\n top: anchorBoundingRect.top + anchorBoundingRect.height,\r\n left: anchorBoundingRect.left + anchorBoundingRect.width - popupDimensions.width,\r\n };\r\n case FixedPositionLocation.topRight: return {\r\n top: anchorBoundingRect.top - popupDimensions.height,\r\n left: anchorBoundingRect.left,\r\n };\r\n case FixedPositionLocation.topLeft: return {\r\n top: anchorBoundingRect.top - popupDimensions.height,\r\n left: anchorBoundingRect.left + anchorBoundingRect.width - popupDimensions.width,\r\n };\r\n case FixedPositionLocation.right: return {\r\n top: anchorBoundingRect.top + anchorBoundingRect.height * 0.5 - popupDimensions.height * 0.5,\r\n left: anchorBoundingRect.left + anchorBoundingRect.width,\r\n };\r\n case FixedPositionLocation.left: return {\r\n top: anchorBoundingRect.top + anchorBoundingRect.height * 0.5 - popupDimensions.height * 0.5,\r\n left: anchorBoundingRect.left - popupDimensions.width,\r\n };\r\n case FixedPositionLocation.top: return {\r\n top: anchorBoundingRect.top - popupDimensions.height,\r\n left: anchorBoundingRect.left + anchorBoundingRect.width * 0.5 - popupDimensions.width * 0.5,\r\n };\r\n case FixedPositionLocation.bottom: return {\r\n top: anchorBoundingRect.top + anchorBoundingRect.height,\r\n left: anchorBoundingRect.left + anchorBoundingRect.width * 0.5 - popupDimensions.width * 0.5,\r\n };\r\n case FixedPositionLocation.buttomRight:\r\n default: return {\r\n top: anchorBoundingRect.top + anchorBoundingRect.height,\r\n left: anchorBoundingRect.left,\r\n };\r\n }\r\n}\r\n\r\nfunction getFittingPosition(positionOptions, container, anchor, element) {\r\n const containerDimensions = getDimensions(container);\r\n const popupDimensions = getDimensions(element);\r\n\r\n const positions = [\r\n getFixedPosition({ location: FixedPositionLocation.buttomRight }, container, anchor, element),\r\n getFixedPosition({ location: FixedPositionLocation.buttomLeft }, container, anchor, element),\r\n getFixedPosition({ location: FixedPositionLocation.topRight }, container, anchor, element),\r\n getFixedPosition({ location: FixedPositionLocation.topLeft }, container, anchor, element),\r\n ];\r\n\r\n const threshold = positionOptions && positionOptions.threshold;\r\n\r\n const fittingPosition =\r\n _.find(positions, position =>\r\n testFit(containerDimensions, popupDimensions, position).areaFit >= 1) ||\r\n threshold &&\r\n (_.find(positions, position =>\r\n testFit(containerDimensions, popupDimensions, position).areaFit >= threshold) ||\r\n positions[0]) ||\r\n _.max(positions, position => testFit(containerDimensions, popupDimensions, position).areaFit);\r\n\r\n return _.pick(fittingPosition, 'left', 'top');\r\n}\r\n\r\nexport const PositioningMethod = Object.freeze({\r\n fixed: 'fixed',\r\n fit: 'fit',\r\n});\r\n\r\nfunction getPositioningMethod(positioningMethod) {\r\n switch (positioningMethod) {\r\n case PositioningMethod.fixed:\r\n return getFixedPosition;\r\n case PositioningMethod.fit:\r\n default:\r\n return getFittingPosition;\r\n }\r\n}\r\n\r\nclass LabelsPopup extends Backbone.View {\r\n className() {\r\n return 'popup';\r\n }\r\n\r\n attributes() {\r\n return {\r\n role: 'dialog',\r\n };\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click .popup__close': (e) => {\r\n this.onClose(e);\r\n },\r\n };\r\n }\r\n\r\n get combinedEvents() {\r\n return _.extend(\r\n this.options.events,\r\n this.events\r\n );\r\n }\r\n\r\n render() {\r\n this.$el.addClass((this.options.classes || []).join(' '));\r\n this.$el.append(controlTemplate({\r\n contents: this.options.template(),\r\n closeLabel: this.options.i18n.getString('Popup_Close'),\r\n }));\r\n this.setPosition(\r\n this.options.positioningMethod,\r\n this.options.positioningOptions,\r\n this.options.container,\r\n this.options.anchor,\r\n this.options.positionAttr\r\n );\r\n this.delegateEvents(this.combinedEvents);\r\n\r\n return this;\r\n }\r\n\r\n setPosition(positioningMethod, positioningOptions, container, anchor) {\r\n this.$el.css({\r\n position: positioningOptions.positionAttribute || PositionAttribute.absolute,\r\n visibility: 'hidden',\r\n });\r\n\r\n // Deferring the positioning to the next cycle\r\n // to have the popup layed out by the browser\r\n _.defer(() =>\r\n this.$el.css(_.extend(\r\n {\r\n visibility: 'visible',\r\n },\r\n getPositioningMethod(positioningMethod)(positioningOptions, container, anchor, this.$el)\r\n )));\r\n }\r\n\r\n onClose(e) {\r\n e.stopPropagation();\r\n this.trigger('close');\r\n }\r\n}\r\n\r\nlet currentPopup = null;\r\nlet popupInstance = null;\r\n\r\nexport function dismiss(result) {\r\n if (popupInstance) {\r\n popupInstance.trigger('close', result);\r\n }\r\n}\r\n\r\nfunction clickToDismiss(e) {\r\n if ($(e.target).closest('.popup').length === 0) {\r\n dismiss();\r\n }\r\n}\r\n\r\nfunction removePopup() {\r\n if (currentPopup) {\r\n currentPopup.remove();\r\n currentPopup = null;\r\n popupInstance = null;\r\n $(window).off('click', clickToDismiss);\r\n }\r\n}\r\n\r\nexport function show(options) {\r\n if (currentPopup) {\r\n dismiss();\r\n }\r\n\r\n return new Promise((resolveCallback) => {\r\n // eslint-disable-next-line no-param-reassign\r\n options.container = $(options.container || 'body');\r\n\r\n popupInstance = new LabelsPopup(options).render();\r\n\r\n const FocusLockInstanceView = focusLockInstanceDecorator(\r\n popupInstance,\r\n {\r\n onExit: (result) => {\r\n resolveCallback(result);\r\n removePopup();\r\n },\r\n getAnchor: options.anchor ? () => options.anchor[0] : undefined,\r\n }, {\r\n eventHandlers: {\r\n on: {\r\n close: (result) => {\r\n resolveCallback(result);\r\n removePopup();\r\n },\r\n },\r\n },\r\n managed: true,\r\n }\r\n );\r\n\r\n currentPopup = (new FocusLockInstanceView()).render();\r\n\r\n options.container.append(currentPopup.el);\r\n\r\n // Waiting for the next cycle to not intercept the click event\r\n // which may have triggered this showing of the popup.\r\n // Otherwise, the popup will close without even showing.\r\n _.defer(() => {\r\n $(window).on('click', clickToDismiss);\r\n if (currentPopup) {\r\n currentPopup.$('.popup__close').focus();\r\n }\r\n });\r\n });\r\n}\r\n\r\nexport class Popup {\r\n constructor({ i18n }) {\r\n this.popup = null;\r\n this.i18n = i18n;\r\n }\r\n\r\n show(options) {\r\n if (this.popup) {\r\n this.dismiss();\r\n }\r\n\r\n return new Promise((resolveCallback) => {\r\n // eslint-disable-next-line no-param-reassign\r\n options.container = $(options.container || 'body');\r\n\r\n this.popup = new LabelsPopup(options).render();\r\n\r\n const FocusLockInstanceView = focusLockInstanceDecorator(\r\n this.popup,\r\n {\r\n onExit: (result) => {\r\n resolveCallback(result);\r\n this.removePopup();\r\n },\r\n getAnchor: options.anchor ? () => options.anchor[0] : undefined,\r\n }, {\r\n eventHandlers: {\r\n on: {\r\n close: (result) => {\r\n resolveCallback(result);\r\n this.removePopup();\r\n },\r\n },\r\n },\r\n managed: true,\r\n }\r\n );\r\n\r\n this.wrappedPopup = (new FocusLockInstanceView()).render();\r\n\r\n options.container.append(this.wrappedPopup.el);\r\n\r\n // Waiting for the next cycle to not intercept the click event\r\n // which may have triggered this showing of the popup.\r\n // Otherwise, the popup will close without even showing.\r\n _.defer(() => {\r\n $(window).on('click', this.clickToDismiss.bind(this));\r\n if (this.wrappedPopup) {\r\n this.wrappedPopup.$('.popup__close').focus();\r\n }\r\n });\r\n });\r\n }\r\n\r\n removePopup() {\r\n if (this.wrappedPopup) {\r\n this.wrappedPopup.remove();\r\n this.popup = null;\r\n this.wrappedPopup = null;\r\n $(window).off('click', this.clickToDismiss);\r\n }\r\n }\r\n\r\n clickToDismiss(e) {\r\n if ($(e.target).closest('.popup--uurl-detail').length === 0) {\r\n this.dismiss();\r\n }\r\n }\r\n\r\n dismiss(result) {\r\n if (this.popup) {\r\n this.popup.trigger('close', result);\r\n }\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { FilterStorageFactory } from '@bingads-webui-campaign/filter-storage';\r\nimport {\r\n saveGeneralInsightsPreferences,\r\n FEATURE_NAME_GENERAL_INSIGHTS,\r\n FEATURE_NAME_GENERAL_INSIGHTS_SHOPPING,\r\n CAMPAIGN_TYPES,\r\n} from '@bingads-webui-campaign/competition-auction-insight-preferences';\r\n\r\nfunction getRouteforScope(scope, prefix = '') {\r\n let suffix;\r\n\r\n if (scope.adGroupId) {\r\n suffix = 'adgroup_competition';\r\n } else if (scope.campaignId) {\r\n suffix = 'campaign_competition';\r\n } else {\r\n suffix = 'competition';\r\n }\r\n\r\n return prefix + suffix;\r\n}\r\n\r\nfunction getRoute(scope, isForVNext, pageName) {\r\n let route;\r\n\r\n if (isForVNext) {\r\n if (pageName === 'campaigns') {\r\n route = getRouteforScope(scope, 'campaigns_');\r\n } else if (pageName === 'adgroups') {\r\n route = getRouteforScope(scope, 'adgroups_');\r\n } else if (pageName === 'keywords') {\r\n route = getRouteforScope(scope, 'keywords_');\r\n } else {\r\n // Unknown page, go to competition page\r\n route = getRouteforScope(scope);\r\n }\r\n } else {\r\n route = getRouteforScope(scope);\r\n }\r\n\r\n return route;\r\n}\r\n\r\nfunction getEntityType(item) {\r\n if (item.AdGroup) {\r\n return 'Keyword';\r\n }\r\n if (item.Campaign) {\r\n return 'AdGroup';\r\n }\r\n return 'Campaign';\r\n}\r\n\r\nconst AUCTION_INSIGHT_ENTITY_NAME = 'AuctionInsight';\r\n\r\nfunction getEditableFilter(preferenceService, featureName) {\r\n const factory = new FilterStorageFactory({\r\n preferenceService,\r\n featureName,\r\n });\r\n\r\n return factory.create('editableFilter', {\r\n filterEntityOptions: {\r\n entitySchema: { name: AUCTION_INSIGHT_ENTITY_NAME },\r\n },\r\n });\r\n}\r\n\r\nfunction getAuctionInsightEditableFilter(preferenceService, enableBSCAuctionInsights) {\r\n const storageArr = [getEditableFilter(preferenceService, FEATURE_NAME_GENERAL_INSIGHTS)];\r\n\r\n if (enableBSCAuctionInsights) {\r\n storageArr.push(getEditableFilter(preferenceService, FEATURE_NAME_GENERAL_INSIGHTS_SHOPPING));\r\n }\r\n return storageArr;\r\n}\r\n\r\n/**\r\n * Writes the editable filter for the Auction Insights grid, overwriting any existing filter.\r\n * This allows the grid to be filtered to only the selected grid rows.\r\n * @param {Object} preferenceService - Session store used by filter storage.\r\n * @param {Object} query - Query to be used when the auction insights grid fetches data.\r\n * @param {bool} enableBSCAuctionInsights - if campaign type dropdown is enabled in auction insights\r\n * @returns {void}\r\n */\r\nfunction writeAuctionInsightEditableFilter(preferenceService, query, enableBSCAuctionInsights) {\r\n const storageArr = getAuctionInsightEditableFilter(preferenceService, enableBSCAuctionInsights);\r\n\r\n const filter = {\r\n query,\r\n name: '',\r\n id: null,\r\n };\r\n\r\n _.each(storageArr, (storage) => {\r\n storage.save(filter);\r\n });\r\n}\r\n\r\n/**\r\n * Deletes any existing editable filter for the Auction Insights grid.\r\n * @param {Object} preferenceService - Session store used by filter storage.\r\n * @param {bool} enableBSCAuctionInsights - if campaign type dropdown is enabled in auction insights\r\n * @returns {void}\r\n */\r\nfunction cleanAuctionInsightEditableFilter(preferenceService, enableBSCAuctionInsights) {\r\n const storageArr = getAuctionInsightEditableFilter(preferenceService, enableBSCAuctionInsights);\r\n\r\n _.each(storageArr, (storage) => {\r\n storage.clean();\r\n });\r\n}\r\n\r\n/**\r\n * Navigates to the Auction Insights section of the Competition Tab.\r\n * @param {Object} pluginConfig - Plugin config.\r\n * @param {Object[]} [selectedItems=null] - List of grid rows that are currently selected.\r\n * @returns {void}\r\n */\r\nexport function navigateToCompetitionTab(pluginConfig, selectedItems = null) {\r\n const {\r\n scope, legacyRouter, preferenceService, permissions, isForVNext, pageName,\r\n } = pluginConfig;\r\n const enableBSCAuctionInsights = permissions.IsBAACompetitionBSCAuctionInsightsEnabled;\r\n\r\n if (_.isArray(selectedItems) && selectedItems.length > 0) {\r\n const entityType = getEntityType(selectedItems[0]);\r\n\r\n // $contains is an array of strings that specifies the id\r\n const $contains = _.map(selectedItems, (item) => {\r\n // convert each item into a basic object for filter\r\n const filterObject = _.pick(item, 'Id', 'Name');\r\n\r\n // special logic to handle new keyword\r\n if (_.isUndefined(filterObject.Name)) {\r\n filterObject.Name = item.Text;\r\n } else {\r\n if (item.Campaign) {\r\n filterObject.CampaignName = item.Campaign.Name;\r\n filterObject.CampaignId = item.Campaign.Id;\r\n }\r\n if (item.AdGroup) {\r\n filterObject.AdGroupName = item.AdGroup.Name;\r\n filterObject.AdGroupId = item.AdGroup.Id;\r\n }\r\n }\r\n\r\n // filter $contains expects a string\r\n return JSON.stringify(filterObject);\r\n });\r\n\r\n const query = {\r\n [entityType]: { $contains },\r\n };\r\n\r\n // write stringified version to session storage\r\n writeAuctionInsightEditableFilter(preferenceService, query, enableBSCAuctionInsights);\r\n\r\n if (enableBSCAuctionInsights) {\r\n if (_.find(selectedItems, (item) => {\r\n if (item.Campaign) {\r\n return item.Campaign.CampaignType !== CAMPAIGN_TYPES.Shopping;\r\n }\r\n return item.CampaignType !== CAMPAIGN_TYPES.Shopping;\r\n })) {\r\n saveGeneralInsightsPreferences(preferenceService, { selectShoppingCampaignType: false });\r\n } else {\r\n saveGeneralInsightsPreferences(preferenceService, { selectShoppingCampaignType: true });\r\n }\r\n }\r\n } else {\r\n // remove any existing filter so that all entities are displayed in auction insights grid\r\n cleanAuctionInsightEditableFilter(preferenceService, enableBSCAuctionInsights);\r\n }\r\n\r\n const route = getRoute(scope, isForVNext, pageName);\r\n\r\n if (isForVNext) {\r\n legacyRouter.navigateToRoute(route, {\r\n campaign_id: scope.campaignId,\r\n adgroup_id: scope.adGroupId,\r\n });\r\n } else {\r\n legacyRouter.navigateToRoute(route);\r\n }\r\n}\r\n","import _ from 'underscore';\r\n\r\nconst selectedIdKey = 'auction-insight-ids';\r\n\r\nexport function navigateToLegacyAuctionInsights(pluginConfig, selectedItems = null) {\r\n const { state, legacyRouter, route } = pluginConfig;\r\n\r\n if (_.isArray(selectedItems)) {\r\n const selectedIds = _.pluck(selectedItems, 'Id');\r\n state.set(selectedIdKey, selectedIds);\r\n }\r\n\r\n legacyRouter.navigateToRoute(route);\r\n}\r\n","import { navigateToCompetitionTab } from './navigate-to-competition-tab';\r\nimport { navigateToLegacyAuctionInsights } from './navigate-to-legacy-auction-insights';\r\n\r\nfunction getNavigate(pluginConfig) {\r\n const {\r\n shouldNavigateToCompetitionTab,\r\n } = pluginConfig;\r\n\r\n const navigate = shouldNavigateToCompetitionTab ?\r\n navigateToCompetitionTab : navigateToLegacyAuctionInsights;\r\n\r\n return navigate;\r\n}\r\n\r\nexport function onClickSelected(pluginConfig, gridView, crossPageSelectAll) {\r\n const { crossPageSelectNotAllowedI18nKey, i18n } = pluginConfig;\r\n const selectedItems = gridView.selectedItems();\r\n\r\n // must have at least 1 selected item\r\n if (selectedItems.length < 1) {\r\n alert(i18n.getString('Grid_RowSelectionRequired')); // eslint-disable-line no-alert\r\n return;\r\n }\r\n\r\n // cross-page select not supported\r\n // prompt user if they want to continue with just visible selected items\r\n if (crossPageSelectAll.isAllSelected) {\r\n // eslint-disable-next-line no-alert,no-restricted-globals\r\n if (!confirm(i18n.getString(crossPageSelectNotAllowedI18nKey))) {\r\n return;\r\n }\r\n }\r\n\r\n const navigate = getNavigate(pluginConfig);\r\n\r\n navigate(pluginConfig, selectedItems);\r\n}\r\n\r\n/**\r\n * Gets the menu items for Auction Insight.\r\n * @param {Object} pluginConfig - Configuration object.\r\n * @param {Object} gridView - Projection grid view.\r\n * @param {Object} crossPageSelectAll - Cross-page select all grid plugin.\r\n * @returns {Object[]} Array of dropdown menu items: header and two buttons with click handlers.\r\n */\r\nexport function getDropdownMenuItems(pluginConfig, gridView, crossPageSelectAll) {\r\n const {\r\n i18n,\r\n state,\r\n legacyRouter,\r\n scope,\r\n shouldNavigateToCompetitionTab,\r\n preferenceService,\r\n permissions,\r\n } = pluginConfig;\r\n\r\n // validate pluginConfig\r\n let isPluginConfigValid = true;\r\n if (shouldNavigateToCompetitionTab) {\r\n isPluginConfigValid =\r\n i18n && legacyRouter && scope && preferenceService && permissions;\r\n } else {\r\n isPluginConfigValid = i18n && legacyRouter && state;\r\n }\r\n\r\n if (!isPluginConfigValid) {\r\n throw new Error('auction insight plugin config does not meet the requirement');\r\n }\r\n\r\n const navigate = getNavigate(pluginConfig);\r\n\r\n return [{\r\n type: 'dropdown-header',\r\n text: i18n.getString('Grid_AuctionInsightsButtonText'),\r\n }, {\r\n text: i18n.getString('Grid_AuctionInsightsSelectedButtonText'),\r\n onClick: () => onClickSelected(pluginConfig, gridView, crossPageSelectAll),\r\n classes: ['auction-insight-selected'],\r\n }, {\r\n text: i18n.getString('Grid_AuctionInsightsAllButtonText'),\r\n onClick: () => navigate(pluginConfig),\r\n classes: ['auction-insight-all'],\r\n }];\r\n}\r\n","import { size } from 'underscore';\r\nimport { CampaignType } from '@bingads-webui-campaign/campaign-ui-common';\r\nimport { getDropdownMenuItems, onClickSelected } from './get-dropdown-menu-items';\r\n\r\nexport const auctionInsightPlugin = definePlugin => definePlugin('auctionInsight', [\r\n 'config',\r\n 'gridView',\r\n 'toolbar',\r\n 'crossPageSelectAll',\r\n], (config, gridView, toolbar, crossPageSelectAll) => {\r\n const pluginConfig = config.plugins.auctionInsight;\r\n const menuId = pluginConfig.isForVNext ? 'button-auction-insights' : 'dropdown-details';\r\n const toolbarEditor = toolbar.gridToolbarGroup.toolbarWithItem(menuId);\r\n const items = getDropdownMenuItems(pluginConfig, gridView, crossPageSelectAll);\r\n\r\n gridView.on('didSelect', () => {\r\n if (pluginConfig.isForVNext) {\r\n if (size(gridView.selectedItems()) === 0) return;\r\n\r\n const campaignType = pluginConfig.getCampaignTypeGlobalFilter();\r\n if (campaignType === CampaignType.Default ||\r\n campaignType === CampaignType.Shopping ||\r\n campaignType === CampaignType.All\r\n ) {\r\n toolbarEditor.update({\r\n id: menuId,\r\n type: 'button',\r\n iconLeftGlyphName: 'ba-Articles',\r\n text: pluginConfig.i18n.getString('Grid_AuctionInsightsButtonText'),\r\n classes: ['btn-link'],\r\n onClick: () => onClickSelected(pluginConfig, gridView, crossPageSelectAll),\r\n });\r\n } else {\r\n toolbarEditor.update({\r\n id: menuId,\r\n classes: ['hide'],\r\n });\r\n }\r\n } else {\r\n toolbarEditor.update({\r\n type: 'dropdown',\r\n id: menuId,\r\n button: {\r\n text: pluginConfig.i18n.getString('Grid_DetailsButtonText'),\r\n classes: ['btn', 'btn-secondary'],\r\n },\r\n menu: {\r\n items,\r\n },\r\n });\r\n }\r\n });\r\n});\r\n","import _ from 'underscore';\r\n\r\nconst iconRight = ['glyphicon', 'toolbar-icon', 'grid-expand-icon', 'pull-right'];\r\n\r\nexport const supportedEntities = {\r\n Campaign: 'Campaign',\r\n AdGroup: 'AdGroup',\r\n Keyword: 'Keyword',\r\n Ad: 'Ad',\r\n};\r\n\r\nfunction getMetadata(i18n) {\r\n const metadata = {\r\n Campaign: {\r\n header: i18n.getString('AutomatedRules_RuleTemplatesButton_Campaign_Header'),\r\n body: [\r\n {\r\n key: i18n.getString('AutomatedRules_RuleTemplatesTitle_Campaign_ChangeBudget'),\r\n value: 'CampaignsGrid_automateRule_Campaign_ChangeBudget',\r\n }, {\r\n key: i18n.getString('AutomatedRules_RuleTemplatesTitle_Campaign_PauseCampaign'),\r\n value: 'CampaignsGrid_automateRule_Campaign_Pause',\r\n }, {\r\n key: i18n.getString('AutomatedRules_RuleTemplatesTitle_Campaign_EnableCampaign'),\r\n value: 'CampaignsGrid_automateRule_Campaign_Enable',\r\n }, {\r\n key: i18n.getString('AutomatedRules_RuleTemplatesTitle_Campaign_SendEmail'),\r\n value: 'CampaignsGrid_automateRule_Campaign_SendEmail',\r\n },\r\n ],\r\n switchMenuOrder: [supportedEntities.AdGroup, supportedEntities.Keyword, supportedEntities.Ad],\r\n },\r\n AdGroup: {\r\n header: i18n.getString('AutomatedRules_RuleTemplatesButton_AdGroup_Header'),\r\n body: [\r\n {\r\n key: i18n.getString('AutomatedRules_RuleTemplatesTitle_AdGroup_ChangeBid'),\r\n value: 'AdGroupGrid_automateRule_AdGroup_ChangeBid',\r\n }, {\r\n key: i18n.getString('AutomatedRules_RuleTemplatesTitle_AdGroup_PauseAdGroup'),\r\n value: 'AdGroupGrid_automateRule_AdGroup_Pause',\r\n }, {\r\n key: i18n.getString('AutomatedRules_RuleTemplatesTitle_AdGroup_EnableAdGroup'),\r\n value: 'AdGroupGrid_automateRule_AdGroup_Enable',\r\n }, {\r\n key: i18n.getString('AutomatedRules_RuleTemplatesTitle_AdGroup_SendEmail'),\r\n value: 'AdGroupGrid_automateRule_AdGroup_SendEmail',\r\n },\r\n ],\r\n switchMenuOrder: [supportedEntities.Keyword,\r\n supportedEntities.Ad, supportedEntities.Campaign],\r\n },\r\n Ad: {\r\n header: i18n.getString('AutomatedRules_RuleTemplatesButton_Ad_Header'),\r\n body: [\r\n {\r\n key: i18n.getString('AutomatedRules_RuleTemplatesTitle_Ad_PauseAd'),\r\n value: 'AdGrid_automateRule_Ad_Pause',\r\n }, {\r\n key: i18n.getString('AutomatedRules_RuleTemplatesTitle_Ad_EnableAds'),\r\n value: 'AdGrid_automateRule_Ad_Enable',\r\n }, {\r\n key: i18n.getString('AutomatedRules_RuleTemplatesTitle_Ad_SendEmail'),\r\n value: 'AdGrid_automateRule_Ad_SendEmail',\r\n },\r\n ],\r\n switchMenuOrder: [supportedEntities.Keyword,\r\n supportedEntities.AdGroup, supportedEntities.Campaign],\r\n },\r\n Keyword: {\r\n header: i18n.getString('AutomatedRules_RuleTemplatesButton_Keyword_Header'),\r\n body: [\r\n {\r\n key: i18n.getString('AutomatedRules_RuleTemplatesTitle_Keyword_ChangeBid'),\r\n value: 'KeywordGrid_automateRule_Keyword_ChangeBid',\r\n }, {\r\n key: i18n.getString('AutomatedRules_RuleTemplatesTitle_Keyword_RaiseToTopOfPage'),\r\n value: 'KeywordGrid_automateRule_Keyword_RaiseToTopOfPage',\r\n }, {\r\n key: i18n.getString('AutomatedRules_RuleTemplatesTitle_Keyword_RaiseToFirstPage'),\r\n value: 'KeywordGrid_automateRule_Keyword_RaiseToFirstPage',\r\n }, {\r\n key: i18n.getString('AutomatedRules_RuleTemplatesTitle_Keyword_PauseKeyword'),\r\n value: 'KeywordGrid_automateRule_Keyword_Pause',\r\n }, {\r\n key: i18n.getString('AutomatedRules_RuleTemplatesTitle_Keyword_EnableKeyword'),\r\n value: 'KeywordGrid_automateRule_Keyword_Enable',\r\n }, {\r\n key: i18n.getString('AutomatedRules_RuleTemplatesTitle_Keyword_SendEmail'),\r\n value: 'KeywordGrid_automateRule_Keyword_SendEmail',\r\n },\r\n ],\r\n switchMenuOrder: [supportedEntities.Ad,\r\n supportedEntities.AdGroup, supportedEntities.Campaign],\r\n },\r\n };\r\n\r\n return metadata;\r\n}\r\n\r\nconst divider = {\r\n type: 'dropdown-divider',\r\n};\r\n\r\nfunction getMenuItemConfig(text, onClick, isFallbackEnabled = false, siteMapId = null) {\r\n return {\r\n text, onClick, isFallbackEnabled, siteMapId,\r\n };\r\n}\r\n\r\nexport function getRulesMenu(\r\n entity,\r\n render, switchTo, selectInfo, i18n, isForVNext, shouldBeDisabled = false,\r\n isFallbackEnabled = false\r\n) {\r\n const metadata = getMetadata(i18n);\r\n const items = [];\r\n const ret = {\r\n type: 'dropdown',\r\n id: 'dropdown-automate',\r\n iconLeftGlyphName: 'ba-LightningBolt',\r\n classes: ['nowrap'],\r\n button: {\r\n text: i18n.getString('AutomatedRules_RuleTemplatesButton_AutomateRule'),\r\n classes: ['btn', 'btn-secondary'],\r\n disabled: shouldBeDisabled,\r\n },\r\n menu: {\r\n items,\r\n },\r\n };\r\n\r\n items.push({\r\n type: 'dropdown-header',\r\n text: metadata[entity].header,\r\n });\r\n _.each(metadata[entity].body, ({ key, value }) => {\r\n items.push(getMenuItemConfig(key, render(value)));\r\n });\r\n items.push(divider);\r\n\r\n if (!isForVNext) {\r\n let subMenu = metadata[entity].switchMenuOrder;\r\n\r\n if (!_.isNull(selectInfo.campaignId)) {\r\n subMenu = _.without(subMenu, supportedEntities.Campaign);\r\n }\r\n if (!_.isNull(selectInfo.adGroupId)) {\r\n subMenu = _.without(subMenu, supportedEntities.AdGroup);\r\n }\r\n _.each(subMenu, (en) => {\r\n const subItems = _.map(\r\n metadata[en].body,\r\n ({ key, value }) => getMenuItemConfig(key, switchTo(value))\r\n );\r\n\r\n items.push({\r\n type: 'dropdown-submenu',\r\n button: {\r\n text: metadata[en].header,\r\n iconRight,\r\n },\r\n menu: {\r\n items: subItems,\r\n },\r\n });\r\n });\r\n\r\n items.push(divider);\r\n }\r\n\r\n items.push(getMenuItemConfig(\r\n i18n.getString('AutomatedRules_RuleTemplatesButton_RedirectToREManagement'),\r\n render('AdGroupGrid_automateRule_RedirectToREManagement'),\r\n isFallbackEnabled,\r\n 'rules'\r\n ));\r\n\r\n return ret;\r\n}\r\n","/**\r\n * @file Automated rules plugin for projection grids.\r\n *\r\n */\r\n\r\nimport _ from 'underscore';\r\nimport { RuleAuthoringView, RuleAuthoringModel } from '@bingads-webui-campaign/automated-rules';\r\nimport { supportedEntities, getRulesMenu } from './automated-rules-menu';\r\n\r\n/**\r\n * Projection grid automated rules plugin,\r\n * User need to set these things in config\r\n * filterService: the filterService which can get current filter using getEditableFilter\r\n * automatedRules: {\r\n * entityName: currently only support Campaign/AdGroup/Keyword/Ad\r\n * i18n { getString }, localization setting\r\n * i18nGlobal { getString }, localization setting\r\n * router: { navigateToRoute }, specify the routing function\r\n * scope: { campaignId, adgroupId } scope of the plugin\r\n * instrumentation - instrumentation that already intilized\r\n * and which should contains the senario of label and activity of createLabel\r\n * state: { set, get, unset } module to store/fetch/update status for selected template\r\n * stateMgr - the state manager which contains {getItem, setItem}\r\n * preferenceSvc - preference service to store user preferences.\r\n * appCfg - global app config\r\n * bidRange - { FloorValue, CeilingValue} for bid inputs, needed for adgroup/keyword entity\r\n * budgetRange - { FloorValue, CeilingValue} for budget inputs, needed for campaign entity\r\n * permissions - permissions for the user\r\n * accountTimeZone - accountTimeZone\r\n * accountCurrencyCode - accountCurrencyCode\r\n * currentUserId - currentUserId\r\n * @param { object } definePlugin: function pointer used to define plugin for grid\r\n * @returns {void}\r\n */\r\nexport const automatedRulesPlugin = definePlugin => definePlugin('automatedRules', [\r\n 'config',\r\n 'gridView',\r\n 'toolbar',\r\n 'pagination',\r\n 'crossPageSelectAll',\r\n], (config, gridView, toolbar, pagination, crossPageSelectAll) => {\r\n const menuId = 'dropdown-automate';\r\n const toolbarEditor = toolbar.gridToolbarGroup.toolbarWithItem(menuId);\r\n\r\n let automatedRulesView;\r\n\r\n const actionStateKey = 'automated-rules-action-to-render';\r\n const {\r\n entityName,\r\n i18n,\r\n i18nGlobal,\r\n router,\r\n scope,\r\n state,\r\n instrumentation,\r\n stateMgr,\r\n preferenceSvc,\r\n appCfg,\r\n bidRange,\r\n budgetRange,\r\n alertCenter,\r\n accountCurrencyCode,\r\n accountTimeZone,\r\n permissions,\r\n currentUserId,\r\n odata,\r\n directive,\r\n walkMe,\r\n walkMeLink,\r\n walkThrus,\r\n isForVNext = false,\r\n newI18n,\r\n CampaignAdgroupSelectorEdmView,\r\n PredicateListReact,\r\n currentEntity,\r\n } = _.result(config.plugins, 'automatedRules', {});\r\n const { filterService } = config;\r\n\r\n function getSelectionInfo() {\r\n const info = {\r\n allPages: false,\r\n selectedRowCount: 0,\r\n selectedRowIds: null,\r\n campaignId: null,\r\n adGroupId: null,\r\n };\r\n\r\n const { campaignId, adGroupId } = scope;\r\n\r\n if (!_.isEmpty(campaignId)) {\r\n info.campaignId = parseInt(campaignId, 10);\r\n }\r\n if (!_.isEmpty(adGroupId)) {\r\n info.adGroupId = parseInt(adGroupId, 10);\r\n }\r\n\r\n if (crossPageSelectAll.isAllSelected) {\r\n _.extendOwn(info, {\r\n allPages: true,\r\n selectedRowIds: null,\r\n selectedRowCount: gridView.totalCountRows,\r\n });\r\n } else {\r\n _.extendOwn(info, {\r\n allPages: false,\r\n selectedRowIds: gridView.selectedItems().map(x => x.Id),\r\n selectedRowCount: gridView.selectedItems().length,\r\n });\r\n }\r\n\r\n return info;\r\n }\r\n\r\n function renderView(action, entity) {\r\n const info = getSelectionInfo();\r\n const model = new RuleAuthoringModel({\r\n odata,\r\n Entity: entity,\r\n });\r\n const ruleViewModel = model.get('SelectedRule');\r\n\r\n _.extendOwn(ruleViewModel, { entity, action, scopeInfo: info });\r\n model.set('SelectedRule', ruleViewModel);\r\n\r\n automatedRulesView = new RuleAuthoringView({\r\n isForVNext,\r\n grid: {\r\n gridView,\r\n pgridPlugins: {\r\n pagination,\r\n filterService,\r\n crossPageSelectAll,\r\n },\r\n },\r\n koModel: model,\r\n bidBudgetRange: entity === supportedEntities.Campaign ? budgetRange : bidRange,\r\n alertCenter,\r\n stateMgr,\r\n preferenceSvc,\r\n appCfg,\r\n accountTimeZone,\r\n accountCurrencyCode,\r\n currentUserId,\r\n instrumentation,\r\n i18n,\r\n i18nGlobal,\r\n permissions,\r\n scope,\r\n newI18n,\r\n CampaignAdgroupSelectorEdmView,\r\n PredicateListReact,\r\n currentEntity,\r\n });\r\n\r\n automatedRulesView.listenTo(gridView, 'didSelect', () => {\r\n const selectInfo = getSelectionInfo();\r\n\r\n automatedRulesView.updateSelectedEntityCount(selectInfo);\r\n });\r\n\r\n automatedRulesView.render();\r\n if (entityName === supportedEntities.Keyword) {\r\n automatedRulesView.addWalkme({\r\n directive,\r\n walkMe,\r\n walkMeLink,\r\n walkThrus,\r\n });\r\n }\r\n\r\n automatedRulesView.$el.find(':input:enabled:first').focus();\r\n }\r\n\r\n function removeView() {\r\n if (automatedRulesView) {\r\n automatedRulesView.remove();\r\n automatedRulesView = null;\r\n }\r\n }\r\n\r\n function renderRuleAuthoringView(actionId) {\r\n return () => {\r\n // get action from actionID, the format is '{0}_{1}_{2}_{3}',\r\n // like 'CampaignsGrid_automateRule_Campaign_1'\r\n // {2} is the rule template's entitylevel and {3} is the rule template id.\r\n const selectedInfo = actionId.split('_');\r\n const selectedTemplateId = selectedInfo[selectedInfo.length - 1];\r\n\r\n if (selectedTemplateId === 'RedirectToREManagement') {\r\n router.navigateToRoute('bulk_rules');\r\n return;\r\n }\r\n const selectedTemplateEntityLevel = selectedInfo[selectedInfo.length - 2];\r\n\r\n if (automatedRulesView) {\r\n throw new Error('duplicate automated rules view.');\r\n } else {\r\n renderView(selectedTemplateId, selectedTemplateEntityLevel);\r\n }\r\n\r\n // use defer here to wait for the this dropdown menu to hide first\r\n _.defer(() => {\r\n const gridContainer = gridView.$el.closest('.bingadsgrid');\r\n const editorContainer = gridContainer.find('.editor__container');\r\n const gridToolbar = gridContainer.find('.grid-toolbar');\r\n\r\n if (isForVNext) {\r\n toolbarEditor.overrideWith(automatedRulesView);\r\n } else {\r\n editorContainer.html(automatedRulesView.$el);\r\n // show editor\r\n editorContainer.show();\r\n }\r\n // hide the toolbar with empty view, which will have blank height\r\n gridToolbar.hide();\r\n\r\n toolbar.gridToolbarGroup.hideAllToolbars();\r\n\r\n // show toolbar after hide the automated rules form\r\n automatedRulesView.once('hide', () => {\r\n gridToolbar.show();\r\n editorContainer.hide();\r\n toolbar.gridToolbarGroup.showAllToolbars();\r\n automatedRulesView = null;\r\n\r\n if (isForVNext) {\r\n toolbarEditor.overrideWith(null);\r\n }\r\n });\r\n });\r\n };\r\n }\r\n\r\n function switchTab(actionId) {\r\n return () => {\r\n const selectedMenu = actionId.split('_');\r\n const entityLevel = selectedMenu[selectedMenu.length - 2];\r\n\r\n const scenario = instrumentation[`authorRule${entityLevel}`].create();\r\n\r\n scenario.createRule.create().trace(`[AutomatedRulesRouting] User switching tabs via automated rules menu to ${actionId} on ${entityLevel} grid`);\r\n\r\n state.set(actionStateKey, actionId);\r\n switch (entityLevel) {\r\n case supportedEntities.Campaign:\r\n router.navigateToRoute('campaign');\r\n break;\r\n case supportedEntities.AdGroup:\r\n router.navigateToRoute('campaign_adgroup');\r\n break;\r\n case supportedEntities.Ad:\r\n router.navigateToRoute('adgroup_ad');\r\n break;\r\n case supportedEntities.Keyword:\r\n default:\r\n router.navigateToRoute('adgroup_keyword');\r\n break;\r\n }\r\n };\r\n }\r\n\r\n const selectInfo = getSelectionInfo();\r\n const shouldBeDisabled = isForVNext && (permissions.IsReadOnlyUser || appCfg.get('CurrentAccountInActive'));\r\n\r\n toolbarEditor.update(getRulesMenu(\r\n entityName,\r\n renderRuleAuthoringView, switchTab, selectInfo, i18n, isForVNext, shouldBeDisabled,\r\n false\r\n ));\r\n\r\n gridView.on('didReload', () => {\r\n const actionId = state.get(actionStateKey);\r\n\r\n if (actionId) {\r\n state.unset(actionStateKey, { silent: true });\r\n renderRuleAuthoringView(actionId)();\r\n }\r\n });\r\n\r\n return {\r\n remove: () => {\r\n removeView();\r\n },\r\n };\r\n});\r\n","export const biddingStrategyType = {\r\n parent: 'InheritFromParent',\r\n manual: 'ManualCpc',\r\n manualCpa: 'ManualCpa',\r\n enhancedCPC: 'EnhancedCpc',\r\n maximizeClicks: 'MaxClicks',\r\n maximizeConversions: 'MaxConversions',\r\n targetCpa: 'TargetCpa',\r\n targetRoas: 'TargetRoas',\r\n maxConversionValue: 'MaxConversionValue',\r\n targetImpressionShare: 'TargetImpressionShare',\r\n biddingStrategyTypeId: {\r\n InheritFromParent: 0,\r\n ManualCpc: 1,\r\n MaxClicks: 2,\r\n MaxConversions: 3,\r\n TargetCpa: 4,\r\n EnhancedCpc: 5,\r\n TargetRoas: 6,\r\n MaxConversionValue: 8,\r\n TargetImpressionShare: 9,\r\n CostPerSale: 15,\r\n ManualCpa: 16,\r\n },\r\n biddingStrategyType: {\r\n 0: 'InheritFromParent',\r\n 1: 'ManualCpc',\r\n 2: 'MaxClicks',\r\n 3: 'MaxConversions',\r\n 4: 'TargetCpa',\r\n 5: 'EnhancedCpc',\r\n 6: 'TargetRoas',\r\n 8: 'MaxConversionValue',\r\n 9: 'TargetImpressionShare',\r\n 15: 'CostPerSale',\r\n 16: 'ManualCpa',\r\n },\r\n};\r\n","import { biddingStrategyType } from './bidding-strategy-type';\r\n\r\nfunction getAdGroupItems({ i18n, changeBiddingStrategy }) {\r\n const entityName = 'AdGroup';\r\n\r\n const result = [\r\n {\r\n text: i18n.getString('BidStrategy_Option_ParentCampaign'),\r\n classes: ['bulk-edit-bid-strategy-inherit-parent'],\r\n onClick: changeBiddingStrategy(biddingStrategyType.parent, entityName),\r\n }, {\r\n text: i18n.getString('BidStrategy_Option_Manual'),\r\n classes: ['bulk-edit-bid-strategy-manual'],\r\n onClick: changeBiddingStrategy(biddingStrategyType.manual, entityName),\r\n },\r\n ];\r\n\r\n return result;\r\n}\r\n\r\nfunction getKeywordItems({ i18n, changeBiddingStrategy }) {\r\n const entityName = 'Keyword';\r\n\r\n const result = [\r\n {\r\n text: i18n.getString('BidStrategy_Option_ParentAdGroup'),\r\n classes: ['bulk-edit-bid-strategy-inherit-parent'],\r\n onClick: changeBiddingStrategy(biddingStrategyType.parent, entityName),\r\n }, {\r\n text: i18n.getString('BidStrategy_Option_Manual'),\r\n classes: ['bulk-edit-bid-strategy-manual'],\r\n onClick: changeBiddingStrategy(biddingStrategyType.manual, entityName),\r\n },\r\n ];\r\n\r\n return result;\r\n}\r\n\r\nfunction getCampaignItems({\r\n permissions, i18n, changeBiddingStrategy,\r\n}) {\r\n const entityName = 'Campaign';\r\n\r\n const result = permissions.IsManualBiddingDeprecationEnabled ?\r\n [\r\n {\r\n text: i18n.getString('BidStrategy_Option_EnhancedCPC'),\r\n classes: ['bulk-edit-bid-strategy-enhanced-cpc'],\r\n onClick: changeBiddingStrategy(biddingStrategyType.enhancedCPC, entityName),\r\n },\r\n ] :\r\n [\r\n {\r\n text: i18n.getString('BidStrategy_Option_Manual_Campaign'),\r\n classes: ['bulk-edit-bid-strategy-manual'],\r\n onClick: changeBiddingStrategy(biddingStrategyType.manual, entityName),\r\n }, {\r\n text: i18n.getString('BidStrategy_Option_EnhancedCPC'),\r\n classes: ['bulk-edit-bid-strategy-enhanced-cpc'],\r\n onClick: changeBiddingStrategy(biddingStrategyType.enhancedCPC, entityName),\r\n },\r\n ];\r\n\r\n result.push({\r\n text: i18n.getString('BidStrategy_Option_MaximizeClicks'),\r\n classes: ['bulk-edit-bid-strategy-maximize-clicks'],\r\n onClick: changeBiddingStrategy(biddingStrategyType.maximizeClicks, entityName),\r\n });\r\n\r\n result.push({\r\n text: i18n.getString('BidStrategy_Option_MaximizeConversions'),\r\n classes: ['bulk-edit-bid-strategy-maximize-conversioins'],\r\n onClick: changeBiddingStrategy(biddingStrategyType.maximizeConversions, entityName),\r\n });\r\n\r\n result.push({\r\n text: i18n.getString('BidStrategy_Option_TargetCPA'),\r\n classes: ['bulk-edit-bid-strategy-target-cpa'],\r\n onClick: changeBiddingStrategy(biddingStrategyType.targetCpa, entityName),\r\n });\r\n\r\n // should remove old pilot after new pilot enabled\r\n if (permissions.IsCampaignTargetROASBidStrategyEnabled || permissions.IsNewCampaignTargetROASBidStrategyEnabled) { // eslint-disable-line\r\n result.push({\r\n text: i18n.getString('BidStrategy_Option_TargetROAS'),\r\n classes: ['bulk-edit-bid-strategy-target-roas'],\r\n onClick: changeBiddingStrategy(biddingStrategyType.targetRoas, entityName),\r\n });\r\n }\r\n\r\n if (permissions.IsMaximizeConversionValueEnabled) {\r\n result.push({\r\n text: i18n.getString('BidStrategy_Option_MaxConversionValue'),\r\n classes: ['bulk-edit-bid-strategy-maximize-conversion-value'],\r\n onClick: changeBiddingStrategy(biddingStrategyType.maxConversionValue, entityName),\r\n });\r\n }\r\n\r\n if (permissions.IsTargetImpressionShareEnabled) {\r\n result.push({\r\n text: i18n.getString('BidStrategy_Option_TargetImpressionShare'),\r\n classes: ['bulk-edit-bid-strategy-target-impression-share'],\r\n onClick: changeBiddingStrategy(biddingStrategyType.targetImpressionShare, entityName),\r\n });\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport function getMenuItems({\r\n permissions, i18n, entityName, changeBiddingStrategy,\r\n}) {\r\n switch (entityName) {\r\n case 'Campaign':\r\n return getCampaignItems({\r\n permissions, i18n, changeBiddingStrategy,\r\n });\r\n case 'AdGroup':\r\n return getAdGroupItems({ i18n, changeBiddingStrategy });\r\n case 'Keyword':\r\n return getKeywordItems({ i18n, changeBiddingStrategy });\r\n default:\r\n throw new Error('Entity type bid strategy menu not defined');\r\n }\r\n}\r\n","import $ from 'jquery';\r\n\r\nimport { getMenuItems } from './menu-items';\r\n\r\n/**\r\n * Bid strategy plugin for projection-grid.\r\n *\r\n * User need to set these things in config\r\n * filterService: the filterService which can get current filter using getCombinedFilter\r\n * bidStrategy: {\r\n * ChangeBiddingStrategyModel (constructor for bidding strategy panel view),\r\n * ChangeBiddingStrategyView (constructor for bidding strategy panel model),\r\n * i18n,\r\n * permissions\r\n *\r\n * @param { function } definePlugin function passed in by p-grid\r\n * @returns { void }\r\n */\r\nexport const bidStrategy = definePlugin => definePlugin('bidStrategy', [\r\n 'config',\r\n 'gridView',\r\n 'toolbar',\r\n 'pagination',\r\n 'crossPageSelectAll',\r\n], (config, gridView, toolbar, pagination, crossPageSelectAll) => {\r\n const menuId = 'dropdown-bid-strategy';\r\n const toolbarEditor = toolbar.gridToolbarGroup.toolbarWithItem(menuId);\r\n const {\r\n ChangeBiddingStrategyView,\r\n ChangeBiddingStrategyModel,\r\n i18n,\r\n permissions,\r\n scope,\r\n isForVNext = false,\r\n } = config.plugins.bidStrategy;\r\n\r\n const { filterService } = config;\r\n let bidStrategyView = null;\r\n\r\n function getGridSelectionCount() {\r\n return crossPageSelectAll.isAllSelected ?\r\n crossPageSelectAll.viewModel.totalRowsTotalPageCount() :\r\n gridView.selectedKeys().length;\r\n }\r\n\r\n function renderView(type, entityName) {\r\n bidStrategyView = new ChangeBiddingStrategyView({\r\n model: new ChangeBiddingStrategyModel({\r\n Entity: entityName,\r\n selectedEntityCount: getGridSelectionCount(),\r\n scope,\r\n }),\r\n grid: {\r\n gridView,\r\n pgridPlugins: {\r\n pagination,\r\n crossPageSelectAll,\r\n filterService,\r\n },\r\n },\r\n entityType: entityName,\r\n biddingStrategyType: type,\r\n });\r\n\r\n bidStrategyView.listenTo(gridView, 'didSelect', () => {\r\n const count = getGridSelectionCount();\r\n\r\n bidStrategyView.updateSelectedEntityCount(count);\r\n });\r\n\r\n bidStrategyView.render();\r\n\r\n $('select:first', bidStrategyView.$el).focus();\r\n }\r\n\r\n function removeView() {\r\n if (bidStrategyView) {\r\n bidStrategyView.remove();\r\n bidStrategyView = null;\r\n }\r\n }\r\n\r\n function changeBiddingStrategy(type, entityName) {\r\n return () => {\r\n if (bidStrategyView) {\r\n throw new Error('duplicate bid strategy view.');\r\n } else {\r\n renderView(type, entityName);\r\n }\r\n const gridContainer = gridView.$el.closest('.bingadsgrid');\r\n const editorContainer = gridContainer.find('.editor__container');\r\n const gridToolbar = gridContainer.find('.grid-toolbar');\r\n\r\n editorContainer.html(bidStrategyView.$el);\r\n // show editor\r\n editorContainer.show();\r\n // hide the toolbar with empty view, which will have blank height\r\n gridToolbar.hide();\r\n\r\n toolbar.gridToolbarGroup.hideAllToolbars();\r\n\r\n bidStrategyView.once('hide', () => {\r\n gridToolbar.show();\r\n editorContainer.hide();\r\n toolbar.gridToolbarGroup.showAllToolbars();\r\n removeView();\r\n });\r\n };\r\n }\r\n\r\n function getItems() {\r\n const entityName = config.dataSource.entity.name;\r\n\r\n return getMenuItems({\r\n permissions, i18n, entityName, changeBiddingStrategy,\r\n });\r\n }\r\n\r\n function updateToolbar() {\r\n const items = gridView.selectedItems();\r\n\r\n toolbarEditor.update({\r\n type: 'dropdown',\r\n id: menuId,\r\n button: {\r\n text: i18n.getString('Grid_BidStrategy'),\r\n disabled: items.length === 0 || permissions.IsReadOnlyUser,\r\n classes: ['btn', 'btn-secondary'],\r\n },\r\n menu: {\r\n items: getItems(),\r\n },\r\n });\r\n }\r\n\r\n updateToolbar();\r\n\r\n // Don't need to redraw toolbar for vnext\r\n if (!isForVNext) {\r\n gridView.on('didUpdate', () => {\r\n updateToolbar();\r\n });\r\n }\r\n\r\n return {\r\n remove() {\r\n removeView();\r\n },\r\n };\r\n});\r\n","import _ from 'underscore';\r\nimport { defineGridPlugin } from '@bingads-webui/projection-grid-plugin';\r\nimport dataContextManager from '@bingads-webui-static-legacy/summary/SummaryDataContextManager';\r\n/**\r\n * @typedef { Object } MenuItem\r\n * @property { String } text menu item text.\r\n * @property { String[] } classes classes for the menu item.\r\n * @property { Function } createView create bulk edit view.\r\n * @property { MenuItem[] } subItems\r\n */\r\n\r\n/**\r\n * @typedef { Object } BulkEditOptions\r\n * @property { Object } status entity status schema.\r\n * @property { Object } ChangeStatusView entity change status view.\r\n * @property { Object } ChangeStatusModel entity change status model.\r\n * @property { String } DeleteConfirmation entity delete confirmation.\r\n * @property { Object } config config,\r\n * @property { Object } i18n i18n,\r\n * @property { String } entityType entity type.\r\n * @property { Boolean } showDelete show delete option or not. defaults to true.\r\n * @property { Object } function call back after update toolbar\r\n * @property { MenuItem[] } items menu items inserted after enable/pause/delete\r\n * @property { MenuItem[] } frontItems menu items inserted before enable/pause/delete\r\n */\r\n\r\n/**\r\n * updateGridToolbar\r\n * @param { Object } gridView gridView plugin\r\n * @param { Object } toolbar toolbar plugin\r\n * @param { Object } pagination pagination plugin\r\n * @param { Object } crossPageSelectAll crossPageSelectAll plugin\r\n * @param { Object } inlineError inlineError plugin\r\n * @param { BulkEditOptions } options bulk edit options (details below)\r\n * @param {object} options.status - status options\r\n * @param {ChangeStatusView} options.ChangeStatusView - ChangeStatusView\r\n * @param {ChangeStatusModel} options.ChangeStatusModel - ChangeStatusModel\r\n * @param {string} options.DeleteConfirmation - Delete Confirmation Message\r\n * @param {object} options.config - config\r\n * @param {object} options.filterService - filterService\r\n * @param {object} options.i18n - i18n\r\n * @param {string} options.entityType - the entity type\r\n * @param {function} options.gridDecorationCallback - grid decoration callback\r\n * @param {boolean} options.showDelete - flag to indicate if Delete option is to be supported\r\n * @param {boolean} options.showEnable - flag to indicate if Enable option is to be supported\r\n * @param {boolean} options.showExclude - flag to indicate if Exclude option is to be supported\r\n * @param {boolean} options.showPause - flag to indicate if Pause option is to be supported\r\n * @param {boolean} options.showSeparateExclude - indicate Exclude be displayed in separate divider\r\n * @param {boolean} options.disableDeselectAll - disable deselect all after bulk edit success\r\n * @returns { void }\r\n */\r\nfunction updateGridToolbar(\r\n gridView,\r\n toolbar,\r\n pagination,\r\n crossPageSelectAll,\r\n inlineError,\r\n options\r\n) {\r\n const menuId = 'dropdown-edit';\r\n const toolbarEditor = toolbar.gridToolbarGroup.toolbarWithItem(menuId);\r\n\r\n const {\r\n status,\r\n ChangeStatusView,\r\n ChangeStatusModel,\r\n DeleteConfirmation,\r\n config,\r\n filterService,\r\n i18n,\r\n entityType,\r\n items,\r\n frontItems = [],\r\n campaignUpgradeItem,\r\n gridDecorationCallback,\r\n showDelete = true,\r\n showEnable = true,\r\n showExclude = false,\r\n showPause = true,\r\n showSeparateExclude = false,\r\n scope,\r\n isForVNext = false,\r\n bulkEditUrl = '',\r\n customClickHandler = null,\r\n qualtricsSurveyCallback = null,\r\n importNotificationCallback = null,\r\n importBudgetBidNotificationCallback = null,\r\n disableDeselectAll = false,\r\n } = options;\r\n let bulkEditView;\r\n\r\n const defaultBulkEditViewConfig = {\r\n grid: {\r\n filterService,\r\n gridView,\r\n pgridPlugins: {\r\n pagination,\r\n crossPageSelectAll,\r\n },\r\n isForVNext,\r\n },\r\n onOperationSuccess: () => {\r\n if (!disableDeselectAll) {\r\n crossPageSelectAll.deselectAll();\r\n gridView.deselectAll();\r\n }\r\n },\r\n inlineError,\r\n };\r\n\r\n function getSelectionInfo() {\r\n const info = {};\r\n\r\n if (crossPageSelectAll.isAllSelected) {\r\n info.allPages = true;\r\n info.selectedRowCount = crossPageSelectAll.viewModel.totalRowsTotalPageCount();\r\n info.selectedRowIds = null;\r\n } else {\r\n const selectedIds = gridView.selectedKeys();\r\n\r\n info.allPages = false;\r\n info.selectedRowCount = selectedIds.length;\r\n info.selectedRowIds = selectedIds;\r\n }\r\n return info;\r\n }\r\n\r\n function afterStatusChange(selectionInfo, act) {\r\n if (selectionInfo.allPages) {\r\n window.App.trigger(`${entityType}Reload`);\r\n } else {\r\n const response = [];\r\n\r\n if (act === status.Deleted) {\r\n _.each(selectionInfo.selectedRowIds, (rowId) => {\r\n response.push({ Id: rowId });\r\n });\r\n window.App.trigger(`${entityType}Deleted`, { data: response });\r\n } else {\r\n let Status = '';\r\n\r\n if (act === status.Paused) {\r\n Status = status.EnumPaused;\r\n }\r\n _.each(selectionInfo.selectedRowIds, (rowId) => {\r\n response.push({\r\n Id: rowId,\r\n Status,\r\n });\r\n });\r\n window.App.trigger(`${entityType}Updated`, { data: response });\r\n }\r\n }\r\n\r\n // show import related notifications for bulk edit in campaign related grids\r\n if (entityType === 'campaign' && act !== status.Deleted && importNotificationCallback && _.isFunction(importNotificationCallback)) {\r\n const campaignItem = gridView.selectedItems();\r\n\r\n importNotificationCallback({ campaignItemList: campaignItem, updateStatus: act });\r\n }\r\n }\r\n\r\n function renderView() {\r\n if (_.isFunction(bulkEditView.updateSelectedEntityCount)) {\r\n bulkEditView.listenTo(gridView, 'didSelect', () => {\r\n const selectInfo = getSelectionInfo();\r\n\r\n if (bulkEditView && bulkEditView.updateSelectedEntityCount) {\r\n bulkEditView.updateSelectedEntityCount(selectInfo.selectedRowCount);\r\n }\r\n });\r\n }\r\n\r\n bulkEditView.render();\r\n }\r\n\r\n function removeView() {\r\n bulkEditView.remove();\r\n bulkEditView = null;\r\n }\r\n\r\n function hideToolBar() {\r\n // use defer here to wait for the this dropdown menu to hide first\r\n _.defer(() => {\r\n let editorviewHiden = false;\r\n const gridContainer = gridView.$el.closest('.bingadsgrid');\r\n const editorContainer = gridContainer.find('.editor__container');\r\n const getGridToolbar = () => gridContainer.find('.grid-toolbar');\r\n\r\n if (isForVNext) {\r\n toolbarEditor.overrideWith(bulkEditView);\r\n } else {\r\n editorContainer.html(bulkEditView.$el);\r\n // show editor\r\n editorContainer.show();\r\n bulkEditView.$el.find(':input:enabled:first').focus();\r\n }\r\n\r\n _.defer(() => {\r\n // if editor view already hide, then won't hide the toolbar again\r\n if (editorviewHiden) {\r\n return;\r\n }\r\n // hide the toolbar with empty view, which will have blank height\r\n // hide using height instaed of calling hide() to work around Edge browser bug,\r\n // where browser tab crashes when used with narrator.\r\n const gridToolbar = getGridToolbar();\r\n gridToolbar.css({\r\n height: 0,\r\n overflow: 'hidden',\r\n });\r\n gridToolbar.attr('aria-hidden', 'true');\r\n\r\n toolbar.gridToolbarGroup.hideAllToolbars();\r\n });\r\n\r\n bulkEditView.once('hide', () => {\r\n editorviewHiden = true;\r\n\r\n const gridToolbar = getGridToolbar();\r\n gridToolbar.css({\r\n height: 'auto',\r\n overflow: 'visible',\r\n });\r\n gridToolbar.attr('aria-hidden', 'false');\r\n editorContainer.hide();\r\n toolbar.gridToolbarGroup.showAllToolbars();\r\n removeView();\r\n\r\n if (isForVNext) {\r\n toolbarEditor.overrideWith(null);\r\n }\r\n });\r\n });\r\n }\r\n\r\n defaultBulkEditViewConfig.hideToolBar = hideToolBar;\r\n\r\n function noneSelectedAndAlert(count) {\r\n if (count < 1) {\r\n // eslint-disable-next-line no-alert, no-restricted-globals\r\n alert(i18n.getString('Grid_RowSelectionRequired'));\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n function changeStatus(act) {\r\n const info = getSelectionInfo();\r\n\r\n if (noneSelectedAndAlert(info.selectedRowCount)) {\r\n return;\r\n }\r\n\r\n if (!crossPageSelectAll.isAllSelected) {\r\n if (_.isFunction(customClickHandler)) {\r\n const keepOriginal = !customClickHandler(crossPageSelectAll, gridView, i18n, act);\r\n if (!keepOriginal) {\r\n return;\r\n }\r\n }\r\n // eslint-disable-next-line no-alert, no-restricted-globals\r\n if (act === status.Deleted && !confirm(DeleteConfirmation)) {\r\n return;\r\n }\r\n }\r\n\r\n // fire qualtrics event if user pauses all campaigns on the page or pauses all their campaigns.\r\n if (entityType === 'campaign' &&\r\n qualtricsSurveyCallback &&\r\n (crossPageSelectAll.isAllSelected ||\r\n crossPageSelectAll.viewModel.currentPageAllRowsSelected()\r\n ) &&\r\n act === status.Paused) {\r\n qualtricsSurveyCallback();\r\n }\r\n\r\n const statusModel = new ChangeStatusModel({\r\n selectedEntityCount: info.selectedRowCount,\r\n allPages: info.allPages,\r\n scope,\r\n });\r\n const action = statusModel.get('BatchAction').Actions[0];\r\n\r\n action.Value = act;\r\n\r\n bulkEditView = new ChangeStatusView(_.defaults({\r\n model: statusModel,\r\n onOperationSuccess: () => {\r\n afterStatusChange(info, act);\r\n if (!disableDeselectAll) {\r\n crossPageSelectAll.deselectAll();\r\n gridView.deselectAll();\r\n }\r\n },\r\n isSkipEntityCache: act === status.Deleted,\r\n isForVNext,\r\n bulkEditUrl,\r\n }, defaultBulkEditViewConfig));\r\n renderView();\r\n\r\n if (!isForVNext\r\n || crossPageSelectAll.isAllSelected\r\n || (typeof bulkEditView.isExcludeNonAudience === 'function' && bulkEditView.isExcludeNonAudience())) {\r\n // For VNext only hide\r\n // 1. when cross-page is selected\r\n // 2. when non audience campaign target is excluded.\r\n // Since that the only time we show top of grid panel for change status.\r\n hideToolBar();\r\n }\r\n }\r\n\r\n function generateClickableItem({\r\n text,\r\n iconLeft,\r\n iconLeftGlyphName,\r\n classes,\r\n createView,\r\n isFallbackEnabled,\r\n noSelectionRequired = false,\r\n hotkeys,\r\n }) {\r\n return {\r\n text,\r\n iconLeft,\r\n iconLeftGlyphName,\r\n classes,\r\n isFallbackEnabled,\r\n onClick: isFallbackEnabled ? null : () => {\r\n const info = getSelectionInfo();\r\n\r\n // check the selection for the menu that do require selection\r\n if (!noSelectionRequired && noneSelectedAndAlert(info.selectedRowCount)) {\r\n return;\r\n }\r\n if (_.isFunction(customClickHandler)) {\r\n const keepOriginal = !customClickHandler(crossPageSelectAll, gridView, i18n);\r\n if (!keepOriginal) {\r\n return;\r\n }\r\n }\r\n const selectedItems = gridView.selectedItems();\r\n\r\n const viewConfig = {\r\n ...defaultBulkEditViewConfig,\r\n onOperationSuccess: (model) => {\r\n const newValue = _.get(model, ['attributes', 'BatchAction', 'Actions', 0]);\r\n if (newValue && importBudgetBidNotificationCallback) {\r\n if (classes[0] === 'bulk-edit-change-budget') {\r\n importBudgetBidNotificationCallback({ campaignItemList: selectedItems, newBudget: newValue });\r\n }\r\n if (classes[0] === 'bulk-edit-change-lifetime-budget') {\r\n importBudgetBidNotificationCallback({ campaignItemList: selectedItems, newBudget: newValue });\r\n }\r\n if (classes[0] === 'bulk-edit-change-bid-strategy-type') {\r\n importBudgetBidNotificationCallback({ campaignItemList: selectedItems, newBidStrategy: newValue });\r\n }\r\n }\r\n\r\n defaultBulkEditViewConfig.onOperationSuccess();\r\n },\r\n };\r\n\r\n bulkEditView = createView({\r\n viewConfig,\r\n selectedRowCount: info.selectedRowCount,\r\n allPages: info.allPages,\r\n selectedRowIds: info.selectedRowIds,\r\n isForVNext,\r\n selectedItems,\r\n });\r\n\r\n if (_.isUndefined(bulkEditView)) {\r\n return;\r\n }\r\n\r\n bulkEditView.once('close', () => {\r\n toolbar.gridToolbarGroup.showAllToolbars();\r\n dataContextManager.updateContext(['AdGrid']);\r\n gridView.refresh(true);\r\n });\r\n\r\n bulkEditView.once('saveAndRefresh', () => {\r\n toolbar.gridToolbarGroup.showAllToolbars();\r\n dataContextManager.updateContext(['AdGrid']);\r\n gridView.refresh(true);\r\n });\r\n\r\n renderView();\r\n hideToolBar();\r\n },\r\n hotkeys,\r\n };\r\n }\r\n\r\n function generateClickableCampaignUpgradeItem({\r\n text,\r\n iconLeft,\r\n iconLeftGlyphName,\r\n classes,\r\n repos,\r\n isFallbackEnabled,\r\n noSelectionRequired = false,\r\n hotkeys,\r\n }) {\r\n return {\r\n text,\r\n iconLeft,\r\n iconLeftGlyphName,\r\n classes,\r\n isFallbackEnabled,\r\n onClick: isFallbackEnabled ? null : () => {\r\n const info = getSelectionInfo();\r\n\r\n // check the selection for the menu that do require selection\r\n if (!noSelectionRequired && noneSelectedAndAlert(info.selectedRowCount)) {\r\n return;\r\n }\r\n const selectedItems = gridView.selectedItems();\r\n const { allPages } = info;\r\n repos.openUpgradeDialog(selectedItems, allPages);\r\n },\r\n hotkeys,\r\n };\r\n }\r\n\r\n function getItems() {\r\n function getIconClasses(cls) {\r\n if (isForVNext) {\r\n return [cls];\r\n }\r\n return ['glyphicon', 'glyphicon-offset-left5'].concat(cls);\r\n }\r\n\r\n const divider = {\r\n type: 'dropdown-divider',\r\n };\r\n\r\n const excludeItem = {\r\n text: i18n.getString('Page_All_RowactionText_Exclude'),\r\n iconLeft: getIconClasses('icon-status-exclude'),\r\n iconLeftGlyphName: 'ba-Blocked',\r\n classes: ['bulk-edit-exclude'],\r\n onClick: () => {\r\n changeStatus(status.Excluded);\r\n },\r\n };\r\n\r\n const menuItems = _.compact([\r\n showEnable && {\r\n text: i18n.getString('Page_All_RowactionText_Enable'),\r\n iconLeft: getIconClasses('icon-status-active'),\r\n iconLeftGlyphName: 'ba-RadioBullet2',\r\n classes: ['bulk-edit-enable'],\r\n onClick: () => {\r\n changeStatus(status.Active);\r\n },\r\n },\r\n showPause && {\r\n text: i18n.getString('Page_All_RowactionText_Pause'),\r\n iconLeft: getIconClasses('icon-status-pause'),\r\n iconLeftGlyphName: 'ba-PauseListView12',\r\n classes: ['bulk-edit-pause'],\r\n onClick: () => {\r\n changeStatus(status.Paused);\r\n },\r\n },\r\n (showExclude && !showSeparateExclude) && excludeItem,\r\n ]);\r\n\r\n if (showDelete) {\r\n menuItems.splice(menuItems.length, 0, {\r\n text: i18n.getString('Page_All_RowactionText_Delete'),\r\n iconLeft: getIconClasses('icon-status-delete'),\r\n iconLeftGlyphName: 'ba-Delete',\r\n classes: ['bulk-edit-delete'],\r\n onClick: () => {\r\n changeStatus(status.Deleted);\r\n },\r\n }, divider);\r\n }\r\n\r\n if (showExclude && showSeparateExclude) {\r\n menuItems.splice(menuItems.length, 0, excludeItem, divider);\r\n }\r\n\r\n // Add a divider if not exist, before next group\r\n if (menuItems.lastIndexOf(divider) !== menuItems.length - 1) {\r\n menuItems.push(divider);\r\n }\r\n\r\n _.each(items, (item) => {\r\n if (_.isUndefined(item.isValid) || item.isValid()) {\r\n if (item.subItems) {\r\n menuItems.push({\r\n type: 'dropdown-submenu',\r\n menu: {\r\n items: _.map(item.subItems, subItem => generateClickableItem(subItem)),\r\n },\r\n button: {\r\n text: item.text,\r\n iconRight: ['glyphicon', 'toolbar-icon', 'grid-expand-icon', 'pull-right'],\r\n },\r\n });\r\n } else if (item.type === divider.type) {\r\n menuItems.push(item);\r\n } else {\r\n menuItems.push(generateClickableItem(item));\r\n }\r\n }\r\n });\r\n if (_.result(campaignUpgradeItem, 'isValid')) {\r\n const { allPages: allPagesSelected } = getSelectionInfo();\r\n const curSelectedItems = gridView.selectedItems();\r\n if (allPagesSelected || _.any(curSelectedItems, item => item.CampaignType === 'Shopping' && item.CampaignSubType === 'ShoppingSmartAds')) {\r\n menuItems.push(generateClickableCampaignUpgradeItem(campaignUpgradeItem));\r\n }\r\n }\r\n const frontMenuItems = [];\r\n _.each(frontItems, (item) => {\r\n if (_.isUndefined(item.isValid) || item.isValid()) {\r\n frontMenuItems.push(generateClickableItem(item));\r\n }\r\n });\r\n if (!_.isEmpty(frontMenuItems)) {\r\n frontMenuItems.push(divider);\r\n }\r\n\r\n return frontMenuItems.concat(menuItems);\r\n }\r\n\r\n function updateToolbar() {\r\n const isReadOnlyUser = config.get('Permissions').IsReadOnlyUser;\r\n const isAccountInactive = config.get('CurrentAccountInActive');\r\n\r\n toolbarEditor.update({\r\n type: 'dropdown',\r\n id: 'dropdown-edit',\r\n iconLeftGlyphName: 'ba-Edit',\r\n button: {\r\n text: i18n.getString('Grid_EditButtonText'),\r\n disabled: isReadOnlyUser || isAccountInactive,\r\n classes: ['btn', 'btn-secondary'],\r\n },\r\n menu: {\r\n items: getItems(),\r\n },\r\n });\r\n }\r\n\r\n gridView.on('didSelect', () => {\r\n if (isForVNext && !_.isEmpty(gridView.selectedItems())) {\r\n updateToolbar();\r\n }\r\n });\r\n\r\n updateToolbar();\r\n\r\n // For some of the grid, we need to show some message\r\n if (_.isFunction(gridDecorationCallback)) {\r\n gridDecorationCallback(gridView);\r\n }\r\n}\r\n\r\n/**\r\n * Projection grid bulk edit plugin,\r\n */\r\nexport const projectionGridBulkEdit = defineGridPlugin(\r\n 'projectionGridBulkEdit', [\r\n 'gridView',\r\n 'toolbar',\r\n 'pagination',\r\n 'crossPageSelectAll',\r\n 'inlineError',\r\n ],\r\n updateGridToolbar\r\n);\r\n","export const localPreferenceService = {\r\n findByNameAtUserLevel: (key) => {\r\n const data = localStorage.getItem(key);\r\n const value = data ? JSON.parse(data) : undefined;\r\n return { Name: key, Data: value };\r\n },\r\n setAtUserLevel: ({ Name, Data }) => {\r\n localStorage.setItem(Name, JSON.stringify(Data));\r\n },\r\n};\r\n","import { getColumnResizeProjectionFactory } from '@bingads-webui/projection-grid-column-resize';\r\nimport { defineGridPlugin } from '@bingads-webui/projection-grid-plugin';\r\n\r\nconst PLUGIN_NAME = 'campaignGridColumnResize';\r\nexport const campaignGridColumnResizePlugin = defineGridPlugin(\r\n PLUGIN_NAME,\r\n ['config', 'gridView'],\r\n (config, gridView, settings) => {\r\n // some other plugins also modify header html, ensure this is the last piped plugin\r\n gridView.once('didReload', () => {\r\n const plugin = getColumnResizeProjectionFactory()(PLUGIN_NAME, config, gridView, settings);\r\n gridView.pipeContentProjections(plugin);\r\n });\r\n }\r\n);\r\n","/* eslint-disable import/extensions */\r\n/* eslint-disable import/no-unresolved */\r\nimport _ from 'underscore';\r\nimport { ColumnDoubleClickingBehavior } from '@bingads-webui/projection-grid-column-resize';\r\nimport { localPreferenceService } from './local-preference-service';\r\nimport { campaignGridColumnResizePlugin } from './plugins';\r\nimport headerTemplate from './header.pug';\r\nimport './header.less';\r\n\r\nconst FILE_VERSION = 1;\r\n\r\nexport const getPGridColumnResizePlugin = ({\r\n gridName,\r\n preferenceService,\r\n}) => {\r\n const preferenceSrv = preferenceService || localPreferenceService;\r\n const preferenceKey = `${gridName}-ColumnResizePlugin`;\r\n const debouncedSaveToPreference = _.debounce(preferenceSrv.setAtUserLevel, 500);\r\n\r\n let cache = null;\r\n let manuallySetLastColumnWidth = null;\r\n\r\n // when saving data, try to keep existing data\r\n // for example, when CPA columns are expanded, columns\r\n // only contains CPA sub columns, but cache may contains\r\n // CPA column data. by this way, we can restore CPA column\r\n // width after collpase CPA column\r\n const saveToStore = (columns, widthState) => {\r\n if (columns) {\r\n if (cache === null) {\r\n cache = {};\r\n }\r\n columns.forEach((c) => {\r\n const col = {};\r\n if (_.isNumber(c.width)) {\r\n col.width = c.width;\r\n }\r\n if (_.isNumber(c.left)) {\r\n col.left = c.left;\r\n }\r\n if (c.name) {\r\n cache[c.name] = col;\r\n }\r\n });\r\n\r\n if (widthState && _.isNumber(widthState.manuallySetLastColumnWidth)) {\r\n // eslint-disable-next-line prefer-destructuring\r\n manuallySetLastColumnWidth = widthState.manuallySetLastColumnWidth;\r\n }\r\n\r\n // save to preference service\r\n debouncedSaveToPreference({\r\n Name: preferenceKey,\r\n Data: { version: FILE_VERSION, columns: cache, manuallySetLastColumnWidth },\r\n });\r\n }\r\n };\r\n\r\n const loadFromStore = (state) => {\r\n // load data\r\n if (cache === null) {\r\n const { Data = {} } = preferenceSrv.findByNameAtUserLevel(preferenceKey) || {};\r\n const { version, columns, manuallySetLastColumnWidth: mslcw } = Data;\r\n // discard the data if versions dismatch\r\n if (version === FILE_VERSION) {\r\n cache = columns;\r\n\r\n if (_.isNumber(mslcw)) {\r\n manuallySetLastColumnWidth = mslcw;\r\n }\r\n }\r\n }\r\n\r\n const loadedColumns = [];\r\n const stateColumns = state.columnGroup && state.columnGroup.leafColumns\r\n ? state.columnGroup.leafColumns\r\n : state.columns;\r\n if (cache && stateColumns) {\r\n stateColumns.forEach((c) => {\r\n const col = { name: c.name };\r\n const { width, left } = cache[c.name] || {};\r\n if (_.isNumber(width)) {\r\n col.width = width;\r\n }\r\n if (_.isNumber(left)) {\r\n col.left = left;\r\n }\r\n loadedColumns.push(col);\r\n });\r\n }\r\n\r\n return [loadedColumns, manuallySetLastColumnWidth];\r\n };\r\n\r\n // add grabber to table header cell, also add a class\r\n // 'resizable-column-header' to \r\n const renderGrabber = (cell, isDraggingCurCol) => _.defaults({\r\n html: headerTemplate({\r\n val: cell.html,\r\n dragging: isDraggingCurCol,\r\n }),\r\n classes: ['resizable-column-header', ...cell.classes],\r\n }, cell);\r\n\r\n return {\r\n plugin: campaignGridColumnResizePlugin,\r\n config: {\r\n isSaveEnabled: true,\r\n doubleClickingBehavior: ColumnDoubleClickingBehavior.resizeToMinWidth,\r\n saveToStore,\r\n loadFromStore,\r\n renderGrabber,\r\n },\r\n };\r\n};\r\n","import _ from 'underscore';\r\nimport $ from 'jquery';\r\nimport { prompt } from '@bingads-webui/popup-editor';\r\nimport editTemplate from './editable-template.pug';\r\n/**\r\n * Projection grid editable plugin,\r\n * User need to set these things in config\r\n *\r\n *
plugins: { editable: {\r\n * i18n,\r\n * saveModel: (updated, viewEditor, item, property) default save model for inline edit\r\n * }}\r\n *
they can also set these things in the editable\r\n * editable: {\r\n * enableEdit: set cell level editable/ read-only for the editable columns (false to disable)\r\n * prompt: prompot function on edit\r\n * if nothing specified, it would use simple-form shown in popup-up-editor\r\n * prompt: open a popup editor, return promise which will be resolved after save & cancel\r\n * dismiss: close the editor\r\n * saveModel: (updated, editorView) save handler\r\n * can use editorView.trigger('save') to close view\r\n * updateHandler: (item, updated, editorView): can use to replace saveModel\r\n * editorConfig: object, use to set property for column editable\r\n *
Triggered event selectedLanguages:changed when user selection changes\r\n * @param { object } definePlugin: function pointer used to define plugin for grid\r\n * @returns {void}\r\n */\r\nexport const editablePlugin = definePlugin => definePlugin('editable', ['gridView', 'config'], (gridView, config) => {\r\n const {\r\n i18n, saveModel,\r\n // TODO: this is a temp fix. Related code should be removed if all\r\n // pages using \"EditIcon\" have i18n key \"Grid_EditButtonText\".\r\n isEditIconLocalized,\r\n } = _.result(config.plugins, 'editable', {});\r\n const editable = {\r\n name: 'editable',\r\n handler(state) {\r\n const { leafColumns } = state.columnGroup;\r\n const iconClasses = ['glyphicon', 'glyphicon-pencil', 'clickable'];\r\n const events = _.reduce(leafColumns, (memo, col) => {\r\n if (!col.editable) {\r\n return memo;\r\n }\r\n\r\n // editable columns can have read-only cells, just update the enableEdit function\r\n // all columns has grid-editable-cell should be editable\r\n // eslint-disable-next-line no-param-reassign\r\n memo[`click .grid-editable-cell.grid-column-${col.name}`] = (e) => {\r\n const $td = $(e.target).closest('td, .td');\r\n const key = this.keyOfElement(e.target);\r\n // eslint-disable-next-line no-underscore-dangle\r\n const item = _.find(\r\n gridView._chainData.state.items.slice(), // eslint-disable-line no-underscore-dangle\r\n i => i[gridView.primaryKey].toString() === key\r\n );\r\n\r\n if (_.isFunction(col.editable.enableEdit) && !col.editable.enableEdit(item)) {\r\n return;\r\n }\r\n this.trigger('willEdit', item);\r\n\r\n const offset = $td.offset();\r\n\r\n const uiNextVirtualOffset = $('.grid-and-disclaim-container:visible').offset();\r\n // newPosition = new method of calculating position for ui-next viewport\r\n const newPosition = {};\r\n const position = {};\r\n\r\n position.top = offset.top;\r\n position.left = offset.left;\r\n\r\n if (uiNextVirtualOffset) {\r\n newPosition.top = (offset.top - uiNextVirtualOffset.top) + ($td.height() / 2);\r\n newPosition.left = offset.left - uiNextVirtualOffset.left;\r\n }\r\n\r\n if (_.isFunction(col.editable.prompt)) {\r\n col.editable.prompt({\r\n position,\r\n newPosition,\r\n col,\r\n item,\r\n event: e,\r\n });\r\n } else {\r\n const options = {\r\n model: _.pick(item, col.name),\r\n fields: [col.name],\r\n schema: config.dataSource.schema,\r\n position: col.editable.isForVNext ? newPosition : position,\r\n hasLabels: false,\r\n template: 'inline',\r\n i18n,\r\n parentContainerSelector: col.editable.parentContainerSelector,\r\n };\r\n\r\n if (_.isFunction(saveModel)) {\r\n options.saveModel =\r\n (updatedModel, viewEditor) => saveModel(updatedModel, viewEditor, item, col.name);\r\n }\r\n\r\n if (_.isFunction(col.editable.updateHandler)) {\r\n options.saveModel = _.partial(col.editable.updateHandler, item);\r\n }\r\n\r\n let editorConfig = null;\r\n\r\n if (_.isFunction(col.editable.editorConfig)) {\r\n editorConfig = col.editable.editorConfig(item);\r\n } else if (_.isObject(col.editable.editorConfig)) {\r\n ({ editorConfig } = col.editable);\r\n }\r\n\r\n if (_.isObject(editorConfig)) {\r\n const generatedConfig = {};\r\n\r\n if (_.isFunction(editorConfig.model)) {\r\n _.extend(generatedConfig, {\r\n model: editorConfig.model(item),\r\n });\r\n }\r\n _.extend(options, editorConfig, generatedConfig);\r\n }\r\n prompt(options).then((model) => {\r\n gridView.trigger('didEdit', model, item, col.name);\r\n });\r\n }\r\n };\r\n return memo;\r\n }, {});\r\n const bodyRows = {\r\n length: state.bodyRows.length,\r\n slice: (...args) => state.bodyRows.slice(...args).map((row, rowIndex) => {\r\n if (row.type !== 'data') {\r\n return row;\r\n }\r\n\r\n const cells = _.map(row.cells, (cell, colIndex) => {\r\n const col = leafColumns[colIndex];\r\n\r\n if (col.editable) {\r\n if (_.isFunction(col.editable.enableEdit) && !col.editable.enableEdit(row.item)) {\r\n return cell;\r\n }\r\n const classes = _.union(cell.classes, ['grid-editable-cell', `grid-column-${col.name}`]);\r\n const html = editTemplate({\r\n $html: cell.html,\r\n classes: iconClasses,\r\n ariaLabel: i18n.getString('Grid_Edit_Cell', { columnName: col.title, rowIndex: rowIndex + 1 }),\r\n gridEditIconTitle: isEditIconLocalized ? i18n.getString('Grid_EditButtonText') : 'Edit',\r\n });\r\n\r\n return _.defaults({ classes, html }, cell);\r\n }\r\n return cell;\r\n });\r\n\r\n return _.defaults({ cells }, row);\r\n }),\r\n };\r\n\r\n _.defaults(events, state.events);\r\n\r\n return _.defaults({ events, bodyRows }, state);\r\n },\r\n defaults: {},\r\n };\r\n\r\n gridView.pipeContentProjections(editable);\r\n});\r\n","/* eslint-disable no-param-reassign */\r\n/* eslint-disable no-unused-expressions */\r\n/* eslint-disable arrow-body-style */\r\nimport $ from 'jquery';\r\nimport { chain, pick, extend, reduce, isUndefined, defaults, result, isNaN, map } from 'underscore';\r\nimport headerTemplate from './header.pug';\r\n\r\nconst defaultMinWidth = 80;\r\nconst defaultMaxWidth = 800;\r\n\r\nconst extendColumns = (columns, extendFunc) => map(columns, (column) => {\r\n if (column.columns) {\r\n return defaults({ columns: extendColumns(column.columns, extendFunc) }, extendFunc(column));\r\n }\r\n return extendFunc(column);\r\n});\r\n\r\nconst getStyleAttr = column => (isUndefined(column.width) || column.columns ? {} : {\r\n style: `width: ${column.width}px`,\r\n});\r\n\r\nconst extendWidthAttr = column => defaults({\r\n headAttributes: extend(getStyleAttr(column), column.headAttributes),\r\n bodyAttributes: extend(getStyleAttr(column), column.bodyAttributes),\r\n footAttributes: extend(getStyleAttr(column), column.footAttributes),\r\n}, column);\r\n\r\nconst getPoPWidth = (widthMap, column) =>\r\n ({\r\n PopSubColWidth: widthMap[`PopSubCol${column.name}`],\r\n ComparedWidth: widthMap[`Compared${column.name}`],\r\n ChangeWidth: widthMap[`${column.name}Change`],\r\n ChangePercentageWidth: widthMap[`${column.name}ChangePercentage`],\r\n });\r\n\r\nconst getColumnWidth = () => {\r\n const $headers = $('.header .flex-row:first-child .flex-cell');\r\n return reduce($headers.toArray(), (memo, header) => {\r\n const $header = $(header);\r\n const name = $header.data('column');\r\n const width = $header.outerWidth();\r\n if (name !== 'selection') {\r\n // eslint-disable-next-line no-param-reassign\r\n memo[name] = width;\r\n }\r\n return memo;\r\n }, {});\r\n};\r\n\r\nexport const projectionGridFlexColumnResize = definePlugin => definePlugin('projectionGridFlexColumnResize', [\r\n 'config',\r\n 'gridView',\r\n], (config, gridView) => {\r\n const { gridName, preferenceService } = config.plugins.projectionGridFlexColumnResize;\r\n const preferenceKey = `${gridName}-FlexColumnResizePlugin`;\r\n let isDown = false;\r\n let $cell;\r\n let cellWidth;\r\n let cellMaxWidth;\r\n let cellMinWidth;\r\n let prev;\r\n\r\n const saveColumnWidth = () => {\r\n const columns = gridView.model.get('columns');\r\n const widthMap = getColumnWidth();\r\n const columnWithWidth = extendColumns(columns, (column) => {\r\n column && column.headAttributes && delete column.headAttributes.style;\r\n column && column.bodyAttributes && delete column.bodyAttributes.style;\r\n column && column.footAttributes && delete column.footAttributes.style;\r\n return defaults({\r\n ...!isUndefined(widthMap[`PopSubCol${column.name}`]) ?\r\n getPoPWidth(widthMap, column) : {\r\n width: widthMap[column.name],\r\n },\r\n }, column);\r\n });\r\n\r\n // Don't save the column width to preference if the width > maxWidth.\r\n // This is possible if the the column is the last one\r\n preferenceService.setAtUserLevel({\r\n Name: preferenceKey,\r\n Data: { columns: pick(widthMap, v => v <= defaultMaxWidth) },\r\n });\r\n\r\n gridView.patch({ columns: columnWithWidth });\r\n };\r\n\r\n const onMouseUp = () => {\r\n if (isDown) {\r\n saveColumnWidth();\r\n }\r\n\r\n isDown = false;\r\n };\r\n\r\n const onMouseDown = (e) => {\r\n $cell = $(e.target).closest('.flex-cell');\r\n cellWidth = $cell.width();\r\n cellMinWidth = isNaN(parseInt($cell.css('minWidth'), 10)) ? defaultMinWidth : parseInt($cell.css('minWidth'), 10);\r\n cellMaxWidth = isNaN(parseInt($cell.css('maxWidth'), 10)) ? defaultMaxWidth : parseInt($cell.css('maxWidth'), 10);\r\n prev = e.clientX;\r\n isDown = true;\r\n };\r\n\r\n const onMouseMove = (e) => {\r\n if (isDown) {\r\n const delta = e.clientX - prev;\r\n const dist = cellWidth + delta;\r\n const name = $cell.data('column');\r\n if (dist >= cellMinWidth || dist <= cellMaxWidth) {\r\n $(`.flex-cell[data-column=\"${name}\"]`).width(dist);\r\n }\r\n }\r\n };\r\n\r\n const onMouseDbClick = (e) => {\r\n $cell = $(e.target).closest('.flex-cell');\r\n cellMinWidth = isNaN(parseInt($cell.css('minWidth'), 10)) ? defaultMinWidth : parseInt($cell.css('minWidth'), 10);\r\n const name = $cell.data('column');\r\n $(`.flex-cell[data-column=\"${name}\"]`).width(cellMinWidth);\r\n saveColumnWidth();\r\n };\r\n\r\n const resizeProjection = {\r\n name: 'resizeProjection',\r\n handler: function resizeProjection(state) {\r\n const headRows = state.headRows.map((headRow) => {\r\n const headRowCells = headRow.cells.map((cell) => {\r\n const column = state.columnGroup.columnIndex[cell.name];\r\n if (result(column, 'isResizable') === false) return cell;\r\n\r\n return defaults({\r\n html: headerTemplate({ val: cell.html }),\r\n classes: ['resizable-column-header', ...cell.classes],\r\n }, cell);\r\n });\r\n\r\n return defaults({ cells: headRowCells }, headRow);\r\n });\r\n\r\n const events = defaults({\r\n 'mousedown .dragger': onMouseDown,\r\n 'click .dragger': e => e.stopPropagation(),\r\n 'dblclick .dragger': onMouseDbClick,\r\n }, state.events);\r\n\r\n return defaults({ headRows, events }, state);\r\n },\r\n };\r\n\r\n gridView.pipeContentProjections(resizeProjection);\r\n\r\n document.addEventListener('mousemove', onMouseMove);\r\n document.addEventListener('mouseup', onMouseUp);\r\n\r\n // init the grid with width in preference\r\n gridView.on('willUpdate', () => {\r\n const res = preferenceService.findByNameAtUserLevel(preferenceKey);\r\n const columnWidthMap = chain(res).result('Data').result('columns').value();\r\n\r\n if (columnWidthMap) {\r\n const columns = gridView.model.get('columns');\r\n const columnWithWidth = extendColumns(columns, (column) => {\r\n const columnWidth = result(columnWidthMap, column.name);\r\n if (isUndefined(columnWidth)) return column;\r\n const widthMap = columnWidthMap;\r\n\r\n return defaults({\r\n ...!isUndefined(widthMap[`PopSubCol${column.name}`]) ?\r\n getPoPWidth(widthMap, column) : {\r\n width: widthMap[column.name],\r\n },\r\n }, column);\r\n });\r\n\r\n const columnWithStyle = extendColumns(columnWithWidth, extendWidthAttr);\r\n\r\n gridView.patch({ columns: columnWithStyle });\r\n }\r\n });\r\n});\r\n","export const pastePlugin = definePlugin => definePlugin('paste', [\r\n 'config',\r\n 'gridView',\r\n 'toolbar',\r\n 'pagination',\r\n 'crossPageSelectAll',\r\n 'filterState',\r\n], (config, gridView, toolbar, pagination, crossPageSelectAll, filterState) => {\r\n const {\r\n plugins: {\r\n paste: {\r\n i18n,\r\n CopyPaste,\r\n filterService,\r\n perfMarker,\r\n },\r\n },\r\n } = config;\r\n const menuId = 'button-paste';\r\n const toolbarEditor = toolbar.gridToolbarGroup.toolbarWithItem(menuId);\r\n\r\n function onClick() {\r\n let pasteView = CopyPaste.paste({\r\n filterService,\r\n gridView,\r\n pgridPlugins: {\r\n pagination,\r\n crossPageSelectAll,\r\n filterState,\r\n },\r\n isForVNext: true,\r\n perfMarker,\r\n });\r\n\r\n if (pasteView) {\r\n toolbarEditor.overrideWith(pasteView);\r\n toolbar.gridToolbarGroup.hideAllToolbars();\r\n pasteView.once('hide', () => {\r\n toolbarEditor.restoreToolbar();\r\n toolbar.gridToolbarGroup.showAllToolbars();\r\n pasteView = null;\r\n\r\n toolbarEditor.overrideWith(null);\r\n });\r\n }\r\n }\r\n toolbarEditor.update({\r\n id: menuId,\r\n text: i18n.getString('BulkEdit_PasteMenu'),\r\n onClick,\r\n hotkeys: {\r\n win: 'Ctrl-V',\r\n mac: '\\u2318V',\r\n },\r\n });\r\n\r\n return {\r\n onClick,\r\n };\r\n});\r\n","import $ from 'jquery';\r\nimport _ from 'underscore';\r\n\r\nconst sharedClassName = 'projection-grid-popup-plugin';\r\n\r\nexport const projectionGridPopupPlugin = definePlugin => definePlugin('projectionGridPopup', [\r\n 'config',\r\n 'gridView',\r\n], ({\r\n plugins: {\r\n projectionGridPopup,\r\n },\r\n}, gridView) => {\r\n const getPopover = container => $(container).find('.popover');\r\n const closePopover = () => $(`.${sharedClassName}`).remove();\r\n\r\n function getMouseleaveHandler() {\r\n return function mouseleaveHandler(e) {\r\n if ($(e.relatedTarget).parents('.popover').length === 1) return;\r\n closePopover();\r\n };\r\n }\r\n\r\n function getMouseenterHandler({\r\n title,\r\n content,\r\n className,\r\n container,\r\n }) {\r\n return function mouseenterHandler(e) {\r\n e.stopPropagation();\r\n const key = gridView.keyOfElement(e.target);\r\n const item = gridView.itemWithKey(key);\r\n const $target = $(e.target);\r\n\r\n // skip if the popup is triggered by same cell\r\n const existKey = getPopover(container).attr('data-key');\r\n if (existKey === key) return;\r\n closePopover();\r\n\r\n $target.popover({\r\n html: true,\r\n trigger: 'manual',\r\n title: _.isFunction(title) ? title(item) : title,\r\n content: _.isFunction(content) ? content(item) : content,\r\n container,\r\n placement: 'auto right',\r\n template: `\r\n
\r\n
\r\n

\r\n
\r\n
`,\r\n }).popover('show');\r\n\r\n const $popover = getPopover(container);\r\n\r\n $popover.on('mouseleave', () => {\r\n closePopover();\r\n });\r\n\r\n $popover.on('click', (ev) => {\r\n if (ev.target.tagName.toLowerCase() === 'a'\r\n || ev.target.tagName.toLowerCase() === 'button') {\r\n return;\r\n }\r\n ev.stopPropagation();\r\n });\r\n };\r\n }\r\n\r\n /*\r\n * popupEvents = {\r\n * 'mouseenter .selector1, () => {},\r\n * 'mouseleave .selector2, () => {},\r\n * }\r\n */\r\n const popupEvents = _.reduce(projectionGridPopup, (memo, i) => {\r\n const option = _.defaults(i, {\r\n title: '',\r\n content: '',\r\n className: '',\r\n container: 'body',\r\n });\r\n\r\n const events = _.extend({\r\n [`mouseenter ${i.selector}`]: _.debounce(getMouseenterHandler(option), 50),\r\n [`mouseleave ${i.outerSelector}`]: _.debounce(getMouseleaveHandler(option), 50),\r\n }, memo);\r\n return events;\r\n }, {});\r\n\r\n const projectionGridPopupProjection = {\r\n name: 'projectionGridPopupProjection',\r\n handler: function scopeNavigator(state) {\r\n const events = _.defaults({}, popupEvents, state.events);\r\n return _.defaults({ events }, state);\r\n },\r\n };\r\n\r\n gridView.pipeContentProjections(projectionGridPopupProjection);\r\n});\r\n","import $ from 'jquery';\r\nimport _ from 'underscore';\r\nimport queryString from 'query-string';\r\nimport Uri from 'urijs';\r\n\r\nexport const projectionGridScopeNavigator = definePlugin => definePlugin('projectionGridScopeNavigator', [\r\n 'config',\r\n 'gridView',\r\n], ({\r\n plugins: {\r\n projectionGridScopeNavigator: scope,\r\n },\r\n} = {}, gridView) => {\r\n function navigate(e) {\r\n const $target = $(e.target);\r\n const targetCid = $target.data('cid');\r\n const targetAid = $target.data('aid');\r\n const campaignId = $target.data('campaignid');\r\n const adGroupId = $target.data('adgroupid');\r\n const customParams = $target.data('customparams');\r\n let pathname = $target.data('pathname');\r\n const skipScopeNavigation = $target.data('skipscopenavigation');\r\n const preventDefaultNavigation = $target.data('preventdefaultnavigation');\r\n const { cid, aid, uid } = scope.values;\r\n\r\n if (!pathname) {\r\n const href = $target.attr('href');\r\n if (!_.isUndefined(href)) {\r\n const uri = new Uri(href);\r\n uri.normalizeProtocol();\r\n if (uri.protocol() !== 'javascript') { // prevent invaid pathname for javascript href\r\n pathname = uri.pathname();\r\n }\r\n }\r\n }\r\n\r\n if (skipScopeNavigation) {\r\n return true;\r\n }\r\n\r\n if (preventDefaultNavigation) {\r\n e.preventDefault();\r\n }\r\n\r\n if (!_.isUndefined(targetCid)) {\r\n scope.set({\r\n cid: targetCid, uid,\r\n });\r\n }\r\n\r\n if (!_.isUndefined(targetAid)) {\r\n scope.set({\r\n cid: targetCid || cid, aid: targetAid, uid,\r\n });\r\n }\r\n\r\n if (!_.isUndefined(campaignId)) {\r\n scope.set({\r\n cid, aid, uid, campaignId,\r\n });\r\n }\r\n\r\n if (!_.isUndefined(adGroupId)) {\r\n scope.set({\r\n cid, aid, uid, campaignId, adGroupId,\r\n });\r\n }\r\n\r\n if (!_.isUndefined(customParams)) {\r\n const customQueries = queryString.parse(customParams);\r\n scope.set(_.extend({\r\n cid, aid, uid,\r\n }, customQueries));\r\n }\r\n\r\n if (!_.isUndefined(pathname)) {\r\n scope.save(pathname);\r\n } else {\r\n scope.save();\r\n }\r\n\r\n return false;\r\n }\r\n\r\n const scopeNavigatorProjection = {\r\n name: 'scopeNavigatorProjection',\r\n handler: function scopeNavigator(state) {\r\n const events = _.defaults({\r\n 'click .scope-navigator': navigate,\r\n }, state.events);\r\n\r\n return _.defaults({ events }, state);\r\n },\r\n };\r\n\r\n gridView.pipeContentProjections(scopeNavigatorProjection);\r\n});\r\n","/* eslint-disable no-underscore-dangle */\r\nimport Backbone from 'backbone';\r\nimport $ from 'jquery';\r\nimport { delay, debounce, extend, result, each, isUndefined, has } from 'underscore';\r\nimport { ResizeObserver as ResizeObserverPollyFill } from '@juggle/resize-observer';\r\nimport template from './template.pug';\r\n\r\n// [TODO] Need check Mac OS\r\nconst isFirefox = typeof InstallTrigger !== 'undefined';\r\nconst scrollbarWidth = isFirefox ? 17 : 12;\r\nconst overlapClass = 'overlap-shadow';\r\n\r\nclass ScrollbarView extends Backbone.View {\r\n initialize(options) {\r\n this.freezingSelector = options.freezingSelector;\r\n this.otherSelector = options.otherSelector;\r\n this.scrollbarParentSelector = options.scrollbarParentSelector;\r\n this.calculateOtherHorizontalOffset = options.calculateOtherHorizontalOffset;\r\n }\r\n\r\n addEvent() {\r\n const $bar = this.$el.find(this.scrollbarParentSelector);\r\n $bar.on('scroll', () => {\r\n this.calculateOtherHorizontalOffset();\r\n });\r\n }\r\n\r\n render() {\r\n const parentStyle = {\r\n 'z-index': 10,\r\n height: `${scrollbarWidth}px`,\r\n 'overflow-y': 'hidden',\r\n 'overflow-x': 'scroll',\r\n };\r\n const childStyle = {\r\n height: `${scrollbarWidth}px`,\r\n };\r\n this.$el.html(template({ parentStyle, childStyle }));\r\n\r\n this.addEvent();\r\n return this;\r\n }\r\n}\r\n\r\nexport const projectionGridScrollbarPlugin = definePlugin => definePlugin('projectionGridScrollbar', [\r\n 'gridView',\r\n 'config',\r\n], (gridView, config) => {\r\n const pluginConfig = result(config.plugins, 'projectionGridScrollbar', {});\r\n const {\r\n pageContainer = '.table-page-container',\r\n tableSelector = '.table-container',\r\n rowSelector = '.flex-row',\r\n cellSelector = '.flex-cell',\r\n freezingGroupSelector = '.freezing-group-container',\r\n freezingSelector = '.freezing-group',\r\n otherGroupSelector = '.other-group-container',\r\n otherSelector = '.other-group',\r\n scrollbarContainerSelector = '.scrollbar.flex-row',\r\n scrollbarParentSelector = '.bar-parent',\r\n scrollbarChildSelector = '.bar-child',\r\n scrollElementSelector = null,\r\n shellSelector = '.app-shell-content',\r\n } = pluginConfig;\r\n\r\n const getBarParent = () => $(scrollbarParentSelector);\r\n const getBarChild = () => $(scrollbarChildSelector);\r\n const scrollOtherGroupToLeft = () => $(otherGroupSelector).scrollLeft(0);\r\n const setOverlapClass = isOverLap => (isOverLap ?\r\n $(otherGroupSelector).addClass(overlapClass) :\r\n $(otherGroupSelector).removeClass(overlapClass));\r\n\r\n const $window = $(window);\r\n let prevOffsetWillEditing = 0;\r\n let prevOffset = 0;\r\n\r\n function calculateParentWidth() {\r\n const $freezing = $(freezingGroupSelector);\r\n const $table = $(tableSelector);\r\n const right = $table.width() - $freezing.width();\r\n getBarParent().css({ width: right });\r\n }\r\n\r\n function calculateChildWidth() {\r\n const width = $(otherSelector).width();\r\n getBarChild().css({ width });\r\n }\r\n\r\n // After grid reload, need restore the scrollbar's scrolling offset\r\n function setHorizontalOffset(offset, transition = false) {\r\n $(otherSelector).css({\r\n 'transition-duration': transition ? '0.3s' : '0s',\r\n transform: `translate(-${offset}px, 0)`,\r\n });\r\n getBarParent().scrollLeft(offset);\r\n setOverlapClass(prevOffset > 0);\r\n prevOffset = offset;\r\n }\r\n\r\n function calculateShowOrHide() {\r\n const $barParent = getBarParent();\r\n const $row = $(tableSelector).find(rowSelector).eq(0);\r\n const rowWidth = $row.width();\r\n const freezWidth = $row.find(freezingGroupSelector).width();\r\n const otherWidth = $row.find(otherSelector).width();\r\n\r\n if (rowWidth >= freezWidth + otherWidth) {\r\n // Hide scrollbar. Reset the css translate\r\n $barParent.css({ opacity: 0 });\r\n setHorizontalOffset(0);\r\n } else {\r\n // Show scrollbar\r\n $barParent.css({ opacity: 1 });\r\n }\r\n }\r\n\r\n function calculateScrollbarPosition() {\r\n const $freezing = $(freezingGroupSelector);\r\n const $other = $(otherGroupSelector);\r\n const $barContainer = $(scrollbarContainerSelector);\r\n const windowHeight = $window.height();\r\n const barContainerTopOffset = result($barContainer.offset(), 'top', 0);\r\n const style = { bottom: '0', left: 0 };\r\n const shellWidth = $(shellSelector).width();\r\n const pageWidth = $(pageContainer).width();\r\n let bottom = 0;\r\n if (shellWidth < pageWidth) {\r\n bottom = -16;\r\n }\r\n\r\n if (barContainerTopOffset > windowHeight) {\r\n const left = result($other.offset(), 'left');\r\n extend(style, {\r\n position: 'fixed',\r\n transform: `translate(${left}px, ${bottom}px)`,\r\n });\r\n } else {\r\n const left = $freezing.width();\r\n extend(style, {\r\n position: 'relative',\r\n transform: `translate(${left}px, 0)`,\r\n });\r\n }\r\n\r\n getBarParent().css(style);\r\n }\r\n\r\n function calculateOtherHorizontalOffset() {\r\n const left = getBarParent().scrollLeft();\r\n setHorizontalOffset(left);\r\n setOverlapClass(left > 0);\r\n\r\n if (scrollElementSelector) {\r\n const scrollElement = $(scrollElementSelector);\r\n scrollElement.css('transform', `translate(${-(left - prevOffsetWillEditing)}px, 0)`);\r\n }\r\n }\r\n\r\n\r\n function calculateFocusElementOffset(e) {\r\n delay(() => {\r\n const childElement = $(e.target).closest(cellSelector);\r\n const parentElement = childElement.closest(otherGroupSelector);\r\n const cRect = childElement[0].getBoundingClientRect();\r\n const pRect = parentElement[0].getBoundingClientRect();\r\n\r\n // [x]{[ ][ ][ ]} the focused cell is left of the parent view. Scroll to right\r\n // {[ ][ ][ ]}[x] the focused cell is left of the parent view. Scroll to left\r\n // {[ ][x][ ][ ]} the focused cell is inside of the parent view. No need scroll\r\n let offsetDelta;\r\n if (cRect.left < pRect.left) {\r\n offsetDelta = cRect.left - pRect.left;\r\n } else if (cRect.left + cRect.width > pRect.left + pRect.width) {\r\n offsetDelta = (cRect.left + cRect.width) - (pRect.left + pRect.width);\r\n } else {\r\n offsetDelta = 0;\r\n }\r\n setHorizontalOffset(prevOffset + offsetDelta, true);\r\n }, 50);\r\n }\r\n\r\n // This event can be triggered by Tab key\r\n // Need handle scroll event\r\n // Since the scroll event does not bubble up, need bind the event on the element directly\r\n function addScrollRowEvent() {\r\n const otherGroupElements = gridView.$(otherGroupSelector).toArray();\r\n each(otherGroupElements, (el) => {\r\n const scrollEvent = result($._data(el, 'events'), 'scroll');\r\n if (isUndefined(scrollEvent)) {\r\n $(el).on('scroll', scrollOtherGroupToLeft);\r\n }\r\n });\r\n\r\n const focusElements = gridView.$(`${otherGroupSelector} a, ${otherGroupSelector} [tabindex=0]`).toArray();\r\n each(focusElements, (el) => {\r\n const scrollEvent = result($._data(el, 'events'), 'focus');\r\n if (isUndefined(scrollEvent)) {\r\n $(el).on('focus', calculateFocusElementOffset);\r\n }\r\n });\r\n }\r\n\r\n function horizontalScrollHandler(e) {\r\n const isMouseInside = $(e.target).parents(`${otherGroupSelector}, ${freezingGroupSelector}`).length > 0;\r\n const isShowScrollbar = getBarParent().css('opacity') === '1';\r\n\r\n if (!isMouseInside || !isShowScrollbar) return;\r\n\r\n let offset;\r\n if (e.shiftKey) {\r\n offset = prevOffset + e.originalEvent.deltaY;\r\n } else if (Math.abs(e.originalEvent.deltaX) > 0) {\r\n offset = prevOffset + e.originalEvent.deltaX;\r\n } else {\r\n return;\r\n }\r\n\r\n const cWidth = $(otherSelector).width();\r\n const pWidth = $(otherGroupSelector).width();\r\n offset = Math.max(0, offset);\r\n offset = Math.min(cWidth - pWidth, offset);\r\n\r\n setHorizontalOffset(offset);\r\n e.preventDefault();\r\n }\r\n\r\n function addHorizontalScrollEvent() {\r\n const el = document.querySelector(tableSelector);\r\n if (el) {\r\n const scrollEvent = result($._data(el, 'events'), 'wheel');\r\n if (isUndefined(scrollEvent)) {\r\n $(el).on('wheel', horizontalScrollHandler);\r\n }\r\n }\r\n }\r\n\r\n // Add Scrollbar View into the grid footer\r\n const scrollbarView = new ScrollbarView({\r\n freezingSelector,\r\n otherSelector,\r\n scrollbarParentSelector,\r\n calculateOtherHorizontalOffset,\r\n }).render();\r\n\r\n gridView.prependFootRows([{\r\n classes: ['noborder', 'scrollbar'],\r\n view: scrollbarView,\r\n }]);\r\n\r\n // Listen event\r\n gridView.on('didUpdate', () => {\r\n calculateParentWidth();\r\n calculateChildWidth();\r\n calculateShowOrHide();\r\n calculateScrollbarPosition();\r\n });\r\n\r\n gridView.on('didRedrawHeader', () => {\r\n setHorizontalOffset(prevOffset);\r\n });\r\n\r\n gridView.on('didRedrawFooter', () => {\r\n setHorizontalOffset(prevOffset);\r\n });\r\n\r\n // grid body did redraw\r\n const lazyAddScrollRowEvent = debounce(addScrollRowEvent, 500);\r\n gridView.on('didRedrawBody', () => {\r\n setHorizontalOffset(prevOffset);\r\n lazyAddScrollRowEvent();\r\n addHorizontalScrollEvent();\r\n });\r\n\r\n // save the offset. this value will help to scroll the inline editing popup\r\n gridView.on('willEdit', () => {\r\n prevOffsetWillEditing = getBarParent().scrollLeft();\r\n });\r\n gridView.on('willShowLabelsPopup', () => {\r\n prevOffsetWillEditing = getBarParent().scrollLeft();\r\n });\r\n\r\n // scroll the vertical scrollbar\r\n const lazycalculateScrollbarPosition = debounce(calculateScrollbarPosition, 100);\r\n $(pageContainer).scroll(() => {\r\n lazycalculateScrollbarPosition();\r\n });\r\n\r\n // scroll horzatial bar of page container's parent\r\n $(pageContainer).parent().on('scroll', () => {\r\n lazycalculateScrollbarPosition();\r\n });\r\n\r\n // TODO remove event handler when the gridview was destroyed.\r\n // Resize the able-page-container.\r\n // can be triggered by resizing window, expand/collapse table, hide/show main menu.\r\n const lazyResizeCalculate = debounce(() => {\r\n calculateParentWidth();\r\n calculateChildWidth();\r\n calculateShowOrHide();\r\n }, 100);\r\n\r\n if (has(window, 'ResizeObserver')) {\r\n new ResizeObserver(lazyResizeCalculate).observe(document.querySelector(pageContainer));\r\n } else {\r\n new ResizeObserverPollyFill(lazyResizeCalculate).observe(document.querySelector(pageContainer));\r\n }\r\n});\r\n","export const OccasionI18nKeys = {\r\n None: _TL_('None'),\r\n BackToSchool: _TL_('Back to School'),\r\n BlackFriday: _TL_('Black Friday'),\r\n BoxingDay: _TL_('Boxing Day'),\r\n Carnival: _TL_('Carnival'),\r\n ChineseNewYear: _TL_('Chinese New Year'),\r\n Christmas: _TL_('Christmas'),\r\n CyberMonday: _TL_('Cyber Monday'),\r\n Diwali: _TL_('Diwali'),\r\n Easter: _TL_('Easter'),\r\n EidAlAdha: _TL_('Eid al-Adha'),\r\n EidAlFitr: _TL_('Eid al-Fitr'),\r\n EndOfSeason: _TL_('End of Season'),\r\n Epiphany: _TL_('Epiphany'),\r\n FallSale: _TL_('Fall Sale'),\r\n FathersDay: _TL_(\"Father's Day\"),\r\n Halloween: _TL_('Halloween'),\r\n Hanukkah: _TL_('Hanukkah'),\r\n Holi: _TL_('Holi'),\r\n IndependenceDay: _TL_('Independence Day'),\r\n LaborDay: _TL_('Labor Day'),\r\n MothersDay: _TL_(\"Mother's Day\"),\r\n NationalDay: _TL_('National Day'),\r\n Navratri: _TL_('Navratri'),\r\n NewYears: _TL_(\"New Year's\"),\r\n ParentsDay: _TL_(\"Parent's Day\"),\r\n Passover: _TL_('Passover'),\r\n Ramadan: _TL_('Ramadan'),\r\n RoshHashanah: _TL_('Rosh Hashanah'),\r\n SinglesDay: _TL_(\"Single's Day\"),\r\n Songkran: _TL_('Songkran'),\r\n SpringSale: _TL_('Spring Sale'),\r\n StNicholasDay: _TL_('St. Nicholas Day'),\r\n SummerSale: _TL_('Summer Sale'),\r\n ValentinesDay: _TL_(\"Valentine's Day\"),\r\n WinterSale: _TL_('Winter Sale'),\r\n WomensDay: _TL_(\"Women's Day\"),\r\n YearEndGift: _TL_('Year-End Gift'),\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Select } from '@bingads-webui-react/primitive';\r\nimport { Alert } from '@bingads-webui-react/alert';\r\nimport { OccasionI18nKeys } from '../i18n/occasion-i18n-keys';\r\n\r\nconst OCCASION_HINT = _TL_('After choosing an occasion from the list, be sure to set your promotion extension’s Start date and End date below Selected days and hours. Otherwise, the promotion extension will serve every year during the occasion’s predefined date range. Please note that your promotion extension will show continuously if you set the occasion to None and don’t enter the Start date and End date. Learn more');\r\n\r\nexport function OccasionSelect({\r\n className, id, onChange, value: selected, i18n,\r\n}) {\r\n const [selectedOccasion, setSelectedOccasion] = useState(selected);\r\n\r\n return (\r\n \r\n {\r\n const occasion = event.target.value;\r\n setSelectedOccasion(occasion);\r\n onChange(occasion);\r\n }}\r\n >\r\n {_.pairs(OccasionI18nKeys).map(([key, value]) =>\r\n (\r\n \r\n ))}\r\n \r\n )}\r\n dismissible={false}\r\n />\r\n \r\n );\r\n}\r\n\r\nOccasionSelect.propTypes = {\r\n id: PropTypes.string,\r\n className: PropTypes.string.isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n value: PropTypes.string,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n};\r\n\r\nOccasionSelect.defaultProps = {\r\n id: undefined,\r\n value: 'None',\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Select } from '@bingads-webui-react/primitive';\r\nimport { globalizationModelSetup } from '@bingads-webui-campaign/ads-globalization';\r\n\r\nconst CURRENCY_STRINGS = {\r\n ALL: _TL_('ALL'),\r\n AED: _TL_('AED'),\r\n ARS: _TL_('ARS'),\r\n AUD: _TL_('AUD'),\r\n BAM: _TL_('BAM'),\r\n BRL: _TL_('BRL'),\r\n CAD: _TL_('CAD'),\r\n CHF: _TL_('CHF'),\r\n CLP: _TL_('CLP'),\r\n CNY: _TL_('CNY'),\r\n COP: _TL_('COP'),\r\n DKK: _TL_('DKK'),\r\n EUR: _TL_('EUR'),\r\n GBP: _TL_('GBP'),\r\n HKD: _TL_('HKD'),\r\n IDR: _TL_('IDR'),\r\n ILS: _TL_('ILS'),\r\n INR: _TL_('INR'),\r\n ISK: _TL_('ISK'),\r\n JPY: _TL_('JPY'),\r\n MKD: _TL_('MKD'),\r\n MXN: _TL_('MXN'),\r\n MYR: _TL_('MYR'),\r\n NGN: _TL_('NGN'),\r\n NZD: _TL_('NZD'),\r\n PEN: _TL_('PEN'),\r\n PHP: _TL_('PHP'),\r\n PLN: _TL_('PLN'),\r\n RSD: _TL_('RSD'),\r\n SAR: _TL_('SAR'),\r\n SEK: _TL_('SEK'),\r\n SGD: _TL_('SGD'),\r\n THB: _TL_('THB'),\r\n TRY: _TL_('TRY'),\r\n TWD: _TL_('TWD'),\r\n USD: _TL_('USD'),\r\n VEF: _TL_('VEF'),\r\n VND: _TL_('VND'),\r\n ZAR: _TL_('ZAR'),\r\n};\r\n\r\nconst pickCurrencies = currencies =>\r\n _.chain(currencies)\r\n .reduce((memo, currency) => {\r\n const outMemo = memo;\r\n outMemo[currency] = CURRENCY_STRINGS[currency];\r\n return outMemo;\r\n }, {})\r\n .pairs()\r\n .value(); // [ [currency, currencyString], ... ]\r\n\r\nexport function CurrencySelect({\r\n className, id, onChange, value: selected, i18n, permissions,\r\n}) {\r\n const { CURRENCIES } = globalizationModelSetup({\r\n permissions,\r\n culture: i18n.getLocale(),\r\n });\r\n const currencies = pickCurrencies(CURRENCIES);\r\n const [selectedCurrency, setSelectedCurrency] = useState(selected);\r\n\r\n return (\r\n {\r\n const language = event.target.value;\r\n setSelectedCurrency(language);\r\n onChange(language);\r\n }}\r\n >\r\n {currencies.map(([key, value]) =>\r\n (\r\n \r\n ))}\r\n \r\n );\r\n}\r\n\r\nCurrencySelect.propTypes = {\r\n id: PropTypes.string,\r\n className: PropTypes.string.isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n value: PropTypes.string,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n permissions: PropTypes.shape({}).isRequired,\r\n};\r\n\r\nCurrencySelect.defaultProps = {\r\n id: undefined,\r\n value: 'USD',\r\n};\r\n","export const promotionTypesMap = {\r\n MonetaryDiscount: 'MonetaryDiscount',\r\n PercentDiscount: 'PercentDiscount',\r\n UptoMonetaryDiscount: 'UptoMonetaryDiscount',\r\n UptoPercentDiscount: 'UptoPercentDiscount',\r\n};\r\n\r\nconst discountModifierMap = {\r\n UpTo: 'UpTo', // 1\r\n None: 'None', // 2\r\n};\r\n\r\nexport function getPromotionTypeForModel(model) {\r\n let promotionType;\r\n if (model.MoneyAmountOff !== null) {\r\n if (model.DiscountModifier === discountModifierMap.UpTo) {\r\n promotionType = promotionTypesMap.UptoMonetaryDiscount;\r\n } else {\r\n promotionType = promotionTypesMap.MonetaryDiscount;\r\n }\r\n } else if (model.PercentOff !== null) {\r\n if (model.DiscountModifier === discountModifierMap.UpTo) {\r\n promotionType = promotionTypesMap.UptoPercentDiscount;\r\n } else {\r\n promotionType = promotionTypesMap.PercentDiscount;\r\n }\r\n } else {\r\n promotionType = promotionTypesMap.MonetaryDiscount;\r\n }\r\n\r\n return promotionType;\r\n}\r\n\r\nexport const isMonetary = promotionType =>\r\n promotionType === promotionTypesMap.MonetaryDiscount ||\r\n promotionType === promotionTypesMap.UptoMonetaryDiscount;\r\n\r\nconst isUpTo = promotionType =>\r\n promotionType === promotionTypesMap.UptoMonetaryDiscount ||\r\n promotionType === promotionTypesMap.UptoPercentDiscount;\r\n\r\nexport const cleanPromotionTypeData = (promotionType, model) => ({\r\n DiscountModifier: isUpTo(promotionType) ?\r\n discountModifierMap.UpTo :\r\n discountModifierMap.None,\r\n MoneyAmountOff: isMonetary(promotionType) ? model.MoneyAmountOff : null,\r\n PercentOff: isMonetary(promotionType) ? null : model.PercentOff,\r\n});\r\n","import _ from 'underscore';\r\nimport React, { useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport { cloneDeep } from '@bingads-webui-universal/primitive-utilities';\r\nimport { Select } from '@bingads-webui-react/primitive';\r\nimport { ValidationGroup } from '@bingads-webui-react/primitive-validation';\r\nimport { PromotionAdExtension } from '@bingads-webui-campaign/campaign-ui-schemas';\r\nimport { InputWithExtra } from '@bingads-webui-campaign/ad-extensions-shared';\r\nimport {\r\n promotionTypesMap, isMonetary, getPromotionTypeForModel, cleanPromotionTypeData,\r\n} from '../rules/promotion-type';\r\n\r\nconst promotionTypes = {\r\n [promotionTypesMap.MonetaryDiscount]: _TL_('Monetary discount'),\r\n [promotionTypesMap.PercentDiscount]: _TL_('Percent discount'),\r\n [promotionTypesMap.UptoMonetaryDiscount]: _TL_('Up to monetary discount'),\r\n [promotionTypesMap.UptoPercentDiscount]: _TL_('Up to percent discount'),\r\n};\r\n\r\nfunction PromotionTypeSelect({\r\n className, id, onChange, value: selected, i18n,\r\n}) {\r\n const [selectedPromotionType, setSelectedPromotionType] = useState(selected);\r\n\r\n return (\r\n {\r\n const language = event.target.value;\r\n setSelectedPromotionType(language);\r\n onChange(language);\r\n }}\r\n >\r\n {_.pairs(promotionTypes).map(([key, value]) =>\r\n (\r\n \r\n ))}\r\n \r\n );\r\n}\r\n\r\nPromotionTypeSelect.propTypes = {\r\n id: PropTypes.string,\r\n className: PropTypes.string.isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n value: PropTypes.string,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n};\r\n\r\nPromotionTypeSelect.defaultProps = {\r\n id: undefined,\r\n value: promotionTypesMap.MonetaryDiscount,\r\n};\r\n\r\nconst SubSchema = cloneDeep({\r\n properties: {\r\n ..._.pick(PromotionAdExtension.properties, 'DiscountModifier', 'MoneyAmountOff', 'PercentOff'),\r\n },\r\n});\r\n\r\nconst Schema = (promotionType) => {\r\n const schema = cloneDeep(SubSchema);\r\n\r\n schema.properties.MoneyAmountOff.required = isMonetary(promotionType);\r\n schema.properties.PercentOff.required = !isMonetary(promotionType);\r\n\r\n return schema;\r\n};\r\n\r\nexport function PromotionType({\r\n value, onChange, i18n, legacyI18n, id, promotionTypeSelectClassName,\r\n inputContainerClass, inputClass, inputExtraClass,\r\n}) {\r\n const [promotionType, setPromotionType] = useState(getPromotionTypeForModel(value));\r\n const [data, setData] =\r\n useState({ ...cleanPromotionTypeData(promotionType, value), promotionType });\r\n const [schema, setSchema] = useState(Schema(promotionType));\r\n\r\n const onPromotionTypeChange = (newPromotionType) => {\r\n setData((currentData) => {\r\n const mergedData = {\r\n ...currentData,\r\n ...cleanPromotionTypeData(newPromotionType, currentData),\r\n // Injecting UI state to help interconnected components, e.g. Currency\r\n promotionType: newPromotionType,\r\n };\r\n setPromotionType(newPromotionType);\r\n setSchema(Schema(newPromotionType));\r\n onChange(mergedData);\r\n return mergedData;\r\n });\r\n };\r\n\r\n const onValidate = ({ data: newData }) => {\r\n setData((currentData) => {\r\n const mergedData = { ...currentData, ...newData };\r\n onChange(mergedData);\r\n return mergedData;\r\n });\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n {isMonetary(promotionType) &&\r\n {value.CurrencyCode}}\r\n />\r\n }\r\n {!isMonetary(promotionType) &&\r\n %}\r\n />\r\n }\r\n \r\n \r\n );\r\n}\r\n\r\nPromotionType.propTypes = {\r\n id: PropTypes.string.isRequired,\r\n promotionTypeSelectClassName: PropTypes.string.isRequired,\r\n inputContainerClass: PropTypes.string.isRequired,\r\n inputClass: PropTypes.string.isRequired,\r\n inputExtraClass: PropTypes.string.isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n value: PropTypes.shape({}),\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n legacyI18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n};\r\n\r\nPromotionType.defaultProps = {\r\n value: undefined,\r\n};\r\n","import {\r\n flexibleGrid, flexibleGridColumn,\r\n flexibleGridRows, flexibleGridColumnSpan,\r\n} from '@bingads-webui-campaign-react/flexible-grid-styles';\r\nimport { legacySchedulingPanelStyles } from '@bingads-webui-campaign/ad-extensions-shared';\r\n\r\nconst FIELDS_COLUMN_WIDTH_PX = 383;\r\nconst SCHEDULING_EXTRA_COLUMN_WIDTH_PX = 490 - FIELDS_COLUMN_WIDTH_PX;\r\n\r\nconst genericFieldLabel = {\r\n display: 'flex',\r\n justifyContent: 'flex-start',\r\n textAlign: 'left',\r\n alignItems: 'baseline',\r\n marginBottom: '5px',\r\n};\r\n\r\nconst genericEditorField = {\r\n marginBottom: '28px',\r\n};\r\n\r\nexport const getPromotionExtensionEditorStyles =\r\n (components, theme = { palette: {} }) => ({\r\n outerGrid: {\r\n extend: flexibleGrid(),\r\n '-ms-grid-columns': `8px ${FIELDS_COLUMN_WIDTH_PX}px ${SCHEDULING_EXTRA_COLUMN_WIDTH_PX}px 60px 458px 8px`,\r\n gridTemplateColumns: `8px ${FIELDS_COLUMN_WIDTH_PX}px ${SCHEDULING_EXTRA_COLUMN_WIDTH_PX}px 60px 458px 8px`,\r\n },\r\n\r\n outerGridWithOneColumn: {\r\n extend: flexibleGrid(),\r\n '-ms-grid-columns': `8px ${FIELDS_COLUMN_WIDTH_PX}px ${SCHEDULING_EXTRA_COLUMN_WIDTH_PX}px 8px`,\r\n gridTemplateColumns: `8px ${FIELDS_COLUMN_WIDTH_PX}px ${SCHEDULING_EXTRA_COLUMN_WIDTH_PX}px 8px`,\r\n },\r\n\r\n ...flexibleGridRows(false, 'outerGrid', 1),\r\n\r\n editorFieldsColumn: {\r\n extend: flexibleGridColumn(2),\r\n },\r\n\r\n previewColumn: {\r\n extend: flexibleGridColumn(4),\r\n },\r\n\r\n fieldsGrid: {\r\n extend: flexibleGrid(),\r\n '-ms-grid-columns': '100%',\r\n gridTemplateColumns: '100%',\r\n },\r\n\r\n ...flexibleGridRows(false, 'fieldsGrid', 30),\r\n\r\n languageAndCurrencyGrid: {\r\n extend: flexibleGrid(),\r\n '-ms-grid-columns': '257px 16px 110px',\r\n gridTemplateColumns: '257px 16px 110px',\r\n },\r\n\r\n ...flexibleGridRows(false, 'languageAndCurrencyGrid', 2),\r\n\r\n currencyFieldLabel: {\r\n extend: [genericFieldLabel, flexibleGridColumn(3)],\r\n },\r\n\r\n currencyEditorField: {\r\n extend: [genericEditorField, flexibleGridColumn(3)],\r\n },\r\n\r\n editorFieldLabel: {\r\n extend: [genericFieldLabel, flexibleGridColumn(1)],\r\n },\r\n\r\n editorField: {\r\n extend: [genericEditorField, flexibleGridColumn(1)],\r\n },\r\n\r\n editorFieldNoMargin: {\r\n extend: flexibleGridColumn(1),\r\n },\r\n\r\n occasionSelect: {\r\n marginBottom: '9px',\r\n\r\n '& ~ .alert.alert-info[role=alert]': {\r\n display: 'flex',\r\n width: 'initial',\r\n paddingRight: '8px',\r\n },\r\n },\r\n\r\n alert: {\r\n '& .alert.alert-info[role=alert]': {\r\n display: 'flex',\r\n },\r\n marginBottom: '9px',\r\n },\r\n\r\n startAndEndDateContainer: {\r\n display: 'flex',\r\n },\r\n\r\n startAndEndDatePicker: {\r\n flexGrow: 1,\r\n },\r\n\r\n startAndEndDateSeparator: {\r\n padding: [[0, 8]],\r\n alignSelf: 'center',\r\n },\r\n\r\n promotionTypeAndDetailSelect: {\r\n },\r\n\r\n typeInputContainer: {\r\n display: 'flex',\r\n marginTop: '16px',\r\n },\r\n\r\n typeInput: {\r\n width: '152px',\r\n },\r\n\r\n typeInputExtraExtra: {\r\n alignSelf: 'center',\r\n marginLeft: '8px',\r\n },\r\n\r\n urlContainer: {\r\n display: 'flex',\r\n },\r\n\r\n urlProtocolSelect: {\r\n width: 'auto',\r\n marginRight: '10px',\r\n },\r\n\r\n collapsiblePanel: {\r\n extend: flexibleGridColumn(1),\r\n\r\n border: 'none',\r\n marginBottom: '28px',\r\n\r\n '& .panel-heading': {\r\n padding: 0,\r\n borderBottom: 'none',\r\n\r\n '& .panel-title': {\r\n fontSize: 14,\r\n '& > a': {\r\n marginLeft: '-8px', // compensate 8px padding on the left of icon\r\n color: theme.palette.themePrimary,\r\n padding: 0,\r\n '&:hover, &:active': {\r\n color: theme.palette.themeDarker,\r\n textTecoration: 'none',\r\n backgroundColor: 'unset',\r\n },\r\n },\r\n\r\n '& > a:after': {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n padding: '0px 8px',\r\n content: '\"\\\\E96E\"',\r\n },\r\n\r\n // Reversing transformation after changing the\r\n // glyphicon to the one used in legacy code\r\n '& a[aria-expanded=\"true\"]:after': {\r\n transform: 'rotate(180deg)',\r\n transformOrigin: 'center center',\r\n transition: 'transform 0.1s linear',\r\n },\r\n\r\n '& a.collapsed:after': {\r\n transform: 'unset',\r\n transformOrigin: 'unset',\r\n transition: 'unset',\r\n },\r\n },\r\n },\r\n\r\n '& .panel-collapse': {\r\n marginTop: 20,\r\n\r\n '& .panel-body': {\r\n padding: 0,\r\n overflow: 'hidden',\r\n },\r\n },\r\n },\r\n\r\n schedulingPanel: {\r\n extend: flexibleGridColumn(1),\r\n\r\n ...legacySchedulingPanelStyles(components, theme),\r\n },\r\n\r\n notices: {\r\n extend: flexibleGridColumnSpan(2),\r\n\r\n '& .alert.alert-info[role=alert]': {\r\n width: 'unset',\r\n },\r\n },\r\n\r\n editorButtonGroup: {\r\n extend: flexibleGridColumn(1),\r\n marginTop: '20px',\r\n\r\n '& button ~ button': {\r\n marginLeft: '16px',\r\n },\r\n },\r\n\r\n errors: {\r\n '& [role=alert]': {\r\n marginBottom: 18,\r\n\r\n '& .error a': {\r\n color: '#D90026',\r\n },\r\n },\r\n },\r\n });\r\n","export const promotionDetailTypesMap = {\r\n None: 'None',\r\n OnOrdersOver: 'OnOrdersOver',\r\n PromotionCode: 'PromotionCode',\r\n};\r\n\r\nexport function getPromotionDetailTypeForModel(model) {\r\n let promotionDetailType;\r\n if (model.PromotionCode !== null) {\r\n promotionDetailType = promotionDetailTypesMap.PromotionCode;\r\n } else if (model.OrdersOverAmount !== null) {\r\n promotionDetailType = promotionDetailTypesMap.OnOrdersOver;\r\n } else {\r\n promotionDetailType = promotionDetailTypesMap.None;\r\n }\r\n\r\n return promotionDetailType;\r\n}\r\n\r\nexport const isPromotionCode = promotionDetailType =>\r\n promotionDetailType === promotionDetailTypesMap.PromotionCode;\r\n\r\nexport const isOnOrdersOver = promotionDetailType =>\r\n promotionDetailType === promotionDetailTypesMap.OnOrdersOver;\r\n\r\nexport const cleanPromotionDetailTypeData = (promotionDetailType, model) => ({\r\n PromotionCode: isPromotionCode(promotionDetailType) ? model.PromotionCode : null,\r\n OrdersOverAmount: isOnOrdersOver(promotionDetailType) ? model.OrdersOverAmount : null,\r\n});\r\n","import _ from 'underscore';\r\nimport React, { useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport { cloneDeep } from '@bingads-webui-universal/primitive-utilities';\r\nimport { Select } from '@bingads-webui-react/primitive';\r\nimport { ValidationGroup } from '@bingads-webui-react/primitive-validation';\r\nimport { PromotionAdExtension } from '@bingads-webui-campaign/campaign-ui-schemas';\r\nimport { InputWithExtra } from '@bingads-webui-campaign/ad-extensions-shared';\r\nimport {\r\n promotionDetailTypesMap, isPromotionCode, isOnOrdersOver, getPromotionDetailTypeForModel,\r\n cleanPromotionDetailTypeData,\r\n} from '../rules/promotion-detail';\r\n\r\nconst promotionDetailTypes = {\r\n [promotionDetailTypesMap.None]: _TL_('None'),\r\n [promotionDetailTypesMap.OnOrdersOver]: _TL_('On orders over'),\r\n [promotionDetailTypesMap.PromotionCode]: _TL_('Promotion code'),\r\n};\r\n\r\nfunction PromotionDetailSelect({\r\n className, id, onChange, value: selected, i18n,\r\n}) {\r\n const [selectedPromotionDetailType, setSelectedPromotionDetailType] = useState(selected);\r\n\r\n return (\r\n {\r\n const { value } = event.target;\r\n setSelectedPromotionDetailType(value);\r\n onChange(value);\r\n }}\r\n >\r\n {_.pairs(promotionDetailTypes).map(([key, value]) =>\r\n (\r\n \r\n ))}\r\n \r\n );\r\n}\r\n\r\nPromotionDetailSelect.propTypes = {\r\n id: PropTypes.string,\r\n className: PropTypes.string.isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n value: PropTypes.string,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n};\r\n\r\nPromotionDetailSelect.defaultProps = {\r\n id: undefined,\r\n value: 'None',\r\n};\r\n\r\nconst SubSchema = cloneDeep({\r\n properties: {\r\n ..._.pick(PromotionAdExtension.properties, 'PromotionCode', 'OrdersOverAmount'),\r\n },\r\n});\r\n\r\nconst Schema = (promotionDetailType) => {\r\n const schema = cloneDeep(SubSchema);\r\n\r\n schema.properties.PromotionCode.required = isPromotionCode(promotionDetailType);\r\n schema.properties.OrdersOverAmount.required = isOnOrdersOver(promotionDetailType);\r\n\r\n return schema;\r\n};\r\n\r\nexport function PromotionDetail({\r\n value, onChange, i18n, legacyI18n, id, promotionDetailTypeSelectClassName,\r\n inputContainerClass, inputClass, inputExtraClass,\r\n}) {\r\n const [promotionDetailType, setPromotionDetailType]\r\n = useState(getPromotionDetailTypeForModel(value));\r\n const [data, setData] =\r\n useState({ ...cleanPromotionDetailTypeData(promotionDetailType, value), promotionDetailType });\r\n const [schema, setSchema] = useState(Schema(promotionDetailType));\r\n\r\n const onPromotionDetailTypeChange = (newPromotionDetailType) => {\r\n setData((currentData) => {\r\n const mergedData = {\r\n ...currentData,\r\n ...cleanPromotionDetailTypeData(newPromotionDetailType, currentData),\r\n // Injecting UI state to help interconnected components, e.g. Currency\r\n promotionDetailType: newPromotionDetailType,\r\n };\r\n setPromotionDetailType(newPromotionDetailType);\r\n setSchema(Schema(newPromotionDetailType));\r\n onChange(mergedData);\r\n return mergedData;\r\n });\r\n };\r\n\r\n const onValidate = ({ data: newData }) => {\r\n setData((currentData) => {\r\n const mergedData = { ...currentData, ...newData };\r\n onChange(mergedData);\r\n return mergedData;\r\n });\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n {isPromotionCode(promotionDetailType) &&\r\n { }}\r\n />\r\n }\r\n {isOnOrdersOver(promotionDetailType) &&\r\n {value.CurrencyCode}}\r\n />\r\n }\r\n \r\n \r\n );\r\n}\r\n\r\nPromotionDetail.propTypes = {\r\n id: PropTypes.string.isRequired,\r\n promotionDetailTypeSelectClassName: PropTypes.string.isRequired,\r\n inputContainerClass: PropTypes.string.isRequired,\r\n inputClass: PropTypes.string.isRequired,\r\n inputExtraClass: PropTypes.string.isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n value: PropTypes.shape({}),\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n legacyI18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n};\r\n\r\nPromotionDetail.defaultProps = {\r\n value: undefined,\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useState, useEffect, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withCustomValidation, withError } from '@bingads-webui-react/validation';\r\nimport { KendoStringDatePicker } from '@bingads-webui-react/kendo-date-picker';\r\n\r\nconst dateMethodOptions = {\r\n raw: 'yyyy-MM-dd',\r\n};\r\n\r\nconst StartAndEndDate = React.memo(({\r\n value, onChange, i18n, id, className, updateValidation,\r\n startDateClassName, endDateClassName, startAndEndDateSeparator,\r\n}) => {\r\n const [startDate, setStartDate] = useState(value.PromotionStartDate);\r\n const [endDate, setEndDate] = useState(value.PromotionEndDate);\r\n const [isPromotionStartDateInvalid, setIsPromotionStartDateInvalid] = useState(false);\r\n const [isPromotionEndDateInvalid, setIsPromotionEndDateInvalid] = useState(false);\r\n\r\n const validate = useCallback(() => {\r\n const startDateObject =\r\n (startDate && i18n.parseDate(startDate.substr(0, 10), dateMethodOptions)) ||\r\n startDate;\r\n const endDateObject =\r\n (endDate && i18n.parseDate(endDate.substr(0, 10), dateMethodOptions)) ||\r\n endDate;\r\n\r\n const messages = [];\r\n\r\n if (endDateObject && startDateObject && startDateObject > endDateObject) {\r\n messages.push(i18n.getString(_TL_('End date cannot be earlier than start date')));\r\n }\r\n\r\n // Raw date is non-empty string instead of Date object if invalid date entered.\r\n if (isPromotionStartDateInvalid || (!_.isEmpty(startDate) && startDateObject === null)) {\r\n messages.push(i18n.getString(_TL_('Invalid start date')));\r\n }\r\n\r\n if (isPromotionEndDateInvalid || (!_.isEmpty(endDate) && endDateObject === null)) {\r\n messages.push(i18n.getString(_TL_('Invalid end date')));\r\n }\r\n\r\n return messages;\r\n }, [startDate, endDate, i18n, isPromotionStartDateInvalid, isPromotionEndDateInvalid]);\r\n\r\n useEffect(() => {\r\n setStartDate(value.PromotionStartDate);\r\n setEndDate(value.PromotionEndDate);\r\n }, [value.PromotionStartDate, value.PromotionEndDate]);\r\n\r\n useEffect(() => {\r\n const errorMessages = validate();\r\n updateValidation(errorMessages);\r\n }, [startDate, endDate, validate, updateValidation]);\r\n\r\n useEffect(() => {\r\n onChange({ PromotionStartDate: startDate, PromotionEndDate: endDate });\r\n }, [onChange, startDate, endDate]);\r\n\r\n const onStartTimeChange = useCallback((PromotionStartDate) => {\r\n setStartDate(PromotionStartDate);\r\n setIsPromotionStartDateInvalid(false);\r\n }, []);\r\n\r\n const onEndTimeChange = useCallback((PromotionEndDate) => {\r\n setEndDate(PromotionEndDate);\r\n setIsPromotionEndDateInvalid(false);\r\n }, []);\r\n\r\n const onStartTimeError = useCallback((/* error */) => {\r\n setStartDate(undefined);\r\n setIsPromotionStartDateInvalid(true);\r\n }, []);\r\n\r\n const onEndTimeError = useCallback((/* error */) => {\r\n setEndDate(undefined);\r\n setIsPromotionEndDateInvalid(true);\r\n }, []);\r\n\r\n const usedStartTime = startDate ? startDate.substr(0, 10) : startDate;\r\n const usedEndTime = endDate ? endDate.substr(0, 10) : endDate;\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// eslint-disable-next-line max-len\r\n}, (prevProps, nextProps) => prevProps.value.PromotionStartDate === nextProps.value.PromotionStartDate\r\n && prevProps.value.PromotionEndDate === nextProps.value.PromotionEndDate);\r\n\r\nStartAndEndDate.propTypes = {\r\n id: PropTypes.string.isRequired,\r\n className: PropTypes.string.isRequired,\r\n startDateClassName: PropTypes.string.isRequired,\r\n endDateClassName: PropTypes.string.isRequired,\r\n startAndEndDateSeparator: PropTypes.string.isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n value: PropTypes.shape({}),\r\n updateValidation: PropTypes.func.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n};\r\n\r\nStartAndEndDate.defaultProps = {\r\n value: undefined,\r\n};\r\n\r\nexport const StartAndEndDateWithValidation =\r\n withError(withCustomValidation(StartAndEndDate));\r\n","import { getPromotionTypeForModel, isMonetary } from './promotion-type';\r\nimport { getPromotionDetailTypeForModel, isOnOrdersOver } from './promotion-detail';\r\n\r\nexport const isCurrencyRequired = model =>\r\n (model.promotionType && isMonetary(model.promotionType)) ||\r\n (!model.promotionType && isMonetary(getPromotionTypeForModel(model))) ||\r\n (model.promotionDetailType && isOnOrdersOver(model.promotionDetailType)) ||\r\n (!model.promotionDetailType && isOnOrdersOver(getPromotionDetailTypeForModel(model)));\r\n","import _ from 'underscore';\r\nimport React, { useState, useMemo, useCallback } from 'react';\r\nimport { Panel } from 'react-bootstrap';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { withThemeFromProps } from '@bingads-webui-react/with-theme-from-props';\r\nimport { UiBlocker } from '@bingads-webui-react/ui-blocker';\r\nimport { withValidation, withError, GenericAdapter } from '@bingads-webui-react/validation';\r\nimport { Input, ValidationGroup } from '@bingads-webui-react/primitive-validation';\r\nimport { Button, Label } from '@bingads-webui-react/primitive';\r\nimport { HelpIcon } from '@bingads-webui-campaign-react/help';\r\nimport { Alert } from '@bingads-webui-react/alert';\r\nimport { PromotionAdExtension } from '@bingads-webui-campaign/campaign-ui-schemas';\r\nimport { ValidationStringMap } from '@bingads-webui/validation-string-map';\r\nimport { UpgradeUrlStringMap } from '@bingads-webui-campaign/upgrade-url-string-map';\r\nimport { buildLegacyI18n } from '@bingads-webui/build-legacy-i18n';\r\nimport { UrlEditorForArray } from '@bingads-webui-campaign-react/url-editor';\r\nimport {\r\n LanguageSelect as LanguageSelectPure,\r\n FinalUrlSuffix,\r\n TrackingTemplate,\r\n CustomParameters,\r\n buildSchedulingView,\r\n stringifyUnexpectedError,\r\n ErrorsContext,\r\n Errors,\r\n and, or, propertyIs, propertySuffixIs, isSchedulingError, unmappedError,\r\n} from '@bingads-webui-campaign/ad-extensions-shared';\r\nimport { getODataErrors } from '@bingads-webui-campaign/api-errors';\r\nimport { OccasionSelect as OccasionSelectPure } from './controls/occasion-select';\r\nimport { CurrencySelect as CurrencySelectPure } from './controls/currency-select';\r\nimport { PromotionType } from './controls/promotion-type';\r\nimport { getPromotionExtensionEditorStyles } from './promotion-extension-editor-style';\r\nimport { PromotionDetail } from './controls/promotion-detail';\r\nimport { StartAndEndDateWithValidation } from './controls/start-and-end-date';\r\nimport { isCurrencyRequired } from './rules/currency';\r\n\r\nconst GENERIC_ERROR = _TL_(\"We've encountered an error and can't continue. Please contact support for further assistance.\");\r\n\r\nconst OccasionSelect = withError(withValidation(OccasionSelectPure, GenericAdapter));\r\nconst LanguageSelect = withError(withValidation(LanguageSelectPure, GenericAdapter));\r\nconst CurrencySelect = withError(withValidation(CurrencySelectPure, GenericAdapter));\r\n\r\nconst whitelistedSchemaPropertyKeys = ['Id', 'Language', 'Occasion', 'DiscountModifier', 'MoneyAmountOff', 'PercentOff', 'OrdersOverAmount', 'PromotionCode', 'PromotionItem', 'PromotionStartDate', 'PromotionEndDate', 'FinalMobileUrls', 'FinalUrls', 'FinalUrlSuffix', 'TrackingUrlTemplate', 'UrlCustomParameters', 'Scheduling'];\r\n\r\nfunction cleanModel(rawModel) {\r\n const stage1 = _.pick(rawModel, [\r\n ...whitelistedSchemaPropertyKeys,\r\n ...(isCurrencyRequired(rawModel) ? ['CurrencyCode'] : []),\r\n ]);\r\n // Cleaning UrlCustomParameters of initial item added by validation\r\n // where both Key and Value are undefined.\r\n const customParameters = _.filter(\r\n stage1.UrlCustomParameters,\r\n item => !_.isEmpty(item.Key) || !_.isEmpty(item.Value)\r\n );\r\n return _.extend({}, stage1, { UrlCustomParameters: customParameters });\r\n}\r\n\r\nexport const PromotionExtensionEditor = ({\r\n classes,\r\n extension,\r\n i18n,\r\n legacyI18n: adExtI18n, // passed from legacy-ui, if needed\r\n data: {\r\n extension: repository,\r\n },\r\n instrumentation,\r\n onCreated,\r\n onUpdated,\r\n onCancel,\r\n permissions,\r\n deps: {\r\n SchedulingView: LegacySchedulingView,\r\n },\r\n}) => {\r\n const isEditing = extension && !!extension.Id;\r\n\r\n const { scenario } = useMemo(() => instrumentation.createScenarioAndActivity({\r\n scenarioName: 'PromotionAdExtensions',\r\n activityName: isEditing ? 'EditAdExtension' : 'CreateAdExtension',\r\n }), [instrumentation, isEditing]);\r\n\r\n const [isBlocking, setIsBlocking] = useState(false);\r\n const [isValid, setIsValid] = useState(false);\r\n const [formErrors, setFormErrors] = useState([]);\r\n\r\n const localLegacyI18n = useMemo(() =>\r\n (buildLegacyI18n(i18n, [ValidationStringMap, UpgradeUrlStringMap])), [i18n]);\r\n const SchedulingView =\r\n useMemo(() => buildSchedulingView(LegacySchedulingView), [LegacySchedulingView]);\r\n\r\n const { IsDomesticSimplifiedChineseEnabled } = permissions;\r\n\r\n const initialData = cleanModel({\r\n Language: IsDomesticSimplifiedChineseEnabled ? 'SimplifiedChinese' : 'English',\r\n Occasion: 'None',\r\n DiscountModifier: 'None',\r\n MoneyAmountOff: null,\r\n PercentOff: null,\r\n PromotionCode: null,\r\n OrdersOverAmount: null,\r\n FinalMobileUrls: [],\r\n FinalUrls: [],\r\n FinalAppUrls: [],\r\n UrlCustomParameters: [],\r\n ...extension,\r\n }, PromotionAdExtension);\r\n\r\n const urlOptionsExpandedInitially = !!(extension &&\r\n (extension.TrackingUrlTemplate ||\r\n extension.FinalUrlSuffix ||\r\n !_.isEmpty(extension.UrlCustomParameters)));\r\n\r\n const [data, setData] = useState(initialData);\r\n const [prevData, setPrevData] = useState(initialData);\r\n const [dirtyFieldsMap, setDirtyFieldsMap] = useState({});\r\n const [isFinalUrlSuffixValid, setIsFinalUrlSuffixValid] = useState(true);\r\n const [isCustomParametersValid, setIsCustomParametersValid] = useState(true);\r\n const [isScheduleValid, setIsScheduleValid] = useState(initialData);\r\n\r\n const hasNoChanges = useCallback(prop => () => !dirtyFieldsMap[prop], [dirtyFieldsMap]);\r\n\r\n const resetIsDirty = useCallback(() => {\r\n setDirtyFieldsMap({});\r\n }, []);\r\n\r\n const registerDataChange = useCallback((newData) => {\r\n _.each(newData, (value, key) => {\r\n if (key !== 'url' && !_.isEqual(_.result(prevData, key, null), _.result(newData, key, null))) {\r\n setDirtyFieldsMap({\r\n ...dirtyFieldsMap,\r\n [key]: true,\r\n });\r\n }\r\n });\r\n }, [prevData, dirtyFieldsMap]);\r\n\r\n const isCurrencyVisible = isCurrencyRequired(data);\r\n // If we for the first time enable currency field,\r\n // set the CurrencyCode to the default value\r\n if (isCurrencyVisible && !data.CurrencyCode) {\r\n setData(currentData => ({ ...currentData, CurrencyCode: 'USD' }));\r\n }\r\n\r\n const onValidate = useCallback(({ isValid: newIsValid, data: newData }) => {\r\n setIsValid(newIsValid);\r\n setData(currentData => ({ ...currentData, ...newData }));\r\n }, []);\r\n\r\n const onDataChange = useCallback((newData) => {\r\n registerDataChange(newData);\r\n setData(currentData => ({ ...currentData, ...newData }));\r\n }, [registerDataChange]);\r\n\r\n const onCustomParametersChange = useCallback(({ isValid: newIsValid, value }) => {\r\n setIsCustomParametersValid(newIsValid);\r\n onDataChange({ UrlCustomParameters: value });\r\n }, [onDataChange]);\r\n\r\n const onFinalUrlSuffixChange = useCallback(({ isValid: newIsValid, value }) => {\r\n setIsFinalUrlSuffixValid(newIsValid);\r\n onDataChange({ FinalUrlSuffix: value });\r\n }, [onDataChange]);\r\n\r\n const onScheduleChange = useCallback(({ isValid: newIsValid, value }) => {\r\n setIsScheduleValid(newIsValid);\r\n onDataChange({ Scheduling: value });\r\n }, [onDataChange]);\r\n\r\n const onSaveClicked = useCallback(() => {\r\n const saveActivity = scenario.createActivity('SaveAdExtension');\r\n saveActivity.start();\r\n\r\n setPrevData(data);\r\n\r\n setIsBlocking(true);\r\n repository\r\n .create(cleanModel(data))\r\n .then((newModel) => {\r\n saveActivity.stop(true);\r\n const callback = isEditing ? onUpdated : onCreated;\r\n callback(cleanModel(newModel));\r\n }, (errors) => {\r\n saveActivity.stop(false);\r\n let newFormErrors;\r\n if (_.isArray(errors.errors)) {\r\n newFormErrors = getODataErrors(errors.errors, i18n);\r\n } else if (errors instanceof repository.BadResponseError) {\r\n newFormErrors = [errors];\r\n } else if (_.isArray(errors)) {\r\n newFormErrors = errors;\r\n } else {\r\n saveActivity.error(`Unexpected error: ${stringifyUnexpectedError(errors)}`);\r\n newFormErrors = [i18n.getString(GENERIC_ERROR)];\r\n }\r\n setFormErrors(newFormErrors);\r\n })\r\n .finally(() => {\r\n resetIsDirty();\r\n setIsBlocking(false);\r\n });\r\n }, [data, i18n, isEditing, onCreated, onUpdated, repository, scenario, resetIsDirty]);\r\n\r\n const { IsFinalURLSuffixPhase4Enabled } = permissions;\r\n\r\n /* eslint-disable max-len */\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 {isCurrencyVisible &&\r\n
\r\n \r\n \r\n
\r\n }\r\n {isCurrencyVisible &&\r\n
\r\n \r\n
\r\n }\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n Displayed start date – Displayed end date matches your promotion extension’s Start date and End date below Selected days and hours.'))}\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\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\n
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n {i18n.getString(_TL_('URL options'))}\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 {IsFinalURLSuffixPhase4Enabled &&\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\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n {isEditing &&\r\n )}\r\n dismissible={false}\r\n />\r\n }\r\n )}\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\n );\r\n /* eslint-enable max-len */\r\n};\r\n\r\nPromotionExtensionEditor.propTypes = {\r\n classes: PropTypes.shape({}).isRequired,\r\n onCreated: PropTypes.func.isRequired,\r\n onUpdated: PropTypes.func.isRequired,\r\n onCancel: PropTypes.func.isRequired,\r\n extension: PropTypes.shape({\r\n Id: PropTypes.number,\r\n }),\r\n i18n: PropTypes.shape({ getString: PropTypes.func }).isRequired,\r\n legacyI18n: PropTypes.shape({ getString: PropTypes.func }).isRequired,\r\n data: PropTypes.shape({\r\n extension: PropTypes.shape({\r\n create: PropTypes.func,\r\n }),\r\n }).isRequired,\r\n instrumentation: PropTypes.shape({\r\n startScenario: PropTypes.func,\r\n startActivity: PropTypes.func,\r\n logMessage: PropTypes.func,\r\n endActivity: PropTypes.func,\r\n asLoggingStart: PropTypes.func,\r\n }),\r\n instrumentationSettings: PropTypes.shape({\r\n ACTIVITYNAME: PropTypes.shape({}),\r\n SCENARIONAME: PropTypes.shape({}),\r\n }),\r\n permissions: PropTypes.shape({\r\n IsDomesticSimplifiedChineseEnabled: PropTypes.bool,\r\n }).isRequired,\r\n deps: PropTypes.shape({\r\n SchedulingView: PropTypes.func.isRequired,\r\n }).isRequired,\r\n};\r\n\r\nPromotionExtensionEditor.defaultProps = {\r\n extension: null,\r\n instrumentation: {\r\n startScenario: _.noop,\r\n startActivity: _.noop,\r\n logMessage: _.noop,\r\n endActivity: _.noop,\r\n asLoggingStart: _.constant(_.noop),\r\n },\r\n instrumentationSettings: {\r\n ACTIVITYNAME: {},\r\n SCENARIONAME: {},\r\n },\r\n};\r\n\r\nexport const StyledPromotionExtensionEditor = withThemeFromProps(withDefaultStyles(\r\n PromotionExtensionEditor,\r\n getPromotionExtensionEditorStyles\r\n));\r\n","export const ItemPreviewI18nKeys = [\r\n _TL_('Up to {{monetaryDiscount}} off'),\r\n _TL_('{{monetaryDiscount}} off'),\r\n _TL_('Up to {{percentDiscount}} off'),\r\n _TL_('{{percentDiscount}} off'),\r\n _TL_('On orders over {{amount}}'),\r\n _TL_('Code {{promotionCode}}'),\r\n _TL_('Valid {{startDate}} - {{endDate}}'),\r\n _TL_('Valid {{date}}'),\r\n _TL_('Starts {{startDate}}'),\r\n _TL_('Ends {{endDate}}'),\r\n].reduce((m, e) => { m[e] = e; return m; }, {}); // eslint-disable-line no-param-reassign\r\n","import { extend } from 'underscore';\r\nimport rawItemTemplate from './universal-item-template.pug';\r\nimport { OccasionI18nKeys } from '../i18n/occasion-i18n-keys';\r\nimport { ItemPreviewI18nKeys } from '../i18n/item-preview-i18n-keys';\r\nimport { getPromotionTypeForModel } from '../rules/promotion-type';\r\nimport { getPromotionDetailTypeForModel } from '../rules/promotion-detail';\r\n\r\nexport const getPromotionDataFormatConfig = arg0 => extend({\r\n OccasionI18nKeys,\r\n ItemPreviewI18nKeys,\r\n getPromotionTypeForModel,\r\n getPromotionDetailTypeForModel,\r\n}, arg0);\r\n\r\nexport const universalItemTemplate = arg0 => rawItemTemplate(getPromotionDataFormatConfig(arg0));\r\n","import Backbone from 'backbone';\r\nimport _ from 'underscore';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport template from './audience-meter.pug';\r\n\r\n/**\r\n * AudienceMeter class\r\n * This is a pure view for the Meter-Needle portion of the Reach Estimate Control\r\n *\r\n * @class AudienceMeter\r\n */\r\nexport class AudienceMeter extends Backbone.View {\r\n initialize() {\r\n this.i18n = DependencyResolver.get('component/i18n/loader!campaignui/feature/audience-campaign');\r\n\r\n this.meterProps = {\r\n value: 0,\r\n max: 100,\r\n min: 0,\r\n };\r\n }\r\n\r\n /**\r\n * Renders the view\r\n *\r\n * @returns {View} returns the view itself\r\n */\r\n render() {\r\n this.$el.html(template({ i18n: this.i18n }));\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Show Audience Meter\r\n * @private\r\n *\r\n * @returns {undefined}\r\n */\r\n show() {\r\n this.$el.show();\r\n }\r\n\r\n /**\r\n * Hide Audience Meter\r\n * @private\r\n *\r\n * @returns {undefined}\r\n */\r\n hide() {\r\n this.$el.hide();\r\n }\r\n\r\n /**\r\n * Move the arrow pointer along the broad meter scale\r\n *\r\n * @param {Number} value value to which the the pointer should be moved\r\n * @returns {undefined}\r\n */\r\n moveAlongBroad(value) {\r\n this.$('.arrow').css({ left: this.calcBroadPos(value) });\r\n this.$('.arrow').css('border-top-color', 'green');\r\n }\r\n\r\n /**\r\n * Move the arrow pointer to the specific meter category\r\n *\r\n * @returns {undefined}\r\n */\r\n moveToSpecific() {\r\n const midPointVal = 50; // percentage\r\n\r\n this.$('.arrow').css({ left: this.calcSpecificPos(midPointVal) });\r\n this.$('.arrow').css('border-top-color', 'red');\r\n }\r\n\r\n /**\r\n * Helper to calculate pointer position along broad scale\r\n * @private\r\n *\r\n * @param {Number} value to which the the pointer should be moved\r\n * @returns {Number} position in pixels\r\n */\r\n calcBroadPos(value) {\r\n const specificMeterSize = this.$('.specific-meter').width();\r\n const broadMeterSize = this.$('.broad-meter').width();\r\n const arrowGap = _.first(this.$('.arrow').css('borderLeftWidth'));\r\n\r\n const broadScalePos = value * ((broadMeterSize - arrowGap) / this.meterProps.max);\r\n\r\n // Offset final position with specific meter width\r\n return specificMeterSize + broadScalePos;\r\n }\r\n\r\n /**\r\n * Helper to calculate pointer position along specific scale\r\n * @private\r\n *\r\n * @param {Number} value to which the the pointer should be moved\r\n * @returns {Number} position in pixels\r\n */\r\n calcSpecificPos(value) {\r\n const specificMeterSize = this.$('.specific-meter').width();\r\n const arrowGap = _.first(this.$('.arrow').css('borderLeftWidth'));\r\n\r\n return value * ((specificMeterSize - arrowGap) / this.meterProps.max);\r\n }\r\n}\r\n","const unitValueMap = {\r\n None: {\r\n value: 1,\r\n unit: '',\r\n },\r\n Thousand: {\r\n value: 1000,\r\n unit: 'K',\r\n },\r\n Million: {\r\n value: 1000000,\r\n unit: 'M',\r\n },\r\n Billion: {\r\n value: 1000000000,\r\n unit: 'B',\r\n },\r\n};\r\n\r\nexport { unitValueMap };\r\n","import Backbone from 'backbone';\r\nimport _ from 'underscore';\r\nimport $ from 'jquery';\r\nimport Promise from 'bluebird';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport { withUiBlock } from '@bingads-webui/uiblocker';\r\nimport { AudienceMeter } from './audience-meter';\r\nimport template from './template.pug';\r\nimport { unitValueMap } from './utils';\r\n\r\n/**\r\n * ReachEstimateControl class\r\n * Updates the Reach Estimate for AdGroup Targets\r\n *\r\n * @class AudienceMeter\r\n */\r\nexport class ReachEstimateControl extends Backbone.View {\r\n initialize(options = {}) {\r\n this.i18n = DependencyResolver.get('component/i18n/loader!campaignui/feature/audience-campaign');\r\n const permissionConfig = DependencyResolver.get('component/config/index');\r\n this.permissions = permissionConfig.get('Permissions');\r\n\r\n // Allow Updating Estimates no more than once every 2000 ms\r\n this.debouncedUpdateEstimateFunc = _.debounce((data, hasAudience) => this.updateEstimateInternal(data, hasAudience), 2000); // eslint-disable-line max-len\r\n\r\n this.audienceMeter = new AudienceMeter();\r\n\r\n // Empty Init Promises for early validate() case\r\n this.postAudienceEstimation = Promise.resolve();\r\n this.postPrivacyCheck = Promise.resolve();\r\n\r\n // Set initial state to be valid\r\n this.isValid = true;\r\n this.lastEstimateData = null;\r\n\r\n // Panel is to be sticky, so it is always visible to user\r\n this.isPanelSticky = options.isSticky;\r\n this.viewContext = options.viewContext;\r\n this.scenario = options.scenario;\r\n this.customModifyTarget = options.modifyTarget;\r\n this.customThreshold = options.threshold;\r\n this.customRootMargin = options.rootMargin;\r\n\r\n $(window).on('resize', () => {\r\n this.updateEstimatesOnMeter(this.lastEstimateData);\r\n });\r\n }\r\n\r\n /**\r\n * Renders the view\r\n *\r\n * @returns {View} returns the view itself\r\n */\r\n render() {\r\n this.$el.html(template(this));\r\n\r\n this.$('.audience-meter-container').append(this.audienceMeter.render().el);\r\n\r\n if (this.isPanelSticky) {\r\n this.stickPanel();\r\n }\r\n\r\n // hide the view by default, since we only want to show it when there is data\r\n this.$el.hide();\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Call debounced update estimate function\r\n *\r\n * @param {object} targetsData the targets\r\n * @param {bool} hasAudienceRemarketingList hasAudienceRemarketingList\r\n * @returns {Promise} - promise with status\r\n */\r\n updateEstimate(targetsData, hasAudienceRemarketingList) {\r\n return this.debouncedUpdateEstimateFunc(targetsData, hasAudienceRemarketingList);\r\n }\r\n\r\n /**\r\n * Makes the Reach control panel sticky\r\n *\r\n * @returns {undefined}\r\n */\r\n stickPanel() {\r\n if (!window.IntersectionObserver) {\r\n return;\r\n }\r\n\r\n const modifyTarget = (entries) => {\r\n // Sticky only when it intersects with the window at the top\r\n // and only when the control is displayed\r\n if (_.first(entries).intersectionRatio < 1 &&\r\n _.first(entries).boundingClientRect.height > 0 &&\r\n (_.first(entries).intersectionRect.y < 100 ||\r\n _.first(entries).intersectionRect.top < 100)) {\r\n this.$('.reach-estimate-control').addClass('sticky');\r\n } else {\r\n this.$('.reach-estimate-control').removeClass('sticky');\r\n }\r\n };\r\n\r\n const target = this.$('#reach-control-sentinel').get(0);\r\n\r\n this.observer = new IntersectionObserver(this.customModifyTarget || modifyTarget, {\r\n root: null,\r\n rootMargin: this.customRootMargin || '0px',\r\n threshold: this.customThreshold || 1.0,\r\n });\r\n this.observer.observe(target);\r\n }\r\n\r\n /**\r\n * Validate Audience Reach Estimate\r\n *\r\n * @returns {bool} returns true if reach is valid\r\n */\r\n validate() {\r\n return Promise.all([this.postAudienceEstimation, this.postPrivacyCheck])\r\n .then(() => this.permissions.IsAmplifyEnabled || this.isValid).catch(() => { // eslint-disable-line arrow-body-style\r\n // TODO: log response\r\n return true;\r\n });\r\n }\r\n\r\n /**\r\n * Returns the error message of the reach estimate control\r\n *\r\n * @returns {string} - string for error message\r\n */\r\n get errorMessage() {\r\n return this.errMsg;\r\n }\r\n\r\n /**\r\n * Update the Reach Estimates\r\n * Use the debounce version of this function when dealing with high volume inputs: updateEstimate\r\n *\r\n * @private\r\n * @param {object} targetsData the targets\r\n * @param {bool} hasAudienceRemarketingList hasAudienceRemarketingList\r\n * @returns {Promise} promise with status\r\n */\r\n updateEstimateInternal(targetsData, hasAudienceRemarketingList) {\r\n const odata = DependencyResolver.get('component/http/channel/odata');\r\n const context = DependencyResolver.get('audienceCampaignPageContext');\r\n\r\n // Update if current targets have Audience Remarketing lists\r\n // (used to display appropriate messaging if PrivacyCheck fails)\r\n this.hasAudienceRemarketingList = hasAudienceRemarketingList;\r\n\r\n const urlBase = `Customers(${context.CurrentCustomerId})/Accounts(${context.CurrentAccount.Id})/`;\r\n const audienceEstimationUrl = `${urlBase}Default.AudienceEstimationV2`;\r\n const privacyCheckUrl = `${urlBase}Default.PrivacyCheckV3`;\r\n const option = {\r\n host: 'adinsight.odata.url',\r\n path: 'AdInsight/V2/',\r\n data: { request: targetsData },\r\n customHeader: {\r\n name: 'x-ms-scenarioname',\r\n value: this.scenario || 'AudienceCampaign',\r\n },\r\n };\r\n\r\n // Create AudienceEstimation Promise\r\n if (!_.isEmpty(targetsData)) {\r\n this.postAudienceEstimation = odata.post(audienceEstimationUrl, option);\r\n this.postPrivacyCheck = odata.post(privacyCheckUrl, option);\r\n } else {\r\n this.postAudienceEstimation = Promise.resolve({});\r\n this.postPrivacyCheck = Promise.resolve({});\r\n }\r\n\r\n return Promise.all([this.postAudienceEstimation, this.postPrivacyCheck])\r\n .then(([estimateData, privacyData]) => {\r\n this.lastEstimateData = estimateData;\r\n\r\n if (_.get(estimateData, ['EstImpression', 'Value']) != null) {\r\n this.$el.show();\r\n } else {\r\n this.$el.hide();\r\n }\r\n this.updatePanel(estimateData, privacyData, estimateData && privacyData);\r\n })\r\n .catch((response) => {\r\n this.updatePanel(response, response, false);\r\n })\r\n .finally(withUiBlock(this.$el, this.i18n.getString('Loading'), false));\r\n }\r\n\r\n /**\r\n * Update Panel\r\n * @private\r\n *\r\n * @param {object} estimateData data with estimates\r\n * @param {object} privacyData data with privacy check results\r\n * @param {object} reqStatus indicates if request succeeded\r\n * @returns {undefined}\r\n */\r\n updatePanel(estimateData, privacyData, reqStatus) {\r\n const isReachTooSpecific = _.result(estimateData, 'IsImpressionTooSpecific');\r\n const privacyCheckResult = _.result(privacyData, 'CheckResult');\r\n\r\n // Update Estimate section of Reach Panel\r\n if (!reqStatus || privacyCheckResult !== 'Pass') {\r\n this.hideEstimate();\r\n } else {\r\n this.audienceMeter.show();\r\n this.$('.estimate-note').show();\r\n this.updateEstimatesOnMeter(estimateData);\r\n }\r\n\r\n // Update Warning section of Reach Panel\r\n this.errMsg = this.validateReach(privacyCheckResult, isReachTooSpecific, reqStatus);\r\n if ((privacyCheckResult !== 'Pass' || isReachTooSpecific || !reqStatus) && this.errMsg !== '') {\r\n this.showWarning(this.errMsg);\r\n } else {\r\n this.hideWarning();\r\n }\r\n }\r\n\r\n /**\r\n * Update Estimate\r\n * @private\r\n *\r\n * @param {object} data on estimates\r\n * @returns {undefined}\r\n */\r\n updateEstimatesOnMeter(data) {\r\n if (!data || !data.EstImpression) {\r\n return;\r\n }\r\n if (this.viewContext) {\r\n this.viewContext.SuggestedBid = data.SuggestedBid;\r\n }\r\n\r\n const estImprVal = data.EstImpression.Value;\r\n const estImprUnit = unitValueMap[data.EstImpression.Unit].unit;\r\n const estImprUnitVal = unitValueMap[data.EstImpression.Unit].value;\r\n\r\n const estImprText = `${estImprVal}${estImprUnit}`;\r\n const estImpr = estImprVal * estImprUnitVal;\r\n\r\n // Set new estimated impressions and move needle accordingly\r\n this.$('strong.impr').text(estImprText);\r\n\r\n if (data.IsImpressionTooSpecific) {\r\n this.audienceMeter.moveToSpecific();\r\n } else {\r\n this.audienceMeter.moveAlongBroad(this.calcMeterValue(estImpr));\r\n }\r\n }\r\n\r\n /**\r\n * Hide estimate\r\n * @private\r\n *\r\n * @returns {undefined}\r\n */\r\n hideEstimate() {\r\n this.audienceMeter.hide();\r\n this.$('.estimate-note').hide();\r\n }\r\n\r\n /**\r\n * Show warning\r\n * @private\r\n *\r\n * @param {String} erroMessage to show\r\n * @returns {undefined}\r\n */\r\n showWarning(erroMessage) {\r\n this.$('.reach-warning').show();\r\n this.$('.reach-warning').text(erroMessage);\r\n }\r\n\r\n /**\r\n * Hide warning\r\n * @private\r\n *\r\n * @returns {undefined}\r\n */\r\n hideWarning() {\r\n this.$('.reach-warning').hide();\r\n }\r\n\r\n /**\r\n * Checks for and sets Entity Valid state, also returns Warning Message if invalid\r\n * @private\r\n *\r\n * @param {object} privacyCheckResult The Privacy check Result\r\n * @param {object} isTooSpecific True if Estimated Impressions are too specific\r\n * @param {object} success indicates if request succeeded\r\n * @returns {undefined}\r\n */\r\n validateReach(privacyCheckResult, isTooSpecific, success) {\r\n let message = '';\r\n\r\n // Set valid state to true unless invalid state detected\r\n this.isValid = true;\r\n\r\n if (!success || privacyCheckResult === 'Pending') {\r\n message = this.i18n.getString('Audience_Campaign_ReachControl_NotAvailable');\r\n\r\n return message;\r\n }\r\n\r\n if (privacyCheckResult === 'TooNarrow' && this.hasAudienceRemarketingList) {\r\n message = this.i18n.getString('Audience_Campaign_ReachControl_PrivacyCheckFailed_AudienceReMarketing');\r\n this.isValid = true;\r\n\r\n return message;\r\n }\r\n\r\n if (privacyCheckResult === 'TooNarrow' && !this.hasAudienceRemarketingList) {\r\n message = this.i18n.getString('Audience_Campaign_ReachControl_PrivacyCheckFailed');\r\n this.isValid = false;\r\n\r\n return message;\r\n }\r\n\r\n // as long as the privacy check passed, we don't care about the possible estimation\r\n if (isTooSpecific && !this.permissions.IsKPIEstimateForAudienceFeedBasedEnabled) {\r\n message = this.i18n.getString('Audience_Campaign_ReachControl_TargettingTooSpecific');\r\n this.isValid = false;\r\n\r\n return message;\r\n }\r\n\r\n return message;\r\n }\r\n\r\n /**\r\n * Calculate the percentage value to be used in Audience Meter\r\n * @private\r\n *\r\n * @param {Number} estImpr estimated impressions\r\n * @returns {Number} percentageVal\r\n */\r\n calcMeterValue(estImpr) {\r\n // Use logarithimc scale to represent impressions: y = a log x + b\r\n // 100 = a log 64B + b: (64B experimentally derived as max impressions value)\r\n // 20 = a log 1K + b: (1K experimentally derived as min impressions value)\r\n // TODO: Tune this as needed after inital selfhosting\r\n const transformedVal = (4.45078 * Math.log(estImpr)) - 10.74487;\r\n\r\n return transformedVal;\r\n }\r\n\r\n remove() {\r\n super.remove();\r\n\r\n if (this.observer) {\r\n this.observer.disconnect();\r\n }\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport { FeedBasedCampaginSubTypes, CampaignSubTypeMapping, BidStrategy } from '@bingads-webui-campaign/audience-campaign-shared';\r\n\r\n// Age Target Enum Map between Campaign and AdInsights\r\nconst ageTargetMap = {\r\n EighteenToTwentyFive: 'EighteenToTwentyFour',\r\n TwentyFiveToThirtyFive: 'TwentyFiveToThirtyFour',\r\n ThirtyFiveToFifty: 'ThirtyFiveToFourtyNine',\r\n FiftyToSixtyFive: 'FiftyToSixtyFour',\r\n SixtyFiveAndAbove: 'SixtyFiveAndAbove',\r\n Unknown: 'Unknown',\r\n};\r\n\r\n/**\r\n * Estimate Request Factory\r\n * This serves to create the request for AudienceEstimation and Privacy Check calls to AdInsights\r\n *\r\n * @class EstimateRequestFactory\r\n */\r\nexport class EstimateRequestFactory {\r\n constructor(options = {}) {\r\n this.currentLevelTargetInfo = options.currentLevelTargetInfo;\r\n this.parentLevelTargetInfo = options.parentLevelTargetInfo;\r\n const permissionConfig = DependencyResolver.get('component/config/index');\r\n this.permissions = permissionConfig.get('Permissions');\r\n this.bidStrategyPermissionBind = {\r\n [BidStrategy.ManualCpc]: true,\r\n [BidStrategy.EnhancedCpc]: true,\r\n [BidStrategy.ManualCpv]: this.permissions.IsKPIEstimateForCPVEnabled,\r\n [BidStrategy.ManualCpm]: this.permissions.IsKPIEstimateForCPMEnabled,\r\n };\r\n this.campaignSubTypesSupported = [\r\n CampaignSubTypeMapping.AudienceStatic,\r\n CampaignSubTypeMapping.AudienceVideoAds,\r\n ];\r\n if (this.permissions.IsKPIEstimateForAudienceFeedBasedEnabled) {\r\n this.campaignSubTypesSupported =\r\n this.campaignSubTypesSupported.concat(FeedBasedCampaginSubTypes);\r\n }\r\n\r\n this.request = {};\r\n }\r\n\r\n /**\r\n * Creates the request for AudienceEstimation and Privacy Check calls\r\n *\r\n * @param {number} bidStrategy bid strategy enum used to create request\r\n * @param {number} campaignSubType sub type enum of campaign used to create request\r\n * @param {object} feedInfo audience campaign feed information\r\n * @param {object} useOptimizedTargeting if use Optimized Targeting\r\n *\r\n * @returns {object} request\r\n */\r\n create(bidStrategy, campaignSubType, feedInfo, useOptimizedTargeting) {\r\n this.request = {};\r\n\r\n return this.createWithTargetSettings(['CompanyName', 'Industry', 'JobFunction', 'Audience'], bidStrategy, campaignSubType, feedInfo, useOptimizedTargeting);\r\n }\r\n\r\n /**\r\n * Creates the request for AudienceEstimation and Privacy Check calls\r\n * This takes into account the user's TargetAndBid vs BidOnly selection\r\n *\r\n * @param {Array} targetSettings targetSettings\r\n * @param {number} bidStrategy bid strategy enum used to create request\r\n * @param {number} campaignSubType sub type enum of campaign used to create request\r\n * @param {object} feedInfo audience campaign feed information\r\n * @param {object} useOptimizedTargeting if use Optimized Targeting\r\n *\r\n * @returns {object} request\r\n */\r\n createWithTargetSettings(\r\n targetSettings, bidStrategy, campaignSubType,\r\n feedInfo, useOptimizedTargeting\r\n ) {\r\n this.request = {};\r\n\r\n this.addAgeTargets();\r\n this.addGenderTargets();\r\n this.addLocationTargets();\r\n this.addRadiusTargets();\r\n\r\n // Add Included Targets only if Target & Bid\r\n this.addCompanyTargets(_.contains(targetSettings, 'CompanyName'));\r\n this.addIndustryTargets(_.contains(targetSettings, 'Industry'));\r\n this.addJobFunctionTargets(_.contains(targetSettings, 'JobFunction'));\r\n this.addAudienceTargets(_.contains(targetSettings, 'Audience'));\r\n\r\n if (_.isNumber(bidStrategy) && this.bidStrategyPermissionBind[bidStrategy]) {\r\n this.request.CampaignBiddingStrategy = bidStrategy;\r\n } else {\r\n this.request.CampaignBiddingStrategy = BidStrategy.ManualCpc;\r\n }\r\n let subType = campaignSubType;\r\n // We convert it to enum number first\r\n if (_.isString(subType)) {\r\n subType = CampaignSubTypeMapping[campaignSubType];\r\n }\r\n if ((_.isNumber(subType) && this.campaignSubTypesSupported.includes(subType))) {\r\n this.request.CampaignSubType = subType;\r\n } else {\r\n this.request.CampaignSubType = CampaignSubTypeMapping.AudienceStatic;\r\n }\r\n\r\n if (FeedBasedCampaginSubTypes.includes(this.request.CampaignSubType)) {\r\n this.request.Feed = {\r\n StoreId: _.get(feedInfo, 'StoreId'),\r\n FeedId: _.get(feedInfo, 'FeedId'),\r\n };\r\n }\r\n\r\n this.request.AutoTargeting = useOptimizedTargeting;\r\n return this.request;\r\n }\r\n\r\n /**\r\n * @private\r\n *\r\n * @returns {undefined}\r\n */\r\n addAgeTargets() {\r\n const criterions = this.currentLevelTargetInfo.getAllByType('Age');\r\n\r\n if (_.isEmpty(criterions)) {\r\n return;\r\n }\r\n\r\n const targets = { Includes: [], Excludes: [] };\r\n\r\n _.each(criterions, (c) => {\r\n if (c.CriterionType === 'Age') {\r\n const translatedAgeTarget = ageTargetMap[c.Criterion.AgeCriterion.Target];\r\n\r\n targets.Includes.push(translatedAgeTarget);\r\n } else if (c.CriterionType === 'NegativeAge') {\r\n const translatedAgeTarget = ageTargetMap[c.Criterion.AgeCriterion.Target];\r\n\r\n targets.Excludes.push(translatedAgeTarget);\r\n }\r\n });\r\n\r\n this.request.Age = targets;\r\n }\r\n\r\n /**\r\n * @private\r\n *\r\n * @returns {undefined}\r\n */\r\n addGenderTargets() {\r\n const criterions = this.currentLevelTargetInfo.getAllByType('Gender');\r\n\r\n if (_.isEmpty(criterions)) {\r\n return;\r\n }\r\n\r\n const targets = { Includes: [], Excludes: [] };\r\n\r\n _.each(criterions, (c) => {\r\n if (c.CriterionType === 'Gender') {\r\n targets.Includes.push(c.Criterion.GenderCriterion.Target);\r\n } else if (c.CriterionType === 'NegativeGender') {\r\n targets.Excludes.push(c.Criterion.GenderCriterion.Target);\r\n }\r\n });\r\n\r\n this.request.Gender = targets;\r\n }\r\n\r\n /**\r\n * @private\r\n *\r\n * @returns {undefined}\r\n */\r\n addLocationTargets() {\r\n let targetInfoToUse = this.currentLevelTargetInfo;\r\n\r\n if (this.parentLevelTargetInfo &&\r\n this.currentLevelTargetInfo.parentLevelTogglesByType.Location) {\r\n targetInfoToUse = this.parentLevelTargetInfo;\r\n }\r\n\r\n const includedCriterions = targetInfoToUse.getAllByType('Location');\r\n const excludedCriterions = targetInfoToUse.getAllByType('NegativeLocation');\r\n\r\n if (_.isEmpty(includedCriterions) && _.isEmpty(excludedCriterions)) {\r\n // If no location criterions found, then target 'All locations'\r\n this.request.Location = {};\r\n\r\n return;\r\n }\r\n\r\n const targets = { Includes: [], Excludes: [] };\r\n\r\n _.each(includedCriterions, (c) => {\r\n const locationCriterion = c.Criterion.LocationCriterion;\r\n\r\n if (locationCriterion) {\r\n if (c.CriterionType === 'NegativeLocation') {\r\n targets.Excludes.push(locationCriterion.LocationId);\r\n } else {\r\n targets.Includes.push(locationCriterion.LocationId);\r\n }\r\n } else if (c['@odata.type'] === '#Model.NegativeCampaignCriterion') { // For campaign inherited criterions\r\n targets.Excludes.push(c.Criterion.LocationId);\r\n } else if (c['@odata.type'] === '#Model.CampaignCriterion') {\r\n targets.Includes.push(c.Criterion.LocationId);\r\n }\r\n });\r\n\r\n _.each(excludedCriterions, (c) => {\r\n const excludedLocationCriterion = c.Criterion.LocationCriterion;\r\n\r\n if (excludedLocationCriterion) {\r\n targets.Excludes.push(excludedLocationCriterion.LocationId);\r\n }\r\n });\r\n\r\n this.request.Location = targets;\r\n }\r\n\r\n /**\r\n * @private\r\n *\r\n * @returns {undefined}\r\n */\r\n addRadiusTargets() {\r\n let targetInfoToUse = this.currentLevelTargetInfo;\r\n\r\n if (this.parentLevelTargetInfo &&\r\n this.currentLevelTargetInfo.parentLevelTogglesByType.Location) {\r\n targetInfoToUse = this.parentLevelTargetInfo;\r\n }\r\n\r\n const radiusCriterions = targetInfoToUse.getAllByType('Radius');\r\n\r\n if (_.isEmpty(radiusCriterions)) {\r\n return;\r\n }\r\n\r\n const radiusTargets = [];\r\n\r\n _.each(radiusCriterions, (c) => {\r\n const radiusCriterion = c.Criterion.RadiusCriterion;\r\n\r\n if (radiusCriterion) {\r\n radiusTargets.push({\r\n Radius: radiusCriterion.Radius,\r\n CenterLongitude: radiusCriterion.Longitude,\r\n CenterLatitude: radiusCriterion.Latitude,\r\n });\r\n }\r\n });\r\n\r\n if (radiusTargets.length > 0) {\r\n this.request.RadiusTargets = radiusTargets;\r\n }\r\n }\r\n\r\n /**\r\n * @private\r\n * @param {bool} addInclusions addInclusions\r\n * @returns {undefined}\r\n */\r\n addCompanyTargets(addInclusions) {\r\n const criterions = this.currentLevelTargetInfo.getAllByType('CompanyName');\r\n\r\n if (_.isEmpty(criterions)) {\r\n return;\r\n }\r\n\r\n const targets = { Includes: [], Excludes: [] };\r\n const arr = _.partition(criterions, c => c.CriterionType === 'CompanyName');\r\n const includedCriterions = arr[0];\r\n const excludedCriterions = arr[1];\r\n\r\n if (addInclusions) {\r\n _.each(includedCriterions, (c) => {\r\n targets.Includes.push(c.Criterion.CompanyNameCriterion.Target);\r\n });\r\n }\r\n\r\n _.each(excludedCriterions, (c) => {\r\n targets.Excludes.push(c.Criterion.CompanyNameCriterion.Target);\r\n });\r\n\r\n this.request.Company = targets;\r\n }\r\n\r\n /**\r\n * @private\r\n * @param {bool} addInclusions addInclusions\r\n * @returns {undefined}\r\n */\r\n addJobFunctionTargets(addInclusions) {\r\n const criterions = this.currentLevelTargetInfo.getAllByType('JobFunction');\r\n\r\n if (_.isEmpty(criterions)) {\r\n return;\r\n }\r\n\r\n const targets = { Includes: [], Excludes: [] };\r\n const arr = _.partition(criterions, c => c.CriterionType === 'JobFunction');\r\n const includedCriterions = arr[0];\r\n const excludedCriterions = arr[1];\r\n\r\n if (addInclusions) {\r\n _.each(includedCriterions, (c) => {\r\n targets.Includes.push(c.Criterion.JobFunctionCriterion.Target);\r\n });\r\n }\r\n\r\n _.each(excludedCriterions, (c) => {\r\n targets.Excludes.push(c.Criterion.JobFunctionCriterion.Target);\r\n });\r\n\r\n this.request.JobFunction = targets;\r\n }\r\n\r\n /**\r\n * @private\r\n * @param {bool} addInclusions addInclusions\r\n * @returns {undefined}\r\n */\r\n addIndustryTargets(addInclusions) {\r\n const criterions = this.currentLevelTargetInfo.getAllByType('Industry');\r\n\r\n if (_.isEmpty(criterions)) {\r\n return;\r\n }\r\n\r\n const targets = { Includes: [], Excludes: [] };\r\n const arr = _.partition(criterions, c => c.CriterionType === 'Industry');\r\n const includedCriterions = arr[0];\r\n const excludedCriterions = arr[1];\r\n\r\n if (addInclusions) {\r\n _.each(includedCriterions, (c) => {\r\n targets.Includes.push(c.Criterion.IndustryCriterion.Target);\r\n });\r\n }\r\n\r\n _.each(excludedCriterions, (c) => {\r\n targets.Excludes.push(c.Criterion.IndustryCriterion.Target);\r\n });\r\n\r\n this.request.Industry = targets;\r\n }\r\n\r\n /**\r\n * @private\r\n * @param {bool} addInclusions addInclusions\r\n * @returns {undefined}\r\n */\r\n addAudienceTargets(addInclusions) {\r\n let criterions = this.currentLevelTargetInfo.getAllByType('Audience');\r\n\r\n criterions = _.reject(criterions, c => c.Status === 'Paused');\r\n\r\n if (_.isEmpty(criterions)) {\r\n return;\r\n }\r\n\r\n const targets = { Includes: [], Excludes: [] };\r\n const arr = _.partition(criterions, c => c.Status === 'Excluded');\r\n\r\n const excludedCriterions = arr[0];\r\n const includedCriterions = arr[1];\r\n\r\n if (addInclusions) {\r\n _.each(includedCriterions, (c) => {\r\n targets.Includes.push(c.Criterion.AudienceId);\r\n });\r\n }\r\n\r\n _.each(excludedCriterions, (c) => {\r\n targets.Excludes.push(c.Criterion.AudienceId);\r\n });\r\n\r\n this.request.Audience = targets;\r\n }\r\n}\r\n","const getData = i18n => i18n.p$data.value().resource.data;\r\n\r\nexport const mergeI18n = (target, parentI18n) => {\r\n // catch error in mock i18n\r\n try {\r\n Object.assign(getData(target), getData(parentI18n));\r\n } catch (error) {\r\n console.warn(error);\r\n }\r\n};\r\n","import Promise from 'bluebird';\r\nimport _ from 'underscore';\r\nimport $ from 'jquery';\r\nimport { stringifySync } from '@bingads-webui/safe-json';\r\n\r\n// scenario is used to differentiate API calls source\r\nconst autoCompleteEndpoint = '{odataPath}Mca/V1/Customers({customer_id})/Accounts({account_id})/Default.GetAdAutoComplete?scenario={scenario}';\r\nconst adRecommendationEndpoint = '{odataPath}Campaign/V2/Customers({customer_id})/Accounts({account_id})/Campaigns({campaign_id})/Default.CreateResponsiveSearchAdRecommendation?scenario={scenario}';\r\nconst extractBusinessInfoEndpoint = '{odataPath}Campaign/V2/Customers({customer_id})/Accounts({account_id})/Campaigns({campaign_id})/Default.GetExtractedBusinessInfo?scenario={scenario}';\r\n\r\nconst formatUrl = (url, pageContext, campaignId, adGroupId, scenario) => url\r\n .replace('{odataPath}', pageContext.BingAdsWebApiUri)\r\n .replace('{account_id}', _.result(pageContext.CurrentAccount, 'Id'))\r\n .replace('{customer_id}', _.result(pageContext.CurrentCustomer, 'Id'))\r\n .replace('{campaign_id}', campaignId)\r\n .replace('{adgroup_id}', adGroupId)\r\n .replace('{scenario}', scenario);\r\n\r\nexport class AdStrengthSuggestionRepository {\r\n constructor({\r\n field,\r\n assetType,\r\n viewModel,\r\n pageContext,\r\n scenario,\r\n }) {\r\n this.field = field;\r\n this.assetType = assetType;\r\n this.viewModel = viewModel;\r\n this.pageContext = pageContext;\r\n this.scenario = scenario;\r\n }\r\n\r\n fetchAdStrengthSuggestion(isAutoComplete) {\r\n const {\r\n field,\r\n assetType,\r\n viewModel,\r\n pageContext,\r\n scenario,\r\n } = this;\r\n\r\n let currentFinalUrl = null;\r\n if (!_.isEmpty(viewModel.model.get('FinalUrls'))) {\r\n currentFinalUrl = _.first(viewModel.model.get('FinalUrls'));\r\n } else {\r\n return Promise.resolve({ data: [] });\r\n }\r\n\r\n const requestBody = isAutoComplete ? {\r\n url: currentFinalUrl,\r\n adType: 'EXTA',\r\n maxCount: 3,\r\n autoCompleteFieldIndex: assetType === 'headline' ? 0 : 2,\r\n adFields: [\r\n assetType === 'headline' ? viewModel.model.get(field) : '',\r\n '',\r\n assetType === 'headline' ? '' : viewModel.model.get(field),\r\n ],\r\n } : {\r\n count: 1,\r\n business: {\r\n Website: currentFinalUrl,\r\n },\r\n headlineCount: viewModel.maxHeadlineSuggestions,\r\n descriptionCount: viewModel.maxDescriptionSuggestions,\r\n caller: 'cmmt_ra',\r\n };\r\n\r\n const option = {\r\n url: formatUrl(\r\n isAutoComplete ? autoCompleteEndpoint : adRecommendationEndpoint,\r\n pageContext,\r\n viewModel.campaignId,\r\n viewModel.adGroupId,\r\n scenario\r\n ),\r\n contentType: 'application/json',\r\n headers: {\r\n authorization: `CCMTSmallToken ${pageContext.Token}`,\r\n },\r\n type: 'POST',\r\n data: stringifySync(requestBody),\r\n };\r\n\r\n const fetchDataPromise = new Promise((resolve) => {\r\n $.ajax(option).then((rawData) => {\r\n let data = [];\r\n if (!_.isEmpty(rawData)) {\r\n if (isAutoComplete) {\r\n data = _.map(rawData.Suggestions, (suggestion) => {\r\n suggestion.AssetType = assetType; // eslint-disable-line no-param-reassign\r\n return suggestion;\r\n });\r\n } else if (rawData.value && rawData.value.length > 0) {\r\n data = data.concat(_.map(_.first(rawData.value).Headlines, (headline) => {\r\n headline.Asset.AssetType = 'headline'; // eslint-disable-line no-param-reassign\r\n return headline.Asset;\r\n }));\r\n data = data.concat(_.map(_.first(rawData.value).Descriptions, (description) => {\r\n description.Asset.AssetType = 'description'; // eslint-disable-line no-param-reassign\r\n return description.Asset;\r\n }));\r\n }\r\n }\r\n resolve(data);\r\n }).catch((err) => {\r\n if (err && err.responseJSON && err.responseJSON[0] && err.responseJSON[0].Code === 'LanguageMismatchUserAd') {\r\n // ignore this error\r\n return;\r\n }\r\n throw err;\r\n });\r\n });\r\n\r\n return fetchDataPromise.then(rawData => ({\r\n data: rawData,\r\n }));\r\n }\r\n\r\n fetchBusinessInfo(isAutoComplete) {\r\n const {\r\n viewModel,\r\n pageContext,\r\n scenario,\r\n } = this;\r\n\r\n const field = 'BusinessName';\r\n\r\n let currentFinalUrl = null;\r\n if (!_.isEmpty(viewModel.model.get('FinalUrls'))) {\r\n currentFinalUrl = _.first(viewModel.model.get('FinalUrls'));\r\n } else {\r\n return Promise.resolve({ data: [] });\r\n }\r\n\r\n if (isAutoComplete) {\r\n return Promise.resolve({ data: [] });\r\n }\r\n\r\n const requestBody = {\r\n url: currentFinalUrl,\r\n };\r\n\r\n const option = {\r\n url: formatUrl(\r\n extractBusinessInfoEndpoint,\r\n pageContext,\r\n viewModel.campaignId,\r\n viewModel.adGroupId,\r\n scenario\r\n ),\r\n contentType: 'application/json',\r\n headers: {\r\n authorization: `CCMTSmallToken ${pageContext.Token}`,\r\n },\r\n type: 'POST',\r\n data: stringifySync(requestBody),\r\n };\r\n\r\n const fetchDataPromise = new Promise((resolve, reject) => {\r\n $.ajax(option).then((rawData) => {\r\n let data = [];\r\n if (!_.isEmpty(rawData)) {\r\n data = [{\r\n Text: rawData[field],\r\n AssetType: 'business',\r\n }];\r\n }\r\n resolve(data);\r\n }, reject);\r\n });\r\n\r\n return fetchDataPromise.then(rawData => ({\r\n data: rawData,\r\n }));\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { MMAAssetConfigs } from './config';\r\n\r\nexport const headlineFields = _.map(_.range(MMAAssetConfigs.MAX_HEADLINES), i => `Headline${i}`);\r\nexport const longHeadlineFields = _.map(_.range(MMAAssetConfigs.MAX_LONGHEADLINES), i => `LongHeadline${i}`);\r\nexport const descriptionFields = _.map(_.range(MMAAssetConfigs.MAX_DESCRIPTIONS), i => `Description${i}`);\r\n\r\nexport const ResponsiveAdScenarios = {\r\n MMASearch: 'MMASearch',\r\n MMAResponsive: 'MMAResponsive',\r\n NonMMAResponsive: 'NonMMAResponsive',\r\n};\r\n\r\nexport const AdEditFields = {\r\n Headline: 'Headline',\r\n LongHeadline: 'LongHeadline',\r\n Description: 'Description',\r\n Text: 'Text',\r\n BusinessName: 'BusinessName',\r\n};\r\n\r\nexport const assetSuggestionType = {\r\n // use for asset suggestions\r\n [AdEditFields.Headline]: 'headline',\r\n [AdEditFields.LongHeadline]: 'description',\r\n [AdEditFields.Description]: 'description',\r\n [AdEditFields.Text]: 'description',\r\n [AdEditFields.BusinessName]: 'business',\r\n};\r\n\r\nexport const singleAssetSuggestionType = {\r\n [AdEditFields.Headline]: 'shortHeadline',\r\n [AdEditFields.LongHeadline]: 'longHeadline',\r\n [AdEditFields.Text]: 'description',\r\n};\r\n","/* eslint-disable jsx-a11y/anchor-is-valid, no-param-reassign,\r\nno-plusplus, react/no-array-index-key */\r\n/* istanbul ignore file */\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport Promise from 'bluebird';\r\nimport $ from 'jquery';\r\nimport classnames from 'classnames';\r\nimport { isValidUrl } from '@bingads-webui/url-util';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport { AdStrengthSuggestionRepository } from './asset-suggestion-repository';\r\nimport { containerExists } from './asset-suggestion-helper';\r\nimport { singleAssetSuggestionType, assetSuggestionType, headlineFields, longHeadlineFields, descriptionFields } from '../constants';\r\n\r\nexport class AdStrengthSuggestionPicker extends React.Component {\r\n static defaultProps = {\r\n itemsToDisplay: [],\r\n container: $(document.body),\r\n permissions: {},\r\n };\r\n\r\n getDisplayPosition(target, container, permissions) {\r\n const $target = $(target);\r\n const targetOffset = $target.offset();\r\n const containerOffset = container.offset();\r\n\r\n let assetSectionHeight = 0;\r\n let hrHeight = 0;\r\n const $panel = $('.ad-edit-and-preview-container .collapsible-panel');\r\n if (permissions.IsMultiMediaAdsPhase2Enabled && $panel.length > 0) {\r\n assetSectionHeight = $panel.outerHeight();\r\n const hrStyle = window.getComputedStyle($('.ad-edit-and-preview-container hr')[0]);\r\n hrHeight = parseInt(hrStyle.marginTop, 10) + parseInt(hrStyle.marginBottom, 10) +\r\n parseInt(hrStyle.borderTopWidth, 10) + parseInt(hrStyle.borderBottomWidth, 10);\r\n }\r\n\r\n // Calculate the position of the popup relative to the container.\r\n // The container needs to be non-statically positioned, either fixed, relative or absolute,\r\n // because the popup is position: absolute.\r\n return {\r\n top: (targetOffset.top - containerOffset.top) + $target.outerHeight() +\r\n assetSectionHeight + hrHeight * 2, // eslint-disable-line no-mixed-operators\r\n left: targetOffset.left - containerOffset.left,\r\n };\r\n }\r\n\r\n addAssetSuggestion(event, target, field, description, inputText) {\r\n const {\r\n viewModel,\r\n element,\r\n pickerContainer,\r\n activityLogger,\r\n scenario,\r\n } = this.props;\r\n if (!_.isEmpty(target)) {\r\n const targetSelector = `.${target.className.split(' ').join('.')}`;\r\n $(targetSelector).val(description);\r\n viewModel.model.set(field, description);\r\n element.trigger('input-changed', event);\r\n activityLogger.signal(`${field}, ${description}`, `${scenario} asset suggestions select`);\r\n }\r\n if (!_.isEmpty(inputText)) {\r\n activityLogger.signal(`${field}, ${description}`, `${scenario} auto complete asset suggestions select.`);\r\n } else {\r\n activityLogger.signal(`${field}, ${description}`, `${scenario} inline recommendation asset suggestions select.`);\r\n }\r\n\r\n event.stopPropagation();\r\n event.preventDefault();\r\n // Hide picker\r\n ReactDOM.unmountComponentAtNode(pickerContainer);\r\n }\r\n\r\n render() {\r\n const {\r\n container, i18n, target, field, itemsToDisplay, activityLogger, scenario, permissions, input,\r\n } = this.props;\r\n\r\n const position = this.getDisplayPosition(target, container, permissions);\r\n\r\n const containerStyle = {\r\n display: 'block', left: `${position.left}px`, top: `${position.top}px`, zIndex: 20,\r\n };\r\n\r\n let pickerTitle = '';\r\n if (field.startsWith('Headline')) {\r\n pickerTitle = i18n.getString('Ad_Strength_Suggestion_Picker_Title_Headline');\r\n } else if (field.startsWith('LongHeadline')) {\r\n pickerTitle = i18n.getString('Ad_Strength_Suggestion_Picker_Title_LongHeadline');\r\n } else if (field.startsWith('Description')) {\r\n pickerTitle = i18n.getString('Ad_Strength_Suggestion_Picker_Title_AdText');\r\n }\r\n const pickerTitleStyle = { padding: '10px 10px 3px 10px', fontWeight: 'bold' };\r\n\r\n let contentView = null;\r\n const contentClasses = ['picker-list'];\r\n contentView = itemsToDisplay.map(({ Text }, index) => (\r\n
  • \r\n this.addAssetSuggestion(event, target, field, Text, input)}\r\n key={index}\r\n data-index={index}\r\n >\r\n {Text ?
    {Text}
    : null}\r\n \r\n
  • ), this);\r\n\r\n _.each(itemsToDisplay, ({ Text }) => {\r\n activityLogger.signal(`${field}, ${Text}`, `${scenario} asset suggestions view`);\r\n });\r\n\r\n if (!_.isEmpty(itemsToDisplay)) {\r\n activityLogger.signal(`${field}, ${Text}`, `${scenario} asset suggestions page view`);\r\n if (!_.isEmpty(input)) {\r\n activityLogger.signal(`${field}, ${input}`, `${scenario} auto complete asset suggestions view.`);\r\n } else {\r\n activityLogger.signal(`${field}, ${input}`, `${scenario} inline recommendation asset suggestions view.`);\r\n }\r\n }\r\n\r\n return (\r\n
      \r\n
    • \r\n {pickerTitle}\r\n
    • \r\n {contentView}\r\n
    \r\n );\r\n }\r\n}\r\n\r\nAdStrengthSuggestionPicker.propTypes = {\r\n itemsToDisplay: PropTypes.arrayOf(PropTypes.shape({\r\n name: PropTypes.string,\r\n description: PropTypes.string,\r\n })),\r\n target: PropTypes.shape({}).isRequired,\r\n container: PropTypes.shape({ offset: PropTypes.func }),\r\n pickerContainer: PropTypes.objectOf(PropTypes.any).isRequired,\r\n viewModel: PropTypes.objectOf(PropTypes.any).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n field: PropTypes.string.isRequired,\r\n element: PropTypes.objectOf(PropTypes.any).isRequired,\r\n activityLogger: PropTypes.shape({\r\n signal: PropTypes.func.isRequired,\r\n }).isRequired,\r\n scenario: PropTypes.string.isRequired,\r\n permissions: PropTypes.shape({\r\n IsMultiMediaAdsPhase2Enabled: PropTypes.bool,\r\n }),\r\n input: PropTypes.string.isRequired,\r\n};\r\n\r\nexport class AdStrengthSuggestionController {\r\n constructor({\r\n containerSelector,\r\n pageContext,\r\n i18n,\r\n activityLogger,\r\n }) {\r\n this.containerSelector = containerSelector;\r\n this.pageContext = pageContext || {};\r\n this.i18n = i18n;\r\n this.cachedAutoCompleteSuggestions = {};\r\n this.cachedCreationSuggestions = {};\r\n this.cachedBusiness = {};\r\n this.activityLogger = activityLogger;\r\n\r\n const state = DependencyResolver.get('component/state/index');\r\n state.set('textSuggestions', {\r\n autoCompleteSuggestions: this.cachedAutoCompleteSuggestions,\r\n creationSuggestions: this.cachedCreationSuggestions,\r\n businessNameSuggestions: this.cachedBusiness,\r\n });\r\n }\r\n\r\n keydown(event) {\r\n switch (event.key) {\r\n case 'Escape':\r\n this.hidePicker();\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n registerGlobalEvents(target) {\r\n $(window).on('click', event => this.clickedAway(event));\r\n $(target).on('keydown', event => this.keydown(event));\r\n }\r\n\r\n hidePicker() {\r\n const existingPickerContainer = $('.mma-ad-strength-suggestion-container');\r\n if (containerExists(existingPickerContainer)) {\r\n ReactDOM.unmountComponentAtNode(_.first(existingPickerContainer));\r\n }\r\n $(window).off('click', this.clickedAway);\r\n $(this.target).off('keydown', this.keydown);\r\n }\r\n\r\n clickedAway(event) {\r\n const target = $(event.target);\r\n if (target.closest('.ad-strength-suggestion-helper-area').length === 0 &&\r\n target.closest('.mma-ad-strength-suggestion-container').length === 0) {\r\n this.hidePicker();\r\n }\r\n }\r\n\r\n // eslint-disable-next-line max-len\r\n renderPicker(target, field, viewModel, assetType, element, scenario, input, finalUrl) {\r\n const { containerSelector, i18n } = this;\r\n const existingPickerContainer = $('.mma-ad-strength-suggestion-container');\r\n let suggestions\r\n = this.filterSuggestion(viewModel, assetType, input, field, finalUrl);\r\n if (field === 'BusinessName' && input) {\r\n suggestions = [];\r\n }\r\n if (!_.isEmpty(suggestions) && containerExists(existingPickerContainer)) {\r\n const pickerContainer = _.first(existingPickerContainer);\r\n // render latest picker\r\n ReactDOM.render(React.createElement(AdStrengthSuggestionPicker, {\r\n element,\r\n itemsToDisplay: suggestions,\r\n target,\r\n field,\r\n container: $(containerSelector),\r\n pickerContainer,\r\n viewModel,\r\n assetType,\r\n i18n,\r\n activityLogger: this.activityLogger,\r\n scenario,\r\n permissions: this.pageContext.Permissions,\r\n input,\r\n }), pickerContainer);\r\n this.registerGlobalEvents(target);\r\n } else {\r\n this.hidePicker();\r\n }\r\n }\r\n\r\n // Only value of target field which is the input and the finalUrl matter.\r\n isAutoCompleteSuggestionCached(assetType, finalUrl, input) {\r\n const {\r\n cachedAutoCompleteSuggestions,\r\n } = this;\r\n\r\n return (\r\n finalUrl &&\r\n assetType &&\r\n input &&\r\n _.get(cachedAutoCompleteSuggestions, [finalUrl, assetType, input])\r\n );\r\n }\r\n\r\n isCreationSuggestionCached(finalUrl) {\r\n const {\r\n cachedCreationSuggestions,\r\n } = this;\r\n\r\n return (\r\n finalUrl &&\r\n cachedCreationSuggestions[finalUrl] &&\r\n !_.isEmpty(cachedCreationSuggestions[finalUrl])\r\n );\r\n }\r\n\r\n isBusinessCached(finalUrl) {\r\n const {\r\n cachedBusiness,\r\n } = this;\r\n\r\n return (\r\n finalUrl &&\r\n cachedBusiness[finalUrl] &&\r\n !_.isEmpty(cachedBusiness[finalUrl])\r\n );\r\n }\r\n\r\n filterSuggestion(viewModel, assetType, input, field, finalUrl) {\r\n const targetSuggestions =\r\n // eslint-disable-next-line no-nested-ternary\r\n input ?\r\n this.cachedAutoCompleteSuggestions[finalUrl] && this.cachedAutoCompleteSuggestions[finalUrl][assetType] && this.cachedAutoCompleteSuggestions[finalUrl][assetType][input] :\r\n (assetType === assetSuggestionType.BusinessName ?\r\n this.cachedBusiness[finalUrl] : this.cachedCreationSuggestions[finalUrl]);\r\n const filteredSuggestions =\r\n _.filter(targetSuggestions, (suggestion) => {\r\n if (suggestion.AssetType.toLowerCase() !== assetType || _.isEmpty(suggestion.Text)) {\r\n return false;\r\n }\r\n const suggestionContent = suggestion.Text.toLowerCase();\r\n // If the input field is not empty, provide suggestions which start with the inputted text.\r\n if (!_.isEmpty(input) && !suggestionContent.startsWith(input.toLowerCase())) {\r\n return false;\r\n }\r\n\r\n /* Filter out asset that have been inputted */\r\n if (field.startsWith('Headline')) {\r\n for (let i = 0; i < viewModel.showHeadlineCount(); i++) {\r\n const key = `Headline${i}`;\r\n if (suggestion.Text === viewModel.model.get(key)) {\r\n return false;\r\n }\r\n }\r\n } else if (field.startsWith('LongHeadline')) {\r\n for (let i = 0; i < viewModel.showLongHeadlineCount(); i++) {\r\n const key = `LongHeadline${i}`;\r\n if (suggestion.Text === viewModel.model.get(key)) {\r\n return false;\r\n }\r\n }\r\n } else if (field.startsWith('Description')) {\r\n for (let i = 0; i < viewModel.showDescriptionCount(); i++) {\r\n const key = `Description${i}`;\r\n if (suggestion.Text === viewModel.model.get(key)) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n });\r\n return filteredSuggestions;\r\n }\r\n\r\n autoFillSuggestionsMultipleField({\r\n view,\r\n viewModel,\r\n finalUrl,\r\n scenario,\r\n }) {\r\n const model = viewModel.model.toJSON();\r\n const nonEmptyHeadlineCount =\r\n _.filter(headlineFields, field => !_.isEmpty(model[field])).length;\r\n if (nonEmptyHeadlineCount < viewModel.autoFillHeadlineCount) {\r\n const headlineSuggestions = this.filterSuggestion(viewModel, assetSuggestionType.Headline, null, 'Headline', finalUrl);\r\n for (let i = 0, j = 0; i < viewModel.showHeadlineCount() &&\r\n i < headlineSuggestions.length &&\r\n j < viewModel.autoFillHeadlineCount - nonEmptyHeadlineCount; i++) {\r\n const targetField = headlineFields[i];\r\n const targetSuggestion = headlineSuggestions[i].Text;\r\n if (_.isEmpty(model[targetField])) {\r\n $(`.${targetField}-value`).val(targetSuggestion);\r\n viewModel.model.set(targetField, targetSuggestion);\r\n view[targetField].trigger('input-changed');\r\n this.activityLogger.signal(`${targetField}, ${targetSuggestion}`, `${scenario} asset suggestions auto-fill`);\r\n j++;\r\n }\r\n }\r\n }\r\n\r\n const nonEmptyLongHeadlineCount =\r\n _.filter(longHeadlineFields, field => !_.isEmpty(model[field])).length;\r\n if (nonEmptyLongHeadlineCount < viewModel.autoFillLongHeadlineCount) {\r\n const longHeadlineSuggestions = this.filterSuggestion(viewModel, assetSuggestionType.LongHeadline, null, 'LongHeadline', finalUrl);\r\n for (let i = 0, j = 0; i < viewModel.showLongHeadlineCount() &&\r\n i < longHeadlineSuggestions.length &&\r\n j < viewModel.autoFillLongHeadlineCount - nonEmptyLongHeadlineCount; i++) {\r\n const targetField = longHeadlineFields[i];\r\n const targetSuggestion = longHeadlineSuggestions[i].Text;\r\n if (_.isEmpty(model[targetField])) {\r\n $(`.${targetField}-value`).val(targetSuggestion);\r\n viewModel.model.set(targetField, targetSuggestion);\r\n view[targetField].trigger('input-changed');\r\n this.activityLogger.signal(`${targetField}, ${targetSuggestion}`, `${scenario} asset suggestions auto-fill`);\r\n j++;\r\n }\r\n }\r\n }\r\n\r\n const nonEmptyDescriptionCount =\r\n _.filter(descriptionFields, field => !_.isEmpty(model[field])).length;\r\n if (nonEmptyDescriptionCount < viewModel.autoFillDescriptionCount) {\r\n const descriptionSuggestions = this.filterSuggestion(viewModel, assetSuggestionType.Description, null, 'Description', finalUrl);\r\n for (let i = 0, j = 0; i < viewModel.showDescriptionCount() &&\r\n i < descriptionSuggestions.length &&\r\n j < viewModel.autoFillDescriptionCount - nonEmptyDescriptionCount; i++) {\r\n const targetField = descriptionFields[i];\r\n const targetSuggestion = descriptionSuggestions[i].Text;\r\n if (_.isEmpty(model[targetField])) {\r\n $(`.${targetField}-value`).val(targetSuggestion);\r\n viewModel.model.set(targetField, targetSuggestion);\r\n view[targetField].trigger('input-changed');\r\n this.activityLogger.signal(`${targetField}, ${targetSuggestion}`, `${scenario} asset suggestions auto-fill`);\r\n j++;\r\n }\r\n }\r\n }\r\n }\r\n\r\n autoFillSuggestionsSingleField({\r\n view,\r\n viewModel,\r\n finalUrl,\r\n scenario,\r\n }) {\r\n const model = viewModel.model.toJSON();\r\n _.each(singleAssetSuggestionType, (viewField, field) => {\r\n if (_.isEmpty(model[field])) {\r\n const headlineSuggestions = this.filterSuggestion(\r\n viewModel,\r\n assetSuggestionType[field], null, field, finalUrl\r\n );\r\n if (!_.isEmpty(headlineSuggestions)) {\r\n const targetSuggestion = headlineSuggestions[0].Text;\r\n const targetField = `.${field}-value`;\r\n\r\n $(targetField).val(targetSuggestion);\r\n viewModel.model.set(field, targetSuggestion);\r\n view[viewField].trigger('input-changed');\r\n this.activityLogger.signal(`${field}, ${targetSuggestion}`, `${scenario} asset suggestions auto-fill`);\r\n }\r\n }\r\n });\r\n }\r\n\r\n getAdStrengthSuggestion({\r\n assetType,\r\n target,\r\n field,\r\n viewModel,\r\n element,\r\n scenario,\r\n }) {\r\n const {\r\n containerSelector, pageContext,\r\n } = this;\r\n const existingPickerContainer = $('.mma-ad-strength-suggestion-container');\r\n if (!containerExists(existingPickerContainer)) {\r\n const containerToUse = $('
    ');\r\n containerToUse.appendTo($(containerSelector));\r\n } else {\r\n this.hidePicker();\r\n }\r\n\r\n const repository = new AdStrengthSuggestionRepository({\r\n field,\r\n assetType,\r\n viewModel,\r\n pageContext,\r\n scenario,\r\n });\r\n\r\n const finalUrl = !_.isEmpty(viewModel.model.get('FinalUrls')) ?\r\n _.first(viewModel.model.get('FinalUrls')) : null;\r\n\r\n const inputText = viewModel.model.get(field);\r\n const isAutoComplete = !_.isEmpty(inputText);\r\n\r\n if (isAutoComplete) {\r\n this.activityLogger.signal(`${field}`, `${scenario} auto complete displayed`);\r\n }\r\n return new Promise((resolve) => {\r\n if (isValidUrl(finalUrl) && isAutoComplete && !this.isAutoCompleteSuggestionCached(assetType, finalUrl, inputText)) {\r\n repository.fetchAdStrengthSuggestion(true)\r\n .then(({ data }) => {\r\n this.cachedAutoCompleteSuggestions =\r\n {\r\n ...this.cachedAutoCompleteSuggestions,\r\n [finalUrl]: {\r\n ...this.cachedAutoCompleteSuggestions[finalUrl],\r\n [assetType]: {\r\n ..._.get(this.cachedAutoCompleteSuggestions, [finalUrl, assetType]),\r\n [inputText]: data,\r\n },\r\n },\r\n };\r\n resolve();\r\n });\r\n } else {\r\n // No field value found in the model.\r\n // So we can just read it from the cache which is guranteed by getAdStrengthSuggestionForURL\r\n // which will be called everytime URL is altered.\r\n resolve();\r\n }\r\n })\r\n .then(() => {\r\n this.renderPicker(\r\n target,\r\n field,\r\n viewModel,\r\n assetType,\r\n element,\r\n scenario,\r\n inputText,\r\n finalUrl\r\n );\r\n });\r\n }\r\n\r\n getAdStrengthSuggestionForURL({\r\n view,\r\n viewModel,\r\n scenario,\r\n }) {\r\n const {\r\n pageContext,\r\n } = this;\r\n\r\n const repository = new AdStrengthSuggestionRepository({\r\n viewModel,\r\n pageContext,\r\n scenario,\r\n });\r\n\r\n const finalUrl = _.first(viewModel.model.get('FinalUrls'));\r\n\r\n if (isValidUrl(finalUrl)) {\r\n const creationFetchPromise = (this.isCreationSuggestionCached(finalUrl) ?\r\n Promise.resolve({ data: this.cachedCreationSuggestions[finalUrl] }) :\r\n repository.fetchAdStrengthSuggestion(false)\r\n ).then(({ data }) => {\r\n this.cachedCreationSuggestions[finalUrl] = data;\r\n viewModel.currentSuggestions = data;\r\n // audience campaign -> ad\r\n if (view.isAudienceCampaign) {\r\n if (pageContext.Permissions && !pageContext.Permissions.IsResponsiveAdRecommendationMSANEnabled) {\r\n if (pageContext.Permissions &&\r\n pageContext.Permissions.IsAudienceCampaignMultiMediaAdsEnabled) {\r\n this.autoFillSuggestionsMultipleField({\r\n view, viewModel, finalUrl, scenario,\r\n });\r\n } else {\r\n this.autoFillSuggestionsSingleField({\r\n view, viewModel, finalUrl, scenario,\r\n });\r\n }\r\n }\r\n // search campaign -> multimedia ad\r\n } else if (pageContext.Permissions &&\r\n pageContext.Permissions.IsMMAAutoFillEnabled) {\r\n this.autoFillSuggestionsMultipleField({\r\n view, viewModel, finalUrl, scenario,\r\n });\r\n }\r\n });\r\n const businessFetchPromise = (this.isBusinessCached(finalUrl) ?\r\n Promise.resolve({ data: this.cachedBusiness[finalUrl] }) :\r\n repository.fetchBusinessInfo(false)\r\n ).then(({ data }) => {\r\n this.cachedBusiness[finalUrl] = data;\r\n }).catch((e) => {\r\n this.activityLogger.signal(`${e.responseText}`, 'finalUrl mismatch');\r\n });\r\n return Promise.all([\r\n creationFetchPromise,\r\n businessFetchPromise,\r\n ]);\r\n }\r\n\r\n return Promise.resolve();\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { AdStrengthSuggestionController } from './asset-suggestion-picker';\r\n\r\nexport const containerExists = container => (!_.isEmpty(container) && container.length > 0);\r\n\r\nlet controller = null;\r\n\r\n/*\r\n * Attaches focus, input event listeners to ad text fields\r\n */\r\nexport const attachAdStrengthSuggestionHelpers = ({\r\n element,\r\n field,\r\n viewModel,\r\n pageContext,\r\n assetType,\r\n i18n,\r\n activityLogger,\r\n scenario,\r\n}) => {\r\n // add the class so that click in the input will not trigger picker to be hidden\r\n element.$el.addClass('ad-strength-suggestion-helper-area');\r\n\r\n const attachedFunc = (event) => {\r\n if (!event) {\r\n return;\r\n }\r\n const { type, target, key } = event;\r\n\r\n const {\r\n selectionStart, selectionEnd,\r\n } = target || {};\r\n // Ignore if any text is selected, we are only interested in the cursor\r\n if (selectionStart !== selectionEnd) {\r\n return;\r\n }\r\n\r\n // Ignore escape key up since it shouldn't prompt any helper\r\n if (type === 'keyup' && key === 'Escape') {\r\n return;\r\n }\r\n\r\n // Delay creating controller since the container won't be available until view is loaded\r\n if (controller === null) {\r\n controller = new AdStrengthSuggestionController({\r\n containerSelector: 'div.ad-properties-section',\r\n pageContext,\r\n i18n,\r\n activityLogger,\r\n });\r\n }\r\n\r\n controller.getAdStrengthSuggestion({\r\n assetType,\r\n target,\r\n field,\r\n viewModel,\r\n element,\r\n scenario,\r\n });\r\n };\r\n\r\n element.on('input-changed', _.debounce(attachedFunc, 300));\r\n element.on('input-focused', attachedFunc);\r\n};\r\n\r\nexport const attachAdStrengthSuggestionHelperForURL = ({\r\n element,\r\n view,\r\n viewModel,\r\n pageContext,\r\n i18n,\r\n activityLogger,\r\n scenario,\r\n}) => {\r\n // add the class so that click in the input will not trigger picker to be hidden\r\n element.$el.addClass('ad-strength-suggestion-helper-area');\r\n\r\n const onUrlChanged = () => {\r\n // Delay creating controller since the container won't be available until view is loaded\r\n if (controller === null) {\r\n controller = new AdStrengthSuggestionController({\r\n containerSelector: 'div.ad-properties-section',\r\n pageContext,\r\n i18n,\r\n activityLogger,\r\n });\r\n }\r\n\r\n controller.getAdStrengthSuggestionForURL({\r\n view,\r\n viewModel,\r\n scenario,\r\n });\r\n };\r\n\r\n onUrlChanged();\r\n\r\n return onUrlChanged;\r\n};\r\n\r\nexport const clearAdStrengthSuggestionController = () => { controller = null; };\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","import _ from 'underscore';\r\nimport { odata } from '@bingads-webui/http-util';\r\nimport { serverContextStore } from '@bingads-webui-campaign/global-context-store';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport { ads } from './test-mock-data/mock';\r\n\r\nexport default class AdRecommendRepository {\r\n constructor(options) {\r\n this.baseURL = `/ODataApi/Campaign/V2${options.baseURL}`;\r\n }\r\n\r\n getRecommendAds(url) {\r\n const query = {\r\n FinalURL: url,\r\n Locale: _.get(serverContextStore, ['state', 'serverContext', 'CurrentLocale'], 'en-US'),\r\n };\r\n\r\n const select = [\r\n 'FinalUrls',\r\n 'BusinessName',\r\n 'Headline',\r\n 'LongHeadline',\r\n 'Text',\r\n 'Model.ResponsiveAd/Images',\r\n 'Model.ResponsiveAd/Headlines',\r\n 'Model.ResponsiveAd/LongHeadlines',\r\n 'Model.ResponsiveAd/Descriptions',\r\n ];\r\n\r\n if (window.e2eTestEnvironment) {\r\n return Promise.resolve({ value: ads });\r\n }\r\n\r\n const config = DependencyResolver.get('component/config/index');\r\n return odata.post(\r\n `${this.baseURL}Ads/Default.GetResponsiveAdRecommendation?$select=${select.join(',')}`,\r\n _.extend({ data: query }, { oDataToken: config.get('odata.token') })\r\n );\r\n }\r\n}\r\n","import React, { useEffect, useState } from 'react';\r\nimport { UiBlocker } from '@bingads-webui-react/ui-blocker';\r\nimport _ from 'underscore';\r\nimport { DefaultButton, Stack } from '@fluentui/react';\r\nimport { AdPlacementCardPreview } from '@bingads-webui-campaign-react/ad-placement-preview';\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\nimport { constants } from '@bingads-webui-campaign-react/image-experience';\r\nimport { IImageExperienceImage } from '@bingads-webui-campaign-react/responsive-ad-editor-utils';\r\nimport AdRecommendRepository from '../utils/ad-recommend-repository';\r\nimport { getRecommendCacheByUrl, setRecommendCache } from './recommend-ad-cache';\r\nimport { IActivityLogger, IRecommendAd, IAdRecommendResponse, ISetUpAdWithRecommendAdParam } from './types';\r\nimport { convertAdUnitsToImageExperiences } from '../utils/ad-recommend-util';\r\n\r\ndeclare let _TL_: any;\r\n\r\ninterface IProps {\r\n url: string;\r\n baseURL: string;\r\n onSaveRecommendAd: () => void;\r\n setUpAdWithRecommendAd: (param: ISetUpAdWithRecommendAdParam) => void;\r\n i18n: any;\r\n i18nErrors: any;\r\n errorCodes: string[];\r\n activityLogger: IActivityLogger;\r\n}\r\n\r\nexport function RecommendAdList(props: IProps) {\r\n const {\r\n url, baseURL, i18n, setUpAdWithRecommendAd, errorCodes, i18nErrors, activityLogger,\r\n } = props;\r\n\r\n const [loaded, setLoaded] = useState(false);\r\n const [creating, setCreating] = useState(false);\r\n const [ads, setAds] = useState([]);\r\n const [imageExperiences, setImageExperiences] = useState([]);\r\n\r\n useEffect(() => {\r\n const fetchRecommendation = async () => {\r\n if (url) {\r\n const repository = new AdRecommendRepository({ baseURL });\r\n\r\n const resultFromCache = getRecommendCacheByUrl(url);\r\n\r\n try {\r\n let res: IAdRecommendResponse;\r\n if (resultFromCache) {\r\n res = resultFromCache;\r\n } else {\r\n res = await repository.getRecommendAds(url);\r\n activityLogger.signal(`fetch ad recommendation. The final URL: ${url}. The Response: ${JSON.stringify(res)}`, 'responsive ad recommendation');\r\n }\r\n setRecommendCache(url, res);\r\n\r\n const result = convertAdUnitsToImageExperiences(res.value, { imageListIndex: 0 });\r\n\r\n setAds(res.value);\r\n setImageExperiences(result);\r\n setLoaded(true);\r\n } catch (error) {\r\n setLoaded(true);\r\n }\r\n }\r\n };\r\n\r\n fetchRecommendation();\r\n }, [activityLogger, baseURL, url]);\r\n\r\n useEffect(() => {\r\n setClarityTag({ AdRecommendationMSANList: 'true' });\r\n activityLogger.signal(`show the recommendation list - recommend-ad-list. The final URL: ${url}.`, 'responsive ad recommendation');\r\n }, [activityLogger, url]);\r\n\r\n async function onEdit(e) {\r\n activityLogger.signal(`Edit - recommend-ad-list. The final URL: ${url}.`, 'responsive ad recommendation');\r\n setCreating(true);\r\n await setUpAdWithRecommendAd({\r\n ad: ads[e.currentTarget.id],\r\n isAdEditShown: true,\r\n shouldSaveAdFromRecommend: false,\r\n });\r\n setCreating(false);\r\n }\r\n\r\n async function onApply(e) {\r\n activityLogger.signal(`Apply - recommend-ad-list. The final URL: ${url}.`, 'responsive ad recommendation');\r\n setCreating(true);\r\n await setUpAdWithRecommendAd({\r\n ad: ads[e.currentTarget.id],\r\n isAdEditShown: false,\r\n shouldSaveAdFromRecommend: true,\r\n });\r\n setCreating(false);\r\n }\r\n\r\n return imageExperiences.length === 0 ? null : (\r\n
    \r\n \r\n
    {i18n.getString(_TL_('Recommended Ads for this Campaign'))}
    \r\n
    \r\n \r\n {imageExperiences.map((item, index) => {\r\n const {\r\n Headline,\r\n LongHeadline,\r\n Text,\r\n BusinessName,\r\n } = ads[index];\r\n const { aspectRatio, imagePreviewHeight } = constants.aspectRatios.Image191x100;\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 {errorCodes.map((errorCode: string) => (\r\n
    \r\n {i18nErrors.getString(`API_ErrorNumber_${errorCode}`) || i18nErrors.getString('ErrorNumber_-1')}\r\n
    \r\n ))}\r\n
    \r\n \r\n
    \r\n );\r\n}\r\n","\r\nimport _ from 'underscore';\r\nimport React, { useCallback, useEffect, useMemo } from 'react';\r\nimport {\r\n UAPPlacementTypeAlias as EPT,\r\n useImageExperienceAdPreviewModel,\r\n UnstyledAdPreviewCarouselLayout as AdPreviewCarouselLayout,\r\n} from '@bingads-webui-campaign-react/unified-ad-preview-library-cmui';\r\nimport { IImageExperienceImage } from '@bingads-webui-campaign-react/responsive-ad-editor-utils';\r\n\r\nimport { IRecommendAd } from './types';\r\n\r\nconst adPreviewConfig = [{\r\n placementSetName: 'RecommandAd',\r\n placementTypes: [EPT.MSAN.MSEdgeSingleCarousel],\r\n}];\r\n\r\nconst adPreviewConfigMMAV2 = [{\r\n placementSetName: 'RecommandAD-MMAV2',\r\n placementTypes: [EPT.MSANV2.MSNCarousel],\r\n}];\r\n\r\ninterface IRecommendAdPreviewCarouselProps {\r\n isMMAV2Enabled: boolean;\r\n imageList: IImageExperienceImage[];\r\n ads: IRecommendAd[];\r\n url: string;\r\n activeIndex: number;\r\n setActiveIndex: (index: number) => void;\r\n i18n: any;\r\n}\r\n\r\nexport const RecommandAdPreviewCarousel = ({\r\n isMMAV2Enabled,\r\n imageList,\r\n ads,\r\n url,\r\n activeIndex,\r\n setActiveIndex,\r\n i18n,\r\n}: IRecommendAdPreviewCarouselProps) => {\r\n const {\r\n onUpdateImageExperienceImageList,\r\n multiImagePlacementSets: placementSets,\r\n } = useImageExperienceAdPreviewModel(isMMAV2Enabled ? adPreviewConfigMMAV2 : adPreviewConfig);\r\n\r\n useEffect(() => {\r\n // transform imageList to 2-dimensional array, the 1st dimension is image,\r\n // and the 2nd dimension is placement\r\n const finalImageList = _.map(imageList, image => ([image]));\r\n onUpdateImageExperienceImageList(finalImageList);\r\n }, [imageList, onUpdateImageExperienceImageList]);\r\n\r\n const curPlacementList = useMemo(() => {\r\n const { placementList } = _.first(placementSets) || {};\r\n // each placement has multiple images, and for this case,\r\n // make each image in a placement as a separated placement\r\n const finalPlacementList = [];\r\n _.forEach(placementList, ({ images, ...rest }) => {\r\n _.forEach(images, (image) => {\r\n finalPlacementList.push({ ...rest, ...image });\r\n });\r\n });\r\n return finalPlacementList;\r\n }, [placementSets]);\r\n\r\n const onRenderPlacement = useCallback((placement, AdPlacementComponent, idx) => {\r\n const {\r\n LongHeadline, Headline, Text, BusinessName,\r\n } = ads[idx] || {};\r\n return (\r\n
    \r\n \r\n
    \r\n );\r\n }, [ads, i18n, url]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n","import React from 'react';\r\nimport { DefaultButton, PrimaryButton, Stack } from '@fluentui/react';\r\nimport { UiBlocker } from '@bingads-webui-react/ui-blocker';\r\nimport { IImageExperienceImage } from '@bingads-webui-campaign-react/responsive-ad-editor-utils';\r\n\r\nimport { IRecommendAd, IActivityLogger, ISetUpAdWithRecommendAdParam } from './types';\r\nimport './style.less';\r\nimport { RecommandAdPreviewCarousel } from './recommend-ad-preview-carousel';\r\n\r\ndeclare let _TL_;\r\n\r\ninterface RecommendAdCarouselProps {\r\n i18n: any;\r\n url: string;\r\n toggleOpen: (val: boolean) => void;\r\n setUpAdWithRecommendAd: (param: ISetUpAdWithRecommendAdParam) => void;\r\n ads: IRecommendAd[];\r\n imageExperiences: IImageExperienceImage[];\r\n isMMAV2Enabled: boolean;\r\n activityLogger: IActivityLogger;\r\n}\r\n\r\ninterface RecommendAdCarouselState {\r\n selectedIndex: number;\r\n creating: boolean;\r\n errorMessage: string;\r\n}\r\n\r\nexport class RecommendAdCarousel extends\r\n React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n selectedIndex: 0,\r\n errorMessage: '',\r\n creating: false,\r\n };\r\n }\r\n\r\n render() {\r\n const {\r\n url, i18n, toggleOpen, setUpAdWithRecommendAd, imageExperiences, ads, isMMAV2Enabled,\r\n } = this.props;\r\n\r\n const {\r\n selectedIndex,\r\n errorMessage,\r\n creating,\r\n } = this.state;\r\n\r\n return (\r\n \r\n
    \r\n

    {i18n.getString(_TL_('Ad Recommendation Preview'))}

    \r\n this.setState({ selectedIndex: idx })}\r\n isMMAV2Enabled={isMMAV2Enabled}\r\n imageList={imageExperiences}\r\n ads={ads}\r\n url={url}\r\n i18n={i18n}\r\n />\r\n
    \r\n \r\n {\r\n this.props.activityLogger.signal(`create this ad - recommend-ad-carusel. The final URL: ${url}.`, 'responsive ad recommendation');\r\n this.setState({\r\n creating: true,\r\n });\r\n try {\r\n await setUpAdWithRecommendAd({\r\n ad: ads[selectedIndex],\r\n isAdEditShown: true,\r\n shouldSaveAdFromRecommend: false,\r\n });\r\n toggleOpen(false);\r\n } catch (error) {\r\n this.setState({\r\n errorMessage: i18n.getString(_TL_('Failed to create this ad.')),\r\n });\r\n } finally {\r\n this.setState({\r\n creating: false,\r\n });\r\n }\r\n }}\r\n text={i18n.getString(_TL_('Create this ad'))}\r\n />\r\n {\r\n this.props.activityLogger.signal(`cancel - recommend-ad-carusel. The final URL: ${url}.`, 'responsive ad recommendation');\r\n toggleOpen(false);\r\n }}\r\n text={i18n.getString(_TL_('Cancel'))}\r\n />\r\n
    {errorMessage}
    \r\n
    \r\n
    \r\n
    \r\n\r\n );\r\n }\r\n}\r\n","export interface ICropSettings {\r\n SourceX: number,\r\n SourceY: number,\r\n SourceWidth: number,\r\n SourceHeight: number\r\n}\r\n\r\n\r\nexport interface IAssetPayload {\r\n id: number;\r\n idString: string;\r\n subType: string;\r\n cropX?: number;\r\n cropY?: number;\r\n cropWidth?: number;\r\n cropHeight?: number;\r\n}\r\n\r\nexport enum AssociationType {\r\n Image191x100 = 'Image191x100',\r\n Image178x100 = 'Image178x100',\r\n Image172x100 = 'Image172x100',\r\n Image169x100 = 'Image169x100',\r\n Image155x100 = 'Image155x100',\r\n Image150x100 = 'Image150x100',\r\n Image133x100 = 'Image133x100',\r\n Image1x1 = 'Image1x1',\r\n Image93x100 = 'Image93x100',\r\n OriginalImage = 'OriginalImage',\r\n}\r\n\r\nexport interface IImageExperienceImage {\r\n setIncluded(val: boolean): void;\r\n isMaunalCropped(): boolean;\r\n isManualEdited(val: boolean): boolean;\r\n setCropSettings(cropSettings: ICropSettings): void;\r\n formatToSave(isMultimediaAd?: boolean, isVideoThumbnail?: boolean, overrideInfo?: any, isMMAV2Enabled?: boolean): IAssetPayload;\r\n copyEffectsFromOther(another: IImageExperienceImage): void;\r\n setType(AssociationType): void;\r\n isLogo: boolean;\r\n IsIncluded: boolean;\r\n isAutoCropping: boolean;\r\n Type: AssociationType;\r\n Id: string;\r\n IdString: string;\r\n isVirtual?: boolean;\r\n Width: number;\r\n Height: number;\r\n FinalSrc: string;\r\n CropSettings?: ICropSettings;\r\n BaseId?: number;\r\n associationType: string;\r\n}\r\n\r\nexport interface IImageAssetUpdate {\r\n id: number;\r\n}\r\n\r\nexport interface IImageExperienceImageWithUpdate {\r\n finalIdString: string;\r\n image: IImageExperienceImage;\r\n}\r\n\r\nexport interface IImageInfo {\r\n url: string,\r\n width: number,\r\n height: number,\r\n baseId: string,\r\n metadata: string,\r\n sourceType: string;\r\n isRecommendedImage: boolean;\r\n originalUrl: string;\r\n cropSettingOnOriginal: ICropSettings,\r\n placementSettings: Array,\r\n originalWidth: number,\r\n originalHeight: number,\r\n\r\n}\r\n\r\nexport interface IImageMapUrl {\r\n [key: string]: IImageInfo,\r\n}\r\n\r\nexport interface IMTAsset {\r\n Id: string,\r\n SubType: string,\r\n CropX: number,\r\n CropY: number,\r\n CropWidth: number,\r\n CropHeight: number,\r\n IdString: string,\r\n ImageUrl: string;\r\n Height: number;\r\n Width: number;\r\n}\r\n\r\ninterface ITextAsset {\r\n Asset: {\r\n Text: string;\r\n AssetType: string;\r\n }\r\n}\r\n\r\nexport interface IImageAsset {\r\n Asset: IMTAsset;\r\n}\r\n\r\nexport interface IRecommendAd {\r\n FinalUrls: string[];\r\n Text: string;\r\n Headline: string;\r\n LongHeadline: string;\r\n BusinessName: string;\r\n Headlines: ITextAsset[];\r\n Descriptions: ITextAsset[];\r\n LongHeadlines: ITextAsset[];\r\n Images: IImageAsset[];\r\n}\r\n\r\nexport interface IAdRecommendResponse {\r\n value: IRecommendAd[];\r\n}\r\n\r\nexport interface IActivityLogger{\r\n signal: (args0: string, args1: string) => void;\r\n}\r\n\r\nexport interface ISetUpAdWithRecommendAdParam {\r\n ad: IRecommendAd,\r\n isAdEditShown?: boolean,\r\n shouldSaveAdFromRecommend: boolean,\r\n}\r\n\r\nexport interface ResponsiveAdForPreview {\r\n images: IImageExperienceImage[][],\r\n shortHeadline: string;\r\n longHeadline: string;\r\n description: string;\r\n businessName: string;\r\n url: string;\r\n}\r\n","import React from 'react';\r\nimport _ from 'underscore';\r\nimport { Alert } from '@bingads-webui-react/alert';\r\nimport { isValidUrl } from '@bingads-webui/url-util';\r\nimport { Modal, Stack, Spinner, SpinnerSize, ISpinnerStyles } from '@fluentui/react';\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\nimport { IImageExperienceImage } from '@bingads-webui-campaign-react/responsive-ad-editor-utils';\r\nimport { RecommendAdCarousel } from './recommend-ad-carousel';\r\nimport AdRecommendRepository from '../utils/ad-recommend-repository';\r\nimport { IActivityLogger, IRecommendAd, IAdRecommendResponse, ISetUpAdWithRecommendAdParam } from './types';\r\nimport { getRecommendCacheByUrl, setRecommendCache } from './recommend-ad-cache';\r\nimport { convertAdUnitsToImageExperiences } from '../utils/ad-recommend-util';\r\n\r\nimport './style.less';\r\n\r\ndeclare let _TL_;\r\n\r\ninterface RecommendButtonProps {\r\n model: any;\r\n i18n: any;\r\n baseURL: string;\r\n setUpAdWithRecommendAd: (param: ISetUpAdWithRecommendAdParam) => void;\r\n activityLogger: IActivityLogger;\r\n shouldOverrideAdInEditor: boolean;\r\n isMMAV2Enabled: boolean;\r\n}\r\n\r\ninterface IState {\r\n isOpen: boolean;\r\n url: string;\r\n loaded: boolean;\r\n ads: IRecommendAd[];\r\n imageExperiences: IImageExperienceImage[];\r\n}\r\n\r\nexport class RecommendButton extends React.Component {\r\n constructor(props: RecommendButtonProps) {\r\n super(props);\r\n\r\n this.state = {\r\n isOpen: false,\r\n loaded: false,\r\n ads: [],\r\n imageExperiences: [],\r\n url: _.first(_.result(props.model.attributes, 'FinalUrls')),\r\n };\r\n }\r\n\r\n componentDidMount(): void {\r\n this.fetchRecommendation();\r\n }\r\n\r\n startToLoad = (url: string) => {\r\n if (url === this.state.url) {\r\n return;\r\n }\r\n this.setState({\r\n url,\r\n loaded: false,\r\n }, () => {\r\n this.fetchRecommendation();\r\n });\r\n };\r\n\r\n cleanData = () => {\r\n this.setState({\r\n ads: [],\r\n loaded: true,\r\n });\r\n };\r\n\r\n toggleOpen = (val: boolean) => {\r\n this.setState({\r\n isOpen: val,\r\n });\r\n };\r\n\r\n isRecommendAdinEditor = (res) => {\r\n const { model }= this.props;\r\n return _.any(res.value, item =>\r\n model.get('Headline0') === item.Headline &&\r\n model.get('Description0') === item.Text &&\r\n model.get('LongHeadline0') === item.LongHeadline &&\r\n model.get('Path1') === item.Path1 &&\r\n model.get('FinalUrls') === item.FinalUrls);\r\n };\r\n\r\n fetchRecommendation = async () => {\r\n const { baseURL } = this.props;\r\n const { url } = this.state;\r\n const repository = new AdRecommendRepository({ baseURL });\r\n\r\n if (isValidUrl(url)) {\r\n try {\r\n const resultFromCache = getRecommendCacheByUrl(url);\r\n let res: IAdRecommendResponse;\r\n if (resultFromCache) {\r\n res = resultFromCache;\r\n } else {\r\n res = await repository.getRecommendAds(url);\r\n this.props.activityLogger.signal(`fetch ad recommendation. The final URL: ${url}. The Response: ${JSON.stringify(res)}`, 'responsive ad recommendation');\r\n this.props.activityLogger.signal(`show recommendation button - recommend ad button. The final URL: ${url}.`, 'responsive ad recommendation');\r\n setRecommendCache(url, res);\r\n }\r\n // ad recommend preview for V2 image aspect ratio is 1.69, for V1 is 1.78\r\n const index = this.props.isMMAV2Enabled ? 4 : 1;\r\n const result = convertAdUnitsToImageExperiences(res.value, { imageListIndex: index }, this.props.isMMAV2Enabled);\r\n\r\n try {\r\n if (!_.isEmpty(res.value) && !this.isRecommendAdinEditor(res) && this.props.shouldOverrideAdInEditor) {\r\n await this.props.setUpAdWithRecommendAd({\r\n ad: res.value[0],\r\n shouldSaveAdFromRecommend: false,\r\n });\r\n }\r\n this.props.activityLogger.signal(`recommendation prefill sucessfully, The final URL: ${url}.`, 'responsive ad recommendation');\r\n setClarityTag({ AdRecommendPrefill: 'true' });\r\n } finally {\r\n this.setState({\r\n ads: res.value,\r\n loaded: true,\r\n imageExperiences: result,\r\n });\r\n }\r\n } catch (error) {\r\n this.setState({\r\n loaded: true,\r\n });\r\n }\r\n }\r\n };\r\n\r\n render() {\r\n const {\r\n i18n, setUpAdWithRecommendAd,\r\n } = this.props;\r\n\r\n const {\r\n isOpen, loaded, url, ads, imageExperiences,\r\n } = this.state;\r\n\r\n if (!isValidUrl(url)) {\r\n return null;\r\n }\r\n\r\n if (!loaded) {\r\n const spinnerStyles: ISpinnerStyles = { label: { color: 'black' } };\r\n return (\r\n
    \r\n \r\n \r\n \r\n
    \r\n );\r\n }\r\n\r\n return ads.length === 0 ? null : (\r\n
    \r\n {\r\n this.toggleOpen(true);\r\n this.props.activityLogger.signal(`view recommendations - recommend ad button. The final URL: ${url}.`, 'responsive ad recommendation');\r\n setClarityTag({ AdRecommendationMSANModal: 'true' });\r\n },\r\n }}\r\n message={i18n.getString(_TL_('Ads recommended based on the Final URL.'))}\r\n level=\"Info\"\r\n icon={(
    )}\r\n dismissible={false}\r\n />\r\n this.toggleOpen(false)}\r\n isBlocking={false}\r\n >\r\n \r\n \r\n
    \r\n );\r\n }\r\n}\r\n\r\n\r\nexport function urlChangeForRecommendationAd(\r\n element,\r\n reactComponentRef: React.RefObject\r\n) {\r\n const onUrlFocusout = (url: string) => {\r\n reactComponentRef.current && reactComponentRef.current.startToLoad(url);\r\n };\r\n\r\n const onUrlChanged = () => {\r\n reactComponentRef.current && reactComponentRef.current.cleanData();\r\n };\r\n\r\n element.on('urlChanged', onUrlChanged);\r\n element.on('urlFocusout', onUrlFocusout);\r\n}\r\n","import React, { forwardRef, useImperativeHandle } from 'react';\r\nimport { isString, size } from 'underscore';\r\nimport { RemainingCharsValidatedTextField } from '@bingads-webui-campaign-react/remaining-chars-hint';\r\nimport { ResponsiveAd } from '@bingads-webui/campaign-odata-schemas';\r\n\r\n// eslint-disable-next-line no-underscore-dangle\r\ndeclare let _TL_: any;\r\n\r\ninterface CallToActionTextProps {\r\n i18n: any;\r\n defaultValue: string;\r\n}\r\n\r\nexport const CallToActionText: React.FC = forwardRef(({ i18n, defaultValue = '' }: CallToActionTextProps, ref) => {\r\n const textFieldRef = React.useRef(null); // Create a ref for the TextField\r\n const [errorMessage, setErrorMessage] = React.useState('');\r\n const { maxLength }= ResponsiveAd.properties.CallToActionText;\r\n\r\n useImperativeHandle(ref, () => ({\r\n getData: (): string => textFieldRef.current.value.trim(),\r\n isValid: () => {\r\n const value = textFieldRef.current.value.trim();\r\n return isString(value) && size(value) > 0 && size(value) <= maxLength;\r\n },\r\n }));\r\n\r\n const handleChange = (event, [newValue]) => {\r\n const value = newValue.trim();\r\n setErrorMessage(size(value) === 0 ? i18n.getString(_TL_('Required field')) : '');\r\n };\r\n\r\n return (\r\n \r\n );\r\n});\r\n\r\n","import Backbone from 'backbone';\r\nimport ReactDOM from 'react-dom';\r\nimport React from 'react';\r\nimport ko from 'knockout';\r\nimport { BackboneSchema as backboneSchema } from '@bingads-webui/backbone-schema';\r\nimport _ from 'underscore';\r\nimport $ from 'jquery';\r\nimport Promise from 'bluebird';\r\nimport { InputControl } from '@bingads-webui/input-control';\r\nimport { cloneDeep } from '@bingads-webui-universal/primitive-utilities';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport { AudienceCampaignErrorsView, ImpressionTrackingUrlOptions } from '@bingads-webui-campaign/audience-campaign-shared';\r\nimport {\r\n ThirdPartyMeasurementBackboneView,\r\n getVerifiedTrackingSettingWrite,\r\n getVerifiedTrackingSettingsRead\r\n} from '@bingads-webui-campaign-react/third-party-measurement';\r\nimport { RemainingCharsHint } from '@bingads-webui/remaining-chars-hint';\r\nimport { attachAdCustomizersHelpers, evaluateAdCustomizers } from '@bingads-webui-campaign/ad-customizers';\r\nimport { HotspotPanel, BoostAnchors } from '@bingads-webui-campaign-react/responsive-ad-editor-components';\r\nimport {\r\n attachAIGenAssetContextualAttribute,\r\n} from '@bingads-webui-campaign/responsive-search-ad-strength';\r\nimport { CallToActionAriaText } from '@bingads-webui-campaign-react/legacy-call-to-action';\r\n\r\nimport template from './template.pug';\r\nimport editorHeadlineDescriptionOnlyTemplate from './editorHeadlineDescriptionOnly.pug';\r\nimport { MMAAssetConfigs, ResponsiveAdConfigs } from '../config';\r\nimport { attachAdStrengthSuggestionHelpers, clearAdStrengthSuggestionController, attachAdStrengthSuggestionHelperForURL } from '../asset-suggestion/asset-suggestion-helper';\r\nimport { headlineFields, longHeadlineFields, descriptionFields, ResponsiveAdScenarios, assetSuggestionType } from '../constants';\r\nimport { RecommendButton, urlChangeForRecommendationAd } from '../ad-recommend';\r\nimport { CallToActionText } from '../call-to-action-text/index.tsx';\r\nimport { getJobResults } from '../mma-creation-rsa/repository';\r\n\r\nconst CallToAction = ['Default', 'NoButton', 'ApplyNow', 'BookNow', 'ContactUs', 'Download', 'GetQuote', 'Install', 'LearnMore', 'SeeMore', 'ShopNow', 'SignUp', 'Subscribe', 'VisitSite', 'AddToCart', 'BookTravel', 'Buy', 'BuyNow', 'OpenLink', 'OrderNow', 'RegisterNow'];\r\n\r\n/**\r\n * AdEdit class that extends {Backbone.View} class\r\n * The class defines the section for ad creation.\r\n *\r\n * @class AdEdit\r\n * @extends {Backbone.View}\r\n */\r\nexport class AdEdit extends Backbone.View {\r\n get events() {\r\n return {\r\n 'click .save-ad-button': 'saveAdAsync',\r\n 'click .ad-mma-add-headline': 'addHeadline',\r\n 'click .ad-mma-add-long-headline': 'addLoneHeadline',\r\n 'click .ad-mma-add-description': 'addDescription',\r\n 'click .expand-cta-options': 'expandCTA',\r\n 'click .expand-boost-anchors-options': 'toggleBoostAnchors',\r\n 'click .headline-delete': 'removeHeadline',\r\n 'click .long-headline-delete': 'removeLongHeadline',\r\n 'click .description-delete': 'removeDescription',\r\n 'focusout .final-url input.form-control.url-field': 'finalURLChange',\r\n 'keyup .final-url input.form-control.url-value': 'finalURLChange',\r\n 'change .option-select': 'adStatusChange',\r\n 'click .errorCountLink': 'toggleErrorGrid',\r\n 'click #runInBackground': 'hideProgress',\r\n };\r\n }\r\n\r\n /**\r\n * Initialize the ad image manager.\r\n *\r\n * @param {object} options - options, further defined bellow.\r\n *\r\n * @param {object} options.viewContext - viewContext object in order to get the campaign and ad\r\n * group ids.\r\n *\r\n * @param {object} options.ad - ad to be edited.\r\n *\r\n * @param {boolean} options.isUpdate - determines if the ad creation editor should create a new ad\r\n * or update existing one.\r\n *\r\n * @param {boolean} options.isGridDisplay - determine if the save button needs to be shown or not.\r\n *\r\n * @returns {undefined} no return value\r\n *\r\n */\r\n initialize(options = {}) {\r\n this.isForVNext = options.isForVNext || false;\r\n this.isUpdate = this.isAdNotEmpty(options.ad) && (options.ad.isSaved !== false);\r\n this.campaignSettings = options.campaignSettings;\r\n this.ad = _.omit(options.ad, v => (typeof v !== 'number' && (this.isEmpty(v) || v[0] == null)));\r\n this.showSaveButton = options.isGridDisplay || false;\r\n this.logScenario = options.logScenario;\r\n this.baseURL = options.baseURL;\r\n this.isSimplifyAudienceCreation = options.isSimplifyAudienceCreation;\r\n this.isAdRecommendationMSANEnabled = options.isAdRecommendationMSANEnabled;\r\n this.newI18n = options.newI18n;\r\n this.i18n = DependencyResolver.get('component/i18n/loader!campaignui/feature/audience-campaign');\r\n this.i18nErrors = DependencyResolver.get('component/api-errors-campaign/index');\r\n this.config = DependencyResolver.get('component/config/index');\r\n this.permissions = this.config.get('Permissions') || {};\r\n this.odata = DependencyResolver.get('component/http/channel/odata');\r\n this.recommendButtonReactComponent = React.createRef();\r\n this.hotspotReactComponent = React.createRef();\r\n this.boostAnchorsReactComponent = React.createRef();\r\n this.callToActionTextComponent = React.createRef();\r\n this.callToActionAriaTextComponent = React.createRef();\r\n this.instrumentation = options.instrumentation;\r\n this.scenario = options.scenario;\r\n this.edm = options.edm;\r\n this.jsdata = options.jsdata;\r\n this.isVideo = options.isVideo;\r\n this.isMobileUrlEnabled = options.isMobileUrlEnabled == null ?\r\n true : options.isMobileUrlEnabled;\r\n this.viewContext = options.viewContext;\r\n this.pageContext = options.pageContext;\r\n this.isImpressionTrackingUrlsEnabled =\r\n (this.viewContext &&\r\n (_.result(this.viewContext.currentCampaign, 'CampaignType') === 1 ||\r\n _.result(this.viewContext.currentCampaign, 'CampaignType') === 'Default')) ||\r\n options.isImpressionTrackingUrlsEnabled == null ?\r\n false : options.isImpressionTrackingUrlsEnabled;\r\n\r\n this.biddingSchemeType = this.getBiddingSchemeType(options);\r\n this.isThirdPartyMeasurementEnabled =\r\n (_.result(this.viewContext.currentCampaign, 'CampaignType') === 'Audience' ||\r\n _.result(this.viewContext.currentCampaign, 'CampaignType') === 8) &&\r\n (_.result(this.viewContext.currentCampaign, 'CampaignSubType') === 'AudienceStatic' ||\r\n _.result(this.viewContext.currentCampaign, 'CampaignSubType') === 0);\r\n this.isMOATEnabled = _.get(this.permissions, 'IsMOATEnabled', false);\r\n\r\n this.ImpressionTrackingUrlsMaxCount =\r\n this.permissions.IsUpToSixImpressionTrackingUrlsEnabled ? 6 : 2;\r\n\r\n this.isAudienceCampaign = options.isAudienceCampaign;\r\n this.isMSANLogoAndCTAForMMAEnabled = options.isMSANLogoAndCTAForMMAEnabled;\r\n this.isMultimediaAd = options.isMultimediaAd;\r\n this.isBulkEditMMA = options.isBulkEditMMA;\r\n\r\n this.isMultiMediaAdsPhase2Enabled =\r\n this.isMultimediaAd && this.permissions.IsMultiMediaAdsPhase2Enabled;\r\n this.isMMAAutomatedCTAOptInEnabled =\r\n this.isMultimediaAd && this.permissions.IsMMAAutomatedCTAOptInEnabled;\r\n this.callToActionSetting = this.campaignSettings && _.find(this.campaignSettings, setting => setting['@odata.type'] === '#Model.CallToActionSetting');\r\n this.automatedCTAEnable = !this.callToActionSetting || !this.callToActionSetting.AutomatedCallToActionOptOut;\r\n\r\n this.isAudienceCampaignMultiMediaAdsEnabled =\r\n this.permissions.IsAudienceCampaignMultiMediaAdsEnabled &&\r\n (_.result(this.viewContext.currentCampaign, 'CampaignType') === 'Audience' ||\r\n _.result(this.viewContext.currentCampaign, 'CampaignType') === 8) &&\r\n !options.isVideo;\r\n\r\n this.isBoostScenario = this.isAudienceCampaign && this.permissions.IsAmplifyEnabled;\r\n this.isBoostCTAAriaTextEnabled = this.isBoostScenario && this.permissions.IsBoostCTAAriaTextEnabled;\r\n this.isBoostAnchorsEnabled = this.isBoostScenario && this.permissions.IsBoostAnchorEnabled;\r\n this.isBoostCustomCTAEnabled = this.permissions.IsBoostCustomCTAEnabled;\r\n\r\n this.isMMAAdCustomizersEnabled = this.permissions.IsMMACountdownInsertionEnabled ||\r\n this.permissions.IsMMAKeywordInsertionEnabled ||\r\n this.permissions.IsMMALocationInsertionEnabled ||\r\n this.permissions.IsMMAAdCustomizerInsertionEnabled;\r\n\r\n this.IsBoostCTAPhase2Enabled = this.permissions.IsBoostCTAPhase2Enabled;\r\n\r\n this.isMSANBoostEnabled = this.isAudienceCampaign && this.permissions.IsAmplifyEnabled;\r\n this.responsiveAdScenario = ResponsiveAdScenarios.NonMMAResponsive;\r\n\r\n if (this.isMultiMediaAdsPhase2Enabled) {\r\n this.responsiveAdScenario = ResponsiveAdScenarios.MMASearch;\r\n }\r\n\r\n if (this.isAudienceCampaignMultiMediaAdsEnabled) {\r\n this.responsiveAdScenario = ResponsiveAdScenarios.MMAResponsive;\r\n }\r\n\r\n this.responsiveAdScenario = `${this.responsiveAdScenario} | IsMMAAutoFillEnabled: ${this.permissions.IsMMAAutoFillEnabled}`;\r\n\r\n this.isMMAEnabled =\r\n this.isMultiMediaAdsPhase2Enabled || this.isAudienceCampaignMultiMediaAdsEnabled;\r\n\r\n this.isMoveFinalUrlTop = this.isAudienceCampaignMultiMediaAdsEnabled || this.isMultimediaAd;\r\n\r\n this.activityLogger = options.activityLogger;\r\n this.genericErr = new AudienceCampaignErrorsView();\r\n\r\n if (this.ad.Headlines && typeof (this.ad.Headlines) === 'string') {\r\n this.ad.Headlines = JSON.parse(this.ad.Headlines);\r\n }\r\n if (this.ad.LongHeadlines && typeof (this.ad.LongHeadlines) === 'string') {\r\n this.ad.LongHeadlines = JSON.parse(this.ad.LongHeadlines);\r\n }\r\n if (this.ad.Descriptions && typeof (this.ad.Descriptions) === 'string') {\r\n this.ad.Descriptions = JSON.parse(this.ad.Descriptions);\r\n }\r\n\r\n this.setUpAdWithRecommendAd = options.setUpAdWithRecommendAd;\r\n this.shouldOverrideAdInEditor = options.shouldOverrideAdInEditor;\r\n this.isSimplifyAudienceCreation = options.isSimplifyAudienceCreation;\r\n\r\n this.isMMAV2Enabled = options.isMMAV2Enabled;\r\n\r\n this.initHeadlines = this.ad.Headlines ? this.ad.Headlines.length : 0;\r\n this.initLongHeadlines = this.ad.LongHeadlines ? this.ad.LongHeadlines.length : 0;\r\n this.initDescriptions = this.ad.Descriptions ? this.ad.Descriptions.length : 0;\r\n\r\n this.preferencesService = DependencyResolver.get('component/preference/service/index');\r\n this.websiteImageOptInPreferenceName = options.websiteImageOptInPreferenceName;\r\n this.hasWebsiteImageOptedInObservable = options.hasWebsiteImageOptedInObservable;\r\n this.parsedTextMaxLengthExtension = options.parsedTextMaxLengthExtension;\r\n this.onUpdateHotspots = options.onUpdateHotspots;\r\n this.hotspots = options.hotspots;\r\n this.boostAnchorData = _.first(this.ad.BoostAnchors);\r\n this.callToActionText = this.ad && !_.isEmpty(this.ad.CallToActionText) ? this.ad.CallToActionText : null;\r\n this.callToActionAriaText = this.ad && !_.isEmpty(this.ad.CallToActionAriaText) ? this.ad.CallToActionAriaText : null;\r\n\r\n if (options.isBulkEditMMA) {\r\n this.adStatusOptions = [\r\n {\r\n text: this.i18n.getString('Active'),\r\n value: 'Active',\r\n },\r\n {\r\n text: this.i18n.getString('Paused'),\r\n value: 'Paused',\r\n },\r\n ];\r\n this.onClose = options.onClose;\r\n this.showProgress = ko.observable(false);\r\n this.statusText = ko.observable(this.i18n.getString('BulkEdit_InitialStatus'));\r\n this.successCount = ko.observable(0);\r\n this.errorCount = ko.observable(0);\r\n this.totalCount = ko.observable(0);\r\n this.adStatus = ko.observable('Active');\r\n this.completePercentage = ko.computed(() => {\r\n const total = this.totalCount();\r\n if (total === 0) {\r\n return '1%';\r\n }\r\n\r\n const success = this.successCount();\r\n const error = this.errorCount();\r\n const completed = Math.floor(((success + error) * 100) / total);\r\n return completed < 1 ? `${completed + 1}%` : `${completed}%`;\r\n });\r\n // Error related properties\r\n this.maxInlineErrorCount = 100;\r\n this.showErrors = ko.observable(false);\r\n this.showErrorGrid = ko.observable(false);\r\n this.errorCountString = ko.computed(() => this.i18n.getString('BulkEdit_InlineError_ErrorCount').replace('{0}', this.errorCount()));\r\n this.initInlineErrors = ko.observable([]);\r\n this.inlineErrors = ko.computed({\r\n read() {\r\n return this.initInlineErrors();\r\n },\r\n write(value) {\r\n /* istanbul ignore next */\r\n if (value.Status === 'CompletedWithErrors') {\r\n // due to the repository is js can not build success in demo\r\n getJobResults(value.Id, 'errors', 0, this.maxInlineErrorCount, 'Ad', this.odata)\r\n .done((response) => {\r\n if (response && response.value) {\r\n const err = response.value.map((errorObject) => {\r\n const errorKey = errorObject.Errors[0];\r\n const entityName = errorObject.EntityKey[0].Value;\r\n\r\n return {\r\n error: this.i18n.getString(`Error_Campaign_API_${errorKey}`),\r\n name: entityName,\r\n };\r\n });\r\n\r\n this.initInlineErrors(err);\r\n }\r\n this.viewModel.showProgress(false);\r\n this.viewModel.showErrors(true);\r\n });\r\n }\r\n },\r\n }, this);\r\n this.errorCountLinkText = ko.computed(() => {\r\n if (this.showErrorGrid()) {\r\n return this.i18n.getString('BulkEdit_InlineError_HideErrorLink');\r\n }\r\n return this.i18n.getString('BulkEdit_InlineError_ErrorLink').replace('{0}', this.errorCount());\r\n }, this);\r\n this.errorsGrids = ko.observable([\r\n this.i18n.getString(_TL_('Ad')),\r\n this.i18n.getString(_TL_('Error')),\r\n ], this);\r\n }\r\n\r\n this.isImproveMMA = options.isImproveMMA;\r\n this.isRecommendation = options.isRecommendation;\r\n\r\n const currentOptInPref =\r\n this.preferencesService.findByNameAtUserLevel(this.websiteImageOptInPreferenceName);\r\n\r\n const shouldCTANotExpand = this.isBoostScenario && !_.get(this.ad, 'CallToActionLanguage');\r\n\r\n this.viewModel = {\r\n maxHeadlines: MMAAssetConfigs.MAX_HEADLINES,\r\n showHeadlineCount: ko.observable(Math.max(\r\n MMAAssetConfigs.DEFAULT_HEADLINES,\r\n this.initHeadlines\r\n )),\r\n headlinesErrorMessage: ko.observable(false),\r\n maxLongHeadlines: MMAAssetConfigs.MAX_LONGHEADLINES,\r\n showLongHeadlineCount: ko.observable(Math.max(\r\n MMAAssetConfigs.DEFAULT_LONGHEADLINES,\r\n this.initLongHeadlines\r\n )),\r\n longHeadlinesErrorMessage: ko.observable(false),\r\n maxDescriptions: MMAAssetConfigs.MAX_DESCRIPTIONS,\r\n showDescriptionCount: ko.observable(Math.max(\r\n MMAAssetConfigs.DEFAULT_DESCRIPTIONS,\r\n this.initDescriptions\r\n )),\r\n maxHeadlineSuggestions: this.isMMAEnabled ?\r\n MMAAssetConfigs.MAX_HEADLINE_SUGGESTIONS :\r\n ResponsiveAdConfigs.MAX_HEADLINE_SUGGESTIONS,\r\n maxDescriptionSuggestions: this.isMMAEnabled ?\r\n MMAAssetConfigs.MAX_DESCRIPTION_SUGGESTIONS :\r\n ResponsiveAdConfigs.MAX_DESCRIPTION_SUGGESTIONS,\r\n currentSuggestions: [],\r\n autoFillHeadlineCount: 2,\r\n autoFillLongHeadlineCount: 1,\r\n autoFillDescriptionCount: 2,\r\n descriptionsErrorMessage: ko.observable(false),\r\n businessNameErrorMessage: ko.observable(false),\r\n isCTAExpanded: ko.observable(!shouldCTANotExpand),\r\n isBoostAnchorsExpanded: ko.observable(this.ad && !_.isEmpty(this.ad.BoostAnchors)),\r\n Language: ko.observable(this.ad && !_.isEmpty(this.ad.CallToActionLanguage) ?\r\n this.ad.CallToActionLanguage : null),\r\n actionLanguageErrorMessage: ko.observable(false),\r\n ActionType: ko.observable(this.ad && !_.isEmpty(this.ad.CallToAction) ?\r\n this.ad.CallToAction : null),\r\n actionTextErrorMessage: ko.observable(false),\r\n urlOptionErrorMessage: ko.observable(false),\r\n adGroupId: Number(this.viewContext.currentAdGroup.Id),\r\n campaignId: Number(this.viewContext.currentCampaign.Id),\r\n showWebsiteImageOptIn: ko.observable(false),\r\n hasWebsiteImageOptIn:\r\n ko.observable(currentOptInPref && currentOptInPref.Data && currentOptInPref.Data.OptIn),\r\n };\r\n if (options.isBulkEditMMA) {\r\n _.extend(this.viewModel, {\r\n showProgress: this.showProgress,\r\n statusText: this.statusText,\r\n completePercentage: this.completePercentage,\r\n adStatusOptions: this.adStatusOptions,\r\n adStatus: this.adStatus,\r\n showErrors: this.showErrors,\r\n showErrorGrid: this.showErrorGrid,\r\n errorCount: this.errorCount,\r\n errorCountString: this.errorCountString,\r\n errorCountLinkText: this.errorCountLinkText,\r\n inlineErrors: this.inlineErrors,\r\n errorsGrids: this.errorsGrids,\r\n maxInlineErrorCount: this.maxInlineErrorCount,\r\n });\r\n }\r\n\r\n this.initializeAdModel();\r\n this.initializeAdContent();\r\n if (this.ad && this.ad.errors) {\r\n this.initializeAdError();\r\n }\r\n\r\n this.viewModel.hasWebsiteImageOptIn.subscribe((newOptInState) => {\r\n this.preferencesService.setAtUserLevel({\r\n Name: this.websiteImageOptInPreferenceName,\r\n Data: { OptIn: newOptInState },\r\n });\r\n this.hasWebsiteImageOptedInObservable(newOptInState);\r\n });\r\n\r\n this.activityLogger.signal(`ad-edit view initialize: ${this.permissions.dynamic && this.permissions.dynamic.MMACopilot}`, 'rae-view deprecation');\r\n }\r\n\r\n clear() {\r\n this.isUpdate = false;\r\n this.ad = null;\r\n this.initializeAdModel();\r\n this.initializeAdContent();\r\n ko.cleanNode(this.el);\r\n this.render();\r\n }\r\n\r\n initializeAdModel() {\r\n const schema = cloneDeep(DependencyResolver.get('$/schema!campaign/ResponsiveAd'));\r\n const fields = [\r\n 'Campaign',\r\n 'AdGroup',\r\n !this.isMMAEnabled && 'Headline',\r\n !this.isMMAEnabled && 'LongHeadline',\r\n 'BusinessName',\r\n !this.isMMAEnabled && 'Text',\r\n 'FinalUrls',\r\n this.isMobileUrlEnabled && 'MobileFinalUrls',\r\n 'TrackingUrlTemplate',\r\n 'FinalUrlSuffix',\r\n 'UrlCustomParameters',\r\n 'CallToAction',\r\n (this.isMultiMediaAdsPhase2Enabled || this.isBoostScenario || this.isMSANLogoAndCTAForMMAEnabled) && 'CallToActionLanguage',\r\n 'Images',\r\n this.isImpressionTrackingUrlsEnabled && 'ImpressionTrackingUrls',\r\n this.isThirdPartyMeasurementEnabled && 'VerifiedTrackingData',\r\n ];\r\n\r\n // Temporary override of the maxLength. Once everything is ready, schema itself will be updated\r\n schema.properties.Headline.maxLength = 30;\r\n\r\n if (this.isMMAEnabled) {\r\n this.headlineFields = headlineFields;\r\n _.each(this.headlineFields, (key) => {\r\n schema.properties[key] = _.clone(schema.properties.Headline);\r\n });\r\n fields.push(this.headlineFields);\r\n\r\n if (this.ad) {\r\n if (this.initHeadlines === 0) {\r\n // create before phase2, fill Headline to Headline0\r\n this.ad.Headline0 = this.ad.Headline;\r\n } else {\r\n _.each(_.get(this.ad, ['Headlines'], []), (val, idx) => {\r\n this.ad[this.headlineFields[idx]] = _.isEmpty(val.Asset) ? val.Text : val.Asset.Text;\r\n });\r\n }\r\n }\r\n\r\n this.longHeadlineFields = longHeadlineFields;\r\n _.each(this.longHeadlineFields, (key) => {\r\n schema.properties[key] = _.clone(schema.properties.LongHeadline);\r\n });\r\n fields.push(this.longHeadlineFields);\r\n\r\n if (this.ad) {\r\n if (this.initLongHeadlines === 0) {\r\n // create before phase2, fill LongHeadline to LongHeadline0\r\n this.ad.LongHeadline0 = this.ad.LongHeadline;\r\n } else {\r\n _.each(_.get(this.ad, ['LongHeadlines'], []), (val, idx) => {\r\n this.ad[this.longHeadlineFields[idx]] = _.isEmpty(val.Asset) ?\r\n val.Text : val.Asset.Text;\r\n });\r\n }\r\n }\r\n\r\n this.descriptionFields = descriptionFields;\r\n _.each(this.descriptionFields, (key) => {\r\n schema.properties[key] = _.clone(schema.properties.Text);\r\n });\r\n fields.push(this.descriptionFields);\r\n\r\n if (this.ad) {\r\n if (this.initDescriptions === 0) {\r\n // create before phase2, fill Text to Description0\r\n this.ad.Description0 = this.ad.Text;\r\n } else {\r\n _.each(_.get(this.ad, ['Descriptions'], []), (val, idx) => {\r\n this.ad[this.descriptionFields[idx]] = _.isEmpty(val.Asset) ? val.Text : val.Asset.Text;\r\n });\r\n }\r\n }\r\n if (this.isBulkEditMMA) {\r\n fields.push('AdStatus');\r\n }\r\n }\r\n\r\n // For Boost only, we got updated CallToActionLanguage to support\r\n if (this.isBoostScenario) {\r\n if (this.IsBoostCTAPhase2Enabled) {\r\n if (_.result(schema, ['properties', 'CallToActionLanguage'])) {\r\n schema.properties.CallToActionLanguage.enum = _.union(\r\n schema.properties.CallToActionLanguage.enum,\r\n [\r\n 'Albanian',\r\n 'Catalan',\r\n 'Gaelic',\r\n 'Hindi',\r\n 'Indonesian',\r\n 'Korean',\r\n 'Thai',\r\n 'Ukrainian',\r\n 'Vietnamese',\r\n 'Afrikaans',\r\n 'Amharic',\r\n 'Armenian',\r\n 'Assamese',\r\n 'Azerbaijani',\r\n 'Basque',\r\n 'Bengali',\r\n 'Cambodian',\r\n 'Galician',\r\n 'Georgian',\r\n 'Gujarati',\r\n 'Kannada',\r\n 'Kazakh',\r\n 'Laotian',\r\n 'Malay',\r\n 'Malayalam',\r\n 'Maori',\r\n 'Marathi',\r\n 'Nepali',\r\n 'Oriya',\r\n 'Persian',\r\n 'Punjabi',\r\n 'Quechua',\r\n 'Tamil',\r\n 'Telugu',\r\n 'Urdu',\r\n 'Uzbek',\r\n 'Welsh',\r\n ]\r\n );\r\n }\r\n } else if (_.result(schema, ['properties', 'CallToActionLanguage'])) {\r\n schema.properties.CallToActionLanguage.enum = _.union(\r\n schema.properties.CallToActionLanguage.enum,\r\n [\r\n 'Albanian',\r\n 'Catalan',\r\n 'Gaelic',\r\n 'Hindi',\r\n 'Indonesian',\r\n 'Korean',\r\n 'Thai',\r\n 'Ukrainian',\r\n 'Vietnamese',\r\n ]\r\n );\r\n }\r\n }\r\n\r\n const SchemaModel = backboneSchema(\r\n schema,\r\n this.newI18n || this.i18n,\r\n _.flatten(_.compact(fields)),\r\n this.ad\r\n );\r\n\r\n this.model = new SchemaModel();\r\n this.model.set({\r\n CallToAction: this.ad && !_.isEmpty(this.ad.CallToAction) ? this.ad.CallToAction : 'Default',\r\n });\r\n\r\n if (this.isMultiMediaAdsPhase2Enabled || this.isBoostScenario || this.isMSANLogoAndCTAForMMAEnabled) {\r\n this.model.set({\r\n CallToActionLanguage: this.ad && !_.isEmpty(this.ad.CallToActionLanguage) ?\r\n this.ad.CallToActionLanguage : null,\r\n });\r\n }\r\n\r\n if (this.isThirdPartyMeasurementEnabled) {\r\n if (this.ad) {\r\n const verifiedTrackingSettings = getVerifiedTrackingSettingsRead(this.ad);\r\n this.model.set(verifiedTrackingSettings);\r\n }\r\n }\r\n\r\n if (this.isBulkEditMMA) {\r\n this.model.set({\r\n AdStatus: this.adStatus(),\r\n });\r\n }\r\n\r\n this.viewModel.model = this.model;\r\n }\r\n\r\n enableAdStrengthSuggestionHelpers() {\r\n const enableAdStrengthFields = _.union(this.headlineFields, this.longHeadlineFields, this.descriptionFields); // eslint-disable-line max-len\r\n _.each(enableAdStrengthFields, (field) => {\r\n const element = this[field].$el;\r\n const property = this[field];\r\n attachAdCustomizersHelpers({\r\n container: $('div[data-type=\"Responsive\"], div.crud-multimedia-ad-react'),\r\n element,\r\n updateAction: (text) => {\r\n property.entity.set(field, text);\r\n $(`.form-control.${field}-value`).val(text);\r\n property.trigger('input-changed');\r\n },\r\n deps: {\r\n i18n: this.i18n,\r\n countdownI18nDummy: this.i18n,\r\n config: this.config,\r\n instrumentation: this.instrumentation,\r\n permissions: this.permissions,\r\n edmCampaign: this.edm,\r\n jsDataCampaign: this.jsdata,\r\n scope: {\r\n campaignId: Number(this.viewContext.currentCampaign.Id),\r\n adGroupId: Number(this.viewContext.currentAdGroup.Id),\r\n },\r\n },\r\n adType: 'ResponsiveAd',\r\n field,\r\n });\r\n });\r\n if (this.parsedTextMaxLengthExtension) {\r\n this.parsedTextMaxLengthExtension.extend(this, enableAdStrengthFields, 'ResponsiveAd');\r\n }\r\n }\r\n\r\n getEvaluateAdCustomizers(text) {\r\n return new Promise((resolve) => {\r\n if (this.isMMAAdCustomizersEnabled) {\r\n evaluateAdCustomizers({\r\n text,\r\n deps: {\r\n i18n: this.i18n,\r\n countdownI18nDummy: this.i18n,\r\n config: this.config,\r\n instrumentation: this.instrumentation,\r\n jsDataCampaign: this.jsdata,\r\n },\r\n adType: 'ResponsiveAd',\r\n })\r\n .then((data) => {\r\n resolve(data);\r\n });\r\n } else {\r\n resolve(text);\r\n }\r\n });\r\n }\r\n\r\n overrideEvents(elem, field) {\r\n elem.delegateEvents({\r\n [`input .${field}-value`]: (event) => {\r\n elem.entity.set(field, event.target.value);\r\n elem.trigger('input-changed', event);\r\n elem.setState({ showError: true });\r\n },\r\n [`focus .${field}-value`]: (event) => {\r\n elem.trigger('input-focused', event);\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Initialize the form part of the ad creation view.\r\n *\r\n * @returns {undefined} no return value\r\n *\r\n */\r\n initializeAdContent() {\r\n clearAdStrengthSuggestionController();\r\n if (this.isMMAEnabled) {\r\n _.each(this.headlineFields, (field) => {\r\n this[field] = new InputControl({\r\n entity: this.model,\r\n field,\r\n ariaLabelledby: 'responsiveAdShortHeadlineLabel',\r\n });\r\n\r\n this.overrideEvents(this[field], field);\r\n\r\n this[field].on('input-changed', () => {\r\n const data = this.model.toJSON();\r\n const firstHeadline = _.first(_.filter(\r\n this.headlineFields,\r\n key => !_.isEmpty(data[key])\r\n ));\r\n this.getEvaluateAdCustomizers(data[firstHeadline])\r\n .then((text) => {\r\n const updateObject = {\r\n updatedElement: 'ShortHeadline',\r\n text,\r\n };\r\n this.activityLogger.signal(`ad field change: ${field}`, 'responsive ad editor');\r\n this.trigger('fieldUpdated', updateObject);\r\n $(`.form-control.${field}-value`).click();\r\n });\r\n this.updateAIGenAssetContextualAttributeStatus(field, 'none');\r\n });\r\n\r\n this[`${field}RemainingCharsHint`] = new RemainingCharsHint({\r\n i18n: this.i18n,\r\n property: this[field],\r\n model: this.model,\r\n field,\r\n });\r\n\r\n this[field].maxLength = () => this[`${field}RemainingCharsHint`].maxSize;\r\n\r\n if (!this.isRecommendation) {\r\n attachAdStrengthSuggestionHelpers({\r\n element: this[field],\r\n field,\r\n viewModel: this.viewModel,\r\n pageContext: this.pageContext,\r\n assetType: assetSuggestionType.Headline,\r\n i18n: this.i18n,\r\n activityLogger: this.activityLogger,\r\n scenario: this.responsiveAdScenario,\r\n isRecommendation: this.isRecommendation,\r\n });\r\n }\r\n });\r\n\r\n _.each(this.longHeadlineFields, (field) => {\r\n this[field] = new InputControl({\r\n entity: this.model,\r\n field,\r\n ariaLabelledby: 'responsiveAdLongHeadlineLabel',\r\n });\r\n\r\n this.overrideEvents(this[field], field);\r\n\r\n this[field].on('input-changed', () => {\r\n const data = this.model.toJSON();\r\n const firstLongHeadline = _.first(_.filter(\r\n this.longHeadlineFields,\r\n key => !_.isEmpty(data[key])\r\n ));\r\n this.getEvaluateAdCustomizers(data[firstLongHeadline])\r\n .then((text) => {\r\n const updateObject = {\r\n updatedElement: 'LongHeadline',\r\n text,\r\n };\r\n this.activityLogger.signal(`ad field change: ${field}`, 'responsive ad editor');\r\n this.trigger('fieldUpdated', updateObject);\r\n $(`.form-control.${field}-value`).click();\r\n });\r\n this.updateAIGenAssetContextualAttributeStatus(field, 'none');\r\n });\r\n\r\n this[`${field}RemainingCharsHint`] = new RemainingCharsHint({\r\n i18n: this.i18n,\r\n property: this[field],\r\n model: this.model,\r\n field,\r\n });\r\n\r\n this[field].maxLength = () => this[`${field}RemainingCharsHint`].maxSize;\r\n\r\n if (!this.isRecommendation) {\r\n attachAdStrengthSuggestionHelpers({\r\n element: this[field],\r\n field,\r\n viewModel: this.viewModel,\r\n pageContext: this.pageContext,\r\n assetType: assetSuggestionType.LongHeadline,\r\n i18n: this.i18n,\r\n activityLogger: this.activityLogger,\r\n scenario: this.responsiveAdScenario,\r\n isRecommendation: this.isRecommendation,\r\n });\r\n }\r\n });\r\n\r\n _.each(this.descriptionFields, (field) => {\r\n this[field] = new InputControl({\r\n entity: this.model,\r\n field,\r\n ariaLabelledby: 'responsiveAdDescriptionLabel',\r\n });\r\n\r\n this.overrideEvents(this[field], field);\r\n\r\n this[field].on('input-changed', () => {\r\n const data = this.model.toJSON();\r\n const firstDescription = _.first(_.filter(\r\n this.descriptionFields,\r\n key => !_.isEmpty(data[key])\r\n ));\r\n this.getEvaluateAdCustomizers(data[firstDescription])\r\n .then((text) => {\r\n const updateObject = {\r\n updatedElement: 'Description',\r\n text,\r\n };\r\n this.activityLogger.signal(`ad field change: ${field}`, 'responsive ad editor');\r\n this.trigger('fieldUpdated', updateObject);\r\n $(`.form-control.${field}-value`).click();\r\n });\r\n this.updateAIGenAssetContextualAttributeStatus(field, 'none');\r\n });\r\n\r\n this[`${field}RemainingCharsHint`] = new RemainingCharsHint({\r\n i18n: this.i18n,\r\n property: this[field],\r\n model: this.model,\r\n field,\r\n });\r\n\r\n this[field].maxLength = () => this[`${field}RemainingCharsHint`].maxSize;\r\n\r\n if (!this.isRecommendation) {\r\n attachAdStrengthSuggestionHelpers({\r\n element: this[field],\r\n field,\r\n viewModel: this.viewModel,\r\n pageContext: this.pageContext,\r\n assetType: assetSuggestionType.Description,\r\n i18n: this.i18n,\r\n activityLogger: this.activityLogger,\r\n scenario: this.responsiveAdScenario,\r\n isRecommendation: this.isRecommendation,\r\n });\r\n }\r\n });\r\n\r\n if (this.isMultiMediaAdsPhase2Enabled || this.isBoostScenario || this.isMSANLogoAndCTAForMMAEnabled) {\r\n const ActionLanguageAdapter = DependencyResolver.get('campaignui/feature/adextension/actionlink/view/language-adapter');\r\n this.actionLanguageAdapter = new ActionLanguageAdapter({\r\n observable: this.viewModel.Language,\r\n viewModel: this.viewModel,\r\n entity: this.model,\r\n field: 'CallToActionLanguage',\r\n isMultimediaAd: this.isMultimediaAd || this.isMSANLogoAndCTAForMMAEnabled,\r\n isMMAAutomatedCTAOptInEnabled: this.isMMAAutomatedCTAOptInEnabled,\r\n isBoostScenario: this.isBoostScenario,\r\n callback: (selectedOption) => {\r\n this.model.set('CallToActionLanguage', selectedOption.id);\r\n this.trigger('fieldUpdated', {\r\n updatedElement: 'CallToActionLanguage',\r\n text: selectedOption.value,\r\n });\r\n },\r\n });\r\n\r\n const ActionTypeAdapter = DependencyResolver.get('campaignui/feature/adextension/actionlink/view/action-type-adapter');\r\n this.actionTypeAdapter = new ActionTypeAdapter({\r\n observable: this.viewModel.ActionType,\r\n viewModel: this.viewModel,\r\n entity: this.model,\r\n field: 'CallToAction',\r\n isMultimediaAd: this.isMultimediaAd || this.isMSANLogoAndCTAForMMAEnabled,\r\n isMMAAutomatedCTAOptInEnabled: this.isMMAAutomatedCTAOptInEnabled,\r\n isBoostScenario: this.isBoostScenario,\r\n isBoostCustomCTAEnabled: this.isBoostCustomCTAEnabled,\r\n callback: (selectedOption) => {\r\n this.model.set('CallToAction', selectedOption.id);\r\n this.trigger('fieldUpdated', {\r\n updatedElement: 'CallToAction',\r\n text: selectedOption.value,\r\n });\r\n },\r\n });\r\n }\r\n } else {\r\n this.shortHeadline = new InputControl({\r\n entity: this.model,\r\n field: 'Headline',\r\n ariaLabelledby: 'responsiveAdShortHeadlineLabel',\r\n });\r\n\r\n this.shortHeadline.on('input-changed', () => {\r\n const updateObject = {\r\n updatedElement: 'ShortHeadline',\r\n text: this.shortHeadline.getState().value,\r\n };\r\n this.activityLogger.signal('ad field change: shortHeadline', 'responsive ad editor');\r\n this.trigger('fieldUpdated', updateObject);\r\n });\r\n\r\n this.overrideEvents(this.shortHeadline, 'Headline');\r\n\r\n if (!this.isRecommendation) {\r\n attachAdStrengthSuggestionHelpers({\r\n element: this.shortHeadline,\r\n field: 'Headline',\r\n viewModel: this.viewModel,\r\n pageContext: this.pageContext,\r\n assetType: assetSuggestionType.Headline,\r\n i18n: this.i18n,\r\n activityLogger: this.activityLogger,\r\n scenario: this.responsiveAdScenario,\r\n isRecommendation: this.isRecommendation,\r\n });\r\n }\r\n\r\n this.shortHeaderRemainingCharsHint = new RemainingCharsHint({\r\n i18n: this.i18n,\r\n model: this.model,\r\n field: 'Headline',\r\n });\r\n\r\n this.longHeadline = new InputControl({\r\n entity: this.model,\r\n field: 'LongHeadline',\r\n ariaLabelledby: 'responsiveAdLongHeadlineLabel',\r\n });\r\n\r\n this.overrideEvents(this.longHeadline, 'LongHeadline');\r\n\r\n if (!this.isRecommendation) {\r\n attachAdStrengthSuggestionHelpers({\r\n element: this.longHeadline,\r\n field: 'LongHeadline',\r\n viewModel: this.viewModel,\r\n pageContext: this.pageContext,\r\n assetType: assetSuggestionType.LongHeadline,\r\n i18n: this.i18n,\r\n activityLogger: this.activityLogger,\r\n scenario: this.responsiveAdScenario,\r\n isRecommendation: this.isRecommendation,\r\n });\r\n }\r\n\r\n this.longHeaderRemainingCharsHint = new RemainingCharsHint({\r\n i18n: this.i18n,\r\n model: this.model,\r\n field: 'LongHeadline',\r\n });\r\n\r\n this.longHeadline.on('input-changed', () => {\r\n const updateObject = {\r\n updatedElement: 'LongHeadline',\r\n text: this.longHeadline.getState().value,\r\n };\r\n this.activityLogger.signal('ad field change: longHeadline', 'responsive ad editor');\r\n this.trigger('fieldUpdated', updateObject);\r\n });\r\n\r\n this.description = new InputControl({\r\n entity: this.model,\r\n field: 'Text',\r\n ariaLabelledby: 'responsiveAdDescriptionLabel',\r\n });\r\n\r\n this.overrideEvents(this.description, 'Text');\r\n\r\n if (!this.isRecommendation) {\r\n attachAdStrengthSuggestionHelpers({\r\n element: this.description,\r\n field: 'Text',\r\n viewModel: this.viewModel,\r\n pageContext: this.pageContext,\r\n assetType: assetSuggestionType.Text,\r\n i18n: this.i18n,\r\n activityLogger: this.activityLogger,\r\n scenario: this.responsiveAdScenario,\r\n isRecommendation: this.isRecommendation,\r\n });\r\n }\r\n\r\n this.descriptionRemainingCharsHint = new RemainingCharsHint({\r\n i18n: this.i18n,\r\n model: this.model,\r\n field: 'Text',\r\n });\r\n\r\n this.description.on('input-changed', () => {\r\n const updateObject = {\r\n updatedElement: 'Description',\r\n text: this.description.getState().value,\r\n };\r\n this.activityLogger.signal('ad field change: description', 'responsive ad editor');\r\n this.trigger('fieldUpdated', updateObject);\r\n });\r\n }\r\n\r\n this.businessName = new InputControl({\r\n entity: this.model,\r\n field: 'BusinessName',\r\n ariaLabelledby: 'responsiveAdBusinessNameLabel',\r\n });\r\n this.businessName.on('input-changed', () => {\r\n const updateObject = {\r\n updatedElement: 'BusinessName',\r\n text: this.businessName.getState().value,\r\n };\r\n this.activityLogger.signal('ad field change: businessName', 'responsive ad editor');\r\n this.trigger('fieldUpdated', updateObject);\r\n });\r\n\r\n this.overrideEvents(this.businessName, 'BusinessName');\r\n\r\n if (!this.isRecommendation) {\r\n attachAdStrengthSuggestionHelpers({\r\n element: this.businessName,\r\n field: 'BusinessName',\r\n viewModel: this.viewModel,\r\n pageContext: this.pageContext,\r\n assetType: assetSuggestionType.BusinessName,\r\n i18n: this.i18n,\r\n activityLogger: this.activityLogger,\r\n scenario: this.responsiveAdScenario,\r\n isRecommendation: this.isRecommendation,\r\n });\r\n }\r\n\r\n this.businessNameRemainingCharsHint = new RemainingCharsHint({\r\n i18n: this.i18n,\r\n model: this.model,\r\n field: 'BusinessName',\r\n });\r\n\r\n const UrlEditor = DependencyResolver.get('component/url-input/view/url-input');\r\n\r\n this.finalUrlEditor = new UrlEditor({\r\n inputProtocol: this.isMSANBoostEnabled,\r\n url: _.first(_.result(this.model.attributes, 'FinalUrls')),\r\n ariaLabelledby: 'responsiveAdFinalUrlLabel',\r\n ariaId: 'responsiveAdFinalUrl',\r\n disabled: this.scenario === 'new-audience-static-creation',\r\n required: true,\r\n });\r\n\r\n this.mobileUrlEditor = new UrlEditor({\r\n inputProtocol: this.isMSANBoostEnabled,\r\n url: _.first(_.result(this.model.attributes, 'MobileFinalUrls')),\r\n ariaLabelledby: 'responsiveAdMobileUrlLabel',\r\n ariaId: 'responsiveAdMobileUrl',\r\n });\r\n\r\n if (this.isImpressionTrackingUrlsEnabled) {\r\n this.ImpressionTrackingUrlsUrlOptions = new ImpressionTrackingUrlOptions({\r\n i18n: this.i18n,\r\n initialImpressionTrackingUrls: this.model.get('ImpressionTrackingUrls'),\r\n maxImpressionTrackingUrlsCount: this.ImpressionTrackingUrlsMaxCount,\r\n isIASSectionVisible: false,\r\n });\r\n\r\n this.ImpressionTrackingUrlsUrlOptions.on('InputChange', (impressionTrackingUrls) => {\r\n this.model.errors.unset('ImpressionTrackingUrl');\r\n this.model.set('ImpressionTrackingUrls', impressionTrackingUrls);\r\n this.ImpressionTrackingUrlsUrlOptions.removeErrors();\r\n });\r\n }\r\n\r\n if (this.isThirdPartyMeasurementEnabled) {\r\n this.ThirdPartyMeasurementView = new ThirdPartyMeasurementBackboneView({\r\n i18n: this.i18n,\r\n initialThirdPartyMeasurement: this.model.get('VerifiedTrackingSettings'),\r\n isMOATEnabled: this.isMOATEnabled,\r\n });\r\n\r\n this.ThirdPartyMeasurementView.on('InputChange', (thirdPartyMeasurement) => {\r\n this.model.set('VerifiedTrackingSettings', thirdPartyMeasurement);\r\n });\r\n\r\n this.ThirdPartyMeasurementView.listenTo(this.model, 'change:VerifiedTrackingSettings', (model) => {\r\n this.ThirdPartyMeasurementView.renderWithInput(model.get('VerifiedTrackingSettings'));\r\n });\r\n }\r\n\r\n this.finalUrlEditor.on('urlChanged', (url) => {\r\n this.activityLogger.signal('ad field change: finalUrls', 'responsive ad editor');\r\n if (url) {\r\n this.model.set({ FinalUrls: [url] });\r\n this.finalUrlEditor.setError('');\r\n this.trigger('fieldUpdated', { updatedElement: 'FinalUrl', url });\r\n } else {\r\n this.model.set({ FinalUrls: [] });\r\n this.trigger('fieldUpdated', { updatedElement: 'FinalUrl', url: '' });\r\n }\r\n });\r\n\r\n if (this.isAdRecommendationMSANEnabled && this.isAudienceCampaign && !this.isVideo && !this.isSimplifyAudienceCreation) {\r\n urlChangeForRecommendationAd(this.finalUrlEditor, this.recommendButtonReactComponent);\r\n }\r\n\r\n if (!this.isRecommendation) {\r\n this.onUrlChanged = attachAdStrengthSuggestionHelperForURL({\r\n element: this.finalUrlEditor,\r\n viewModel: this.viewModel,\r\n pageContext: this.pageContext,\r\n view: this,\r\n i18n: this.i18n,\r\n activityLogger: this.activityLogger,\r\n scenario: this.responsiveAdScenario,\r\n });\r\n }\r\n\r\n this.mobileUrlEditor.on('urlChanged', (url) => {\r\n this.activityLogger.signal('ad field change: mobileFinalUrls', 'responsive ad editor');\r\n this.model.set({ MobileFinalUrls: url ? [url] : [] });\r\n if (url) {\r\n this.mobileUrlEditor.setError('');\r\n }\r\n });\r\n\r\n const UrlOptions = DependencyResolver.get('component/upgraded-url/view/urlOptionsV2');\r\n\r\n this.advancedURLOptions = new UrlOptions({\r\n entityType: 'Audience',\r\n placeholderEnabled: true,\r\n trackingTemplate: _.result(this.model.attributes, 'TrackingUrlTemplate'),\r\n finalUrlSuffix: _.result(this.model.attributes, 'FinalUrlSuffix'),\r\n customParameters: _.isEmpty(_.result(this.model.attributes, 'UrlCustomParameters')) ? undefined : _.clone(this.model.attributes.UrlCustomParameters),\r\n showUurlTestTool: true,\r\n isForVNext: this.isForVNext,\r\n activityLogger: this.activityLogger,\r\n });\r\n\r\n this.advancedURLOptions.on('testUurl', (fn, originalView) => {\r\n const testUurl = DependencyResolver.get('component/upgraded-url/service/testUurl');\r\n const state = DependencyResolver.get('component/state/index');\r\n originalView.isInline = false; // eslint-disable-line\r\n originalView.level = testUurl.uurlLevels.Ad; // eslint-disable-line\r\n const params = this.getData() || {};\r\n const context = {\r\n customerId: state.get('customer_id'),\r\n userId: state.get('user_id'),\r\n accountId: state.get('account_id'),\r\n campaignId: state.get('campaign_id') || (params.Campaign && params.Campaign.Id) || 0,\r\n adGroupId: state.get('adgroup_id') || (params.AdGroup && params.AdGroup.Id) || 0,\r\n entityId: params.Id ? params.Id : '',\r\n };\r\n const options = {\r\n apiInLog: 'responsive-ad-editor/uurlTest',\r\n };\r\n testUurl.testUurl(fn, originalView, params, context, options);\r\n });\r\n\r\n if (this.isUpdate &&\r\n (!this.isEmpty(this.ad.TrackingUrlTemplate) || !this.isEmpty(this.ad.UrlCustomParameters) ||\r\n !this.isEmpty(this.ad.FinalUrlSuffix))) {\r\n this.advancedURLOptions.expand();\r\n }\r\n\r\n this.adPropertiesToControlMap = {\r\n FinalUrls: this.finalUrlEditor,\r\n MobileFinalUrls: this.mobileUrlEditor,\r\n };\r\n }\r\n\r\n finalURLChange() {\r\n if (typeof this.onUrlChanged === 'function') {\r\n this.onUrlChanged();\r\n }\r\n }\r\n\r\n adStatusChange(e) {\r\n this.adStatus(e.target.value);\r\n }\r\n\r\n toggleErrorGrid() {\r\n this.showErrorGrid(!this.showErrorGrid());\r\n }\r\n\r\n hideProgress() {\r\n this.showProgress(false);\r\n this.onClose();\r\n }\r\n\r\n initializeAdError() {\r\n _.forEach(this.ad.errors, (error) => {\r\n this.setError(error);\r\n });\r\n }\r\n\r\n updateFinalUrlPrefix(prefix) {\r\n this.finalUrlEditor.ko_model.protocol(prefix);\r\n }\r\n\r\n updateFinalUrl(url) {\r\n this.finalUrlEditor.ko_model.fullUrl(url);\r\n }\r\n\r\n addHeadline(e) {\r\n // remove focus style after click\r\n e.currentTarget.blur();\r\n if (this.viewModel.showHeadlineCount() < MMAAssetConfigs.MAX_HEADLINES) {\r\n this.viewModel.showHeadlineCount(this.viewModel.showHeadlineCount() + 1);\r\n\r\n this.activityLogger.signal(`headline clicked: MMAinMSAN ${this.isAudienceCampaignMultiMediaAdsEnabled}`, 'responsive ad editor');\r\n }\r\n }\r\n\r\n addLoneHeadline(e) {\r\n // remove focus style after click\r\n e.currentTarget.blur();\r\n if (this.viewModel.showLongHeadlineCount() < MMAAssetConfigs.MAX_LONGHEADLINES) {\r\n this.viewModel.showLongHeadlineCount(this.viewModel.showLongHeadlineCount() + 1);\r\n this.activityLogger.signal(`long headline clicked: MMAinMSAN ${this.isAudienceCampaignMultiMediaAdsEnabled}`, 'responsive ad editor');\r\n }\r\n }\r\n\r\n addDescription(e) {\r\n // remove focus style after click\r\n e.currentTarget.blur();\r\n if (this.viewModel.showDescriptionCount() < MMAAssetConfigs.MAX_DESCRIPTIONS) {\r\n this.viewModel.showDescriptionCount(this.viewModel.showDescriptionCount() + 1);\r\n this.activityLogger.signal(`description clicked: MMAinMSAN ${this.isAudienceCampaignMultiMediaAdsEnabled}`, 'responsive ad editor');\r\n }\r\n }\r\n\r\n expandCTA() {\r\n this.viewModel.isCTAExpanded(!this.viewModel.isCTAExpanded());\r\n }\r\n\r\n toggleBoostAnchors() {\r\n this.viewModel.isBoostAnchorsExpanded(!this.viewModel.isBoostAnchorsExpanded());\r\n }\r\n\r\n removeHeadline(e) {\r\n const index = Number(e.currentTarget.dataset.id);\r\n this.shiftOneIndex('Headline', index, this.viewModel.showHeadlineCount());\r\n this.viewModel.showHeadlineCount(this.viewModel.showHeadlineCount() - 1);\r\n }\r\n\r\n removeLongHeadline(e) {\r\n const index = Number(e.currentTarget.dataset.id);\r\n this.shiftOneIndex('LongHeadline', index, this.viewModel.showLongHeadlineCount());\r\n this.viewModel.showLongHeadlineCount(this.viewModel.showLongHeadlineCount() - 1);\r\n }\r\n\r\n removeDescription(e) {\r\n const index = Number(e.currentTarget.dataset.id);\r\n this.shiftOneIndex('Description', index, this.viewModel.showDescriptionCount());\r\n this.viewModel.showDescriptionCount(this.viewModel.showDescriptionCount() - 1);\r\n }\r\n\r\n // elements of fields shift one index to the left\r\n shiftOneIndex(type, index, count) {\r\n let field = `${type}${index}`;\r\n let nextField;\r\n\r\n if (_.some(this.viewModel.currentSuggestions, suggestion =>\r\n suggestion.Text === this[field].getState().value)) {\r\n this.activityLogger.signal(`${field}, ${this[field].getState().value}`, `${this.responsiveAdScenario} delete a suggested asset`);\r\n } else {\r\n this.activityLogger.signal(`${field}, ${this[field].getState().value}`, `${this.responsiveAdScenario} delete an asset`);\r\n }\r\n\r\n // remove last one\r\n if (index >= count - 1) {\r\n if (this[field]) {\r\n this[field].setState({\r\n value: '',\r\n });\r\n this.updateAIGenAssetContextualAttributeStatus(field, 'none');\r\n }\r\n return;\r\n }\r\n\r\n for (let i = index; i < count - 1; i += 1) {\r\n nextField = `${type}${i + 1}`;\r\n\r\n const { value } = this[nextField].getState();\r\n const display = this.getAIGenAssetContextualAttributeStatus(nextField);\r\n\r\n this[field].setState({\r\n value,\r\n });\r\n this.updateAIGenAssetContextualAttributeStatus(field, display);\r\n\r\n field = nextField;\r\n }\r\n\r\n if (this[nextField]) {\r\n this[nextField].setState({\r\n value: '',\r\n });\r\n this.updateAIGenAssetContextualAttributeStatus(nextField, 'none');\r\n }\r\n }\r\n\r\n /**\r\n * Renders the view\r\n *\r\n * @returns {Object} view itself\r\n */\r\n render() {\r\n if (this.isImproveMMA) {\r\n this.$el.html(editorHeadlineDescriptionOnlyTemplate({\r\n i18n: this.i18n,\r\n headlineFields: this.headlineFields,\r\n longHeadlineFields: this.longHeadlineFields,\r\n descriptionFields: this.descriptionFields,\r\n }));\r\n } else if (this.isBulkEditMMA) {\r\n this.$el.html(template({\r\n i18n: this.i18n,\r\n callToAction: CallToAction,\r\n showSaveButton: this.showSaveButton,\r\n isImpressionTrackingUrlsEnabled: this.isImpressionTrackingUrlsEnabled,\r\n isMultimediaAd: this.isMultimediaAd,\r\n isMultiMediaAdsPhase2Enabled: this.isMultiMediaAdsPhase2Enabled,\r\n isMMAAutomatedCTAOptInEnabled: this.isMMAAutomatedCTAOptInEnabled,\r\n automatedCTAEnable: this.automatedCTAEnable,\r\n isBoostScenario: this.isBoostScenario,\r\n isMSANLogoAndCTAForMMAEnabled: this.isMSANLogoAndCTAForMMAEnabled,\r\n isMMAEnabled: this.isMMAEnabled,\r\n isMoveFinalUrlTop: this.isMoveFinalUrlTop,\r\n isBulkEditMMA: this.isBulkEditMMA,\r\n headlineFields: this.headlineFields,\r\n longHeadlineFields: this.longHeadlineFields,\r\n descriptionFields: this.descriptionFields,\r\n showProgress: this.showProgress,\r\n statusText: this.statusText,\r\n completePercentage: this.completePercentage,\r\n adStatusOptions: this.adStatusOptions,\r\n showErrors: this.showErrors,\r\n errorCountString: this.errorCountString,\r\n inlineErrors: this.inlineErrors,\r\n errorsGrids: this.errorsGrids,\r\n errorCountLinkText: this.errorCountLinkText,\r\n }));\r\n } else {\r\n this.$el.html(template({\r\n i18n: this.i18n,\r\n callToAction: CallToAction,\r\n showSaveButton: this.showSaveButton,\r\n isImpressionTrackingUrlsEnabled: this.isImpressionTrackingUrlsEnabled,\r\n isMultimediaAd: this.isMultimediaAd,\r\n isMultiMediaAdsPhase2Enabled: this.isMultiMediaAdsPhase2Enabled,\r\n isMMAAutomatedCTAOptInEnabled: this.isMMAAutomatedCTAOptInEnabled,\r\n automatedCTAEnable: this.automatedCTAEnable,\r\n isBoostScenario: this.isBoostScenario,\r\n isMSANLogoAndCTAForMMAEnabled: this.isMSANLogoAndCTAForMMAEnabled,\r\n isBoostAnchorsEnabled: this.isBoostAnchorsEnabled,\r\n isBoostCustomCTAEnabled: this.isBoostCustomCTAEnabled,\r\n isBoostCTAAriaTextEnabled: this.isBoostCTAAriaTextEnabled,\r\n isMMAEnabled: this.isMMAEnabled,\r\n isMoveFinalUrlTop: this.isMoveFinalUrlTop,\r\n isBulkEditMMA: this.isBulkEditMMA,\r\n headlineFields: this.headlineFields,\r\n longHeadlineFields: this.longHeadlineFields,\r\n descriptionFields: this.descriptionFields,\r\n }));\r\n }\r\n ko.applyBindings(this.viewModel, this.el);\r\n\r\n if (this.isImproveMMA && this.isMMAEnabled) {\r\n _.each(this.headlineFields, (field, idx) => {\r\n this.$(`.short-headline-form-${idx} .short-headline-form`).append(this[field].render().el);\r\n this.$(`.short-headline-form-${idx} > .remaining-chars-hint-container`).append(this[`${field}RemainingCharsHint`].render().el);\r\n });\r\n _.each(this.longHeadlineFields, (field, idx) => {\r\n this.$(`.long-headline-form-${idx} .long-headline-form`).append(this[field].render().el);\r\n this.$(`.long-headline-form-${idx} > .remaining-chars-hint-container`).append(this[`${field}RemainingCharsHint`].render().el);\r\n });\r\n _.each(this.descriptionFields, (field, idx) => {\r\n this.$(`.description-form-${idx} .description-form`).append(this[field].render().el);\r\n this.$(`.description-form-${idx} > .remaining-chars-hint-container`).append(this[`${field}RemainingCharsHint`].render().el);\r\n });\r\n\r\n this.enableAIGenAssetContextualAttribute();\r\n\r\n return this;\r\n }\r\n\r\n if (this.isMMAEnabled) {\r\n _.each(this.headlineFields, (field, idx) => {\r\n this.$(`.short-headline-form-${idx} .short-headline-form`).append(this[field].render().el);\r\n this.$(`.short-headline-form-${idx} > .remaining-chars-hint-container`).append(this[`${field}RemainingCharsHint`].render().el);\r\n });\r\n _.each(this.longHeadlineFields, (field, idx) => {\r\n this.$(`.long-headline-form-${idx} .long-headline-form`).append(this[field].render().el);\r\n this.$(`.long-headline-form-${idx} > .remaining-chars-hint-container`).append(this[`${field}RemainingCharsHint`].render().el);\r\n });\r\n _.each(this.descriptionFields, (field, idx) => {\r\n this.$(`.description-form-${idx} .description-form`).append(this[field].render().el);\r\n this.$(`.description-form-${idx} > .remaining-chars-hint-container`).append(this[`${field}RemainingCharsHint`].render().el);\r\n });\r\n if (this.isMultiMediaAdsPhase2Enabled || this.isBoostScenario || this.isMSANLogoAndCTAForMMAEnabled) {\r\n this.$('.action-language').append(this.actionLanguageAdapter.render().el);\r\n this.$('.action-text').append(this.actionTypeAdapter.render().el);\r\n }\r\n } else {\r\n this.$('.short-headline-form').append(this.shortHeadline.render().el);\r\n this.$('.short-headline > .remaining-chars-hint-container').append(this.shortHeaderRemainingCharsHint.render().el);\r\n this.$('.long-headline-form').append(this.longHeadline.render().el);\r\n this.$('.long-headline > .remaining-chars-hint-container').append(this.longHeaderRemainingCharsHint.render().el);\r\n this.$('.description-form').append(this.description.render().el);\r\n this.$('.description > .remaining-chars-hint-container').append(this.descriptionRemainingCharsHint.render().el);\r\n }\r\n\r\n this.$('.business-name-form').append(this.businessName.render().el);\r\n this.$('.business-name > .remaining-chars-hint-container').append(this.businessNameRemainingCharsHint.render().el);\r\n this.$('.final-url').append(this.finalUrlEditor.render().el);\r\n if (this.isMobileUrlEnabled) {\r\n this.$('.mobile-url').append(this.mobileUrlEditor.render().el);\r\n } else {\r\n this.$('.mobile-url').remove();\r\n }\r\n\r\n if (this.isImpressionTrackingUrlsEnabled) {\r\n this.$('.impression-tracking-urls').append(this.ImpressionTrackingUrlsUrlOptions.render().el);\r\n }\r\n\r\n if (this.isThirdPartyMeasurementEnabled) {\r\n this.$('.third-party-measurements').append(this.ThirdPartyMeasurementView.render().el);\r\n }\r\n\r\n this.$('.advanced-url-options').append(this.advancedURLOptions.render().el);\r\n this.$('.generic-errors').append(this.genericErr.render().el);\r\n\r\n if (this.isMMAAdCustomizersEnabled) {\r\n this.enableAdStrengthSuggestionHelpers();\r\n if (this.ad) {\r\n const enableAdStrengthFields = _.union(this.headlineFields, this.longHeadlineFields, this.descriptionFields); // eslint-disable-line max-len\r\n _.each(enableAdStrengthFields, (field) => {\r\n this[`${field}RemainingCharsHint`].updateHint();\r\n });\r\n }\r\n }\r\n\r\n if (this.isAdRecommendationMSANEnabled && this.isAudienceCampaign && !this.isVideo && !this.isSimplifyAudienceCreation) {\r\n ReactDOM.render(, this.$('.get-recommend-ad')[0]);\r\n }\r\n\r\n if (this.isMSANBoostEnabled) {\r\n ReactDOM.render(\r\n ,\r\n this.$('.hotspot-panel')[0]\r\n );\r\n }\r\n\r\n if (this.isBoostAnchorsEnabled) {\r\n ReactDOM.render(\r\n ,\r\n this.$('.boost-anchors-section')[0]\r\n );\r\n }\r\n\r\n if (this.isBoostScenario && this.isBoostCustomCTAEnabled) {\r\n ReactDOM.render(\r\n ,\r\n this.$('.call-to-action-text')[0]\r\n );\r\n }\r\n\r\n if (this.isBoostCTAAriaTextEnabled) {\r\n ReactDOM.render(\r\n ,\r\n this.$('.call-to-action-aria-text')[0]\r\n );\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Returns a boolean that determines whether the passed variable is empty or not.\r\n * Empty meaning: null, undefined, []\r\n *\r\n * @param {object} value The value to be inspected.\r\n *\r\n * @returns {boolean} True for empty value, false otherwise.\r\n *\r\n */\r\n isEmpty(value) {\r\n // value == null also handles the case where value is undefined\r\n return (value == null || value.length === 0);\r\n }\r\n\r\n /**\r\n * Makes sure that all the needed parameters are contained on the object, and valid, before this\r\n * is used to save the ad.\r\n *\r\n * @param {object} params The object to be sent on the save request.\r\n *\r\n * @returns {boolean} True if everything is ok, false if values are missing or invalid.\r\n *\r\n */\r\n isDataValid(params) {\r\n let isValid = true;\r\n\r\n if (this.isMMAEnabled) {\r\n if (this.isImproveMMA) {\r\n this.viewModel.actionLanguageErrorMessage(false);\r\n this.viewModel.actionTextErrorMessage(false);\r\n } else if (this.isMultiMediaAdsPhase2Enabled) {\r\n if (_.isEmpty(params.CallToActionLanguage)) {\r\n isValid = false;\r\n this.viewModel.actionLanguageErrorMessage(this.i18n.getString('Validation_NotEmpty_Required_Field'));\r\n } else {\r\n this.viewModel.actionLanguageErrorMessage(false);\r\n }\r\n\r\n if (_.isEmpty(params.CallToAction) || params.CallToAction === 'Default') {\r\n isValid = false;\r\n this.viewModel.actionTextErrorMessage(this.i18n.getString('Validation_NotEmpty_Required_Field'));\r\n } else {\r\n this.viewModel.actionTextErrorMessage(false);\r\n }\r\n }\r\n if (this.isBulkEditMMA) {\r\n if (this.isEmpty(params.BusinessName) || params.BusinessName.length > MMAAssetConfigs.MAX_BUSINESS_NAME) {\r\n isValid = false;\r\n this.businessName.setState({ showError: true });\r\n return false;\r\n }\r\n return isValid;\r\n }\r\n if (_.isEmpty(params.Headlines) ||\r\n JSON.parse(params.Headlines).length < MMAAssetConfigs.MIN_HEADLINES) {\r\n isValid = false;\r\n this.viewModel.headlinesErrorMessage(this.i18n.getString('Multimedia_Ad_Error_AssetFieldMinimumNotMet', {\r\n field: this.i18n.getString('Audience_Campaign_Ad_Short_Headline_Label').toLowerCase(),\r\n min_count: MMAAssetConfigs.MIN_HEADLINES,\r\n }));\r\n } else {\r\n this.viewModel.headlinesErrorMessage(false);\r\n }\r\n // longheadline optional in MMA\r\n if ((((_.isEmpty(params.LongHeadlines) ||\r\n JSON.parse(params.LongHeadlines).length < MMAAssetConfigs.MIN_LONGHEADLINES))) && (!this.isMMAEnabled || this.isAudienceCampaign)) {\r\n isValid = false;\r\n this.viewModel.longHeadlinesErrorMessage(this.i18n.getString('Multimedia_Ad_Error_AssetFieldMinimumNotMet', {\r\n field: this.i18n.getString('Audience_Campaign_Ad_Long_Headline_Label').toLowerCase(),\r\n min_count: MMAAssetConfigs.MIN_LONGHEADLINES,\r\n }));\r\n } else {\r\n this.viewModel.longHeadlinesErrorMessage(false);\r\n }\r\n\r\n if (_.isEmpty(params.Descriptions) ||\r\n JSON.parse(params.Descriptions).length < MMAAssetConfigs.MIN_DESCRIPTIONS) {\r\n isValid = false;\r\n this.viewModel.descriptionsErrorMessage(this.i18n.getString('Multimedia_Ad_Error_AssetFieldMinimumNotMet', {\r\n field: this.i18n.getString('Audience_Campaign_Ad_Description_Label').toLowerCase(),\r\n min_count: MMAAssetConfigs.MIN_DESCRIPTIONS,\r\n }));\r\n } else {\r\n this.viewModel.descriptionsErrorMessage(false);\r\n }\r\n\r\n this.viewModel.businessNameErrorMessage(false);\r\n this.viewModel.urlOptionErrorMessage(false);\r\n }\r\n\r\n if (!this.isImproveMMA) {\r\n if (this.isEmpty(params.FinalUrls)) {\r\n isValid = false;\r\n this.finalUrlEditor.setError(this.i18n.getString('Audience_Campaign_Ad_Error_RequiredField'));\r\n }\r\n }\r\n\r\n if (!this.model.isValid()) {\r\n if (!this.isMMAEnabled) {\r\n this.shortHeadline.setState({ showError: true });\r\n this.longHeadline.setState({ showError: true });\r\n this.description.setState({ showError: true });\r\n }\r\n if (this.businessName) {\r\n this.businessName.setState({ showError: true });\r\n }\r\n return false;\r\n }\r\n\r\n if (this.isMSANBoostEnabled) {\r\n isValid = isValid && this.hotspotReactComponent.current.validate();\r\n\r\n if (this.isBoostCustomCTAEnabled && this.model.get('CallToAction') === 'CustomText') {\r\n isValid = isValid && this.callToActionTextComponent.current.isValid();\r\n }\r\n\r\n if (this.isBoostCTAAriaTextEnabled) {\r\n isValid = isValid && this.callToActionAriaTextComponent.current.isValid();\r\n }\r\n }\r\n\r\n // isValid = isValid && this.advancedURLOptions.isValid();\r\n return isValid;\r\n }\r\n\r\n /**\r\n * Check if the error is AdEdit error, if so set the error message\r\n *\r\n * @param {object} error - Error object\r\n * @returns {boolean} - true if the error belongs to the AdEdit false other wise.\r\n */\r\n setError(error) {\r\n if (error.Property && _.includes(_.keys(this.adPropertiesToControlMap), error.Property)) {\r\n const control = this.adPropertiesToControlMap[error.Property];\r\n\r\n control.setError(this.i18nErrors.getString(`API_ErrorNumber_${error.ErrorNumber}`));\r\n return true;\r\n }\r\n let ifCatch = 0;\r\n if (error.Error && error.Error.toLowerCase().indexOf('impressiontrackingurl') !== -1) {\r\n const errors = this.model.errors.get('ImpressionTrackingUrl') instanceof Array ?\r\n this.model.errors.get('ImpressionTrackingUrl').concat(this.i18nErrors.getString(`API_ErrorNumber_${error.ErrorNumber}`)) :\r\n [this.i18nErrors.getString(`API_ErrorNumber_${error.ErrorNumber}`)];\r\n\r\n this.model.errors.set({\r\n ImpressionTrackingUrl: errors,\r\n });\r\n this.ImpressionTrackingUrlsUrlOptions.setErrors(errors);\r\n\r\n ifCatch = 1;\r\n }\r\n\r\n if (error.Property === 'CallToAction') {\r\n this.viewModel.actionLanguageErrorMessage(this.i18n.getString(`Error_Campaign_API_${error.Error}`));\r\n }\r\n\r\n if (error.Property === 'ResponsiveAdHeadlines') {\r\n this.viewModel.headlinesErrorMessage(this.i18n.getString(`Multimedia_Ad_Error_${error.Error}`, {\r\n field: 'short headline',\r\n min_count: MMAAssetConfigs.MIN_HEADLINES,\r\n }) || this.i18nErrors.getString(`API_ErrorNumber_${error.ErrorNumber}`));\r\n }\r\n\r\n if (error.Property === 'ResponsiveAdLongHeadlines') {\r\n this.viewModel.longHeadlinesErrorMessage(this.i18n.getString(`Multimedia_Ad_Error_${error.Error}`, {\r\n field: 'long headline',\r\n min_count: MMAAssetConfigs.MIN_LONGHEADLINES,\r\n }) || this.i18nErrors.getString(`API_ErrorNumber_${error.ErrorNumber}`));\r\n }\r\n\r\n if (error.Property === 'ResponsiveAdDescriptions') {\r\n this.viewModel.descriptionsErrorMessage(this.i18n.getString(`Multimedia_Ad_Error_${error.Error}`, {\r\n field: 'ad text',\r\n min_count: MMAAssetConfigs.MIN_DESCRIPTIONS,\r\n }) || this.i18nErrors.getString(`API_ErrorNumber_${error.ErrorNumber}`));\r\n }\r\n\r\n if (error.Property === 'BusinessName') {\r\n this.viewModel.descriptionsErrorMessage(this.i18n.getString(`Multimedia_Ad_Error_${error.Error}`));\r\n }\r\n\r\n if (error.Property === 'CustomParameters' || (error.Error && error.Error.toLowerCase().indexOf('customparameters') !== -1)) {\r\n this.viewModel.urlOptionErrorMessage(this.i18nErrors.getString(`Error_Campaign_API_${error.Error}`));\r\n }\r\n\r\n if (_.isEmpty(error.Property) && !ifCatch) {\r\n const genericErrorMessage = this.i18nErrors.getString(`API_ErrorNumber_${error.ErrorNumber}`)\r\n || this.i18n.getString(`Multimedia_Ad_Error_${error.Error}`)\r\n || error.message\r\n || this.i18nErrors.getString('ErrorNumber_-1');\r\n\r\n this.genericErr.setErrorMessage(genericErrorMessage);\r\n }\r\n\r\n if (error.Error === 'InvalidUrlScheme') {\r\n this.hotspotReactComponent.current.setError(this.i18n.getString(_TL_('Invalid Url Schema')));\r\n }\r\n\r\n if (error.Error === 'HotSpotMissingRequiredField') {\r\n this.hotspotReactComponent.current.setError(this.i18n.getString(_TL_('HotSpot Missing Required Field')));\r\n }\r\n\r\n if (error.Error === 'InvalidGlyph') {\r\n this.hotspotReactComponent.current.setError(this.i18n.getString(_TL_('Invalid Glyph')));\r\n }\r\n\r\n if (error.Error === 'HotSpotsHasDuplication') {\r\n this.hotspotReactComponent.current.setError(this.i18n.getString(_TL_('HotSpots Has Duplication')));\r\n }\r\n\r\n if (error.Error === 'CustomerIsNotAllowedForHotSpots') {\r\n this.hotspotReactComponent.current.setError(this.i18n.getString(_TL_('Customer Is Not Allowed For HotSpots')));\r\n }\r\n\r\n if (error.Error === 'InvalidHotSpot') {\r\n this.hotspotReactComponent.current.setError(this.i18n.getString(_TL_('Invalid HotSpot')));\r\n }\r\n\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Sets the input elements on the ad model, and returns an object with the parameters\r\n * needed for the save request.\r\n *\r\n * @returns {object} Object with parameters to save the ad.\r\n *\r\n */\r\n getData() {\r\n const TrackingUrlTemplate = this.advancedURLOptions.getTrackingTemplate();\r\n const UrlCustomParameters = this.advancedURLOptions.getUrlCustomParameters(true);\r\n const FinalUrlSuffix = this.advancedURLOptions.getFinalUrlSuffix();\r\n this.model.set({\r\n TrackingUrlTemplate,\r\n UrlCustomParameters,\r\n FinalUrlSuffix,\r\n });\r\n\r\n if (this.isThirdPartyMeasurementEnabled) {\r\n const verifiedTrackingSettings = this.model.get('VerifiedTrackingSettings');\r\n const verifiedTrackingSettingsAttachment = getVerifiedTrackingSettingWrite(verifiedTrackingSettings);\r\n this.model.set(verifiedTrackingSettingsAttachment);\r\n }\r\n\r\n let data = this.model.toJSON();\r\n const adGroupId = Number(this.viewContext.currentAdGroup.Id);\r\n const campaignId = Number(this.viewContext.currentCampaign.Id);\r\n\r\n if (this.isBoostScenario) {\r\n if (data.CallToAction === 'Default') {\r\n delete data.CallToAction;\r\n delete data.CallToActionLanguage;\r\n }\r\n }\r\n\r\n if (this.isMSANBoostEnabled) {\r\n data.HotSpots = JSON.stringify(this.hotspotReactComponent.current.getData());\r\n }\r\n\r\n if (this.isBoostAnchorsEnabled) {\r\n data.BoostAnchors = this.boostAnchorsReactComponent.current.getData();\r\n }\r\n\r\n if (this.isBoostScenario && this.isBoostCustomCTAEnabled) {\r\n data.CallToActionText = this.callToActionTextComponent.current.getData();\r\n }\r\n\r\n if (this.isBoostCTAAriaTextEnabled) {\r\n data.CallToActionAriaText = this.callToActionAriaTextComponent.current.getData();\r\n }\r\n\r\n _.extend(data, { Campaign: { Id: campaignId }, AdGroup: { Id: adGroupId } });\r\n\r\n if (this.isUpdate) {\r\n data.Id = this.ad.Id;\r\n data = this.deleteUndefinedParameters(data);\r\n }\r\n\r\n if (this.isMMAEnabled) {\r\n data.Headlines = JSON.stringify(_.map(_.filter(\r\n this.headlineFields,\r\n field => !_.isEmpty(data[field])\r\n ), field => ({\r\n Text: data[field],\r\n })));\r\n data.LongHeadlines = JSON.stringify(_.map(_.filter(\r\n this.longHeadlineFields,\r\n field => !_.isEmpty(data[field])\r\n ), field => ({\r\n Text: data[field],\r\n })));\r\n data.Descriptions = JSON.stringify(_.map(_.filter(\r\n this.descriptionFields,\r\n field => !_.isEmpty(data[field])\r\n ), field => ({\r\n Text: data[field],\r\n })));\r\n if (this.isBulkEditMMA) {\r\n data.AdStatus = this.adStatus() || '';\r\n }\r\n }\r\n\r\n return _.omit(data, this.isEmpty);\r\n }\r\n\r\n /**\r\n * Set the optional parameters that are set to emty, to be 'delete_value', so that they get\r\n * deleted during the ad update.\r\n *\r\n * @param {object} params The object to be sent on the update request.\r\n *\r\n * @returns {object} Updated object to be sent to the update request.\r\n *\r\n */\r\n deleteUndefinedParameters(params) {\r\n const optionalParameters = ['MobileFinalUrls', 'TrackingUrlTemplate', 'UrlCustomParameters', 'LandscapeLogoMediaId', 'SquareLogoMediaId', 'FinalUrlSuffix'];\r\n\r\n if (this.isImpressionTrackingUrlsEnabled) {\r\n optionalParameters.push('ImpressionTrackingUrls');\r\n }\r\n\r\n if (this.isMMAEnabled) {\r\n optionalParameters.push(...[\r\n 'Headline',\r\n 'LongHeadline',\r\n 'Text',\r\n ]);\r\n }\r\n\r\n if (this.isThirdPartyMeasurementEnabled) {\r\n optionalParameters.push('VerifiedTrackingData');\r\n }\r\n\r\n _.forEach(optionalParameters, (p) => {\r\n if (this.isEmpty(params[p]) || (params[p] instanceof Array && params[p].length === 0)) {\r\n // eslint-disable-next-line no-param-reassign\r\n params[p] = 'delete_value';\r\n }\r\n });\r\n\r\n return params;\r\n }\r\n\r\n isAdNotEmpty(ad) {\r\n return _.get(ad, 'Id', -1) > 0;\r\n }\r\n\r\n /**\r\n * Registers AI generated asset contextual attribute popup to listen for key/mouse events\r\n * @returns {undefined}\r\n */\r\n enableAIGenAssetContextualAttribute() {\r\n const self = this;\r\n\r\n _.each(_.range(this.viewModel.showHeadlineCount()), (i) => {\r\n const element = self.$(`.iconba.iconba-Lightbulb.Headline${i}-AIGeneratedAsset`);\r\n _.first(element).style.display = this.ad.Headlines[i].IsAlgoGeneratedAsset ? 'inline-block' : 'none';\r\n attachAIGenAssetContextualAttribute(_.extend({\r\n element,\r\n i18n: this.i18n,\r\n improveMMAOption: { type: 'Text' },\r\n newI18n: this.newI18n,\r\n }));\r\n });\r\n\r\n _.each(_.range(this.viewModel.showLongHeadlineCount()), (i) => {\r\n const element = self.$(`.iconba.iconba-Lightbulb.LongHeadline${i}-AIGeneratedAsset`);\r\n _.first(element).style.display = this.ad.LongHeadlines[i].IsAlgoGeneratedAsset ? 'inline-block' : 'none';\r\n attachAIGenAssetContextualAttribute(_.extend({\r\n element,\r\n i18n: this.i18n,\r\n improveMMAOption: { type: 'Text' },\r\n newI18n: this.newI18n,\r\n }));\r\n });\r\n\r\n _.each(_.range(this.viewModel.showDescriptionCount()), (i) => {\r\n const element = self.$(`.iconba.iconba-Lightbulb.Description${i}-AIGeneratedAsset`);\r\n _.first(element).style.display = this.ad.Descriptions[i].IsAlgoGeneratedAsset ? 'inline-block' : 'none';\r\n attachAIGenAssetContextualAttribute(_.extend({\r\n element,\r\n i18n: this.i18n,\r\n improveMMAOption: { type: 'Text' },\r\n newI18n: this.newI18n,\r\n }));\r\n });\r\n }\r\n\r\n updateAIGenAssetContextualAttributeStatus(field, display) {\r\n const aiGeneratedAssetContainer = $(`.${field}-AIGeneratedAsset`);\r\n\r\n if (!_.isEmpty(aiGeneratedAssetContainer) && aiGeneratedAssetContainer.length > 0) {\r\n _.first(aiGeneratedAssetContainer).style.display = display;\r\n }\r\n }\r\n\r\n getAIGenAssetContextualAttributeStatus(field) {\r\n const aiGeneratedAssetContainer = $(`.${field}-AIGeneratedAsset`);\r\n\r\n if (!_.isEmpty(aiGeneratedAssetContainer) && aiGeneratedAssetContainer.length > 0) {\r\n return _.first(aiGeneratedAssetContainer).style.display;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n getBiddingSchemeType(options = {}) {\r\n if (this.isUpdate) {\r\n return _.get(options.ad, ['BiddingScheme', 'Type'], '');\r\n }\r\n return _.get(options, ['biddingScheme', 'Type'], '');\r\n }\r\n\r\n getVerifiedTrackingSettingAttachment(verifiedTrackingSettings = null) {\r\n if (_.isNull(verifiedTrackingSettings)) {\r\n return {};\r\n }\r\n\r\n if (_.isEmpty(verifiedTrackingSettings)) {\r\n return { VerifiedTrackingData: '' };\r\n }\r\n\r\n const result = [];\r\n _.mapObject(verifiedTrackingSettings, (value, key) => {\r\n result.push({ Key: key, Value: value });\r\n });\r\n\r\n return { VerifiedTrackingData: JSON.stringify([result]) };\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { odata } from '@bingads-webui/http-util';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\n\r\nexport const AccountSettingRepository = {\r\n getAccountSettings: (settings) => {\r\n const config = DependencyResolver.get('component/config/index');\r\n const cid = _.result(config.get('CurrentCustomer'), 'Id');\r\n const aid = _.result(config.get('CurrentAccount'), 'Id');\r\n const url = `${config.get('odata.url')}${config.get('odata.path')}/Customers(${cid})/Accounts(${aid})?$select=${settings.join(',')}`;\r\n\r\n return odata.get(url, { oDataToken: config.get('odata.token') });\r\n },\r\n\r\n updateAccountSettings: (data) => {\r\n const config = DependencyResolver.get('component/config/index');\r\n const cid = _.result(config.get('CurrentCustomer'), 'Id');\r\n const aid = _.result(config.get('CurrentAccount'), 'Id');\r\n\r\n const url = `${config.get('odata.url')}${config.get('odata.path')}/Customers(${cid})/Accounts(${aid})`;\r\n return odata.patch(url, { data, oDataToken: config.get('odata.token') });\r\n },\r\n};\r\n","import Promise from 'bluebird';\r\nimport _ from 'underscore';\r\nimport {\r\n constants,\r\n ImageExperienceImage,\r\n} from '@bingads-webui-campaign-react/image-experience';\r\nimport {\r\n newVideoFromGridObject,\r\n newVideoFromMTObject,\r\n} from '@bingads-webui-campaign-react/image-experience-video-part';\r\nimport { getAllImagesInfoFromMTAssets, getImageProps } from '@bingads-webui-campaign-react/responsive-ad-editor-utils';\r\n\r\n/**\r\n * Get videos with original thumbnail url and custom thumbnail record.\r\n * @param {object} odata OData object for sending request\r\n * @param {string} baseURL URL with customer ID and account ID\r\n * @param {Array} videos Array of videos from Ad\r\n * @returns {Promise} resolve list of videos and custom thumbnail record.\r\n */\r\nexport const getVideosAndThumbnailsFromMTAssets = (\r\n odata,\r\n baseURL,\r\n videos\r\n) => {\r\n const thumbnailRecord = {};\r\n const thumbnailAssets = _.pluck(videos, 'Asset').map(asset => ({ Asset: asset.CustomThumbnailAsset || {} }));\r\n\r\n const options = {\r\n mTAssetArrays: thumbnailAssets,\r\n baseURL,\r\n odata,\r\n };\r\n\r\n return getAllImagesInfoFromMTAssets(options)\r\n .then(imageToUrlMap => Promise.all(constants.videoTypesWithOrder.map((videoType) => {\r\n const videoWrapper = videos.find(v => v.Asset.SubType === videoType);\r\n const video = videoWrapper.Asset;\r\n let thumbnail;\r\n const customThumbnailAsset = video && video.CustomThumbnailAsset;\r\n if (customThumbnailAsset) {\r\n const imageProps = getImageProps(customThumbnailAsset, imageToUrlMap, true);\r\n imageProps.type = customThumbnailAsset.SubType;\r\n thumbnail = new ImageExperienceImage(imageProps);\r\n }\r\n\r\n // MT overrides ThumbnailUrl so we need to restore it by calling OData\r\n if (thumbnail) {\r\n thumbnailRecord[thumbnail.Type] = thumbnail;\r\n const url = `${baseURL}Videos/${video.Id}`;\r\n return odata.get(url)\r\n .then(asset => newVideoFromMTObject({ ...asset, SubType: videoType }));\r\n }\r\n return Promise.resolve(newVideoFromGridObject(video));\r\n }))\r\n .then(videoList => ({ videoList, thumbnailRecord })));\r\n};\r\n","/* eslint-disable no-param-reassign */\r\nimport _ from 'underscore';\r\nimport { AdEditFields, assetSuggestionType } from '../constants';\r\n\r\n// used for audience campaign non multimedia ad\r\nexport const getTextSuggestionAdoption = (textSuggestions, saveAdParams) => {\r\n const finalUrl = _.first(saveAdParams.FinalUrls);\r\n const autoCompleteSuggestions = _.get(textSuggestions, ['autoCompleteSuggestions', finalUrl], []);\r\n const creationSuggestions = _.get(textSuggestions, ['creationSuggestions', finalUrl], []);\r\n const businessNameSuggestions = _.get(textSuggestions, ['businessNameSuggestions', finalUrl], []);\r\n\r\n const suggestionMatch = (suggestion, assetType, testValue) =>\r\n suggestion.AssetType === assetType && suggestion.Text === testValue;\r\n\r\n return Object.keys(AdEditFields).reduce((textSuggestionAdoption, field) => {\r\n textSuggestionAdoption[field] = {\r\n value: saveAdParams[field],\r\n };\r\n const suggestionMatchForField =\r\n _.partial(suggestionMatch, _, assetSuggestionType[field], saveAdParams[field]);\r\n\r\n if (field === AdEditFields.BusinessName) {\r\n textSuggestionAdoption[field].isSuggestionAdopted =\r\n businessNameSuggestions.some(suggestionMatchForField);\r\n } else {\r\n textSuggestionAdoption[field].isSuggestionAdopted =\r\n autoCompleteSuggestions.some(suggestionMatchForField) ||\r\n creationSuggestions.some(suggestionMatchForField);\r\n }\r\n return textSuggestionAdoption;\r\n }, {});\r\n};\r\n","export const getStyle = () => ({\r\n imagePlaceholder: {\r\n width: 115,\r\n height: 98,\r\n display: 'block',\r\n border: '2px solid #1079d1',\r\n objectFit: 'cover',\r\n },\r\n portraitWithImage: {\r\n position: 'relative',\r\n\r\n '& .image-edit': {\r\n position: 'absolute',\r\n border: 'none',\r\n height: 32,\r\n width: 32,\r\n borderRadius: '50%',\r\n backgroundColor: 'rbga(255,255,255,0.5)',\r\n left: 17,\r\n top: 57,\r\n '&:hover': {\r\n backgroundColor: '#106ebeff',\r\n '&:before': {\r\n color: '#fff',\r\n },\r\n },\r\n },\r\n '& .image-delete': {\r\n position: 'absolute',\r\n border: 'none',\r\n height: 32,\r\n width: 32,\r\n borderRadius: '50%',\r\n backgroundColor: 'rbga(255,255,255,0.5)',\r\n left: 60,\r\n top: 57,\r\n '&:hover': {\r\n backgroundColor: '#106ebeff',\r\n '&:before': {\r\n color: '#fff',\r\n },\r\n },\r\n },\r\n '& .image-add': {\r\n height: 32,\r\n width: 122,\r\n },\r\n },\r\n});\r\n","import { result } from 'underscore';\r\nimport { odata } from '@bingads-webui/http-util';\r\nimport config from '@bingads-webui-component-legacy/config/index';\r\n\r\nexport const getImageData = async (id) => {\r\n const cid = result(config.get('CurrentCustomer'), 'Id');\r\n const aid = result(config.get('CurrentAccount'), 'Id');\r\n const url = `${config.get('odata.url')}${config.get('odata.path')}/Customers(${cid})/Accounts(${aid})/Images(${id})`;\r\n\r\n return odata.get(url, { oDataToken: config.get('odata.token') });\r\n};\r\n","/* eslint-disable react/prop-types */\r\nimport React, { useCallback, useState, useMemo } from 'react';\r\nimport _ from 'underscore';\r\nimport { AddImageCrudAdComponent } from '@bingads-webui-campaign-react/add-media-panel-crud-ad';\r\nimport { useAssetLibraryImagePicker, useImagePicker, useWebsiteSuggestion } from '@bingads-webui-campaign-react/add-image-hooks';\r\nimport { MediaEditorPanel } from '@bingads-webui-campaign-react/media-editor-panel';\r\nimport { PivotItemKey } from '@bingads-webui-campaign-react/media-editor';\r\nimport { constants } from '@bingads-webui-campaign-react/image-experience-model';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { MediaRepository } from '@bingads-webui-campaign/media-repository';\r\nimport { ImageExperienceImage } from '@bingads-webui-campaign-react/image-experience';\r\n\r\nimport { getStyle } from './style';\r\nimport { getImageData } from './image-repository';\r\n\r\nconst BoostImage = ({\r\n cid,\r\n aid,\r\n i18n,\r\n permissions,\r\n oDataConfig,\r\n instrumentation,\r\n activityLogger,\r\n url,\r\n preferencesService,\r\n perfMarker,\r\n onSavePortraitImage,\r\n associatedImages,\r\n dateFormat,\r\n timeZone,\r\n serverContext,\r\n}) => {\r\n const maxUploadNum = 1;\r\n const [isImageEditDisplayed, setIsImageEditDisplayed] = useState(false);\r\n const [image, setImage] = useState();\r\n const classes = useDefaultStyles(getStyle);\r\n\r\n const {\r\n displayImagePicker,\r\n setDisplayImagePicker,\r\n selectedMediaPanelSource,\r\n setSelectedMediaPanelSource,\r\n } = useImagePicker();\r\n\r\n const mediaRepository = useMemo(() => new MediaRepository({\r\n cid,\r\n aid,\r\n oDataConfig,\r\n }), [aid, cid, oDataConfig]);\r\n\r\n const onNewImageSelected = useCallback((imagePlacements) => {\r\n const newImage = imagePlacements[0][0];\r\n setDisplayImagePicker(false);\r\n setImage(newImage);\r\n onSavePortraitImage(newImage);\r\n }, [setImage, setDisplayImagePicker, onSavePortraitImage]);\r\n\r\n const minCropSize = [470, 940];\r\n\r\n const {\r\n imagePickerError,\r\n setImagePickerError,\r\n clearImagePickerError,\r\n uploadImage,\r\n processUploadedImage,\r\n minSize,\r\n addImageByUrl,\r\n getStockImages,\r\n onSelectStockImage,\r\n onImageSelected,\r\n onImagesSelected,\r\n socialMediaDataSource,\r\n customMediaSourceConfig,\r\n } = useAssetLibraryImagePicker({\r\n cid,\r\n aid,\r\n oDataConfig,\r\n onNewImageSelected,\r\n i18n,\r\n permissions,\r\n isPortraitImage: true,\r\n });\r\n\r\n const {\r\n suggestionState,\r\n suggestionPoller,\r\n } = useWebsiteSuggestion({\r\n oDataConfig,\r\n adContext: {\r\n advertiserCustomerId: cid,\r\n accountId: aid,\r\n },\r\n instrumentation,\r\n logActivity: activityLogger.signal.bind(activityLogger),\r\n permissions,\r\n fullUrl: url,\r\n adCreatorScenario: {\r\n scenarioName: 'BoostImageAdCreation',\r\n scenarioValue: 'BoostImageAdCreation',\r\n },\r\n });\r\n\r\n const { suggestion = {} } = suggestionState;\r\n\r\n const onEdit = () => {\r\n setIsImageEditDisplayed(true);\r\n };\r\n\r\n const onRemove = () => {\r\n setImage({});\r\n onSavePortraitImage({});\r\n };\r\n\r\n const onSaveEditImage = (imagePlacement) => {\r\n image.cropSettings = imagePlacement.cropSettings;\r\n setImage(image);\r\n setIsImageEditDisplayed(false);\r\n onSavePortraitImage(image);\r\n };\r\n\r\n if (!_.isEmpty(associatedImages) && image === undefined) {\r\n const portraitImage = associatedImages.find(i => constants.portraitSubtypes[i.Asset.SubType]);\r\n if (!_.isUndefined(portraitImage)) {\r\n getImageData(portraitImage.Asset.Id).then((imgObjMT) => {\r\n window.console.log(imgObjMT);\r\n\r\n const portraitImageExperienceImage = new ImageExperienceImage({\r\n id: portraitImage.Asset.Id,\r\n src: imgObjMT.OriginalUrl,\r\n type: constants.portraitSubtypes[portraitImage.Asset.SubType],\r\n width: imgObjMT.Width,\r\n height: imgObjMT.Height,\r\n associationType: portraitImage.Asset.SubType,\r\n disableEdit: false,\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: false,\r\n source: imgObjMT.SourceType,\r\n cropSettings: {\r\n SourceX: portraitImage.Asset.CropX,\r\n SourceY: portraitImage.Asset.CropY,\r\n SourceHeight: portraitImage.Asset.CropHeight,\r\n SourceWidth: portraitImage.Asset.CropWidth,\r\n },\r\n });\r\n setImage(portraitImageExperienceImage);\r\n });\r\n }\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n
    {i18n.getString(_TL_('Portrait image'))}
    \r\n
    \r\n
    \r\n {!(image instanceof ImageExperienceImage) && (\r\n \r\n )}\r\n {image instanceof ImageExperienceImage && (\r\n \r\n \"\"\r\n \r\n \r\n \r\n )}\r\n
    \r\n {\r\n setDisplayImagePicker(newOpen);\r\n if (!newOpen) {\r\n clearImagePickerError();\r\n }\r\n }}\r\n uploadImage={uploadImage}\r\n processUploadedImage={processUploadedImage}\r\n minSize={minSize}\r\n maxUploadNum={maxUploadNum}\r\n imageExperienceProps={{\r\n suggestion,\r\n suggestionPoller,\r\n finalUrl: url,\r\n imageOption: constants.imageOptionKeys.Portrait,\r\n isPortraitImage: true,\r\n }}\r\n addImageByUrl={addImageByUrl}\r\n managedViewSelectionState={selectedMediaPanelSource}\r\n updateManagedViewSelectionState={setSelectedMediaPanelSource}\r\n stockImageConfig={{\r\n getStockImages,\r\n onSelectStockImage,\r\n }}\r\n socialImageConfig={{\r\n socialMediaDataSource,\r\n activityLogger,\r\n }}\r\n assetLibraryConfig={{\r\n cid,\r\n aid,\r\n oDataConfig,\r\n dateFormat,\r\n timeZone,\r\n preferencesService,\r\n activityLogger,\r\n onImageSelected,\r\n onImagesSelected,\r\n onImageAddError: e => setImagePickerError(e),\r\n }}\r\n i18n={i18n}\r\n cid={cid.toString()}\r\n aid={aid.toString()}\r\n errorMessage={imagePickerError}\r\n imageType={null}\r\n customMediaSourceConfig={customMediaSourceConfig}\r\n perfMarker={perfMarker}\r\n permissions={permissions}\r\n serverContext={serverContext}\r\n />\r\n\r\n {(image instanceof ImageExperienceImage) && (\r\n setIsImageEditDisplayed(false)}\r\n onApply={onSaveEditImage}\r\n mediaRepository={mediaRepository}\r\n aspectRatioConfig={constants.aspectRatiosForBoostPortrait}\r\n cropSettings={image.cropSettings}\r\n minCropSize={minCropSize}\r\n baseImage={{\r\n Type: image.Type,\r\n Src: image.Src,\r\n Width: image.Width,\r\n Height: image.Height,\r\n }}\r\n adCreatorScenario={{\r\n scenarioName: 'BoostImageAdCreation',\r\n scenarioValue: 'BoostImageAdCreation',\r\n }}\r\n disabledPivotItemKeys={[PivotItemKey.Effect]}\r\n customizedDefaultSelectedPivotItemKey={PivotItemKey.Crop}\r\n />)}\r\n
    \r\n
    \r\n );\r\n};\r\n\r\nexport { BoostImage };\r\n","/* eslint-disable react/no-array-index-key */\r\n/* eslint-disable import/extensions */\r\n/* eslint-disable import/no-unresolved */\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport classnames from 'classnames';\r\nimport { ThemeProvider } from 'react-jss';\r\nimport edmCampaign from '@bingads-webui-component-legacy/edm-campaign/index';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport { UiBlocker } from '@bingads-webui-react/ui-blocker';\r\nimport { BackboneViewWrapper } from '@bingads-webui-react/backbone-view-wrapper';\r\nimport { bulkEditChange } from '@bingads-webui-campaign-legacy/bulk-edit/service/bulk-edit';\r\nimport getParams from '@bingads-webui-campaign-legacy/bulk-edit/service/get-params';\r\nimport { bulkApiErrorNumberToErrorMessageMapping } from '@bingads-webui-campaign/api-errors';\r\n\r\nimport {\r\n MessageBar,\r\n MessageBarType,\r\n} from '@bingads-webui-react/fabric-control';\r\nimport {\r\n Row,\r\n Col,\r\n Button,\r\n} from '@bingads-webui-react/primitive';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\nimport {\r\n ImageExperience,\r\n PreviewCarousel,\r\n MMAPreviewCarousel,\r\n UnifiedPreviewCarousel,\r\n UnifiedMMAMSANPreviewCarousel,\r\n SavedAdList,\r\n constants,\r\n getAutoCroppedImages,\r\n} from '@bingads-webui-campaign-react/image-experience';\r\nimport { VideoPreviewCarousel } from '@bingads-webui-campaign-react/image-experience-video-part';\r\nimport {\r\n SuggestionPoller,\r\n MediaRepository,\r\n SuggestionStatus,\r\n mapSuggestionResponseToState,\r\n} from '@bingads-webui-campaign/media-repository';\r\nimport { isValidUrl } from '@bingads-webui/url-util';\r\nimport { ImageOData } from '@bingads-webui-campaign/image-odata';\r\nimport {\r\n getAdCreatorInstrumentation,\r\n instrumentationScenarios,\r\n} from '@bingads-webui-campaign/ad-creator-tools-instrumentation';\r\nimport { ImageSuggestionCarousel } from '@bingads-webui-campaign-react/image-suggestion-carousel';\r\nimport { ComponentSettings, ThemeFluent } from '@bingads-webui-theme-2018/theme-fluent';\r\nimport {\r\n getImagesFromMTAssetsAsync,\r\n getMultiImagesFromMTAssetsAsync,\r\n uploadRecommendImage,\r\n omitDeletedParameters,\r\n setMTImageModel,\r\n getFlattenedImageAssetList,\r\n updateAssetsIdsAsync,\r\n} from '@bingads-webui-campaign-react/responsive-ad-editor-utils';\r\n\r\nimport { AdEdit } from './ad-edit/view';\r\nimport { AccountSettingRepository } from './utils/account-setting-repository';\r\nimport { getVideosAndThumbnailsFromMTAssets } from './utils/video-repository-util';\r\nimport { logSaveAdInfoForMetrics } from './utils/save-ad-logging';\r\nimport { getTextSuggestionAdoption } from './asset-suggestion/asset-suggestion-log';\r\nimport { RecommendAdList, getRecommendCacheByUrl } from './ad-recommend';\r\nimport { BoostImage } from './boost-image';\r\nimport { getUnifiedAdPreviewConfig } from './get-unified-ad-preview-config';\r\n\r\nconst initialState = {\r\n shortHeadline: '',\r\n longHeadline: '',\r\n description: '',\r\n businessName: '',\r\n url: '',\r\n protocol: 'https://',\r\n callToAction: '',\r\n imageList: [],\r\n savedAdsList: [],\r\n videoList: [],\r\n thumbnailRecord: {}, // { VideoMedia16X9Thumbnail: object, ... }\r\n isAdEditShown: true,\r\n imageErrorMessages: [],\r\n videoErrorMessages: [],\r\n genericErrorMessages: [],\r\n errorCodes: [],\r\n currentAd: null,\r\n isBlocking: false,\r\n draftUnsaved: false,\r\n isStockPhotoEnabled: false,\r\n oDataConfig: null,\r\n videoUploading: false,\r\n currentSelectedImageId: null,\r\n currentSelectedLogoId: null,\r\n cropImage: null,\r\n blockCarousel: false,\r\n hasWebsiteImageOptedIn: true,\r\n enableAutoRotate: true,\r\n hasManualCroppedLogo: false,\r\n hasManualCroppedImage: false,\r\n hasUsedViewAllPlacements: false,\r\n isRecommendAd: false,\r\n hotspots: [],\r\n mmaBulkConversionStatus: 'Active',\r\n isBulkEditMMA: true,\r\n isBulkEditMMAUnSaved: false,\r\n campaignSettings: [],\r\n ...mapSuggestionResponseToState(SuggestionStatus.EmptyURL),\r\n};\r\n\r\nexport class CrudAudienceAdReact extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.perfMarker = props.perfMarker;\r\n this.perfMarker.willInit();\r\n\r\n this.isAdRecommendationMSANEnabled = props.isAdRecommendationMSANEnabled;\r\n // override only in Ad creation scenario and not opt out the prefill\r\n // no prefill in some test cases\r\n this.shouldOverrideAdInEditor = !props.ad && !_.result(props.permissions.dynamic, 'OptOutMSANAdRecommendationPrefill') && !window.e2eTestEnvironment;\r\n\r\n this.isMultiMediaAdsPhase2Enabled = props.permissions.IsMultiMediaAdsPhase2Enabled;\r\n this.IsVideoAdEditorEnabled = props.permissions &&\r\n props.permissions.IsVideoAdEditorEnabled;\r\n\r\n this.i18nErrors = DependencyResolver.get('component/api-errors-campaign/index');\r\n\r\n this.isMSANBoostEnabled = props.isAudienceCampaign && props.permissions.IsAmplifyEnabled;\r\n this.isBoostPortraitImageEnabled = this.isMSANBoostEnabled && props.permissions.IsBoostPortraitImageEnabled;\r\n this.isBoost200x100ImageEnabled = this.isMSANBoostEnabled && props.permissions.IsBoost200x100ImageEnabled;\r\n this.isBoostNewAspectRatioSupportEnabled = this.isMSANBoostEnabled && props.permissions.IsBoostNewAspectRatioSupportEnabled;\r\n\r\n this.isNativeAd = props.isAudienceCampaign\r\n && (_.result(props.viewContext.currentCampaign, 'CampaignSubType') === 'AudienceStatic'\r\n || _.result(props.viewContext.currentCampaign, 'CampaignSubType') === 0);\r\n\r\n this.isAudienceImageUpscale = this.isNativeAd && _.result(props.permissions.dynamic, 'AudienceImageUpscale');\r\n\r\n this.isMSANLogoAndCTAForMMAEnabled = props.isAudienceCampaign && !this.isMSANBoostEnabled\r\n && (_.result(props.viewContext.currentCampaign, 'CampaignSubType') === 'AudienceStatic'\r\n || _.result(props.viewContext.currentCampaign, 'CampaignSubType') === 0)\r\n && props.permissions.IsMSANLogoAndCTAForMMAEnabled;\r\n\r\n this.isLogoEnabled =\r\n (this.props.isMultimediaAd && props.permissions.IsMultiMediaAdsPhase2Enabled && !props.isRecommendation)\r\n || (props.isAudienceCampaign && props.permissions.IsAmplifyEnabled)\r\n || this.isMSANLogoAndCTAForMMAEnabled;\r\n\r\n this.recommendAssetIdImageUrlMap = {};\r\n this.imageTypesWithOrder = constants.getImageTypesWithOrder(this.props.isMultimediaAd); // eslint-disable-line max-len\r\n\r\n this.defaultPreviewFields = {\r\n shortHeadline: props.i18n.getString('Audience_Campaign_Ad_Preview_Default_ShortHeadline'),\r\n longHeadline: props.i18n.getString('Audience_Campaign_Ad_Preview_Default_LongHeadline'),\r\n description: props.i18n.getString('Audience_Campaign_Ad_Preview_Default_Description'),\r\n businessName: props.i18n.getString('Audience_Campaign_Ad_Preview_Default_BusinessName'),\r\n callToAction: props.i18n.getString('Audience_Campaign_Ad_Preview_Default_CallToAction'),\r\n url: 'https://example.com',\r\n };\r\n\r\n const newState = {};\r\n // DataProcessorFactory('nnfa');\r\n this.adEditRef = React.createRef();\r\n this.imagePreviewCarouselRef = React.createRef();\r\n this.videoPreviewCarouselRef = React.createRef();\r\n\r\n this.saveAdAsync = this.saveAdAsync.bind(this);\r\n this.saveMMABulkConversion = this.saveMMABulkConversion.bind(this);\r\n this.progressCb = this.progressCb.bind(this);\r\n this.cancelAdAsync = this.cancelAdAsync.bind(this);\r\n\r\n this.isVideo = props.isVideo && this.props.permissions.IsVideoAdsForCampaignEnabled;\r\n\r\n this.baseURL = `/Customers(${props.cid})/Accounts(${props.aid})/`;\r\n\r\n const { isMultimediaAdinMSANEnabled, isMultimediaAd, isBulkEditMMA } = this.props;\r\n this.isMMAEnabled = isMultimediaAdinMSANEnabled || isMultimediaAd;\r\n\r\n this.logInfo = {\r\n isGridDisplay: props.isGridDisplay,\r\n isVideo: this.isVideo,\r\n isMMAInMSAN: isMultimediaAdinMSANEnabled,\r\n isMMASearch: isMultimediaAd && this.isMultiMediaAdsPhase2Enabled,\r\n isEdit: !!props.ad,\r\n };\r\n\r\n this.logWithMetadata('responsive ad editor loaded');\r\n\r\n this.adPreviewPerfMarker = this.props.perfMarker.createChild('adPreviewOpen');\r\n\r\n // collect unSupported ratios, return back to MT when saving\r\n this.UiUnsupportedRatios = [];\r\n\r\n this.isSimplifyAudienceCreation = props.scenario === 'new-audience-static-creation';\r\n\r\n if (props.ad) {\r\n newState.currentAd = props.ad;\r\n newState.isBlocking = false;\r\n newState.shortHeadline = props.ad.Headline;\r\n newState.longHeadline = props.ad.LongHeadline;\r\n newState.description = props.ad.Text;\r\n if ((this.props.isMultimediaAd && this.isMultiMediaAdsPhase2Enabled) ||\r\n isMultimediaAdinMSANEnabled) {\r\n if (!_.isEmpty(props.ad.Headlines)) {\r\n if (_.isEmpty(_.first(props.ad.Headlines).Asset)) {\r\n // edit ad in campaign / ad group creation\r\n newState.shortHeadline = _.first(props.ad.Headlines).Text;\r\n } else {\r\n // edit in grid\r\n newState.shortHeadline = _.first(props.ad.Headlines).Asset.Text;\r\n }\r\n }\r\n if (!_.isEmpty(props.ad.LongHeadlines)) {\r\n if (_.isEmpty(_.first(props.ad.LongHeadlines).Asset)) {\r\n newState.longHeadline = _.first(props.ad.LongHeadlines).Text;\r\n } else {\r\n newState.longHeadline = _.first(props.ad.LongHeadlines).Asset.Text;\r\n }\r\n }\r\n if (!_.isEmpty(props.ad.Descriptions)) {\r\n if (_.isEmpty(_.first(props.ad.Descriptions).Asset)) {\r\n newState.description = _.first(props.ad.Descriptions).Text;\r\n } else {\r\n newState.description = _.first(props.ad.Descriptions).Asset.Text;\r\n }\r\n }\r\n }\r\n newState.businessName = props.ad.BusinessName;\r\n newState.callToAction = props.ad.CallToAction;\r\n newState.url = _.first(props.ad.FinalUrls);\r\n newState.imageList = props.ad.ImageList || [];\r\n if (!_.isEmpty(newState.imageList) && !_.isEmpty(_.first(newState.imageList))) {\r\n newState.currentSelectedImageId = this.getDefaultCurrentSelectedImageId(newState.imageList);\r\n }\r\n newState.isStockPhotoEnabled = true;\r\n newState.hotspots = _.map(props.ad.HotSpots, item =>\r\n item.Asset && {\r\n title: item.Asset.Title,\r\n desc: item.Asset.Description,\r\n actionText: item.Asset.ActionText,\r\n glyph: item.Asset.Glyph,\r\n uri: item.Asset.Uri,\r\n placement: item.Asset.Placement,\r\n });\r\n newState.oDataConfig = {\r\n odataRootUrl: 'test.com',\r\n odataPath: '/Mock/',\r\n odataToken: 'token',\r\n };\r\n\r\n // For Image Suggestion from Final URL\r\n if (props.isAdCreatorEnabled || props.isFinalUrlImageRetrievalEnabled) {\r\n _.extend(newState, mapSuggestionResponseToState(SuggestionStatus.FetchInProgress));\r\n this.onFinalUrlChanged(newState.url);\r\n }\r\n }\r\n\r\n this.isImageFittingEnabled = _.result(props.permissions.dynamic, 'ImageFittingMVP', false)\r\n && !_.result(props.permissions.dynamic, 'ImageFittingExlcudeMAE', true)\r\n && _.result(props.permissions.dynamic, 'ImageFittingUnifiedImageROI', false)\r\n && !props.ad.LegacyResponsiveAd\r\n && isMultimediaAdinMSANEnabled; // only enable for audience ads for MVP\r\n\r\n this.state = _.defaults(newState, initialState);\r\n this.initialVideos = [];\r\n\r\n this.jsdata = props.jsdata;\r\n this.permissions = props.permissions;\r\n if (this.permissions.IsMMAAutomatedCTAOptInEnabled && props.viewContext.currentCampaign && props.viewContext.currentCampaign.Id && this.jsdata && this.jsdata.Campaign) {\r\n const params = {\r\n queryParameters: {\r\n entitySet: edmCampaign.currentAccount.Campaigns,\r\n },\r\n bypassCache: true,\r\n };\r\n this.jsdata.Campaign.find(props.viewContext.currentCampaign.Id, params).then((data) => {\r\n this.setState({ campaignSettings: data.CampaignSettings });\r\n });\r\n }\r\n\r\n if (isMultimediaAdinMSANEnabled) {\r\n this.adCreatorScenario = instrumentationScenarios.MSAN;\r\n } else if (props.isFinalUrlImageRetrievalEnabled) {\r\n this.adCreatorScenario = instrumentationScenarios.MSANImage;\r\n } else if (isMultimediaAd) {\r\n this.adCreatorScenario = instrumentationScenarios.MMA;\r\n } else if (isBulkEditMMA) {\r\n this.adCreatorScenario = instrumentationScenarios.MMAConversion;\r\n } else {\r\n this.adCreatorScenario = instrumentationScenarios.default;\r\n }\r\n\r\n if (props.isAdCreatorEnabled || props.isFinalUrlImageRetrievalEnabled) {\r\n this.suggestionPoller = new SuggestionPoller({\r\n cid: props.cid,\r\n aid: props.aid,\r\n cmpId: props.viewContext.currentCampaign.Id,\r\n oDataConfig: props.oDataConfig,\r\n jobCompleteCallback: this.onPollingSuggestionCompleted.bind(this),\r\n logger: getAdCreatorInstrumentation(this.props.instrumentation, this.adCreatorScenario, this.props.permissions).websiteSuggestionActivity, // eslint-disable-line max-len\r\n });\r\n }\r\n\r\n this.mediaRepository = new MediaRepository({\r\n cid: props.cid,\r\n aid: props.aid,\r\n cmpId: props.viewContext.currentCampaign.Id,\r\n oDataConfig: props.oDataConfig,\r\n });\r\n\r\n this.imageOData = new ImageOData(props.cid, props.aid, props.oDataConfig);\r\n\r\n // this is an observable passed in scenarios where the save ad button is not\r\n // part of this view (e.g. most top of grid scenarios)\r\n this.hasWebsiteImageOptedInObservable = props.hasWebsiteImageOptedInObservable;\r\n\r\n if (!this.hasWebsiteImageOptedInObservable) {\r\n if (props.isAdCreatorEnabled && props.isMultimediaAdinMSANEnabled) {\r\n this.hasWebsiteImageOptedInObservable = (newValue) => {\r\n this.setState({\r\n hasWebsiteImageOptedIn: newValue,\r\n });\r\n };\r\n } else {\r\n this.hasWebsiteImageOptedInObservable = _.noop;\r\n }\r\n }\r\n\r\n this.enableAdPreviewLibrary = _.get(props.permissions.dynamic, 'AdPreviewLibrarySearchMMA', false);\r\n this.props.activityLogger.signal(`crud-audience-ad-react constructor: ${props.permissions.dynamic && props.permissions.dynamic.MMACopilot}`, 'rae-view deprecation');\r\n }\r\n\r\n componentDidMount() {\r\n this.openTime = new Date();\r\n if (this.props.ad) {\r\n if (this.isVideo) {\r\n this.fetchAndFillVideosAsync();\r\n } else if (_.isEmpty(this.state.imageList)) {\r\n this.fetchAndFillImagesAsync();\r\n }\r\n }\r\n this.props.activityLogger.signal(`ad editor opened: isGrid: ${this.props.isGridDisplay}, isEdit: ${!!this.props.ad}, isVideo: ${!!this.isVideo}, url: ${this.state.url}`, 'responsive ad editor');\r\n\r\n this.perfMarker.done();\r\n }\r\n\r\n componentDidUpdate() {\r\n if (this.props.isBulkEditMMA) return;\r\n if (this.props.isImproveMMA) return;\r\n if (this.props.isAdCreatorEnabled && this.adEditRef.current && this.adEditRef.current.view.$) {\r\n // disable this from running in unit tests ReactDOM.render will always fail because the 2nd arg is\r\n // not attached to any DOM in unit test scenario\r\n const disabled = (this.state.imageList.length >= constants.DEFAULT_MAX_IMAGE || this.isMSANBoostEnabled);\r\n\r\n ReactDOM.render(\r\n \r\n {\r\n !disabled &&\r\n \r\n {\r\n const { websiteSuggestionCarouselActivity } =\r\n getAdCreatorInstrumentation(this.props.instrumentation, this.adCreatorScenario);\r\n\r\n websiteSuggestionCarouselActivity.trace(`CarouselImageSelected: ${index};`);\r\n\r\n this.setState({ blockCarousel: true });\r\n this.state.addImageCallback(imageSource, constants.imageOptionKeys.Image, suggestionId)\r\n .then((error = {}) => {\r\n if (error && error.errorMessage) {\r\n this.setState({\r\n carousel: {\r\n ...this.state.carousel,\r\n message: {\r\n type: MessageBarType.error,\r\n message: error.errorMessage,\r\n },\r\n },\r\n });\r\n }\r\n return Promise.resolve();\r\n })\r\n .finally(() => {\r\n this.setState({ blockCarousel: false });\r\n });\r\n this.setState({\r\n carousel: {\r\n ...this.state.carousel,\r\n images: _.reject(this.state.carousel.images, (val, ind) => ind === index),\r\n },\r\n });\r\n }}\r\n onSelectSeeAll={() => this.state.openAddImageCallback()}\r\n />\r\n \r\n }\r\n ,\r\n this.adEditRef.current.view.$('.image-suggestion-carousel')[0]\r\n );\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this.suggestionPoller) {\r\n this.suggestionPoller.cancel();\r\n }\r\n }\r\n\r\n onPollingSuggestionCompleted(response, isSubdomainScraping) {\r\n if (response.error) {\r\n // error handling section\r\n this.setState(mapSuggestionResponseToState(SuggestionStatus.ServerError, response));\r\n } else {\r\n this.setState(mapSuggestionResponseToState(\r\n SuggestionStatus.FetchSucceed,\r\n response,\r\n isSubdomainScraping\r\n ));\r\n }\r\n }\r\n\r\n onAdFieldUpdated = (updatedObj) => {\r\n const { isFinalUrlImageRetrievalEnabled, isAdCreatorEnabled } = this.props;\r\n\r\n switch (updatedObj.updatedElement) {\r\n case 'LongHeadline':\r\n this.setState({ longHeadline: updatedObj.text });\r\n break;\r\n\r\n case 'ShortHeadline':\r\n this.setState({ shortHeadline: updatedObj.text });\r\n break;\r\n\r\n case 'Description':\r\n this.setState({ description: updatedObj.text });\r\n break;\r\n\r\n case 'BusinessName':\r\n this.setState({ businessName: updatedObj.text });\r\n break;\r\n\r\n case 'FinalUrl': {\r\n const newUrl = updatedObj.url;\r\n let newState = {};\r\n\r\n\r\n if (isAdCreatorEnabled || isFinalUrlImageRetrievalEnabled) {\r\n const control = this.adEditRef.current.view.adPropertiesToControlMap.FinalUrls;\r\n\r\n let validURL;\r\n if (this.adEditRef.current.view.isMSANBoostEnabled) {\r\n const uriRegex = /^(\\S+:(\\/\\/)?)(\\S+)/;\r\n validURL = uriRegex.test(newUrl);\r\n } else {\r\n validURL = isValidUrl(newUrl);\r\n }\r\n\r\n if (_.isEmpty(newUrl)) {\r\n newState = mapSuggestionResponseToState(SuggestionStatus.EmptyURL);\r\n control.setError(this.props.i18n.getString('Audience_Campaign_Ad_Error_RequiredField'));\r\n } else if (!validURL) {\r\n newState = mapSuggestionResponseToState(SuggestionStatus.InvalidURL);\r\n control.setError(this.props.i18nErrors.getString('API_ErrorNumber_2611')); // eslint-disable-line react/prop-types\r\n } else {\r\n newState = mapSuggestionResponseToState(SuggestionStatus.FetchInProgress);\r\n control.setError('');\r\n }\r\n }\r\n\r\n this.setState(\r\n _.extend({ url: newUrl }, newState),\r\n (isAdCreatorEnabled || isFinalUrlImageRetrievalEnabled) ? () => {\r\n this.onFinalUrlChanged(newUrl);\r\n } : undefined\r\n );\r\n break;\r\n }\r\n case 'CallToAction':\r\n this.setState({ callToAction: updatedObj.text });\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n onUpdateFinalUrlPrefix = (ev, newPrefix) => {\r\n this.setState({ protocol: newPrefix.text });\r\n this.adEditRef.current.view.updateFinalUrlPrefix(newPrefix.text);\r\n };\r\n\r\n onUpdateHotspots = (hotspots) => {\r\n this.setState({\r\n hotspots,\r\n });\r\n };\r\n\r\n onUpdateFinalUrl = (ev) => {\r\n let newState = {};\r\n const newUrl = ev && ev.target && ev.target.value;\r\n if (this.props.isAdCreatorEnabled) {\r\n const finalUrlControl = this.adEditRef.current.view.adPropertiesToControlMap.FinalUrls;\r\n if (!isValidUrl(this.state.protocol + newUrl)) {\r\n newState = mapSuggestionResponseToState(SuggestionStatus.InvalidURL);\r\n finalUrlControl.setError(this.props.i18nErrors.getString('API_ErrorNumber_2611')); // eslint-disable-line react/prop-types\r\n } else {\r\n newState = mapSuggestionResponseToState(SuggestionStatus.FetchInProgress);\r\n finalUrlControl.setError('');\r\n }\r\n }\r\n\r\n this.setState(\r\n _.extend({ url: this.state.protocol + newUrl }, newState),\r\n this.props.isAdCreatorEnabled ? () => {\r\n this.onFinalUrlChanged(this.state.protocol + newUrl);\r\n } : undefined\r\n );\r\n this.adEditRef.current.view.updateFinalUrl(this.state.protocol + newUrl);\r\n this.adEditRef.current.view.finalURLChange();\r\n // call to fetch RSA text field recommendations after updating URL in website image view\r\n };\r\n\r\n\r\n onFinalUrlChanged = _.debounce((url) => {\r\n // cancel existing suggestion poller jobs\r\n if (this.suggestionPoller) {\r\n this.suggestionPoller.cancel();\r\n }\r\n if (this.state.suggestion.inProgress && isValidUrl(url)) {\r\n // first param is aspectRatio type, we don't need it here, so deliver null\r\n const minimumSize = constants.getMinimumSizeForImage(null, this.props.isMultimediaAd);\r\n this.suggestionPoller.getLandingPageSuggestions({\r\n landingPageUrl: url,\r\n enableOfflinePollingDelay: this.props.enableOfflinePollingDelay,\r\n minimumResolution: {\r\n width: minimumSize[0],\r\n height: minimumSize[1],\r\n },\r\n });\r\n }\r\n }, 1000);\r\n\r\n onImageListUpdated = (imageList, currentSelectedId, isLogo) => {\r\n const newState = {\r\n imageList,\r\n enableAutoRotate: true,\r\n cropImage: null,\r\n };\r\n\r\n this.props.activityLogger.signal(`image added: MMAinMSAN: ${this.props.isMultimediaAdinMSANEnabled}`, 'responsive ad editor');\r\n\r\n // log when new images added in audience ads editor\r\n if (this.props.isMultimediaAdinMSANEnabled) {\r\n // eslint-disable-next-line newline-per-chained-call\r\n const newImageList = _.chain(imageList).flatten().map(img => `${img.id}`).uniq().sortBy().value();\r\n // eslint-disable-next-line newline-per-chained-call\r\n const curImageList = _.chain(this.state.imageList).flatten().map(img => `${img.id}`).uniq().sortBy().value();\r\n const newImages = _.difference(newImageList, curImageList);\r\n if (newImages.length > 0) {\r\n this.props.activityLogger.signal(`new images added, isEditing:${!!this.props.ad}, image ids:${newImages.join(',')}, image count:${newImages.length}`, 'responsive ad editor');\r\n }\r\n }\r\n\r\n if ((this.isMMAEnabled && imageList.length > 0) ||\r\n imageList.length === this.imageTypesWithOrder.length) {\r\n newState.imageErrorMessages = [];\r\n }\r\n\r\n if (this.isMMAEnabled) {\r\n let selectedId = currentSelectedId || (isLogo ? this.state.currentSelectedLogoId : this.state.currentSelectedImageId);\r\n const exist = this.findImageSetById(\r\n isLogo ? this.getLogoList(imageList) : this.getImageListWithoutLogo(imageList),\r\n isLogo ? this.state.currentSelectedLogoId : this.state.currentSelectedImageId\r\n );\r\n\r\n if (!exist) {\r\n if (imageList.length > 0) {\r\n selectedId = isLogo ?\r\n this.getDefaultCurrentSelectedLogoId(imageList) :\r\n this.getDefaultCurrentSelectedImageId(imageList);\r\n } else {\r\n selectedId = null;\r\n }\r\n }\r\n\r\n if (isLogo) {\r\n newState.currentSelectedLogoId = selectedId;\r\n } else {\r\n newState.currentSelectedImageId = selectedId;\r\n }\r\n }\r\n\r\n this.setState(newState);\r\n\r\n if (this.props.isAdCreatorEnabled || this.props.isFinalUrlImageRetrievalEnabled) {\r\n const list = _.flatten(newState.imageList, 1);\r\n\r\n AccountSettingRepository.getAccountSettings(['AllowCrawlImagesFromLandingPage']).then((response) => {\r\n const shouldEnableOptIn =\r\n _.result(response, 'AllowCrawlImagesFromLandingPage') !== 'true' &&\r\n _.some(\r\n list,\r\n image =>\r\n image.source === constants.imageSources.Website ||\r\n image.source === constants.imageSources.WebsiteCarousel ||\r\n image.source === constants.imageSources.AdRecommendation\r\n );\r\n\r\n if (this.adEditRef.current) {\r\n const isOptedIn = this.adEditRef.current.view.viewModel.hasWebsiteImageOptIn();\r\n\r\n this.adEditRef.current.view.viewModel.showWebsiteImageOptIn(shouldEnableOptIn);\r\n if (shouldEnableOptIn) {\r\n this.hasWebsiteImageOptedInObservable(isOptedIn);\r\n } else {\r\n this.hasWebsiteImageOptedInObservable(true);\r\n }\r\n }\r\n });\r\n }\r\n };\r\n\r\n onVideoListUpdated = (videoList) => {\r\n const newState = { videoList, draftUnsaved: false };\r\n\r\n if (videoList.length === constants.videoTypesWithOrder.length) {\r\n newState.videoErrorMessages = [];\r\n }\r\n // eslint-disable-next-line max-len\r\n const isCreate = this.initialVideos.length === 0 && videoList.length === constants.videoTypesWithOrder.length;\r\n const isVideoUpdated = this.initialVideos.length === videoList.length &&\r\n videoList.some((video, index) => video.Id !== this.initialVideos[index].Id);\r\n newState.draftUnsaved = isCreate || isVideoUpdated;\r\n\r\n this.setState(newState);\r\n };\r\n\r\n onSaveThumbnailAsDraft = ({\r\n thumbnailRecord,\r\n }) => {\r\n this.props.activityLogger.signal('save video thumbnail as draft', 'responsive ad editor');\r\n this.setState({\r\n thumbnailRecord,\r\n draftUnsaved: true,\r\n });\r\n };\r\n\r\n onVideoUploadStatusUpdate = (videoUploading) => {\r\n this.setState({\r\n videoUploading,\r\n videoErrorMessages: [],\r\n });\r\n };\r\n\r\n onImagePreviewRequested = (type) => {\r\n if (this.imagePreviewCarouselRef.current) {\r\n this.imagePreviewCarouselRef.current.setPreviewIndexByType(type);\r\n }\r\n };\r\n\r\n onVideoPreviewRequested = (type) => {\r\n if (this.videoPreviewCarouselRef.current) {\r\n this.videoPreviewCarouselRef.current.setPreviewIndexByType(type);\r\n }\r\n };\r\n\r\n onImageSelected = (imageId, isLogoSelected = false) => {\r\n if (isLogoSelected) {\r\n this.setState({\r\n currentSelectedLogoId: imageId,\r\n });\r\n } else {\r\n this.setState({\r\n currentSelectedImageId: imageId,\r\n });\r\n }\r\n };\r\n\r\n onImageEditCancelled = () => {\r\n this.setState({\r\n cropImage: null,\r\n enableAutoRotate: true,\r\n });\r\n };\r\n\r\n onCropImage = (imageObj) => {\r\n this.setState({\r\n cropImage: imageObj,\r\n enableAutoRotate: false,\r\n });\r\n };\r\n\r\n onAddAspectRatio = (imageType) => {\r\n const { imageList, currentSelectedImageId } = this.state;\r\n\r\n // We don't support logo in ad preview, so we need to filter out logo images\r\n const imageListWithoutLogo = this.getImageListWithoutLogo(imageList);\r\n const previewImages = this.findImageSetById(imageListWithoutLogo, currentSelectedImageId);\r\n\r\n let newPreviewImages = null;\r\n const targetedRatioIdx = _.findIndex(previewImages, image => image.type === imageType);\r\n if (targetedRatioIdx >= 0) {\r\n const targetedRatio = previewImages[targetedRatioIdx].clone();\r\n targetedRatio.setIncluded(true);\r\n newPreviewImages = [...previewImages];\r\n newPreviewImages.splice(targetedRatioIdx, 1, targetedRatio);\r\n } else {\r\n // for image added before partial aspect ratio is supported, may missed some ratio info\r\n const croppedImages = getAutoCroppedImages({\r\n originalImageToCrop: _.first(previewImages),\r\n isMultimediaAd: this.props.isMultimediaAd,\r\n isMultimediaAdinMSANEnabled: this.props.isMultimediaAdinMSANEnabled,\r\n });\r\n const target = _.find(croppedImages, image => image.type === imageType);\r\n target.isIncluded = true;\r\n newPreviewImages = [...previewImages, target];\r\n newPreviewImages.sort((a, b) => b.aspectRatio - a.aspectRatio);\r\n }\r\n\r\n const newImageList = this.setImageSetById(imageList, currentSelectedImageId, newPreviewImages);\r\n this.onImageListUpdated(newImageList, currentSelectedImageId);\r\n return newImageList;\r\n };\r\n\r\n onRemoveAspectRatio = (imageType) => {\r\n const { imageList, currentSelectedImageId } = this.state;\r\n\r\n // We don't support logo in ad preview, so we need to filter out logo images\r\n const imageListWithoutLogo = this.getImageListWithoutLogo(imageList);\r\n const previewImages = this.findImageSetById(imageListWithoutLogo, currentSelectedImageId);\r\n\r\n const targetedRatioIdx = _.findIndex(previewImages, image => image.type === imageType);\r\n if (targetedRatioIdx >= 0) {\r\n const targetedRatio = previewImages[targetedRatioIdx].clone();\r\n targetedRatio.setIncluded(false);\r\n const newPreviewImages = [...previewImages];\r\n newPreviewImages.splice(targetedRatioIdx, 1, targetedRatio);\r\n const newImageList = this.setImageSetById(imageList, currentSelectedImageId, newPreviewImages);\r\n this.onImageListUpdated(newImageList, currentSelectedImageId);\r\n return newImageList;\r\n }\r\n return imageList;\r\n };\r\n\r\n onAdSaved = (savedAd, imageToGenerateThumbnail) => {\r\n // from MT return, construct a object that AdList needs\r\n let formattedSavedAd;\r\n if (this.props.isMultimediaAdinMSANEnabled) {\r\n formattedSavedAd = _.pick(\r\n savedAd,\r\n 'Id',\r\n 'BusinessName',\r\n 'Headlines',\r\n 'LongHeadlines',\r\n 'Descriptions'\r\n );\r\n } else {\r\n formattedSavedAd = _.pick(\r\n savedAd,\r\n 'Id',\r\n 'Headline',\r\n 'LongHeadline',\r\n 'Text',\r\n 'BusinessName'\r\n );\r\n }\r\n\r\n // get the thumbnail\r\n // eslint-disable-next-line no-nested-ternary\r\n formattedSavedAd.ThumbnailForAdList = (this.isVideo ?\r\n this.state.videoList[0] : imageToGenerateThumbnail)\r\n .ThumbnailForAdList;\r\n\r\n formattedSavedAd.FinalUrls = savedAd.FinalUrls;\r\n\r\n formattedSavedAd.Id = parseInt(formattedSavedAd.Id, 10);\r\n\r\n const savedAdsListWithoutDuplicate =\r\n _.reject(\r\n this.state.savedAdsList,\r\n savedAdItem => parseInt(savedAdItem.Id, 10) === formattedSavedAd.Id\r\n );\r\n\r\n this.setState(_.defaults({\r\n savedAdsList: [\r\n ...savedAdsListWithoutDuplicate,\r\n formattedSavedAd,\r\n ],\r\n isAdEditShown: false,\r\n draftUnsaved: false,\r\n }, initialState), () => {\r\n this.props.onAdSaved(\r\n savedAd,\r\n imageToGenerateThumbnail &&\r\n (imageToGenerateThumbnail.src || imageToGenerateThumbnail.originalUrl)\r\n );\r\n });\r\n };\r\n\r\n onEditAd = (adId) => {\r\n const {\r\n isMultimediaAdinMSANEnabled,\r\n } = this.props;\r\n\r\n this.setState({\r\n isBlocking: true,\r\n });\r\n\r\n let extraExpand = '';\r\n\r\n if (isMultimediaAdinMSANEnabled) {\r\n extraExpand = ',Model.ResponsiveAd/Headlines,Model.ResponsiveAd/LongHeadlines,Model.ResponsiveAd/Descriptions';\r\n }\r\n\r\n this.props.responsiveAdRepository.getAdAsync(adId, extraExpand).then((ad) => {\r\n this.setState({\r\n shortHeadline: ad.Headline,\r\n longHeadline: ad.LongHeadline,\r\n description: ad.Text,\r\n businessName: ad.BusinessName,\r\n url: _.first(ad.FinalUrls),\r\n callToAction: ad.CallToAction,\r\n });\r\n if (this.isVideo) {\r\n return getVideosAndThumbnailsFromMTAssets(\r\n this.props.odata,\r\n this.baseURL,\r\n ad.Videos\r\n ).then(({ videoList, thumbnailRecord }) => {\r\n this.setState({\r\n videoList,\r\n thumbnailRecord,\r\n isAdEditShown: true,\r\n currentAd: ad,\r\n draftUnsaved: false,\r\n });\r\n this.initialVideos = videoList;\r\n });\r\n }\r\n\r\n return this.initializeImagesModelInternal({ ad }).then(({\r\n images,\r\n currentSelectedImageId,\r\n }) => {\r\n this.setState({\r\n isAdEditShown: true,\r\n currentAd: ad,\r\n imageList: images,\r\n currentSelectedImageId,\r\n });\r\n });\r\n }).finally(() => {\r\n this.setState({\r\n isBlocking: false,\r\n });\r\n });\r\n };\r\n\r\n onRemoveAd = (adId) => {\r\n this.setState({\r\n isBlocking: true,\r\n });\r\n\r\n this.props.responsiveAdRepository.removeAdAsync(adId).then(() => {\r\n // remove the Ad from the list\r\n const updatedSavedAdsList =\r\n _.reject(this.state.savedAdsList, savedAd => parseInt(savedAd.Id, 10) === adId);\r\n\r\n this.setState({\r\n savedAdsList: updatedSavedAdsList,\r\n isAdEditShown: updatedSavedAdsList.length === 0,\r\n });\r\n }).finally(() => {\r\n this.setState({\r\n isBlocking: false,\r\n });\r\n });\r\n };\r\n\r\n onCreateAd = () => {\r\n this.props.activityLogger.signal(`crud-audience-ad-react saveToClient: ${JSON.stringify(this.pilotCheckLogInfo())}`, 'rae-view deprecation');\r\n\r\n // When reusing the ad edit, clear and reset the Backbone view\r\n if (this.adEditRef.current) {\r\n this.adEditRef.current.view.clear();\r\n }\r\n\r\n this.setState(_.defaults(\r\n { savedAdsList: this.state.savedAdsList },\r\n initialState\r\n ));\r\n this.initialVideos = [];\r\n };\r\n\r\n onSaveRecommendAd = async () => {\r\n await this.saveAdAsync({ recommendSave: true });\r\n };\r\n\r\n onSavePortraitImage = (portraitImage) => {\r\n this.portraitImage = portraitImage;\r\n };\r\n\r\n setUpAdWithRecommendAd = async ({\r\n ad,\r\n isAdEditShown = this.state.isAdEditShown,\r\n shouldSaveAdFromRecommend,\r\n }) => {\r\n const {\r\n odata, cid, aid, oDataConfig,\r\n } = this.props;\r\n this.setState({\r\n shortHeadline: ad.Headline || _.get(ad.Headlines, ['0', 'Asset', 'Text']),\r\n longHeadline: ad.LongHeadline || _.get(ad.LongHeadlines, ['0', 'Asset', 'Text']),\r\n description: ad.Text || _.get(ad.Descriptions, ['0', 'Asset', 'Text']),\r\n businessName: ad.BusinessName,\r\n url: _.first(ad.FinalUrls),\r\n callToAction: ad.CallToAction,\r\n isBlocking: true,\r\n });\r\n\r\n try {\r\n const uploadedImageIds = await uploadRecommendImage(ad.Images, {\r\n cid, aid, oDataConfig,\r\n }, this.recommendAssetIdImageUrlMap);\r\n const images = await getMultiImagesFromMTAssetsAsync(odata, this.baseURL, ad.Images, false, false, this.props.isMMAV2Enabled);\r\n\r\n _.each(images, (ImageExperiences) => {\r\n _.each(ImageExperiences, (image) => {\r\n if (_.contains(uploadedImageIds, image.id)) {\r\n // eslint-disable-next-line no-param-reassign\r\n image.source = constants.imageSources.AdRecommendation;\r\n }\r\n });\r\n });\r\n\r\n let currentSelectedImageId;\r\n if (this.isMMAEnabled && images.length > 0) {\r\n currentSelectedImageId = this.getDefaultCurrentSelectedImageId(images);\r\n }\r\n\r\n this.setState({\r\n isAdEditShown,\r\n currentAd: ad,\r\n imageList: images,\r\n currentSelectedImageId,\r\n isRecommendAd: true,\r\n isBlocking: false,\r\n }, () => {\r\n this.onImageListUpdated(images);\r\n if (shouldSaveAdFromRecommend) {\r\n this.onSaveRecommendAd();\r\n }\r\n });\r\n } catch (error) {\r\n throw new Error('Failed to set up ad with recommend ad');\r\n } finally {\r\n this.setState({\r\n isBlocking: false,\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Sets the input elements on the ad model, and returns an object with the parameters\r\n * needed for the save request.\r\n *\r\n * @returns {object} Object with parameters to save the ad.\r\n *\r\n */\r\n getData() {\r\n let data = this.adEditRef.current.view.getData();\r\n\r\n if (this.isVideo) {\r\n const videos = _.map(this.state.videoList, videoObj => videoObj.formatToSave());\r\n const thumbnails = this.IsVideoAdEditorEnabled ?\r\n // eslint-disable-next-line max-len\r\n _.map(_.compact(_.values(this.state.thumbnailRecord)), thumbnail => thumbnail.formatToSave(false, true, true))\r\n : [];\r\n\r\n data.Videos = JSON.stringify([...videos, ...thumbnails]);\r\n } else if (!this.props.isAdCreatorEnabled) {\r\n // when ad creator is enabled, the images data model are generated later after async calls\r\n // Only fill in images data model when ad creator is off to not cause confusion\r\n setMTImageModel(\r\n data,\r\n {},\r\n this.state.imageList,\r\n {\r\n isMultimediaAdinMSANEnabled: this.props.isMultimediaAdinMSANEnabled,\r\n isMultimediaAd: this.props.isMultimediaAd,\r\n isMMAV2Enabled: this.props.isMMAV2Enabled,\r\n },\r\n this.UiUnsupportedRatios\r\n );\r\n }\r\n\r\n if (!this.props.isMobileUrlEnabled) {\r\n data = _.omit(data, ['MobileFinalUrls']);\r\n }\r\n\r\n if (!this.props.isImpressionTrackingUrlsEnabled) {\r\n data = _.omit(data, ['ImpressionTrackingUrls']);\r\n }\r\n\r\n return data;\r\n }\r\n\r\n // on top of getData, for images with effects, we need to update image id\r\n getProcessedDataAsync(originalData) {\r\n if (this.isVideo) {\r\n return Promise.resolve({\r\n mtModel: originalData,\r\n });\r\n }\r\n\r\n const flattenedIncludedImageAssetList = getFlattenedImageAssetList(this.state.imageList, this.props.isMultimediaAdinMSANEnabled, this.props.isMultimediaAd);\r\n const imageIndexAsThumbnail = 0;\r\n\r\n return updateAssetsIdsAsync(flattenedIncludedImageAssetList, imageIndexAsThumbnail, this.props.isAdCreatorEnabled, this.imageOData)\r\n .then((updates) => {\r\n const originalThumbnailAsset = flattenedIncludedImageAssetList[imageIndexAsThumbnail];\r\n const overrideInfo = updates[imageIndexAsThumbnail];\r\n let imageToGenerateThumbnail;\r\n\r\n if (overrideInfo) {\r\n imageToGenerateThumbnail = originalThumbnailAsset.copyThumbnailLookToNewImage({\r\n id: overrideInfo.id,\r\n src: overrideInfo.bingSrc,\r\n });\r\n } else {\r\n imageToGenerateThumbnail = originalThumbnailAsset;\r\n }\r\n\r\n if (this.props.isAdCreatorEnabled) {\r\n // when adcreator is off, selection happens earlier in getData/getMMAPayload\r\n // When adcreator is on, selection happens later here after ids are updated\r\n setMTImageModel(\r\n originalData,\r\n updates,\r\n this.state.imageList,\r\n {\r\n isMultimediaAdinMSANEnabled: this.props.isMultimediaAdinMSANEnabled,\r\n isMultimediaAd: this.props.isMultimediaAd,\r\n isMMAV2Enabled: this.props.isMMAV2Enabled,\r\n isBoostPortraitImageEnabled: this.isBoostPortraitImageEnabled,\r\n isBoost200x100ImageEnabled: this.isBoost200x100ImageEnabled,\r\n isBoostNewAspectRatioSupportEnabled: this.isBoostNewAspectRatioSupportEnabled,\r\n isImageFittingEnabled: this.isImageFittingEnabled,\r\n },\r\n this.UiUnsupportedRatios,\r\n this.portraitImage\r\n );\r\n }\r\n\r\n return {\r\n mtModel: originalData,\r\n imageToGenerateThumbnail,\r\n };\r\n });\r\n }\r\n\r\n /**\r\n * Sets the error messages for the list of errors received as response from the\r\n * ad creation/update.\r\n *\r\n * @param {object} errors List of errors from response\r\n *\r\n * @returns {undefined} no return value\r\n *\r\n */\r\n /* istanbul ignore next */\r\n\r\n setResponseErrors(errors) {\r\n _.forEach(errors, (error) => {\r\n // fix the bug that error message is not shown for images\r\n error.Property === 'Images' &&\r\n this.setState({\r\n imageErrorMessages: [\r\n this.props.i18nErrors.getString(`API_ErrorNumber_${error.ErrorNumber}`) || this.props.i18nErrors.getString('ErrorNumber_-1'),\r\n ],\r\n });\r\n\r\n if (!this.adEditRef.current.view.setError(error)) {\r\n this.setState({\r\n genericErrorMessages: [\r\n ...this.state.genericErrorMessages,\r\n error.message,\r\n ],\r\n });\r\n }\r\n });\r\n\r\n this.setState({\r\n errorCodes: _.map(errors, error => error.ErrorNumber),\r\n });\r\n }\r\n\r\n setBulkEditStatus(status) {\r\n this.setState({\r\n mmaBulkConversionStatus: status,\r\n });\r\n }\r\n\r\n getFirstElement(item) {\r\n if (_.isArray(item)) {\r\n return _.first(item);\r\n }\r\n return item;\r\n }\r\n\r\n getLogo = (imageList) => {\r\n const { currentSelectedLogoId } = this.state;\r\n\r\n const logos = _.filter(imageList, imageArr =>\r\n this.getFirstElement(imageArr).isLogo === true);\r\n if (currentSelectedLogoId) {\r\n return _.find(logos, logo => _.first(logo).Id === currentSelectedLogoId) || _.first(logos);\r\n }\r\n return _.first(logos);\r\n };\r\n\r\n getImageListWithoutLogo = imageList => _.filter(imageList, imageArr =>\r\n this.getFirstElement(imageArr).isLogo !== true);\r\n\r\n getLogoList = imageList => _.filter(imageList, imageArr =>\r\n this.getFirstElement(imageArr).isLogo === true);\r\n\r\n getImagesForPreview() {\r\n const { imageList, currentSelectedImageId } = this.state;\r\n if (this.isMMAEnabled) {\r\n // We don't support logo in ad preview, so we need to filter out logo images\r\n const imageListWithoutLogo = this.getImageListWithoutLogo(imageList);\r\n\r\n if (currentSelectedImageId) {\r\n const previewImages =\r\n this.findImageSetById(imageListWithoutLogo, currentSelectedImageId);\r\n\r\n if (previewImages) {\r\n return previewImages;\r\n }\r\n }\r\n\r\n if (imageListWithoutLogo.length > 0) {\r\n return _.first(imageListWithoutLogo);\r\n }\r\n\r\n return [];\r\n }\r\n\r\n return imageList;\r\n }\r\n\r\n getPreviewTexts = () => ({\r\n longHeadline: this.state.longHeadline && this.state.longHeadline.length > 0 ?\r\n this.state.longHeadline : this.defaultPreviewFields.longHeadline,\r\n shortHeadline: this.state.shortHeadline && this.state.shortHeadline.length > 0 ?\r\n this.state.shortHeadline : this.defaultPreviewFields.shortHeadline,\r\n description: this.state.description && this.state.description.length > 0 ?\r\n this.state.description : this.defaultPreviewFields.description,\r\n businessName: this.state.businessName && this.state.businessName.length > 0 ?\r\n this.state.businessName : this.defaultPreviewFields.businessName,\r\n url: this.state.url && this.state.url.length > 0 ?\r\n this.state.url : this.defaultPreviewFields.url,\r\n callToAction: this.state.callToAction && this.state.callToAction.length > 0 ?\r\n this.state.callToAction : this.defaultPreviewFields.callToAction,\r\n });\r\n\r\n getDefaultCurrentSelectedImageId(imageList) {\r\n const firstPlacementOfFirstImage = _.first(this.getImageListWithoutLogo(imageList)[0]);\r\n\r\n return this.props.isAdCreatorEnabled\r\n ? _.result(firstPlacementOfFirstImage, 'BaseId') : _.result(firstPlacementOfFirstImage, 'Id');\r\n }\r\n\r\n getDefaultCurrentSelectedLogoId(imageList) {\r\n const firstLogo = _.first(this.getLogo(imageList));\r\n return _.result(firstLogo, 'Id');\r\n }\r\n\r\n getOptInPreferenceFlag() {\r\n const { isMultimediaAdinMSANEnabled } = this.props;\r\n\r\n return isMultimediaAdinMSANEnabled ? constants.preferenceFlags.MMAInMSANWebsiteImageOptIn\r\n : constants.preferenceFlags.MMAWebsiteImageOptIn;\r\n }\r\n\r\n setUnSupportedRatios(images = [], isMultimediaAdinMSANEnabled) {\r\n if (isMultimediaAdinMSANEnabled) {\r\n const msanAspectRatioAssociations =\r\n Object.values(constants.getAspectRatios({ isMultimediaAdinMSANEnabled }))\r\n .map(item => item.associationType);\r\n this.UiUnsupportedRatios = images.filter(image => !_.contains(msanAspectRatioAssociations, _.get(image, ['Asset', 'SubType'])));\r\n }\r\n }\r\n getBulkEditParams(params) {\r\n const {\r\n CallToAction, CallToActionLanguage, Images, BusinessName, AdStatus,\r\n } = params;\r\n const { allPages, selectedItems, filterService } = this.props;\r\n const AdditionalData = {\r\n BusinessName,\r\n Images,\r\n CallToAction,\r\n CallToActionLanguage,\r\n Status: AdStatus,\r\n };\r\n const batchAction = {\r\n Actions: [{\r\n PasteAs: 'MultiMediaAd',\r\n '@odata.type': '#Model.CopyAction',\r\n AdditionalData: JSON.stringify(AdditionalData),\r\n }],\r\n EditCopy: false,\r\n };\r\n const filters = _.result(filterService, 'query');\r\n const projection = {\r\n selectedIds: allPages ? [] : _.pluck(selectedItems, 'Id'),\r\n isSelectAll: allPages,\r\n filters,\r\n };\r\n const finalParams = getParams(projection, batchAction, 'Ad');\r\n finalParams.Selection.QueryString = finalParams.Selection.QueryString.replace(/CampaignType%20/g, 'Campaign%2FCampaignType%20').replace(/CampaignStatus%20/g, 'Campaign%2FStatus%20').replace(/AdGroupStatus%20/g, 'AdGroup%2FStatus%20');\r\n return finalParams;\r\n }\r\n\r\n setImageSetById = (imageList, baseImageId, newImageSet) => {\r\n if (!baseImageId) return false;\r\n\r\n let imageSetIdx;\r\n\r\n if (this.props.isAdCreatorEnabled) {\r\n imageSetIdx = _.findIndex(imageList, placements =>\r\n placements[0].BaseId.toString() === baseImageId.toString());\r\n } else {\r\n imageSetIdx = _.findIndex(imageList, placements =>\r\n _.some(placements, placement => placement.Id.toString() === baseImageId.toString()));\r\n }\r\n\r\n if (imageSetIdx >= 0) {\r\n const newImageList = [...imageList];\r\n newImageList.splice(imageSetIdx, 1, newImageSet);\r\n return newImageList;\r\n }\r\n return [...imageList, newImageSet];\r\n };\r\n\r\n pilotCheckLogInfo = () => ({\r\n isGridDisplay: this.props.isGridDisplay,\r\n isImproveMMA: this.props.isImproveMMA,\r\n isRecommendation: this.props.isRecommendation,\r\n isMultimediaAd: this.props.isMultimediaAd,\r\n isAdCreatorEnabled: this.props.isAdCreatorEnabled,\r\n isPlaceholderMMA: this.props.isPlaceholderMMA,\r\n isMMAV2Enabled: this.props.isMMAV2Enabled,\r\n isBulkEditMMA: this.props.isBulkEditMMA,\r\n });\r\n\r\n findImageSetById = (imageList, baseImageId) => {\r\n if (!baseImageId) return false;\r\n\r\n let imageSetToEdit;\r\n\r\n if (this.props.isAdCreatorEnabled) {\r\n imageSetToEdit = _.find(imageList, placements =>\r\n placements[0].BaseId.toString() === baseImageId.toString());\r\n } else {\r\n imageSetToEdit = _.find(imageList, placements =>\r\n _.some(placements, placement => placement.Id.toString() === baseImageId.toString()));\r\n }\r\n\r\n return imageSetToEdit;\r\n };\r\n\r\n isOnlyOneIncludedImage = (ratio) => {\r\n const { isMultimediaAdinMSANEnabled } = this.props;\r\n const { imageList } = this.state;\r\n if (!isMultimediaAdinMSANEnabled) {\r\n return false;\r\n }\r\n\r\n return _.filter(imageList, (images) => {\r\n const landscapeImage = images.find(image => image.Type === ratio);\r\n return landscapeImage && landscapeImage.IsIncluded;\r\n }, []).length === 1;\r\n };\r\n\r\n initializeImagesModelInternal({ perfMarker, ad } = {}) {\r\n const {\r\n isMultimediaAdinMSANEnabled,\r\n ad: adProp,\r\n odata,\r\n isMultimediaAd,\r\n isAdCreatorEnabled,\r\n isImproveMMA,\r\n } = this.props;\r\n const finalAd = ad || adProp;\r\n\r\n this.setUnSupportedRatios(finalAd.Image, true);\r\n\r\n const fetchImagesPromise = isMultimediaAdinMSANEnabled ? getMultiImagesFromMTAssetsAsync(\r\n odata,\r\n this.baseURL,\r\n finalAd.Images,\r\n isAdCreatorEnabled,\r\n isImproveMMA,\r\n this.props.isMMAV2Enabled,\r\n this.isBoostPortraitImageEnabled,\r\n this.isBoost200x100ImageEnabled,\r\n this.isBoostNewAspectRatioSupportEnabled,\r\n this.isImageFittingEnabled && !this.isMSANBoostEnabled\r\n ) : getImagesFromMTAssetsAsync(\r\n odata,\r\n this.baseURL,\r\n finalAd.Images,\r\n isMultimediaAd,\r\n isAdCreatorEnabled,\r\n this.isImageFittingEnabled\r\n );\r\n\r\n if (perfMarker) {\r\n perfMarker.willInit();\r\n }\r\n\r\n return fetchImagesPromise.then((images) => {\r\n let currentSelectedImageId = null;\r\n let currentSelectedLogoId = null;\r\n\r\n if (this.isMMAEnabled && images.length > 0) {\r\n currentSelectedLogoId = this.getDefaultCurrentSelectedLogoId(images);\r\n currentSelectedImageId = this.getDefaultCurrentSelectedImageId(images);\r\n }\r\n\r\n return {\r\n images,\r\n currentSelectedLogoId,\r\n currentSelectedImageId,\r\n };\r\n });\r\n }\r\n\r\n fetchAndFillImagesAsync() {\r\n this.setState({ isBlocking: true });\r\n\r\n this.initializeImagesModelInternal({\r\n perfMarker: this.adPreviewPerfMarker,\r\n }).then(({\r\n images,\r\n currentSelectedLogoId,\r\n currentSelectedImageId,\r\n }) => {\r\n this.setState({\r\n imageList: images,\r\n currentSelectedLogoId,\r\n currentSelectedImageId,\r\n });\r\n this.adPreviewPerfMarker.done();\r\n\r\n if (this.props.isMultimediaAdinMSANEnabled) {\r\n // eslint-disable-next-line newline-per-chained-call\r\n const imageIds = _.chain(images).flatten().map(img => `${img.id}`).uniq().sortBy().value();\r\n this.props.activityLogger.signal(`editing ad, image ids:${imageIds.join(',')} image count:${imageIds.length}`, 'responsive ad editor');\r\n }\r\n }).finally(() => {\r\n this.setState({\r\n isBlocking: false,\r\n });\r\n });\r\n }\r\n\r\n fetchAndFillVideosAsync() {\r\n this.setState({ isBlocking: true });\r\n\r\n getVideosAndThumbnailsFromMTAssets(\r\n this.props.odata,\r\n this.baseURL,\r\n this.props.ad.Videos\r\n ).then(({ videoList, thumbnailRecord }) => {\r\n this.setState({\r\n videoList,\r\n thumbnailRecord,\r\n });\r\n this.initialVideos = videoList;\r\n })\r\n .catch(e => this.setState({\r\n videoErrorMessages: [this.props.i18n.getString('ImageExperience_Video_Error_LoadVideoFail_Template', e)],\r\n }))\r\n .finally(() => {\r\n this.setState({\r\n isBlocking: false,\r\n });\r\n });\r\n }\r\n\r\n hasCreatedAd() {\r\n this.props.activityLogger.signal(`crud-audience-ad-react saveToClient: ${JSON.stringify(this.pilotCheckLogInfo())}`, 'rae-view deprecation');\r\n return this.state.savedAdsList.length > 0;\r\n }\r\n\r\n cancelAdAsync() {\r\n this.props.activityLogger.signal('cancel ad creation', 'responsive ad editor');\r\n if (this.adEditRef.current) {\r\n this.adEditRef.current.view.clear();\r\n }\r\n\r\n this.setState(_.defaults(\r\n {\r\n savedAdsList: this.state.savedAdsList,\r\n isAdEditShown: false,\r\n isBulkEditMMA: false,\r\n },\r\n initialState\r\n ));\r\n if (this.props.isBulkEditMMA) {\r\n this.props.onClose();\r\n }\r\n }\r\n\r\n logWithMetadata(api, params = {}) {\r\n this.props.activityLogger.signal({\r\n ...this.logInfo,\r\n ...params,\r\n }, api);\r\n }\r\n\r\n saveAdLog(data) {\r\n const getAssetCount = (assets) => {\r\n if (assets) {\r\n try {\r\n return JSON.parse(assets).length;\r\n } catch (error) {\r\n return 0;\r\n }\r\n }\r\n\r\n return 0;\r\n };\r\n\r\n let MMAParams = {};\r\n if (this.isMMAEnabled) {\r\n const imageDetails = this.state.imageList.map(images => images.map(image => ({\r\n isIncluded: image.IsIncluded,\r\n isManualEdited: image.isManualEdited(),\r\n type: image.Type,\r\n source: image.source,\r\n })));\r\n\r\n MMAParams = {\r\n imagesCount: this.state.imageList.length,\r\n imageDetails,\r\n };\r\n }\r\n\r\n this.logWithMetadata('responsive ad saved', {\r\n headlinesCount: getAssetCount(data.Headlines),\r\n LongHeadlinesCount: getAssetCount(data.LongHeadlines),\r\n descriptionsCount: getAssetCount(data.Descriptions),\r\n ...MMAParams,\r\n });\r\n }\r\n\r\n saveAdLogForTextRecommendation(saveAdParams) {\r\n const state = DependencyResolver.get('component/state/index');\r\n const textSuggestions = state.get('textSuggestions') || {};\r\n this.logWithMetadata('saveAdLogForTextRecommendation', {\r\n textSuggestions,\r\n textSuggestionAdoption: getTextSuggestionAdoption(textSuggestions, saveAdParams),\r\n });\r\n state.set('textSuggestions', null);\r\n }\r\n\r\n shouldUpdateAccountSettingForAllowCrawlImages() {\r\n return _.chain(this)\r\n .result('adEditRef')\r\n .result('current')\r\n .result('view')\r\n .result('viewModel')\r\n .result('showWebsiteImageOptIn', false)\r\n .value() && this.hasWebsiteImageOptedInObservable();\r\n }\r\n\r\n /**\r\n * Called when the save button is pressed. Saves the ad.\r\n *\r\n * @returns {undefined} no return value\r\n *\r\n */\r\n saveAdAsync({ recommendSave = false } = {}) {\r\n this.props.activityLogger.signal(`click save ad: ${this.state.url}`, 'responsive ad editor');\r\n this.props.activityLogger.signal(`crud-audience-ad-react saveAdAsync: ${JSON.stringify(this.pilotCheckLogInfo())}`, 'rae-view deprecation');\r\n // If not editing anything, just return\r\n if (!this.state.isAdEditShown && !recommendSave) {\r\n return Promise.resolve(true);\r\n }\r\n\r\n // remove errors\r\n this.setState({\r\n imageErrorMessages: [],\r\n videoErrorMessages: [],\r\n genericErrorMessages: [],\r\n errorCodes: [],\r\n });\r\n\r\n if (this.props.isPlaceholderMMA) {\r\n this.setState({\r\n isBlocking: true,\r\n });\r\n return this.props.responsiveAdRepository.savePlaceholderMMA(this.props.pageContext)\r\n .then((data) => {\r\n if (_.isFinite(data.value)) {\r\n _.defaults(data, {\r\n Type: 'Responsive',\r\n });\r\n\r\n this.props.activityLogger.signal('saved an ad', 'placeholder MMA');\r\n this.props.activityLogger.signal(`saved an ad: time cost: ${new Date() - this.openTime}, isGrid: ${this.props.isGridDisplay}, isEdit: ${!!this.props.ad}, isVideo: ${this.isVideo}, isMMAinMSAN: ${this.props.isMultimediaAdinMSANEnabled}`, 'responsive ad editor');\r\n this.openTime = new Date();\r\n return data;\r\n }\r\n\r\n return false;\r\n })\r\n .catch((response) => {\r\n if (response) {\r\n const errorMsgs = [];\r\n const errors = _.unique(response, false, error => error.Code);\r\n\r\n _.forEach(errors, (error) => {\r\n const genericErrorMessage = this.props.i18n.getString(`Multimedia_Ad_Error_${error.Code}`)\r\n || this.props.i18nErrors.getString('ErrorNumber_-1');\r\n errorMsgs.push(genericErrorMessage);\r\n\r\n this.props.activityLogger.signal(error, 'placeholder MMA creation api error');\r\n });\r\n\r\n this.setState({\r\n genericErrorMessages: errorMsgs,\r\n });\r\n return false;\r\n }\r\n this.logWithMetadata('placeholder MMA saving failed');\r\n return false;\r\n })\r\n .finally(() => {\r\n this.setState({\r\n isBlocking: false,\r\n });\r\n });\r\n }\r\n\r\n const initialParams = this.getData();\r\n\r\n if (!this.isDataValid(initialParams)) {\r\n return Promise.resolve(false);\r\n }\r\n\r\n this.saveAdLog(initialParams);\r\n this.saveAdLogForTextRecommendation(initialParams);\r\n\r\n this.setState({\r\n isBlocking: true,\r\n });\r\n\r\n return this.getProcessedDataAsync(initialParams)\r\n .then((result) => {\r\n const {\r\n mtModel: params,\r\n imageToGenerateThumbnail,\r\n } = result;\r\n\r\n return Promise.all([\r\n this.props.responsiveAdRepository.saveAdAsync(params),\r\n this.shouldUpdateAccountSettingForAllowCrawlImages() ? AccountSettingRepository.updateAccountSettings({ AllowCrawlImagesFromLandingPage: 'true' }) : Promise.resolve(),\r\n ])\r\n .then(([data]) => {\r\n if (_.isFinite(Number(data.Id))) {\r\n // Align with other ad types, since MMA can be mixed with other ads in ad list\r\n if (this.props.isMultimediaAd) {\r\n _.defaults(data, {\r\n Type: 'Responsive',\r\n ThumbnailForAdList: imageToGenerateThumbnail.ThumbnailForAdList,\r\n ImageList: this.state.imageList,\r\n });\r\n // eslint-disable-next-line no-param-reassign\r\n data = omitDeletedParameters(data);\r\n }\r\n\r\n // logging for metrics\r\n if (this.props.instrumentation) {\r\n const enableAdCreatorMetrics = this.props.isAdCreatorEnabled\r\n || this.props.isFinalUrlImageRetrievalEnabled;\r\n const { saveAdActivity } =\r\n getAdCreatorInstrumentation(this.props.instrumentation, this.adCreatorScenario);\r\n const imageList = getFlattenedImageAssetList(this.state.imageList, this.props.isMultimediaAdinMSANEnabled, this.props.isMultimediaAd);\r\n\r\n logSaveAdInfoForMetrics({\r\n data,\r\n saveAdActivity,\r\n imageList,\r\n state: this.state,\r\n enableAdCreatorMetrics,\r\n });\r\n }\r\n\r\n // log for the Ad recommendation\r\n if (this.state.isRecommendAd) {\r\n const recommendData = getRecommendCacheByUrl(this.state.url);\r\n const adData = _.extend(_.pick(data, ['Id', 'FinalUrls', 'AdGroup']), {\r\n Images: JSON.parse(data.Images),\r\n LongHeadlines: JSON.parse(data.LongHeadlines),\r\n Descriptions: JSON.parse(data.Descriptions),\r\n Headlines: JSON.parse(data.Headlines),\r\n });\r\n this.props.activityLogger.signal(\r\n `save the ad from recommendation. The ad id is: ${data.Id}. The final URL: ${this.state.url}. The ad data is: ${JSON.stringify(adData)}. The origin recommend data: ${JSON.stringify(recommendData)}. The assetid and url mapping: ${JSON.stringify(this.recommendAssetIdImageUrlMap)} `,\r\n 'responsive ad recommendation'\r\n );\r\n }\r\n\r\n // Only for a creation wizard scenario\r\n if (!this.props.isGridDisplay) {\r\n this.onAdSaved(data, imageToGenerateThumbnail);\r\n }\r\n\r\n this.props.activityLogger.signal('saved an ad', 'responsive ad editor');\r\n this.props.activityLogger.signal(`saved an ad: time cost: ${new Date() - this.openTime}, isGrid: ${this.props.isGridDisplay}, isEdit: ${!!this.props.ad}, isVideo: ${this.isVideo}, isMMAinMSAN: ${this.props.isMultimediaAdinMSANEnabled}`, 'responsive ad editor');\r\n this.openTime = new Date();\r\n return data;\r\n }\r\n\r\n return false;\r\n });\r\n })\r\n .catch((response) => {\r\n if (response) {\r\n const errors = _.unique(response.errors, false, error => error.ErrorNumber);\r\n\r\n this.setResponseErrors(errors);\r\n if (this.isVideo) {\r\n const newErrors = errors.map(error => (\r\n \r\n {this.i18nErrors.getString(bulkApiErrorNumberToErrorMessageMapping[`API_ErrorNumber_${error.ErrorNumber}`])}\r\n \r\n \r\n ));\r\n\r\n this.setState({\r\n videoErrorMessages: [\r\n ...this.state.videoErrorMessages,\r\n ...newErrors,\r\n ],\r\n });\r\n }\r\n _.each(errors, (error) => {\r\n this.props.activityLogger.signal(error.Error, 'responsive ad creation api error');\r\n });\r\n return false;\r\n }\r\n this.logWithMetadata('responsive ad saving failed');\r\n return false;\r\n })\r\n .finally(() => {\r\n this.setState({\r\n isBlocking: false,\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Called when the save button is pressed. Saves the ad to client in ad group creation\r\n * for multimedia ad now.\r\n *\r\n * @returns {Promise} Promise to return the ad\r\n *\r\n */\r\n saveToClient() {\r\n this.props.activityLogger.signal('click save ad to client', 'responsive ad editor');\r\n this.props.activityLogger.signal(`crud-audience-ad-react saveToClient: ${JSON.stringify(this.pilotCheckLogInfo())}`, 'rae-view deprecation');\r\n // If not editing anything, just return\r\n if (!this.state.isAdEditShown) {\r\n return Promise.resolve(true);\r\n }\r\n\r\n // remove errors\r\n this.setState({\r\n imageErrorMessages: [],\r\n videoErrorMessages: [],\r\n genericErrorMessages: [],\r\n errorCodes: [],\r\n });\r\n\r\n const initialParams = this.getData(this.isUpdate);\r\n\r\n if (!this.isDataValid(initialParams)) {\r\n return Promise.resolve(false);\r\n }\r\n\r\n return Promise.all([\r\n this.getProcessedDataAsync(initialParams),\r\n this.shouldUpdateAccountSettingForAllowCrawlImages() ? AccountSettingRepository.updateAccountSettings({ AllowCrawlImagesFromLandingPage: 'true' }) : Promise.resolve(),\r\n ])\r\n .then(([result]) => {\r\n let params = result.mtModel;\r\n\r\n if (this.props.isMultimediaAd) {\r\n const { imageToGenerateThumbnail } = result;\r\n\r\n _.defaults(params, {\r\n Type: 'Responsive',\r\n ThumbnailForAdList: imageToGenerateThumbnail.ThumbnailForAdList,\r\n ImageList: this.state.imageList,\r\n });\r\n\r\n params = omitDeletedParameters(params); // eslint-disable-line no-param-reassign\r\n }\r\n\r\n return params;\r\n });\r\n }\r\n\r\n progressCb() {\r\n this.adEditRef.current.view.showProgress(true);\r\n }\r\n saveMMABulkConversion() {\r\n const self = this;\r\n this.setState({\r\n imageErrorMessages: [],\r\n videoErrorMessages: [],\r\n genericErrorMessages: [],\r\n errorCodes: [],\r\n });\r\n const initialParams = this.getData();\r\n\r\n if (!this.isDataValid(initialParams)) {\r\n return Promise.resolve(false);\r\n }\r\n\r\n this.setState({\r\n isBlocking: true,\r\n });\r\n return this.getProcessedDataAsync(initialParams)\r\n .then((result) => {\r\n const {\r\n mtModel: params,\r\n } = result;\r\n\r\n const bulkParams = this.getBulkEditParams(params);\r\n return bulkEditChange({\r\n params: bulkParams,\r\n progressCB: _.bind(self.progressCb, self),\r\n completeCB: (response) => {\r\n this.adEditRef.current.view.showProgress(false);\r\n self.setState({\r\n isBlocking: false,\r\n });\r\n if (response.Status === 'CompletedWithErrors') {\r\n self.adEditRef.current.view.showErrors(true);\r\n this.adEditRef.current.view.successCount(response.SuccessRowCount);\r\n this.adEditRef.current.view.totalCount(response.TotalRowCount);\r\n self.adEditRef.current.view.errorCount(response.ErrorRowCount);\r\n self.adEditRef.current.view.inlineErrors(response);\r\n self.setState({\r\n isBulkEditMMAUnSaved: true,\r\n bulkEditMMAFailed: true,\r\n });\r\n } else if (response.Status === 'Completed') {\r\n self.logWithMetadata('mma bulk create successfully');\r\n self.props.onAdSaved();\r\n }\r\n return response;\r\n },\r\n failedCB: (e) => {\r\n this.logWithMetadata(`mma bulk conversion failed. ${JSON.stringify(e)}`);\r\n self.setState({\r\n isBulkEditMMAUnSaved: true,\r\n bulkEditMMAFailed: true,\r\n });\r\n const errorMes = e.errors.map(error => JSON.stringify(error));\r\n this.setState({\r\n genericErrorMessages: [\r\n ...this.state.genericErrorMessages,\r\n ...errorMes,\r\n ],\r\n });\r\n },\r\n })\r\n .finally(() => {\r\n this.setState({\r\n isBlocking: false,\r\n });\r\n });\r\n })\r\n .catch((response) => {\r\n const errors = _.unique(response.errors, false, error => error.ErrorNumber);\r\n this.setResponseErrors(errors);\r\n this.logWithMetadata('mma bulk get params failed');\r\n return false;\r\n })\r\n .finally(() => {\r\n this.setState({\r\n isBlocking: false,\r\n });\r\n });\r\n }\r\n\r\n isMeetingMinimumRequirement(MMAImageList) {\r\n const aspectRatios =\r\n constants.getMmaAspectRatios();\r\n const ratioCounts = _.mapObject(aspectRatios, () => 0);\r\n _.each(MMAImageList, imageArray =>\r\n _.each(imageArray, (imageObj) => {\r\n if (imageObj.isIncluded) {\r\n ratioCounts[imageObj.type] += 1;\r\n }\r\n }));\r\n return _.every(ratioCounts, (count, type) => count >= aspectRatios[type].minimumRequirements);\r\n }\r\n\r\n /**\r\n * Makes sure that all the needed parameters are contained on the object, and valid, before this\r\n * is used to save the ad.\r\n *\r\n * @param {object} params The object to be sent on the save request.\r\n *\r\n * @returns {boolean} True if everything is ok, false if values are missing or invalid.\r\n *\r\n */\r\n isDataValid(params) {\r\n if (this.isVideo) {\r\n if (this.state.videoUploading) {\r\n this.setState({\r\n videoErrorMessages: [this.props.i18n.getString('ImageExperience_VideosUploading')],\r\n });\r\n return false;\r\n }\r\n if (this.state.videoList.length !== constants.videoTypesWithOrder.length) {\r\n this.setState({\r\n videoErrorMessages: [this.props.i18n.getString('ImageExperience_VideosMissing')],\r\n });\r\n return false;\r\n }\r\n // Only videos w/ Id and Status in [Draft, Active, Unverified] are valid.\r\n const invalidVideos = this.state.videoList.filter(videoObj =>\r\n videoObj.Id === 0 ||\r\n (videoObj.Status !== 'Draft' &&\r\n videoObj.Status !== 'Active' &&\r\n videoObj.Status !== 'Unverified'));\r\n if (invalidVideos.length > 0) {\r\n this.setState({\r\n videoErrorMessages: [this.props.i18n.getString('ImageExperience_InvalidVideo')],\r\n });\r\n return false;\r\n }\r\n return this.adEditRef.current.view.isDataValid(params);\r\n } else if (this.props.isMultimediaAd) {\r\n const MMAImageList = this.getImageListWithoutLogo(this.state.imageList);\r\n let imageErrorMessages = [];\r\n if (MMAImageList.length <= 0 ||\r\n !_.every(\r\n MMAImageList,\r\n imageArray => _.every(imageArray, imageObj => !_.isNull(imageObj.Id))\r\n ) ||\r\n !_.some(\r\n MMAImageList,\r\n imageArray => _.some(imageArray, imageObj => imageObj.isIncluded === true)\r\n )) {\r\n // should include at least one ratio\r\n imageErrorMessages = [this.props.i18n.getString('ImageExperience_ImagesAspectRatioRequired')];\r\n }\r\n\r\n if (this.isMultiMediaAdsPhase2Enabled && !this.isMeetingMinimumRequirement(MMAImageList)) {\r\n // should include minimum ratios in phase2\r\n imageErrorMessages = [this.props.i18n.getString('ImageExperience_MinimumAspectRatioRequired')];\r\n }\r\n\r\n if (_.isEmpty(imageErrorMessages)) {\r\n return this.adEditRef.current.view.isDataValid(params);\r\n }\r\n\r\n this.setState({ imageErrorMessages });\r\n if (this.props.isBulkEditMMA) {\r\n return this.adEditRef.current.view.isDataValid(params);\r\n }\r\n return false;\r\n } else if (this.props.isMultimediaAdinMSANEnabled) {\r\n const MMAImageList = this.getImageListWithoutLogo(this.state.imageList);\r\n\r\n let imageErrorMessages = [];\r\n if (MMAImageList.length === 0) {\r\n imageErrorMessages = [this.props.i18n.getString('ImageExperience_ImagesRequired')];\r\n this.setState({ imageErrorMessages });\r\n return false;\r\n }\r\n\r\n const isMMAV2Format = this.props.isMMAV2Enabled && _.some(MMAImageList, images => images.find(image => image.Type === 'OriginalImage'));\r\n\r\n const noLandscapeImageIncluded = MMAImageList\r\n .map(images => images.find(image => image.Type === 'Image191x100'))\r\n .every(image => !image.IsIncluded);\r\n\r\n const noOriginalImageIncluded = this.props.isMMAV2Enabled && MMAImageList\r\n .map(images => images.find(image => image.Type === 'OriginalImage'))\r\n .every(image => !image.IsIncluded); // this is always true since original image is not showing on UI\r\n\r\n if (isMMAV2Format && noOriginalImageIncluded) {\r\n imageErrorMessages = [this.props.i18n.getString('ImageExperience_OriginalImageRequired')];\r\n this.setState({ imageErrorMessages });\r\n return false;\r\n }\r\n\r\n if (!isMMAV2Format && noLandscapeImageIncluded) {\r\n imageErrorMessages = [this.props.i18n.getString('ImageExperience_LandscapeImageRequired')];\r\n this.setState({ imageErrorMessages });\r\n return false;\r\n }\r\n return this.adEditRef.current.view.isDataValid(params);\r\n } else if (this.state.imageList.length === this.imageTypesWithOrder.length &&\r\n _.every(this.state.imageList, imageObj => imageObj.Id > 0)) {\r\n return this.adEditRef.current.view.isDataValid(params);\r\n }\r\n this.setState({\r\n imageErrorMessages: [this.props.i18n.getString('ImageExperience_ImagesRequired')],\r\n });\r\n\r\n return false;\r\n }\r\n\r\n renderImageExperience(previewTexts, adPreviewConfig) {\r\n // Adding this to make sure ImageExperience is mounted on every newly created ad\r\n const shouldRender = this.isVideo ? !this.state.isBlocking : true;\r\n return (shouldRender &&\r\n \r\n \r\n this.onImageListUpdated(imageList, currentSelectedImageId, isLogo)\r\n }\r\n onImagePreviewRequested={this.onImagePreviewRequested}\r\n onVideoListUpdated={this.onVideoListUpdated}\r\n onVideoPreviewRequested={this.onVideoPreviewRequested}\r\n onSaveThumbnailAsDraft={this.onSaveThumbnailAsDraft}\r\n onUpdateFinalUrlPrefix={this.onUpdateFinalUrlPrefix}\r\n onUpdateFinalUrl={this.onUpdateFinalUrl}\r\n perfMarker={this.props.perfMarker}\r\n isForVNext={this.props.isForVNext}\r\n isAudienceAd={this.props.isAudienceCampaign}\r\n isMultimediaAd={this.props.isMultimediaAd}\r\n isStockPhotoEnabled={this.props.isStockPhotoEnabled}\r\n oDataConfig={this.props.oDataConfig}\r\n genericImage={this.props.genericImage}\r\n activityLogger={this.props.activityLogger}\r\n permissions={this.props.permissions}\r\n isVideo={this.props.permissions.IsVideoAdsForCampaignEnabled && this.isVideo}\r\n onVideoUploadStatusUpdate={this.onVideoUploadStatusUpdate}\r\n cropImage={this.state.cropImage}\r\n suggestion={this.state.suggestion}\r\n suggestionPoller={this.suggestionPoller}\r\n isAdCreatorEnabled={this.props.isAdCreatorEnabled}\r\n isFinalUrlImageRetrievalEnabled={this.props.isFinalUrlImageRetrievalEnabled}\r\n isLogoEnabled={this.isLogoEnabled}\r\n imageErrorMessages={this.state.imageErrorMessages}\r\n mediaRepository={this.mediaRepository}\r\n finalUrl={this.state.url}\r\n finalUrlProtocol={this.state.protocol}\r\n setAddNewImageCallback={(callback) => {\r\n this.setState({ addImageCallback: callback });\r\n }}\r\n setOpenAddImageCallback={(callback) => {\r\n this.setState({ openAddImageCallback: callback });\r\n }}\r\n adCreatorScenario={this.adCreatorScenario}\r\n onManualCropLogo={() => this.setState({ hasManualCroppedLogo: true })}\r\n onManualCropImage={() => this.setState({ hasManualCroppedImage: true })}\r\n preferencesService={this.props.preferencesService}\r\n isImproveMMA={this.props.isImproveMMA}\r\n isMMAV2Enabled={this.props.isMMAV2Enabled}\r\n isMSANBoostEnabled={this.isMSANBoostEnabled}\r\n isBoost200x100ImageEnabled={this.isBoost200x100ImageEnabled}\r\n isBoostNewAspectRatioSupportEnabled={this.isBoostNewAspectRatioSupportEnabled}\r\n enableUnifiedAdPreview={this.enableAdPreviewLibrary}\r\n adPreviewConfig={adPreviewConfig}\r\n isAudienceMMAWithLogoAndCTA={this.isMSANLogoAndCTAForMMAEnabled}\r\n showCopilotOptionForImage={this.props.permissions.IsBackgroundSceneEnabled}\r\n assetLibraryEventHandler={{\r\n onUploadImage: (imgId) => {\r\n if (this.props.isMultimediaAdinMSANEnabled) {\r\n this.props.activityLogger.signal(`uploaded image audience ad editor, isEditing:${!!this.props.ad}, image id:${imgId}`, 'responsive ad editor');\r\n }\r\n },\r\n }}\r\n supportImageUpscale={this.isAudienceImageUpscale}\r\n isImageFittingEnabled={this.isImageFittingEnabled}\r\n />\r\n {\r\n !this.isLogoEnabled && this.state.imageErrorMessages.length > 0 &&\r\n
    \r\n {\r\n this.state.imageErrorMessages.map((errMsg, index) => (\r\n
    \r\n {errMsg}\r\n
    \r\n ))\r\n }\r\n
    \r\n }\r\n {\r\n this.state.videoErrorMessages.length > 0 &&\r\n
    \r\n {\r\n this.state.videoErrorMessages.map((errMsg, index) => (\r\n
    \r\n {errMsg}\r\n
    \r\n ))\r\n }\r\n
    \r\n }\r\n {\r\n this.state.draftUnsaved &&\r\n this.setState({ draftUnsaved: false })}\r\n >\r\n {this.props.i18n.getString('ImageExperience_UnsavedDraft_Warn')}\r\n \r\n }\r\n
    \r\n );\r\n }\r\n\r\n renderAdEdit() {\r\n return (\r\n \r\n );\r\n }\r\n\r\n render() {\r\n this.perfMarker.willRender();\r\n\r\n const previewTexts = this.getPreviewTexts();\r\n\r\n const {\r\n isMultimediaAdinMSANEnabled, isMultimediaAd, isPlaceholderMMA,\r\n } = this.props;\r\n\r\n const { savedAdsList, errorCodes } = this.state;\r\n\r\n if (this.state.blockCarousel &&\r\n (!!this.state.suggestion.inProgress || this.state.carousel.isError)) {\r\n this.setState({\r\n blockCarousel: false,\r\n });\r\n }\r\n\r\n const adPreviewConfig = getUnifiedAdPreviewConfig({\r\n isMultimediaAdinMSANEnabled,\r\n isMultimediaAd,\r\n isMSANBoostEnabled: this.isMSANBoostEnabled,\r\n isMMAV2Enabled: this.props.isMMAV2Enabled,\r\n isBoost200x100ImageEnabled: this.isBoost200x100ImageEnabled,\r\n isBoostNewAspectRatioSupportEnabled: this.isBoostNewAspectRatioSupportEnabled,\r\n });\r\n const PreviewCarouselComponent = this.enableAdPreviewLibrary ? UnifiedPreviewCarousel : PreviewCarousel;\r\n const MMAMSANPreviewCarouselComponent = this.enableAdPreviewLibrary ? UnifiedMMAMSANPreviewCarousel : MMAPreviewCarousel;\r\n const imagePreview = isMultimediaAdinMSANEnabled ?\r\n ( logo.isIncluded)}\r\n isAdCreatorEnabled={this.props.isAdCreatorEnabled}\r\n adCreatorScenario={this.adCreatorScenario}\r\n instrumentation={this.props.instrumentation}\r\n onUsedViewAllPlacements={() => this.setState({ hasUsedViewAllPlacements: true })}\r\n isImproveMMA={this.props.isImproveMMA}\r\n newI18n={this.props.newI18n}\r\n permissions={this.props.permissions}\r\n isMMAV2Enabled={this.props.isMMAV2Enabled}\r\n isBoost200x100ImageEnabled={this.isBoost200x100ImageEnabled}\r\n isBoostNewAspectRatioSupportEnabled={this.isBoostNewAspectRatioSupportEnabled}\r\n adPreviewConfig={adPreviewConfig}\r\n isImageFittingEnabled={this.isImageFittingEnabled}\r\n />)\r\n :\r\n ( this.setState({ hasUsedViewAllPlacements: true })}\r\n isImproveMMA={this.props.isImproveMMA}\r\n newI18n={this.props.newI18n}\r\n adPreviewConfig={adPreviewConfig}\r\n />);\r\n\r\n return (\r\n
    \r\n {this.props.renderMMABulkConversionHeader && this.props.renderMMABulkConversionHeader({ selectedRowCount: this.props.selectedRowCount })}\r\n {\r\n !this.props.isGridDisplay && !this.props.isBulkEditMMA &&\r\n // don't show ad list in new audience creation flow\r\n !this.isSimplifyAudienceCreation &&\r\n \r\n }\r\n {\r\n !this.props.isGridDisplay &&\r\n !this.state.isAdEditShown &&\r\n this.isAdRecommendationMSANEnabled &&\r\n this.props.isAudienceCampaign &&\r\n !this.props.isBulkEditMMA &&\r\n // don't show recommend ad list in new audience creation flow\r\n !this.isSimplifyAudienceCreation &&\r\n !this.isVideo &&\r\n
    \r\n \r\n {/* init ad editor in order to save the ad when isAdEditShown is false */}\r\n
    {this.renderAdEdit()}
    \r\n
    \r\n }\r\n {\r\n this.state.isAdEditShown &&\r\n
    \r\n {\r\n !isPlaceholderMMA &&\r\n \r\n
    \r\n {!isMultimediaAd && !this.props.isAdCreatorEnabled &&\r\n this.renderImageExperience(previewTexts, adPreviewConfig)}\r\n
    \r\n \r\n \r\n {(this.props.isMultimediaAd || this.props.isAdCreatorEnabled) &&\r\n this.isLogoEnabled &&\r\n this.renderImageExperience(previewTexts, adPreviewConfig)}\r\n {this.isBoostPortraitImageEnabled && (\r\n this.onSavePortraitImage(portraitImage)}\r\n associatedImages={this.props.ad && this.props.ad.Images}\r\n dateFormat={_.get(this.props.pageContext, ['CurrentUser', 'CultureDateTimeFormat', 'ShortDatePattern'])}\r\n timeZone={_.get(this.props.pageContext, ['CurrentAccount', 'TimeZone'])}\r\n serverContext={this.props.serverContext}\r\n />\r\n )}\r\n
    \r\n {this.renderAdEdit()}\r\n
    \r\n \r\n \r\n
    \r\n {(this.props.isMultimediaAd || this.props.isAdCreatorEnabled) &&\r\n !this.isLogoEnabled &&\r\n this.renderImageExperience(previewTexts, adPreviewConfig)}\r\n {this.isVideo ?\r\n : imagePreview\r\n }\r\n
    \r\n \r\n
    \r\n
    \r\n }\r\n {\r\n !isMultimediaAd &&\r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n {`${this.props.i18n.getString('Audience_Campaign_Ad_Policy_Description')} `}\r\n \r\n \r\n {this.props.i18n.getString('Audience_Campaign_Ad_Policy_Label')}\r\n \r\n .\r\n
    \r\n
    \r\n
    \r\n }\r\n
    \r\n {\r\n this.state.genericErrorMessages.map((errMsg, index) => (\r\n
    \r\n {errMsg}\r\n
    \r\n ))\r\n }\r\n
    \r\n {\r\n !this.props.isGridDisplay && !this.props.isBulkEditMMA &&\r\n
    \r\n \r\n {this.props.i18n.getString('Audience_Campaign_Ad_Save')}\r\n \r\n {\r\n this.state.savedAdsList.length > 0 &&\r\n \r\n {this.props.i18n.getString('Audience_Campaign_Cancel_Label')}\r\n \r\n }\r\n
    \r\n }\r\n {\r\n this.props.isBulkEditMMA && this.props.renderMMABulkConversionActionButtons && !this.state.isBlocking &&\r\n this.props.renderMMABulkConversionActionButtons({\r\n saveMMABulkConversion: this.saveMMABulkConversion,\r\n cancelMMABulkConversion: this.cancelAdAsync,\r\n isUnSaved: this.state.isBulkEditMMAUnSaved || this.state.isBlocking,\r\n })\r\n }\r\n {\r\n this.props.isBulkEditMMA && this.state.bulkEditMMAFailed &&\r\n this.setState({ bulkEditMMAFailed: false })}\r\n >\r\n {this.props.newI18n.getString(_TL_('we’re unable to save your multimedia ad(s) due to an error. Please try again. '))}\r\n \r\n }\r\n
    \r\n }\r\n \r\n
    \r\n );\r\n }\r\n}\r\n\r\nCrudAudienceAdReact.propTypes = {\r\n cid: PropTypes.string.isRequired,\r\n aid: PropTypes.string.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n parseDecimal: PropTypes.func.isRequired,\r\n }).isRequired,\r\n i18nErrors: PropTypes.shape({\r\n getBulkApiErrors: PropTypes.func.isRequired,\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n responsiveAdRepository: PropTypes.shape({\r\n getAdAsync: PropTypes.func.isRequired,\r\n removeAdAsync: PropTypes.func.isRequired,\r\n saveAdAsync: PropTypes.func.isRequired,\r\n savePlaceholderMMA: PropTypes.func.isRequired,\r\n saveMMABulkConversion: PropTypes.func,\r\n }).isRequired,\r\n odata: PropTypes.shape({\r\n get: PropTypes.func.isRequired,\r\n post: PropTypes.func.isRequired,\r\n }).isRequired,\r\n genericImage: PropTypes.string.isRequired,\r\n viewContext: PropTypes.shape({\r\n currentAdGroup: PropTypes.shape({\r\n Id: PropTypes.number,\r\n }),\r\n currentCampaign: PropTypes.shape({\r\n Id: PropTypes.number,\r\n }),\r\n }).isRequired,\r\n pageContext: PropTypes.objectOf(PropTypes.any),\r\n isMobileUrlEnabled: PropTypes.bool,\r\n isImpressionTrackingUrlsEnabled: PropTypes.bool,\r\n isGridDisplay: PropTypes.bool,\r\n onAdSaved: PropTypes.func,\r\n onClose: PropTypes.func,\r\n ad: PropTypes.objectOf(PropTypes.any),\r\n isMultimediaAdinMSANEnabled: PropTypes.bool,\r\n isAdRecommendationMSANEnabled: PropTypes.bool,\r\n perfMarker: PropTypes.shape({\r\n willFetchFile: PropTypes.func.isRequired,\r\n willInit: PropTypes.func.isRequired,\r\n willFetchData: PropTypes.func.isRequired,\r\n willRender: PropTypes.func.isRequired,\r\n done: PropTypes.func.isRequired,\r\n createChild: PropTypes.func.isRequired,\r\n }),\r\n isForVNext: PropTypes.bool,\r\n isMultimediaAd: PropTypes.bool,\r\n isPlaceholderMMA: PropTypes.bool,\r\n isAudienceCampaign: PropTypes.bool,\r\n isStockPhotoEnabled: PropTypes.bool,\r\n isBulkEditMMA: PropTypes.bool,\r\n oDataConfig: PropTypes.shape({\r\n odataRootUrl: PropTypes.string,\r\n odataPath: PropTypes.string,\r\n odataToken: PropTypes.string,\r\n }),\r\n activityLogger: PropTypes.shape({\r\n signal: PropTypes.func.isRequired,\r\n }).isRequired,\r\n permissions: PropTypes.shape({\r\n IsBoostPortraitImageEnabled: PropTypes.bool,\r\n IsStockPhotoFilterEnabled: PropTypes.bool,\r\n IsVideoAdsForCampaignEnabled: PropTypes.bool,\r\n IsMultiMediaAdsPhase2Enabled: PropTypes.bool,\r\n IsVideoAdEditorEnabled: PropTypes.bool,\r\n IsAmplifyEnabled: PropTypes.bool,\r\n IsBoost200x100ImageEnabled: PropTypes.bool,\r\n IsBoostNewAspectRatioSupportEnabled: PropTypes.bool,\r\n IsMSANLogoAndCTAForMMAEnabled: PropTypes.bool,\r\n dynamic: PropTypes.object,\r\n IsBackgroundSceneEnabled: PropTypes.bool,\r\n }),\r\n isVideo: PropTypes.bool,\r\n isAdCreatorEnabled: PropTypes.bool,\r\n isFinalUrlImageRetrievalEnabled: PropTypes.bool,\r\n isRecommendation: PropTypes.bool,\r\n scenario: PropTypes.string,\r\n jsdata: PropTypes.shape({}),\r\n instrumentation: PropTypes.shape({\r\n addScenario: PropTypes.func,\r\n }).isRequired,\r\n enableOfflinePollingDelay: PropTypes.bool,\r\n hasWebsiteImageOptedInObservable: PropTypes.func,\r\n newI18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n preferencesService: PropTypes.shape({\r\n setAtUserLevel: PropTypes.func,\r\n findByNameAtUserLevel: PropTypes.func,\r\n }),\r\n parsedTextMaxLengthExtension: PropTypes.shape({\r\n extend: PropTypes.func,\r\n }),\r\n selectedItems: PropTypes.arrayOf(PropTypes.shape({})),\r\n allPages: PropTypes.bool,\r\n filterService: PropTypes.shape({}),\r\n selectedRowCount: PropTypes.number,\r\n renderMMABulkConversionHeader: PropTypes.func,\r\n renderMMABulkConversionActionButtons: PropTypes.func,\r\n isImproveMMA: PropTypes.bool,\r\n isMMAV2Enabled: PropTypes.bool,\r\n biddingScheme: PropTypes.shape({}),\r\n serverContext: PropTypes.shape({}),\r\n};\r\n\r\nCrudAudienceAdReact.defaultProps = {\r\n onAdSaved: _.noop,\r\n onClose: _.noop,\r\n ad: null,\r\n pageContext: {},\r\n perfMarker: {\r\n willFetchFile: _.noop,\r\n willInit: _.noop,\r\n willFetchData: _.noop,\r\n willRender: _.noop,\r\n done: _.noop,\r\n createChild: _.noop,\r\n },\r\n isForVNext: false,\r\n isAudienceCampaign: false,\r\n scenario: '',\r\n isMultimediaAd: false,\r\n isPlaceholderMMA: false,\r\n isStockPhotoEnabled: false,\r\n isMultimediaAdinMSANEnabled: false,\r\n isMobileUrlEnabled: true,\r\n isImpressionTrackingUrlsEnabled: false,\r\n isGridDisplay: false,\r\n isBulkEditMMA: false,\r\n oDataConfig: null,\r\n permissions: { dynamic: {} },\r\n isVideo: false,\r\n isAdRecommendationMSANEnabled: false,\r\n isAdCreatorEnabled: false,\r\n isFinalUrlImageRetrievalEnabled: false,\r\n isRecommendation: false,\r\n jsdata: {},\r\n enableOfflinePollingDelay: true,\r\n hasWebsiteImageOptedInObservable: null,\r\n preferencesService: {},\r\n parsedTextMaxLengthExtension: {\r\n extend: _.noop,\r\n },\r\n selectedItems: [],\r\n allPages: false,\r\n selectedRowCount: 0,\r\n renderMMABulkConversionActionButtons: _.noop,\r\n renderMMABulkConversionHeader: _.noop,\r\n filterService: {},\r\n isImproveMMA: false,\r\n isMMAV2Enabled: false,\r\n biddingScheme: {},\r\n serverContext: {},\r\n};\r\n","import _ from 'underscore';\r\n\r\nimport { constants } from '@bingads-webui-campaign-react/image-experience';\r\nimport { getListOfEffectSettings } from '@bingads-webui-campaign/ad-creator-tools-instrumentation';\r\n\r\nexport const logSaveAdInfoForMetrics = ({\r\n data,\r\n saveAdActivity,\r\n enableAdCreatorMetrics,\r\n imageList = [],\r\n state = {},\r\n}) => {\r\n const baseAdIdMessage = `SavedAdId: ${data.Id}`;\r\n\r\n if (enableAdCreatorMetrics) {\r\n const adIdMessage = [baseAdIdMessage];\r\n\r\n if (_.any(\r\n imageList,\r\n ({ source }) => source === constants.imageSources.WebsiteCarousel\r\n )) {\r\n adIdMessage.push('UsedWebsiteCarouselImage');\r\n }\r\n\r\n if (_.any(\r\n imageList,\r\n ({ source, isLogo }) => source === constants.imageSources.Website && !isLogo\r\n )) {\r\n adIdMessage.push('UsedWebsiteTabImage');\r\n }\r\n\r\n if (_.any(\r\n imageList,\r\n ({ source, isLogo }) => source === constants.imageSources.Website && isLogo\r\n )) {\r\n adIdMessage.push('UsedWebsiteTabImageForLogo');\r\n }\r\n\r\n if (_.any(\r\n imageList,\r\n ({ isLogo }) => isLogo\r\n )) {\r\n adIdMessage.push('UserAddedLogo');\r\n }\r\n\r\n if (state.hasManualCroppedImage) {\r\n adIdMessage.push('UserAppliedManualCrop');\r\n }\r\n\r\n if (state.hasManualCroppedLogo) {\r\n adIdMessage.push('UserAppliedManualCropToLogo');\r\n }\r\n\r\n if (state.hasUsedViewAllPlacements) {\r\n adIdMessage.push('UserOpenedViewAllPlacements');\r\n }\r\n\r\n saveAdActivity.trace(`${adIdMessage.join(';')};`);\r\n\r\n const effects = getListOfEffectSettings(imageList) || [];\r\n\r\n if (effects.length > 0) {\r\n _.each(effects, (effect) => {\r\n saveAdActivity.trace(`${baseAdIdMessage};SmartEffectUsed: ${effect};`);\r\n });\r\n }\r\n } else {\r\n saveAdActivity.trace(`${baseAdIdMessage};`);\r\n }\r\n};\r\n","import { ThemeProvider } from 'react-jss';\r\nimport React, { useMemo, forwardRef, Suspense } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { ComponentSettings, ThemeFluent } from '@bingads-webui-theme-2018/theme-fluent';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { InstrumentationContext } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { PreferenceContext } from '@bingads-webui-react/preference-context';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { Scenario, Activity } from '@bingads-webui-react/hoc-with-signal';\r\nimport { PermissionsContext } from '@bingads-webui-react/hoc-with-permissions';\r\nimport { CrudAudienceAdReact } from './crud-audience-ad-react';\r\n\r\nconst DelayedCopilotSearchMMAEditor =\r\n React.lazy(() => import(/* webpackMode: 'eager' */'./copilot-search-mma-editor')\r\n .then(({ CopilotSearchMMAEditor }) => ({\r\n default: CopilotSearchMMAEditor,\r\n })));\r\n\r\nconst DelayedBulkMMAConvertEditor =\r\n React.lazy(() => import(/* webpackMode: 'eager' */'./mma-creation-rsa/bulk-mma-convert-editor')\r\n .then(({ BulkMMAConvertEditor }) => ({\r\n default: BulkMMAConvertEditor,\r\n })));\r\n\r\nconst DelayedPlaceholderMMAEditor =\r\n React.lazy(() => import(/* webpackMode: 'eager' */'./placeholder-mma-editor')\r\n .then(({ PlaceholderMMAEditor }) => ({\r\n default: PlaceholderMMAEditor,\r\n })));\r\n\r\nexport const CrudAudienceAdReactWithContext = forwardRef((props, ref) => {\r\n const scopeValue = useMemo(() => ({\r\n scope: {\r\n values: {\r\n cid: props.cid,\r\n aid: props.aid,\r\n uid: props.uid,\r\n },\r\n },\r\n }), [props.cid, props.aid, props.uid]);\r\n\r\n let CoreEditor = CrudAudienceAdReact;\r\n\r\n if (props.permissions.dynamic.MMACopilot && props.isMultimediaAd) {\r\n if (props.isPlaceholderMMA) {\r\n CoreEditor = DelayedPlaceholderMMAEditor;\r\n } else if (!props.isRecommendation && !props.isBulkEditMMA) {\r\n CoreEditor = DelayedCopilotSearchMMAEditor;\r\n }\r\n }\r\n\r\n if (props.permissions.dynamic.MMARefactor && props.isMultimediaAd && props.isBulkEditMMA) {\r\n CoreEditor = DelayedBulkMMAConvertEditor;\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 \r\n \r\n );\r\n});\r\n\r\nCrudAudienceAdReactWithContext.propTypes = {\r\n cid: PropTypes.string.isRequired,\r\n aid: PropTypes.string.isRequired,\r\n uid: PropTypes.string,\r\n instrumentation: PropTypes.shape({\r\n addScenario: PropTypes.func,\r\n }).isRequired,\r\n newI18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n preferencesService: PropTypes.shape({\r\n setAtUserLevel: PropTypes.func,\r\n findByNameAtUserLevel: PropTypes.func,\r\n }),\r\n serverContext: PropTypes.shape({\r\n ServicesEndpoints: PropTypes.shape({\r\n CampaignAPI: PropTypes.string,\r\n }),\r\n Token: PropTypes.string,\r\n CurrentCustomer: PropTypes.shape({\r\n Id: PropTypes.string,\r\n }),\r\n CurrentAccount: PropTypes.shape({\r\n Id: PropTypes.string,\r\n }),\r\n }).isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({\r\n MMACopilot: PropTypes.bool,\r\n MMARefactor: PropTypes.bool,\r\n }),\r\n }).isRequired,\r\n isMultimediaAd: PropTypes.bool,\r\n isPlaceholderMMA: PropTypes.bool,\r\n isRecommendation: PropTypes.bool,\r\n isBulkEditMMA: PropTypes.bool,\r\n};\r\n\r\nCrudAudienceAdReactWithContext.defaultProps = {\r\n preferencesService: {},\r\n isMultimediaAd: false,\r\n isPlaceholderMMA: false,\r\n isRecommendation: false,\r\n isBulkEditMMA: false,\r\n uid: '0',\r\n};\r\n","import { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport Promise from 'bluebird';\r\nimport _ from 'underscore';\r\nimport { processImageListViewModelToModel, omitDeletedParameters } from '@bingads-webui-campaign-react/responsive-ad-editor-utils';\r\n\r\nimport { AccountSettingRepository } from './utils/account-setting-repository';\r\n\r\nconst saveAdsEndpoint = 'Customers({customer_id})/Accounts({account_id})/Campaigns({campaign_id})/AdGroups({adgroup_id})/Ads';\r\nconst formatUrl = (url, pageContext, campaignId, adGroupId) => url\r\n .replace('{customer_id}', _.result(pageContext.CurrentCustomer, 'Id'))\r\n .replace('{account_id}', _.result(pageContext.CurrentAccount, 'Id'))\r\n .replace('{campaign_id}', campaignId)\r\n .replace('{adgroup_id}', adGroupId);\r\n\r\nexport class ResponsiveAdRepository {\r\n constructor(options) {\r\n this.viewContext = options.viewContext;\r\n this.isVideo = options.isVideo;\r\n this.campaignDomain = options.campaignDomain;\r\n\r\n this.i18n = DependencyResolver.get('component/i18n/loader!campaignui/feature/audience-campaign');\r\n this.jsdata = DependencyResolver.get('component/js-data-campaign/index');\r\n this.edmCampaign = DependencyResolver.get('component/edm-campaign/index');\r\n this.odata = DependencyResolver.get('component/http/channel/odata');\r\n }\r\n\r\n /**\r\n * Gets the existing ad data.\r\n *\r\n * @param {number} id - ad id to get the data.\r\n * @param {string} extraExpand - extra model data\r\n *\r\n * @returns {Promise} - promise of getting ad\r\n */\r\n getAdAsync(id, extraExpand) {\r\n const adGroupId = this.viewContext.currentAdGroup.Id;\r\n const campaignId = this.viewContext.currentCampaign.Id;\r\n\r\n const entitySet = this.edmCampaign.currentAccount\r\n .Campaigns.$withKey(campaignId)\r\n .AdGroups.$withKey(adGroupId).Ads;\r\n const params = {\r\n entitySet,\r\n bypassCache: true,\r\n queryParameters: {\r\n query: {\r\n $expand: this.isVideo ? 'Model.ResponsiveAd/Videos' : `Model.ResponsiveAd/Images${extraExpand}`,\r\n },\r\n },\r\n };\r\n\r\n return this.jsdata.Ad.find(id, params).then((ad) => {\r\n const adWithIds = ad;\r\n\r\n adWithIds.Campaign = { Id: campaignId };\r\n adWithIds.AdGroup = { Id: adGroupId };\r\n\r\n return adWithIds;\r\n });\r\n }\r\n\r\n /**\r\n * Deletes the specified ad.\r\n *\r\n * @param {number} id - id of the ad to remove\r\n *\r\n * @returns {undefined} - promise of removing ad\r\n */\r\n removeAdAsync(id) {\r\n const adGroupId = this.viewContext.currentAdGroup.Id;\r\n\r\n return this.jsdata.Ad\r\n .destroy(id, { adapter: 'bulk', parentId: adGroupId });\r\n }\r\n\r\n saveAdAsync(params) {\r\n let savePromise;\r\n\r\n // when use the bulkupsert API, the custom parameter need escape semicolon from ';' to '\\;',\r\n // because the MT side will use ';' to split the several custom parameters:w\r\n const escapeParams = _.isArray(params.UrlCustomParameters) ?\r\n _.defaults({\r\n UrlCustomParameters: _.map(params.UrlCustomParameters, item => _.defaults({\r\n Value: _.contains(item.Value, ';') ? item.Value.replace(/;/g, '\\\\;') : item.Value,\r\n }, item)),\r\n }, params) : params;\r\n\r\n if (params.Id > 0) {\r\n savePromise = this.jsdata.ResponsiveAd.update(params.Id, escapeParams, { adapter: 'bulk', cacheResponse: false });\r\n } else {\r\n savePromise = this.jsdata.ResponsiveAd.create(escapeParams, { adapter: 'bulk', cacheResponse: false });\r\n }\r\n\r\n return savePromise;\r\n }\r\n\r\n savePlaceholderMMA(pageContext) {\r\n const campaignId = Number(this.viewContext.currentCampaign.Id);\r\n const adGroupId = Number(this.viewContext.currentAdGroup.Id);\r\n\r\n const requestBody = {\r\n '@odata.type': 'Model.ResponsiveAd',\r\n Campaign: {\r\n Id: campaignId,\r\n },\r\n AdGroup: {\r\n Id: adGroupId,\r\n },\r\n Type: 'Responsive',\r\n DisplayUrl: this.campaignDomain,\r\n };\r\n\r\n const url = formatUrl(saveAdsEndpoint, pageContext, campaignId, adGroupId);\r\n const option = {\r\n path: 'Advertiser/V2/',\r\n data: requestBody,\r\n };\r\n\r\n return new Promise((resolve, reject) => {\r\n this.odata.post(url, option)\r\n .then((data) => {\r\n resolve(data);\r\n })\r\n .catch((response) => {\r\n reject(_.result(response, ['responseJSON', 'value'], null));\r\n });\r\n });\r\n }\r\n\r\n saveMMABulkConversion(params) {\r\n const ids = _.map(params, ad => ad.Id);\r\n const savePromise = this.jsdata.ResponsiveAd.updateMany(ids, params, { adapter: 'bulk', cacheResponse: false });\r\n\r\n return savePromise;\r\n }\r\n\r\n processImageAndSaveSearchAdAsync(data, imageOData, showImageOptedIn, isMultimediaAd = true, isMultimediaAdinMSANEnabled = false, isMMAV2Enabled = false, UiUnsupportedRatios = []) {\r\n return processImageListViewModelToModel(data.Images.ImageList, imageOData, isMultimediaAd, isMultimediaAdinMSANEnabled, isMMAV2Enabled, UiUnsupportedRatios).then((result) => {\r\n const {\r\n mtModel,\r\n imageToGenerateThumbnail,\r\n } = result;\r\n\r\n const params = _.defaults(mtModel, data);\r\n\r\n return Promise.all([\r\n this.saveAdAsync(params),\r\n showImageOptedIn ? AccountSettingRepository.updateAccountSettings({ AllowCrawlImagesFromLandingPage: 'true' }) : Promise.resolve(),\r\n ])\r\n .then(([responseData]) => {\r\n if (_.isFinite(Number(responseData.Id))) {\r\n _.defaults(responseData, {\r\n Type: 'Responsive',\r\n ThumbnailForAdList: imageToGenerateThumbnail.ThumbnailForAdList,\r\n ImageList: data.Images.ImageList,\r\n });\r\n return omitDeletedParameters(responseData);\r\n }\r\n\r\n return false;\r\n });\r\n });\r\n }\r\n\r\n processImageAndSaveToClientAsync(data, imageOData, showImageOptedIn, isMultimediaAd = true, isMultimediaAdinMSANEnabled = false, isMMAV2Enabled = false, UiUnsupportedRatios = []) {\r\n return Promise.all([\r\n processImageListViewModelToModel(data.Images.ImageList, imageOData, isMultimediaAd, isMultimediaAdinMSANEnabled, isMMAV2Enabled, UiUnsupportedRatios),\r\n showImageOptedIn ? AccountSettingRepository.updateAccountSettings({ AllowCrawlImagesFromLandingPage: 'true' }) : Promise.resolve(),\r\n ])\r\n .then(([result]) => {\r\n const {\r\n mtModel,\r\n imageToGenerateThumbnail,\r\n } = result;\r\n\r\n const params = _.defaults(mtModel, data, {\r\n Type: 'Responsive',\r\n ThumbnailForAdList: imageToGenerateThumbnail.ThumbnailForAdList,\r\n ImageList: data.Images.ImageList,\r\n });\r\n\r\n return omitDeletedParameters(params);\r\n });\r\n }\r\n}\r\n","import React from 'react';\r\nimport Promise from 'bluebird';\r\nimport ReactDOM from 'react-dom';\r\nimport _ from 'underscore';\r\nimport {\r\n AudienceStepBase,\r\n AudienceCampaignErrorsView\r\n} from '@bingads-webui-campaign/audience-campaign-shared';\r\nimport { withUiBlock } from '@bingads-webui/uiblocker';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\n\r\nimport template from './template.pug';\r\nimport { mergeI18n } from './utils/merge-i18n';\r\nimport { CrudAudienceAdReactWithContext } from './crud-audience-ad-react-with-context';\r\nimport { ResponsiveAdRepository } from './responsive-ad-repository';\r\nimport GenericImage from '../media/1.91to1.jpg';\r\n\r\n/**\r\n * ResponsiveAdEditor class that extends {AudienceStepBase} class\r\n * The class defines the section of the setting Ads\r\n *\r\n * @class ResponsiveAdEditor\r\n * @extends {AudienceStepBase}\r\n */\r\nexport class ResponsiveAdEditor extends AudienceStepBase {\r\n initialize(options = {}) {\r\n this.options = options;\r\n this.renderMarker;\r\n this.isForVNext = options.isForVNext;\r\n this.isMultimediaAd = options.isMultimediaAd || false;\r\n this.isPlaceholderMMA = options.isPlaceholderMMA || false;\r\n this.perfMarker = options.perfMarker;\r\n this.perfMarker.willInit();\r\n this.wizardElement = options.wizardElement;\r\n this.enableOfflinePollingDelay = options.enableOfflinePollingDelay;\r\n\r\n this.viewContext = options.viewContext || {};\r\n this.serverContext = options.serverContext || {};\r\n this.pageContext = _.get(options.deps, 'pageContext') || options.pageContext;\r\n this.isGridDisplay = options.isGridDisplay;\r\n // this.isGridDisplay = false;\r\n this.isMobileUrlEnabled = options.isMobileUrlEnabled == null ?\r\n true : options.isMobileUrlEnabled;\r\n this.isImpressionTrackingUrlsEnabled =\r\n _.result(options, ['deps', 'pageContext', 'Permissions', 'IsImpressionTrackingUrlsEnabled'], false) ||\r\n _.result(options, ['pageContext', 'Permissions', 'IsImpressionTrackingUrlsEnabled'], false) ||\r\n options.isImpressionTrackingUrlsEnabled;\r\n this.ad = options.ad;\r\n this.biddingScheme = options.biddingScheme;\r\n this.newI18n = options.newI18n;\r\n this.i18n = DependencyResolver.get('component/i18n/loader!campaignui/feature/audience-campaign');\r\n mergeI18n(this.i18n, this.newI18n);\r\n\r\n this.i18nErrors = DependencyResolver.get('component/api-errors-campaign/index');\r\n if (_.isFunction(this.i18nErrors.getI18n)) {\r\n const i18nInstance = this.i18nErrors.getI18n();\r\n mergeI18n(this.i18n, i18nInstance ? i18nInstance.realI18n : i18nInstance);\r\n }\r\n this.scenario = options.scenario;\r\n this.logScenario = options.logScenario;\r\n this.activityLogger = this.logScenario.createAds.create();\r\n this.hasWebsiteImageOptedInObservable = options.hasWebsiteImageOptedInObservable;\r\n this.parsedTextMaxLengthExtension = options.parsedTextMaxLengthExtension;\r\n this.isRecommendation = options.isRecommendation;\r\n this.edm = options.edm;\r\n this.jsdata = options.jsdata;\r\n this.isImproveMMA = options.isImproveMMA;\r\n this.recommendationTargetAccountId = options.ad && options.ad.TargetAccountId;\r\n\r\n this.responsiveAdRepository = new ResponsiveAdRepository({\r\n viewContext: this.viewContext,\r\n isVideo: options.isVideo,\r\n campaignDomain: options.campaignDomain,\r\n });\r\n\r\n this.noCreatedAdErr = new AudienceCampaignErrorsView();\r\n\r\n this.crudReactComponent = React.createRef();\r\n this.onAdSaved = this.onAdSaved.bind(this);\r\n\r\n // configure parameters needed tfor stock image feature\r\n const config = DependencyResolver.get('component/config/index');\r\n const odataToken = config.get('odata.token');\r\n const odataPath = config.get('odata.url') + config.get('odata.path');\r\n const odataRootUrl = config.get('CampaignAzureDomain');\r\n this.permissions = config.get('Permissions');\r\n this.isVideo = options.isVideo;\r\n\r\n this.isOpenCreatePanel = options.isOpenCreatePanel;\r\n this.isLastStep = options.lastStep === 'ResponsiveAdEditor';\r\n this.applyActivity = options.applyActivity;\r\n this.isSwapStepsEnabled = this.permissions.IsAudienceCampaignSwapAdsBudgetAndBidsEnabled &&\r\n this.scenario !== 'adgroup-creation';\r\n\r\n this.isAudienceCampaign = (_.result(this.viewContext.currentCampaign, 'CampaignType') === 'Audience' ||\r\n _.result(this.viewContext.currentCampaign, 'CampaignType') === 8 ||\r\n options.audienceCampaignType === 'Audience');\r\n this.isMultimediaAdinMSANEnabled = this.isAudienceCampaign &&\r\n this.permissions.IsAudienceCampaignMultiMediaAdsEnabled &&\r\n !options.isVideo;\r\n\r\n this.isMMAV2Enabled = this.isMultimediaAdinMSANEnabled && this.permissions.IsMMAV2Enabled && !this.permissions.IsAmplifyEnabled;\r\n\r\n this.isAdRecommendationMSANEnabled = this.isAudienceCampaign &&\r\n this.permissions.IsResponsiveAdRecommendationMSANEnabled;\r\n\r\n this.oDataConfig = {\r\n odataRootUrl,\r\n odataPath,\r\n odataToken,\r\n };\r\n\r\n // enable dynamic config for this flag.\r\n this.isFinalUrlImageRetrievalEnabled = this.isAudienceCampaign;\r\n\r\n // enable ad creator for MSAN and MMA\r\n this.isAdCreatorEnabled = this.isMultimediaAdinMSANEnabled || this.isMultimediaAd;\r\n }\r\n\r\n /**\r\n * class name of el\r\n */\r\n get className() {\r\n return this.isMultimediaAd ? 'crud-multimedia-ad' : '';\r\n }\r\n\r\n /**\r\n * Get the title of the step section.\r\n * This is automatically called from the wizard.\r\n *\r\n * @readonly\r\n * @returns {Object} returns object has a property text that is used for the title of the section.\r\n */\r\n get title() {\r\n const title = this.isSwapStepsEnabled ?\r\n this.i18n.getString('Audience_Campaign_Crud_Ad_Title_Step4') : this.i18n.getString('Audience_Campaign_Crud_Ad_Title');\r\n\r\n return {\r\n text: title,\r\n };\r\n }\r\n\r\n /**\r\n * Get the page title of the step section.\r\n * This is automatically called from the wizard.\r\n *\r\n * @readonly\r\n * @returns {Object} returns object has a property text that is used for the title of the section.\r\n */\r\n get pageTitle() {\r\n return {\r\n text: this.i18n.getString('Audience_Campaign_Crud_Ad_PageTitle'),\r\n };\r\n }\r\n\r\n onRenderedInDOM() {\r\n this.perfMarker.done();\r\n }\r\n\r\n remove() {\r\n const imageExperienceView = this.$('.react-image-experience')[0];\r\n if (imageExperienceView) {\r\n ReactDOM.unmountComponentAtNode(imageExperienceView);\r\n }\r\n super.remove();\r\n }\r\n\r\n /**\r\n * Renders the view\r\n *\r\n * @returns {View} returns the view itself\r\n */\r\n render() {\r\n if (this.options && this.options.perfMarker) {\r\n this.renderMarker = this.perfMarker.createChild('RenderCrudAd');\r\n this.renderMarker.willInit();\r\n }\r\n\r\n this.perfMarker.willRender();\r\n\r\n this.$el.html(template({\r\n i18n: this.i18n,\r\n isGridDisplay: this.isGridDisplay,\r\n isVideo: this.isVideo,\r\n isMultimediaAd: this.isMultimediaAd,\r\n isAdCreatorEnabled: this.isAdCreatorEnabled,\r\n }));\r\n\r\n const path = DependencyResolver.get('Constants').imagePath;\r\n const odata = DependencyResolver.get('component/http/channel/odata');\r\n const state = DependencyResolver.get('component/state/index');\r\n const config = DependencyResolver.get('component/config/index');\r\n const cid = config.get('CurrentAccount') ? config.get('CurrentAccount').AdvertiserCustomerID : config.get('advertiserCustomerID');\r\n const aid = this.isImproveMMA ? this.recommendationTargetAccountId : state.get('account_id');\r\n const uid = _.result(config.get('CurrentUser'), 'Id');\r\n const instrumentation = DependencyResolver.get('campaignui/feature/instrumentation/index');\r\n const preferencesService = DependencyResolver.get('component/preference/service/index');\r\n\r\n ReactDOM.render(\r\n \r\n ,\r\n this.$('.react-image-experience')[0]\r\n );\r\n\r\n this.$('.error-no-created-ad').append(this.noCreatedAdErr.render().el);\r\n this.onRenderedInDOM();\r\n if (this.options && this.options.perfMarker && this.renderMarker) {\r\n this.renderMarker.done();\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Get the actions of the step section.\r\n * This is automatically called from the wizard.\r\n *\r\n * @readonly\r\n * @returns {Object} returns array that has information about the actions.\r\n */\r\n get actions() {\r\n const actions = [];\r\n\r\n if (this.isSwapStepsEnabled) {\r\n actions.push({\r\n name: 'done',\r\n htmlAttributes: {\r\n class: 'btn-primary',\r\n },\r\n enabled: true,\r\n method: 'saveAndExit',\r\n displayText: this.i18n.getString('Audience_Campaign_Save_Label'),\r\n });\r\n\r\n actions.push({\r\n name: 'back',\r\n displayText: this.i18n.getString('Audience_Campaign_Crud_Campaign_Back_Label'),\r\n });\r\n } else {\r\n actions.push({\r\n name: 'back',\r\n displayText: this.i18n.getString('Audience_Campaign_Crud_Campaign_Back_Label'),\r\n });\r\n\r\n actions.push({\r\n name: 'done',\r\n htmlAttributes: {\r\n class: 'btn-primary',\r\n },\r\n enabled: true,\r\n method: 'saveAndExit',\r\n displayText: this.i18n.getString('Audience_Campaign_Crud_Campaign_Save_Exit'),\r\n });\r\n\r\n if (this.scenario === 'adgroup-creation') {\r\n // use the actions as is\r\n } else if (this.scenario === 'campaign-creation') {\r\n // need the next button at the top.\r\n actions.unshift({\r\n name: 'next',\r\n displayText: this.i18n.getString('Audience_Campaign_Crud_Campaign_Save_Next'),\r\n });\r\n }\r\n }\r\n\r\n return actions;\r\n }\r\n\r\n saveAdAsync() {\r\n if (this.crudReactComponent.current) {\r\n return this.crudReactComponent.current.saveAdAsync()\r\n .finally(withUiBlock(this.wizardElement, this.i18n.getString('Loading')));\r\n }\r\n\r\n return Promise.resolve(true);\r\n }\r\n\r\n saveToClient() {\r\n if (this.crudReactComponent.current) {\r\n return this.crudReactComponent.current.saveToClient()\r\n .finally(withUiBlock(this.wizardElement, this.i18n.getString('Loading')));\r\n }\r\n\r\n return Promise.resolve(true);\r\n }\r\n\r\n /**\r\n * Checks if at least one ad was created.\r\n * @private\r\n *\r\n * @returns {boolean} true if there is at least one ad created, false if no ad was created\r\n */\r\n hasCreatedAd() {\r\n return this.crudReactComponent.current.hasCreatedAd();\r\n }\r\n\r\n /**\r\n * Checks if wizard can go to the next step\r\n *\r\n * @returns {Promise} Promise.resolve(true) if at leas one ad was created, Promise.reject()\r\n * if noad was created\r\n */\r\n wizardShouldGoNext() {\r\n return this.saveAdAsync().then((isSaved) => {\r\n if (!isSaved) {\r\n this.activityLogger.signal('clicked next: false', 'responsive ad editor');\r\n return Promise.reject();\r\n }\r\n\r\n if (!this.hasCreatedAd()) {\r\n this.noCreatedAdErr.setErrorMessage(this.i18n.getString('Audience_Campaign_Crud_NoCreatedAd'));\r\n this.activityLogger.signal('clicked next: false', 'responsive ad editor');\r\n return Promise.reject();\r\n }\r\n\r\n this.activityLogger.signal('clicked next: true', 'responsive ad editor');\r\n return true;\r\n });\r\n }\r\n\r\n /**\r\n * Always go back. But add a log.\r\n * @private\r\n *\r\n * @returns {Promise} always allow go back.\r\n */\r\n wizardShouldGoBack() {\r\n this.activityLogger.signal('clicked back: true', 'responsive ad editor');\r\n return new Promise(resolve => resolve(true));\r\n }\r\n\r\n /**\r\n * Triggers event 'saveAndExit' if at least one ad was created, otherwise it displays an error.\r\n * @private\r\n *\r\n * @returns {undefined}\r\n */\r\n saveAndExit() {\r\n return this.saveAdAsync().then((isSaved) => {\r\n if (!isSaved) {\r\n this.activityLogger.signal('save and exit: false', 'responsive ad editor');\r\n return Promise.reject();\r\n }\r\n\r\n if (!this.hasCreatedAd()) {\r\n this.activityLogger.signal('save and exit: false', 'responsive ad editor');\r\n this.noCreatedAdErr.setErrorMessage(this.i18n.getString('Audience_Campaign_Crud_NoCreatedAd'));\r\n return Promise.reject();\r\n }\r\n\r\n this.trigger('saveAndExit');\r\n if (this.isOpenCreatePanel && this.isLastStep) {\r\n const mes = { CampaignId: this.viewContext.currentCampaign.Id, DeliveryStatusType: 'NoEligibleAdGroups' };\r\n\r\n this.applyActivity.trace(JSON.stringify(mes));\r\n }\r\n this.activityLogger.signal('save and exit: true', 'responsive ad editor');\r\n return true;\r\n });\r\n }\r\n\r\n /**\r\n * Event handler for when ad is saved\r\n * @param {Object} savedAd saved ad\r\n * @param {string} imageUrl image url\r\n * @returns {undefined}\r\n */\r\n onAdSaved(savedAd, imageUrl) {\r\n this.noCreatedAdErr.removeErrors();\r\n\r\n this.trigger('onSave', { savedAd, imageUrl });\r\n }\r\n\r\n /**\r\n * Event handler on create another requested\r\n *\r\n * @returns {undefined}\r\n */\r\n onCreateAnother() {\r\n this.crudReactComponent.current.onCreateAd();\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport Backbone from 'backbone';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport {\r\n Button,\r\n} from '@bingads-webui-react/primitive';\r\n\r\nimport { CrudAudienceAdReactWithContext } from '../crud-audience-ad-react-with-context';\r\nimport { ResponsiveAdRepository } from '../responsive-ad-repository';\r\nimport GenericImage from '../../media/1.91to1.jpg';\r\nimport { mergeI18n } from '../utils/merge-i18n';\r\n\r\nexport class StyledMMABulkConversionView extends Backbone.View {\r\n initialize(props = {}) {\r\n this.props = props;\r\n this.state = {};\r\n this.hasRSAorExTA = props.hasRSAorExTA;\r\n this.selectedItems = props.selectedItems;\r\n this.selectedRowCount = props.selectedRowCount;\r\n this.isPlaceholderMMA = props.isPlaceholderMMA || false;\r\n this.perfMarker = props.perfMarker;\r\n this.perfMarker.willInit();\r\n this.wizardElement = props.wizardElement;\r\n this.viewContext = props.viewContext || {};\r\n this.pageContext = _.get(props.deps, 'pageContext') || props.pageContext;\r\n this.isGridDisplay = props.isGridDisplay;\r\n this.ad = props.ad;\r\n this.newI18n = props.newI18n;\r\n this.i18n = props.i18n;\r\n this.i18nErrors = DependencyResolver.get('component/api-errors-campaign/index');\r\n mergeI18n(this.i18n, this.newI18n);\r\n\r\n if (_.isFunction(this.i18nErrors.getI18n)) {\r\n const i18nInstance = this.i18nErrors.getI18n();\r\n mergeI18n(this.i18n, i18nInstance ? i18nInstance.realI18n : i18nInstance);\r\n }\r\n\r\n this.scenario = props.scenario;\r\n const logScenario = props.instrumentation.bulkEditMMAConversionAd.create();\r\n this.activityLogger = logScenario.bulkEditMMAConversionAd.create();\r\n this.hasWebsiteImageOptedInObservable = props.hasWebsiteImageOptedInObservable;\r\n this.parsedTextMaxLengthExtension = props.parsedTextMaxLengthExtension;\r\n this.isRecommendation = props.isRecommendation;\r\n this.jsdata = props.jsdata;\r\n this.serverContext = props.serverContext;\r\n\r\n this.responsiveAdRepository = new ResponsiveAdRepository({\r\n viewContext: this.viewContext,\r\n isVideo: props.isVideo,\r\n campaignDomain: props.campaignDomain,\r\n });\r\n this.crudReactComponent = React.createRef();\r\n this.onAdSaved = this.onAdSaved.bind(this);\r\n this.onClose = this.onClose.bind(this);\r\n\r\n const config = DependencyResolver.get('component/config/index');\r\n const odataToken = config.get('odata.token');\r\n const odataPath = config.get('odata.url') + config.get('odata.path');\r\n const odataRootUrl = config.get('CampaignAzureDomain');\r\n this.permissions = config.get('Permissions');\r\n\r\n this.isOpenCreatePanel = props.isOpenCreatePanel;\r\n this.isLastStep = props.lastStep === 'ResponsiveAdEditor';\r\n this.applyActivity = props.applyActivity;\r\n\r\n this.oDataConfig = {\r\n odataRootUrl,\r\n odataPath,\r\n odataToken,\r\n };\r\n }\r\n get pageTitle() {\r\n return {\r\n text: this.newI18n.getString(_TL_('MMA_Conversion_From_RSA_PageTitle')),\r\n };\r\n }\r\n onAdSaved() {\r\n this.trigger('saveAndRefresh');\r\n }\r\n onClose() {\r\n this.trigger('close');\r\n }\r\n\r\n renderMMABulkConversionActionButtons({ saveMMABulkConversion, cancelMMABulkConversion, isUnSaved }) {\r\n return (\r\n
    \r\n {!isUnSaved &&\r\n \r\n {this.i18n.getString('Audience_Campaign_Ad_Save')}\r\n \r\n }\r\n \r\n {this.i18n.getString('Audience_Campaign_Cancel_Label')}\r\n \r\n
    \r\n );\r\n }\r\n\r\n renderMMABulkConversionHeader({ selectedRowCount }) {\r\n return (\r\n
    \r\n
    {this.i18n.getString('Multimedia_Ad_Bulk_Conversion_Title', { count: selectedRowCount })}
    \r\n
    {this.newI18n.getString(_TL_('Your existing responsive search ads will continue to serve after you copy them to Multimedia ads.'))}
    \r\n
    \r\n );\r\n }\r\n\r\n renderImageExperience() {\r\n const {\r\n customerId, accountId, adGroupId, campaignId, campaignType,\r\n }= this.props.scope;\r\n const { instrumentation, allPages } = this.props;\r\n const config = DependencyResolver.get('component/config/index');\r\n const odata = DependencyResolver.get('component/http/channel/odata');\r\n const odataToken = config.get('odata.token');\r\n const odataPath = config.get('odata.url') + config.get('odata.path');\r\n const odataRootUrl = config.get('CampaignAzureDomain');\r\n const jsdata = DependencyResolver.get('component/js-data-campaign/index');\r\n const viewContext= {\r\n currentAdGroup: {\r\n get Id() {\r\n return adGroupId;\r\n },\r\n },\r\n currentCampaign: {\r\n Id: campaignId,\r\n CampaignType: campaignType,\r\n },\r\n };\r\n const preferencesService = DependencyResolver.get('component/preference/service/index');\r\n const filterService = this.props.filterService.getCombinedFilter();\r\n this.oDataConfig = {\r\n odataRootUrl,\r\n odataPath,\r\n odataToken,\r\n };\r\n return (\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n );\r\n }\r\n render() {\r\n ReactDOM.render(\r\n (\r\n
    {this.renderImageExperience()}
    \r\n ), this.el\r\n );\r\n return this;\r\n }\r\n\r\n remove() {\r\n ReactDOM.unmountComponentAtNode(this.el);\r\n return super.remove();\r\n }\r\n}\r\n\r\n","export const MMAAssetConfigs = {\r\n MAX_HEADLINES: 15,\r\n DEFAULT_HEADLINES: 1,\r\n MIN_HEADLINES: 1,\r\n MAX_LONGHEADLINES: 5,\r\n DEFAULT_LONGHEADLINES: 1,\r\n MIN_LONGHEADLINES: 1,\r\n MAX_DESCRIPTIONS: 5,\r\n DEFAULT_DESCRIPTIONS: 1,\r\n MIN_DESCRIPTIONS: 1,\r\n MAX_HEADLINE_SUGGESTIONS: 15, // MAX_HEADLINES\r\n MAX_DESCRIPTION_SUGGESTIONS: 10, // MAX_DESCRIPTIONS + MAX_LONGHEADLINES\r\n MAX_BUSINESS_NAME: 25,\r\n};\r\n\r\n\r\nexport const ResponsiveAdConfigs = {\r\n MAX_HEADLINE_SUGGESTIONS: 15,\r\n MAX_DESCRIPTION_SUGGESTIONS: 10,\r\n};\r\n","export const getMMAEditorStyles = () => ({\r\n '@global': {\r\n '.top-grid-form .ad-editor__container .crud-audience-ad .react-image-experience .crud-audience-ad-react.crud-multimedia-ad-react': {\r\n '& .ad-edit-and-preview-container': {\r\n position: 'relative',\r\n '& .ad-customizer-container': {\r\n '& .picker-list, > .dropdown-menu.adCustomizersEditor': {\r\n marginTop: 0,\r\n marginLeft: 0,\r\n },\r\n },\r\n '& .image-experience-content': {\r\n minWidth: 'unset',\r\n '& .image-list-view-content .image-list .image-list-content': {\r\n width: '100%',\r\n border: 'none',\r\n margin: 0,\r\n padding: 0,\r\n '& .image-list-item.image-list-add-placeholder': {\r\n borderStyle: 'dashed',\r\n borderColor: '#c8c6c4',\r\n borderRadius: 6,\r\n borderWidth: 1,\r\n marginTop: 8,\r\n },\r\n '& .image-list-choice-group': {\r\n '& .ms-ChoiceFieldGroup-flexContainer': {\r\n flexWrap: 'wrap',\r\n width: 'unset',\r\n '& .ms-ChoiceField': {\r\n marginBottom: 4,\r\n marginRight: 8,\r\n '& ~ .ms-ChoiceField': {\r\n marginLeft: 0,\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n '& .actionextension-search-dropdown-container .dropdown-search-selector__dropdown': {\r\n marginLeft: 0,\r\n '& .dropdown-toggle .text-left': {\r\n padding: '4px 0 0 8px',\r\n },\r\n },\r\n },\r\n 'div .adEditor-container .ad-editor-form__container .crud-audience-ad .react-image-experience .crud-audience-ad-react.crud-multimedia-ad-react': {\r\n '& .ad-edit-and-preview-container': {\r\n position: 'relative',\r\n '& .ad-customizer-container': {\r\n '& .picker-list, > .dropdown-menu.adCustomizersEditor': {\r\n marginTop: 0,\r\n marginLeft: 0,\r\n },\r\n },\r\n '& .image-experience-content': {\r\n minWidth: 'unset',\r\n '& .image-list-view-content .image-list .image-list-content': {\r\n '& .image-list-item.image-list-add-placeholder': {\r\n marginTop: 8,\r\n },\r\n '& .image-list-choice-group .ms-ChoiceFieldGroup-flexContainer': {\r\n flexFlow: 'row',\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n width: 'unset',\r\n '& .ms-ChoiceField': {\r\n marginBottom: 4,\r\n marginRight: 8,\r\n '& ~ .ms-ChoiceField': {\r\n marginLeft: 0,\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n '& .actionextension-search-dropdown-container .dropdown-search-selector__dropdown': {\r\n marginLeft: 0,\r\n '& .dropdown-toggle .text-left': {\r\n padding: '4px 0 0 8px',\r\n },\r\n },\r\n },\r\n '.ads-page': {\r\n paddingTop: 24,\r\n '& .top-grid-form .panel': {\r\n marginTop: 0,\r\n },\r\n },\r\n },\r\n adEditorShell: {\r\n width: '100%',\r\n },\r\n mmaAdImagePreviewCarousel: {\r\n position: 'sticky',\r\n width: '100%',\r\n minWidth: 669,\r\n top: '0px',\r\n '& .new-preview-carousel-container-adprelib': {\r\n '& .new-carousel-navigation-mma-adprelib': {\r\n '& .carousel-indicators': {\r\n left: 20,\r\n margin: '20px 24px',\r\n position: 'absolute',\r\n width: 'auto',\r\n },\r\n '& .carousel-control.left': {\r\n left: 0,\r\n bottom: -7,\r\n position: 'absolute',\r\n marginLeft: 15,\r\n marginRight: 76,\r\n height: 32,\r\n marginTop: 20,\r\n marginBottom: 20,\r\n top: 'auto',\r\n right: 0,\r\n },\r\n '& .carousel-control.right': {\r\n left: 0,\r\n bottom: -7,\r\n position: 'absolute',\r\n marginLeft: 135,\r\n marginRight: 76,\r\n height: 32,\r\n marginTop: 20,\r\n marginBottom: 20,\r\n top: 'auto',\r\n right: 0,\r\n },\r\n },\r\n },\r\n },\r\n rightStyles: {\r\n '& .image-experience-content': {\r\n minWidth: 'unset !important',\r\n },\r\n },\r\n container: {\r\n display: 'flex',\r\n width: '100%',\r\n gap: '32px',\r\n '& .text-input-container': {\r\n width: '100% !important',\r\n },\r\n '& .title-item': {\r\n width: 'auto',\r\n maxWidth: '100%',\r\n },\r\n },\r\n leftStyles: {\r\n width: '40%',\r\n maxWidth: 600,\r\n minWidth: 482,\r\n '& .text-assets-collection-container': {\r\n width: 'unset',\r\n '& label.control-label': {\r\n textAlign: 'left',\r\n },\r\n },\r\n '& .business-name-container': {\r\n width: 'unset',\r\n },\r\n },\r\n headerStackStyles: {\r\n width: 'unset',\r\n '& .server-errors': {\r\n marginBottom: 15,\r\n '& .error a': {\r\n color: '#A80000',\r\n },\r\n },\r\n },\r\n imageExperienceStyle: {\r\n '& .image-experience-content': {\r\n minWidth: 'unset !important',\r\n },\r\n '& .image-list-choice-group .ms-ChoiceFieldGroup-flexContainer': {\r\n width: 'unset !important',\r\n },\r\n '& .image-suggestion-carousel-root .panel-heading .see-all-link': {\r\n fontWeight: 'normal',\r\n },\r\n },\r\n textAssetStyle: {\r\n '& .text-assets-collection-container': {\r\n width: '100%',\r\n },\r\n },\r\n businessNameStyle: {\r\n '& .business-name-container': {\r\n width: '100%',\r\n },\r\n },\r\n});\r\n\r\n","export const getAdvancedSettingsStyles = (components, theme) => ({\r\n collapsiblePanel: {\r\n '&.advanced-settings-panel': {\r\n border: 'none',\r\n marginBottom: 'unset',\r\n backgroundColor: 'unset',\r\n marginLeft: 0,\r\n },\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 marginLeft: '-8px', // compensate 8px padding on the left of icon\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 '& .collapse-container': {\r\n padding: 2,\r\n },\r\n },\r\n },\r\n});\r\n\r\n","import React, { useMemo, useContext, useState, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { Panel as BootstrapPanel } from 'react-bootstrap';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport {\r\n Collapse,\r\n useCollapseState,\r\n ValidatedBootstrapPanel,\r\n collapseExpander,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { URLOptionsSection, MobileUrlSection } from '@bingads-webui-campaign-react/validated-url-input';\r\nimport { getAdvancedSettingsStyles } from './advanced-settings-styles';\r\n\r\nexport const AdvancedSettings = ({\r\n mobileFinalUrls,\r\n trackingUrlTemplate,\r\n finalUrlSuffix,\r\n urlCustomParameters,\r\n triggerTestUurl,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const serverContext = useContext(ServerContext);\r\n const { Permissions, DynamicPermissions, Token } = serverContext || { };\r\n const permissions = useMemo(() => ({ dynamic: { ...DynamicPermissions }, ...Permissions }), [DynamicPermissions, Permissions]);\r\n\r\n const classes = useDefaultStyles(getAdvancedSettingsStyles);\r\n\r\n const [\r\n allAdvancedSettingsSections,\r\n advancedSettingsExpandedSections,\r\n setAdvancedSettingsExpandedSections,\r\n ] = useCollapseState(\r\n ['mobile-final-url', 'advanced-url-options'] /* all sections */,\r\n [] /* initially expanded sections */\r\n );\r\n\r\n const allAdvancedSettingsExpand = useMemo(\r\n () => collapseExpander({ setActiveKeys: setAdvancedSettingsExpandedSections }),\r\n [setAdvancedSettingsExpandedSections]\r\n );\r\n\r\n const [advancedSettingsSectionExpanded, setAdvancedSettingsSectionExpanded] = useState(false);\r\n const onAdvancedSettingsSectionToggle = useCallback((expanded) => {\r\n setAdvancedSettingsSectionExpanded(expanded);\r\n }, []);\r\n\r\n const advancedInputSections = () => (\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_('Advanced settings'))}\r\n \r\n \r\n \r\n \r\n
    \r\n {advancedInputSections()}\r\n
    \r\n
    \r\n
    \r\n \r\n )}\r\n />\r\n \r\n );\r\n};\r\n\r\nAdvancedSettings.propTypes = {\r\n finalUrlSuffix: PropTypes.string,\r\n mobileFinalUrls: PropTypes.string,\r\n trackingUrlTemplate: PropTypes.string,\r\n urlCustomParameters: PropTypes.arrayOf(PropTypes.shape({})),\r\n triggerTestUurl: PropTypes.func.isRequired,\r\n};\r\n\r\nAdvancedSettings.defaultProps = {\r\n finalUrlSuffix: undefined,\r\n mobileFinalUrls: undefined,\r\n trackingUrlTemplate: undefined,\r\n urlCustomParameters: undefined,\r\n};\r\n","import { useState, useEffect } from 'react';\r\nimport { evaluateAdCustomizers } from '@bingads-webui-campaign/ad-customizers-next';\r\n\r\nconst adType = 'ResponsiveAd';\r\n\r\nexport const useEvaluatedAssests = ({ headline, longHeadline, description }) => {\r\n const [evaluatedHeadLine, setEvaluatedHeadLine] = useState(headline);\r\n const [evaluatedLongHeadLine, setEvaluatedLongHeadLine] = useState(longHeadline);\r\n const [evaluatedDescription, setEvaluatedDescription] = useState(description);\r\n\r\n useEffect(() => {\r\n evaluateAdCustomizers({\r\n text: headline,\r\n adType,\r\n field: 'Headlines',\r\n }).then((evaluatedText) => {\r\n setEvaluatedHeadLine(evaluatedText);\r\n });\r\n }, [headline]);\r\n\r\n useEffect(() => {\r\n evaluateAdCustomizers({\r\n text: description,\r\n adType,\r\n field: 'Descriptions',\r\n }).then((evaluatedText) => {\r\n setEvaluatedDescription(evaluatedText);\r\n });\r\n }, [description]);\r\n\r\n useEffect(() => {\r\n evaluateAdCustomizers({\r\n text: longHeadline,\r\n adType,\r\n field: 'LongHeadlines',\r\n }).then((evaluatedText) => {\r\n setEvaluatedLongHeadLine(evaluatedText);\r\n });\r\n }, [longHeadline]);\r\n\r\n return {\r\n evaluatedHeadLine,\r\n evaluatedLongHeadLine,\r\n evaluatedDescription,\r\n };\r\n};\r\n","import classNames from 'classnames';\r\nimport React, { useContext, useMemo, useRef, useState, useCallback } from 'react';\r\nimport { noop, isArray, first, isEmpty } from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport { mergeStyles } from '@fluentui/react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n Collapse,\r\n useCollapseState,\r\n collapseExpander,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { ValidationGroup } from '@bingads-webui-react/validation';\r\nimport { ActuationGroup } from '@bingads-webui-campaign-react/actuator';\r\nimport { AttentionBeaconGroup } from '@bingads-webui-campaign-react/attention-beacon';\r\nimport { AssetGroup } from '@bingads-webui/campaign-odata-schemas';\r\nimport { ValidatedLegacyCallToActionWithLanguageSection } from '@bingads-webui-campaign-react/legacy-call-to-action';\r\nimport { CopilotRepositoryProvider } from '@bingads-webui/inline-copilot';\r\nimport { FormErrorGroup, UnmappedFormErrors } from '@bingads-webui-campaign-react/form-error';\r\nimport {\r\n ValidatedFinalUrlWithRecommendationsSection,\r\n LongHeadlineAssetCollectionSection,\r\n HeadlineAssetCollectionSection,\r\n DescriptionAssetCollectionSection,\r\n ValidatedBusinessNameWithRecommendationSection,\r\n} from '@bingads-webui-campaign-react/pmax-text-input';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { InstrumentationContext } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { withScope } from '@bingads-webui-react/scope-service';\r\nimport {\r\n ImageListPortalContainerWithCarouselSection,\r\n LogoListPortalContainerSection,\r\n ValidatedImageExperienceWrapper,\r\n} from '@bingads-webui-campaign-react/pmax-image-experience';\r\nimport { constants } from '@bingads-webui-campaign-react/image-experience';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { useCopilot } from '@bingads-webui-campaign-react/copilot-experience';\r\n\r\nimport { getMMAEditorStyles } from './copilot-search-mma-editor-styles';\r\nimport { AdvancedSettings } from './advanced-settings';\r\nimport { getUnifiedAdPreviewConfig } from './get-unified-ad-preview-config';\r\nimport { SearchMMAAdPreview } from './search-mma-ad-preview';\r\nimport { errorMapper } from './utils/errors-util';\r\nimport { useAutomatedCTA } from './useAutomatedCTA';\r\nimport { useInitAdCustomizer } from './useInitAdCustomizer';\r\nimport { useEvaluatedAssests } from './useEvaluatedAssets';\r\n\r\nconst advancedSettingsStyles = mergeStyles({\r\n marginBottom: 40,\r\n});\r\n\r\nconst featureName = 'searchMMA';\r\nconst entity = 'ResponsiveAd';\r\n\r\nexport const CopilotSearchMMAEditorContainerInternal = ({\r\n data,\r\n errors,\r\n onDataChange,\r\n onReset,\r\n scope,\r\n perfMarker,\r\n permissions,\r\n viewContext,\r\n genericImage,\r\n showAllValidationErrors,\r\n showUnmappedFormErrors,\r\n triggerTestUurl,\r\n adId,\r\n newI18n,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const serverContext = useContext(ServerContext);\r\n const instrumentation = useContext(InstrumentationContext);\r\n const errorMapperWithI18n = useMemo(() => error => errorMapper(error, i18n), [i18n]);\r\n const defaultPreviewFields = useMemo(() => ({\r\n shortHeadline: i18n.getString(_TL_('Short headline')),\r\n longHeadline: i18n.getString(_TL_('Long headline')),\r\n description: i18n.getString(_TL_('Ad text')),\r\n businessName: i18n.getString(_TL_('Business name')),\r\n callToAction: i18n.getString(_TL_('Shop Now')),\r\n url: 'https://example.com',\r\n }), [i18n]);\r\n\r\n const { cid, aid } = scope.values || {};\r\n const campaignId = viewContext.currentCampaign && viewContext.currentCampaign.Id;\r\n\r\n const classes = useDefaultStyles(getMMAEditorStyles);\r\n\r\n const finalUrls = data.FinalUrls;\r\n const firstUrl = finalUrls && first(finalUrls);\r\n const finalUrlForRecommendation = data.FinalUrlForRecommendation;\r\n const businessName = data.BusinessName;\r\n const mobileFinalUrls = data.MobileFinalUrls;\r\n const headlines = data.Headlines;\r\n const longHeadlines = data.LongHeadlines;\r\n const descriptions = data.Descriptions;\r\n const trackingUrlTemplate = data.TrackingUrlTemplate;\r\n const finalUrlSuffix = data.FinalUrlSuffix;\r\n const urlCustomParameters = data.UrlCustomParameters;\r\n const images = data.Images;\r\n const callToAction = data.CallToAction;\r\n const imageList = images && images.ImageList;\r\n const [ctaText, setCTAText] = useState(callToAction && callToAction.cta);\r\n const {\r\n evaluatedHeadLine,\r\n evaluatedLongHeadLine,\r\n evaluatedDescription,\r\n } = useEvaluatedAssests({\r\n headline: headlines && headlines.Headline0,\r\n longHeadline: longHeadlines && longHeadlines.LongHeadline0,\r\n description: descriptions && descriptions.Description0,\r\n });\r\n\r\n const imageData = useMemo(() => ({\r\n Images: images,\r\n Headlines: headlines && headlines.Headline0 ? { ...headlines, Headline0: evaluatedHeadLine } : headlines,\r\n LongHeadlines: longHeadlines && longHeadlines.LongHeadline0 ? { ...longHeadlines, LongHeadline0: evaluatedLongHeadLine } : longHeadlines,\r\n Descriptions: descriptions && descriptions.Description0 ? { ...descriptions, Description0: evaluatedDescription } : descriptions,\r\n BusinessName: businessName,\r\n CallToAction: ctaText,\r\n FinalUrls: finalUrls,\r\n }), [businessName, ctaText, descriptions, evaluatedDescription, evaluatedHeadLine, evaluatedLongHeadLine, finalUrls, headlines, images, longHeadlines]);\r\n\r\n const previewData = useMemo(() => ({\r\n shortHeadline: isEmpty(evaluatedHeadLine) ? defaultPreviewFields.shortHeadline : evaluatedHeadLine,\r\n longHeadline: isEmpty(evaluatedLongHeadLine) ? defaultPreviewFields.longHeadline : evaluatedLongHeadLine,\r\n description: isEmpty(evaluatedDescription) ? defaultPreviewFields.description : evaluatedDescription,\r\n businessName: isEmpty(businessName) ? defaultPreviewFields.businessName : businessName,\r\n url: isEmpty(firstUrl) ? defaultPreviewFields.url : firstUrl,\r\n callToAction: isEmpty(ctaText) ? defaultPreviewFields.callToAction : ctaText,\r\n }), [businessName, ctaText, evaluatedDescription, evaluatedHeadLine, evaluatedLongHeadLine, firstUrl]);\r\n\r\n const [\r\n allAdSettingsSections,\r\n adSettingsExpandedSections,\r\n setAdSettingsExpandedSections,\r\n ] = useCollapseState(\r\n ['final-url', 'images', 'logos', 'headlines', 'long-headlines', 'descriptions', 'business-name', 'call-to-action', 'mobile-final-url', 'advanced-url-options'] /* all sections */,\r\n ['final-url', 'images', 'logos', 'headlines', 'long-headlines', 'descriptions', 'business-name'] /* initially expanded sections */\r\n );\r\n\r\n const maxUploadNum = useMemo(() => {\r\n const imageListLength = imageList && isArray(imageList) ? imageList.length : 0;\r\n return constants.DEFAULT_MAX_IMAGE - imageListLength;\r\n }, [imageList]);\r\n\r\n // copilot states and actions\r\n const [addNewDescriptionCallback, setAddNewDescriptionCallback] = useState(noop);\r\n const [addNewShortHeadlinesCallback, setAddNewShortHeadlinesCallback] = useState(noop);\r\n const [addNewLongHeadlinesCallback, setAddNewLongHeadlinesCallback] = useState(noop);\r\n const [finalUrlForCopilotRecommendations, setFinalUrlForCopilotRecommendations] = useState(first(finalUrls));\r\n\r\n const imagesContainerRef = useRef(null);\r\n const logosContainerRef = useRef(null);\r\n const [imageExperiencePortalContainerState, setImageExperiencePortalContainerState] = useState({});\r\n const [previewImagesSharedState, setPreviewImagesSharedState] = useState({ previewImageId: null, cropImageObj: null });\r\n const [imageExperienceAddNewImageCallback, setImageExperienceAddNewImageCallback] = useState(noop);\r\n const [newCTACallback, setNewCTACallback] = useState(noop);\r\n\r\n const allAssetsExpand = useMemo(\r\n () => collapseExpander({ setActiveKeys: setAdSettingsExpandedSections }),\r\n [setAdSettingsExpandedSections]\r\n );\r\n\r\n const {\r\n copilotBanner,\r\n suggestionPoller,\r\n } = useCopilot({\r\n maxUploadNum,\r\n addNewShortHeadlinesCallback,\r\n addNewLongHeadlinesCallback,\r\n addNewDescriptionCallback,\r\n imageExperienceAddNewImageCallback,\r\n newCTACallback,\r\n currentCTA: callToAction && callToAction.cta,\r\n onReset,\r\n cid,\r\n aid,\r\n serverContext,\r\n instrumentation,\r\n data: isEmpty(data) ? undefined : data,\r\n campaignId,\r\n assetGroupId: adId,\r\n feature: 'MMA',\r\n });\r\n\r\n const updateFinalUrlForCopilot = useCallback(() => {\r\n setFinalUrlForCopilotRecommendations(finalUrlForRecommendation);\r\n }, [finalUrlForRecommendation]);\r\n\r\n const updateFinalUrlCallback = useCallback((newFinalUrls) => {\r\n onDataChange({\r\n data: {\r\n ...data,\r\n FinalUrls: newFinalUrls,\r\n },\r\n });\r\n }, [data, onDataChange]);\r\n\r\n const onCallActionLanguageChange = useCallback((updates) => {\r\n setCTAText(updates.ctaText);\r\n }, []);\r\n\r\n const adPreviewConfig = getUnifiedAdPreviewConfig({ isMultimediaAd: true });\r\n const automatedCTAEnable = useAutomatedCTA({\r\n isMMAAutomatedCTAOptInEnabled: true,\r\n campaignId,\r\n });\r\n\r\n useInitAdCustomizer({\r\n viewContext,\r\n permissions,\r\n i18n: newI18n,\r\n });\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n {showUnmappedFormErrors && (\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n )}\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n { copilotBanner }\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\n
    \r\n );\r\n};\r\n\r\nCopilotSearchMMAEditorContainerInternal.propTypes = {\r\n data: PropTypes.shape({\r\n FinalUrls: PropTypes.string,\r\n MobileFinalUrls: PropTypes.string,\r\n BusinessName: PropTypes.string,\r\n Headlines: PropTypes.arrayOf(PropTypes.string),\r\n LongHeadlines: PropTypes.arrayOf(PropTypes.string),\r\n Descriptions: PropTypes.arrayOf(PropTypes.string),\r\n Images: PropTypes.shape({\r\n ImageList: PropTypes.arrayOf(PropTypes.shape({})),\r\n }),\r\n TrackingUrlTemplate: PropTypes.string,\r\n FinalUrlSuffix: PropTypes.string,\r\n UrlCustomParameters: PropTypes.string,\r\n FinalUrlForRecommendation: PropTypes.string,\r\n CallToAction: PropTypes.shape({\r\n cta: PropTypes.string,\r\n language: PropTypes.string,\r\n }),\r\n }).isRequired,\r\n onDataChange: PropTypes.func.isRequired,\r\n onReset: PropTypes.func.isRequired,\r\n errors: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n scope: PropTypes.shape({\r\n values: PropTypes.shape({\r\n cid: PropTypes.string,\r\n aid: PropTypes.string,\r\n }),\r\n }).isRequired,\r\n perfMarker: PropTypes.shape({}).isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({\r\n AdPreviewLibrarySearchMMA: PropTypes.bool,\r\n CopilotCTALogoGeneration: PropTypes.bool,\r\n }),\r\n IsBackgroundSceneEnabled: PropTypes.bool,\r\n }).isRequired,\r\n genericImage: PropTypes.string.isRequired,\r\n viewContext: PropTypes.shape({\r\n currentCampaign: PropTypes.shape({\r\n Id: PropTypes.string,\r\n }),\r\n }).isRequired,\r\n showAllValidationErrors: PropTypes.bool.isRequired,\r\n showUnmappedFormErrors: PropTypes.bool,\r\n triggerTestUurl: PropTypes.func.isRequired,\r\n adId: PropTypes.number,\r\n newI18n: PropTypes.shape({}).isRequired,\r\n};\r\n\r\nCopilotSearchMMAEditorContainerInternal.defaultProps = {\r\n showUnmappedFormErrors: true,\r\n adId: null,\r\n};\r\n\r\nexport const CopilotSearchMMAEditorContainer = withScope(CopilotSearchMMAEditorContainerInternal);\r\n","import _ from 'underscore';\r\nimport { useState, useEffect } from 'react';\r\nimport edmCampaign from '@bingads-webui-component-legacy/edm-campaign/index';\r\nimport jsdata from '@bingads-webui-component-legacy/js-data-campaign/index';\r\n\r\nexport const useAutomatedCTA = ({ isMMAAutomatedCTAOptInEnabled, campaignId }) => {\r\n const [automatedCTAEnable, setAutomatedCTAEnable] = useState(false);\r\n\r\n useEffect(() => {\r\n if (isMMAAutomatedCTAOptInEnabled && jsdata.Campaign && campaignId && edmCampaign.currentAccount) {\r\n const params = {\r\n queryParameters: {\r\n entitySet: edmCampaign.currentAccount.Campaigns,\r\n },\r\n bypassCache: true,\r\n };\r\n jsdata.Campaign.find(campaignId, params).then((data) => {\r\n const campaignSettings = data.CampaignSettings;\r\n const callToActionSetting = campaignSettings && _.find(campaignSettings, setting => setting['@odata.type'] === '#Model.CallToActionSetting');\r\n setAutomatedCTAEnable(!callToActionSetting || !callToActionSetting.AutomatedCallToActionOptOut);\r\n });\r\n }\r\n }, [campaignId, isMMAAutomatedCTAOptInEnabled]);\r\n\r\n return automatedCTAEnable;\r\n};\r\n","import { useContext } from 'react';\r\nimport { InstrumentationContext } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { initializeAdCustomizer } from '@bingads-webui-campaign/ad-customizers-next';\r\nimport config from '@bingads-webui-component-legacy/config/index';\r\nimport edmCampaign from '@bingads-webui-component-legacy/edm-campaign/index';\r\nimport jsDataCampaign from '@bingads-webui-component-legacy/js-data-campaign/index';\r\n\r\nexport const useInitAdCustomizer = ({ viewContext, permissions, i18n }) => {\r\n const instrumentation = useContext(InstrumentationContext);\r\n const campaignId = viewContext.currentCampaign && viewContext.currentCampaign.Id;\r\n const adGroupId = viewContext.currentAdGroup && viewContext.currentAdGroup.Id;\r\n\r\n initializeAdCustomizer({\r\n deps: {\r\n i18n,\r\n config,\r\n instrumentation,\r\n permissions,\r\n edmCampaign,\r\n jsDataCampaign,\r\n timeZone: config.get('AccountTimeZone'),\r\n scope: {\r\n campaignId: Number(campaignId),\r\n adGroupId: Number(adGroupId),\r\n },\r\n showAdCustomizers: true,\r\n IsRSAIffPopupEnabledFromDeps: false,\r\n },\r\n adType: 'ResponsiveAd',\r\n });\r\n};\r\n","import React, { useContext, useMemo, useState, useCallback, useImperativeHandle, useEffect } from 'react';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { UiBlocker } from '@bingads-webui-react/ui-blocker';\r\nimport { ImageOData } from '@bingads-webui-campaign/image-odata';\r\nimport { convertFromAdModel, processViewModelDataForSaving } from '@bingads-webui-campaign-react/responsive-ad-editor-utils';\r\nimport { withRecommendationContext, RecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { withBannerService } from '@bingads-webui/inline-copilot';\r\nimport { testUurl, uurlLevels } from '@bingads-webui-component-legacy/upgraded-url/service/testUurl';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { CopilotSearchMMAEditorContainer } from './copilot-search-mma-editor-container';\r\nimport { mapBulkUpsertErrors } from './utils/errors-util';\r\nimport { useAppliedLog } from './useAppliedLog';\r\n\r\nconst emptyRecommendationData = {\r\n Images: {\r\n ImageList: [],\r\n ImageAssets: null,\r\n },\r\n Headlines: {\r\n Headline0: '',\r\n Headline1: '',\r\n Headline2: '',\r\n },\r\n LongHeadlines: {\r\n LongHeadline0: '',\r\n },\r\n Descriptions: {\r\n Description0: '',\r\n Description1: '',\r\n },\r\n};\r\n\r\nconst emptyData = {\r\n ...emptyRecommendationData,\r\n BusinessName: undefined,\r\n FinalUrls: [],\r\n MobileFinalUrls: [],\r\n TrackingUrlTemplate: undefined,\r\n UrlCustomParameters: undefined,\r\n FinalUrlSuffix: undefined,\r\n};\r\n\r\nconst CopilotSearchMMAEditorInternal = ({\r\n responsiveAdRepository,\r\n genericImage,\r\n viewContext,\r\n ad,\r\n onChanged,\r\n perfMarker,\r\n oDataConfig,\r\n permissions,\r\n editorRef,\r\n newI18n,\r\n externalErrors,\r\n showAllValidationErrors,\r\n showUnmappedFormErrors,\r\n}) => {\r\n const { scope } = useContext(ScopeContext);\r\n const { cid, aid, uid } = scope.values || {};\r\n const i18n = useContext(I18nContext);\r\n const [data, setData] = useState(() => (ad ? convertFromAdModel(ad) : {}));\r\n const [isDataValid, setIsDataValid] = useState(false);\r\n const [errors, setErrors] = useState(ad ? (ad.errors || []) : []);\r\n const [blocking, setBlocking] = useState(false);\r\n const imageOData = useMemo(() => new ImageOData(cid, aid, oDataConfig), [cid, aid, oDataConfig]);\r\n const [saveFailed, setSaveFailed] = useState(false);\r\n const [, setRecommendationContext] = useContext(RecommendationContext);\r\n const campaignId = viewContext.currentCampaign && viewContext.currentCampaign.Id;\r\n const adgroupId = viewContext.currentAdGroup && viewContext.currentAdGroup.Id;\r\n const { logAppliedSuggestion } = useAppliedLog({ campaignId });\r\n const activityContext = useContext(ActivityContext);\r\n const log = activityContext.signal;\r\n\r\n const clearAllErrors = useCallback(() => {\r\n setErrors([]);\r\n }, []);\r\n\r\n const onDataChange = useCallback(({ data: newData, isValid }) => {\r\n setData(newData);\r\n setIsDataValid(isValid);\r\n onChanged(newData, isValid);\r\n }, [onChanged]);\r\n\r\n const onReset = useCallback((clearAll) => {\r\n const dataPatch = {\r\n data: {\r\n ...data,\r\n ...(clearAll ? emptyData : emptyRecommendationData),\r\n },\r\n isValid: false,\r\n };\r\n\r\n onDataChange(dataPatch);\r\n }, [data, onDataChange]);\r\n\r\n useImperativeHandle(editorRef, () => ({\r\n saveAdAsync: () => {\r\n if (isDataValid) {\r\n setSaveFailed(false);\r\n setBlocking(true);\r\n clearAllErrors();\r\n\r\n const adData = processViewModelDataForSaving(data, campaignId, adgroupId, ad && ad.isSaved !== false && ad.Id);\r\n\r\n return responsiveAdRepository.processImageAndSaveSearchAdAsync(adData, imageOData, false)\r\n .then((responseData) => {\r\n if (responseData) {\r\n const descriptions = JSON.parse(responseData.Descriptions); // empty?\r\n const headlines = JSON.parse(responseData.Headlines);\r\n const longHeadlines = JSON.parse(responseData.LongHeadlines);\r\n logAppliedSuggestion({\r\n assetData: {\r\n Descriptions: _.pluck(descriptions, 'Text'),\r\n Headlines: _.pluck(headlines, 'Text'),\r\n LongHeadlines: _.pluck(longHeadlines, 'Text'),\r\n Images: {\r\n ImageList: responseData.ImageList,\r\n },\r\n FinalUrls: responseData.FinalUrls,\r\n Id: responseData.Id,\r\n },\r\n isEditing: !!adData.Id,\r\n });\r\n }\r\n return responseData;\r\n })\r\n .catch((response) => {\r\n setSaveFailed(true);\r\n if (response) {\r\n const resErrors = _.unique(response.errors, false, err => err.ErrorNumber);\r\n setErrors(mapBulkUpsertErrors({\r\n errors: resErrors, i18n, scenario: 'mmaSave',\r\n }));\r\n return false;\r\n }\r\n return false;\r\n }).finally(() => {\r\n setBlocking(false);\r\n });\r\n }\r\n setSaveFailed(true);\r\n return Promise.resolve(false);\r\n },\r\n saveToClient: () => {\r\n if (isDataValid) {\r\n clearAllErrors();\r\n const adData = processViewModelDataForSaving(data, campaignId, adgroupId, ad && ad.isSaved !== false && ad.Id);\r\n return responsiveAdRepository.processImageAndSaveToClientAsync(adData, imageOData, false);\r\n }\r\n setSaveFailed(true);\r\n return Promise.resolve(false);\r\n },\r\n hasCreatedAd: () => {\r\n },\r\n onCreateAd: () => {\r\n setRecommendationContext({\r\n themes: [],\r\n headlines: [],\r\n longHeadlines: [],\r\n descriptions: [],\r\n imageAssets: [],\r\n });\r\n onReset(true);\r\n },\r\n logAppliedSuggestion,\r\n // for recommendation\r\n // setResponseErrors: () => {\r\n // },\r\n // getData: () => {\r\n // },\r\n // getProcessedDataAsync: () => {\r\n // },\r\n // isDataValid: () => {\r\n // },\r\n // getFlattenedImageAssetList\r\n }));\r\n\r\n useEffect(() => () => {\r\n log(`new search mma editor url: ${data.FinalUrls}`);\r\n }, [data.FinalUrls, log]);\r\n\r\n const triggerTestUurl = useCallback((fn, originalView) => {\r\n originalView.isInline = false; // eslint-disable-line\r\n originalView.level = uurlLevels.Ad; // eslint-disable-line\r\n const params = data || {};\r\n const context = {\r\n customerId: +cid,\r\n userId: +uid,\r\n accountId: +aid,\r\n campaignId,\r\n adGroupId: adgroupId,\r\n entityId: (ad && ad.Id) || '',\r\n };\r\n const options = {\r\n apiInLog: 'responsive-ad-editor/uurlTest',\r\n };\r\n testUurl(fn, originalView, params, context, options);\r\n }, [ad, adgroupId, aid, cid, data, uid, campaignId]);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nCopilotSearchMMAEditorInternal.propTypes = {\r\n responsiveAdRepository: PropTypes.shape({\r\n processImageAndSaveSearchAdAsync: PropTypes.func.isRequired,\r\n processImageAndSaveToClientAsync: PropTypes.func.isRequired,\r\n }).isRequired,\r\n genericImage: PropTypes.string.isRequired,\r\n viewContext: PropTypes.shape({\r\n currentAdGroup: PropTypes.shape({\r\n Id: PropTypes.number,\r\n }),\r\n currentCampaign: PropTypes.shape({\r\n Id: PropTypes.number,\r\n }),\r\n }).isRequired,\r\n ad: PropTypes.shape({\r\n Images: PropTypes.shape({}),\r\n Id: PropTypes.number,\r\n ImageList: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.shape({}))),\r\n errors: PropTypes.arrayOf(PropTypes.shape({})),\r\n isSaved: PropTypes.bool,\r\n }),\r\n onChanged: PropTypes.func,\r\n perfMarker: PropTypes.shape({\r\n willFetchFile: PropTypes.func.isRequired,\r\n willInit: PropTypes.func.isRequired,\r\n willFetchData: PropTypes.func.isRequired,\r\n willRender: PropTypes.func.isRequired,\r\n done: PropTypes.func.isRequired,\r\n createChild: PropTypes.func.isRequired,\r\n }),\r\n oDataConfig: PropTypes.shape({\r\n odataRootUrl: PropTypes.string,\r\n odataPath: PropTypes.string,\r\n odataToken: PropTypes.string,\r\n }),\r\n permissions: PropTypes.shape({\r\n IsBoostPortraitImageEnabled: PropTypes.bool,\r\n IsStockPhotoFilterEnabled: PropTypes.bool,\r\n IsVideoAdsForCampaignEnabled: PropTypes.bool,\r\n IsMultiMediaAdsPhase2Enabled: PropTypes.bool,\r\n IsVideoAdEditorEnabled: PropTypes.bool,\r\n IsAmplifyEnabled: PropTypes.bool,\r\n IsBoost200x100ImageEnabled: PropTypes.bool,\r\n IsBoostNewAspectRatioSupportEnabled: PropTypes.bool,\r\n IsMSANLogoAndCTAForMMAEnabled: PropTypes.bool,\r\n dynamic: PropTypes.shape({}),\r\n }),\r\n // onAdSaved: PropTypes.func,\r\n editorRef: PropTypes.shape({\r\n current: PropTypes.shape({}),\r\n }).isRequired,\r\n newI18n: PropTypes.shape({}).isRequired,\r\n externalErrors: PropTypes.arrayOf(PropTypes.shape({})),\r\n showAllValidationErrors: PropTypes.bool,\r\n showUnmappedFormErrors: PropTypes.bool,\r\n};\r\n\r\nCopilotSearchMMAEditorInternal.defaultProps = {\r\n ad: null,\r\n onChanged: _.noop,\r\n perfMarker: {\r\n willFetchFile: _.noop,\r\n willInit: _.noop,\r\n willFetchData: _.noop,\r\n willRender: _.noop,\r\n done: _.noop,\r\n createChild: _.noop,\r\n },\r\n oDataConfig: null,\r\n permissions: { dynamic: {} },\r\n externalErrors: undefined,\r\n showAllValidationErrors: false,\r\n showUnmappedFormErrors: true,\r\n};\r\n\r\nexport const CopilotSearchMMAEditor = _.compose(\r\n withBannerService,\r\n withRecommendationContext\r\n)(CopilotSearchMMAEditorInternal);\r\n","import { useContext, useCallback } from 'react';\r\nimport { RecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { logCopilotRecommendations } from '@bingads-webui-campaign-react/copilot-common';\r\n\r\nexport const useAppliedLog = ({ campaignId }) => {\r\n const [recommendationContext] = useContext(RecommendationContext);\r\n const logAppliedSuggestion = useCallback(({\r\n assetData,\r\n isEditing,\r\n }) => {\r\n logCopilotRecommendations({\r\n recommendationContext,\r\n assetGroup: assetData,\r\n campaignId,\r\n isEditing,\r\n });\r\n }, [campaignId, recommendationContext]);\r\n\r\n return {\r\n logAppliedSuggestion,\r\n };\r\n};\r\n","import { UAPPlacementTypeAlias as EPT } from '@bingads-webui-campaign-react/unified-ad-preview-library-cmui';\r\nimport { AdTypeEnum } from '@bingads-webui-campaign-react/image-experience';\r\n\r\nconst searchMMAConfig = {\r\n adType: AdTypeEnum.MMA,\r\n placementConfig: [{\r\n placementSetName: 'searchMMAConfig',\r\n placementTypes: [...EPT.MMA.All],\r\n }],\r\n};\r\n\r\nconst msanMMAConfig = {\r\n adType: AdTypeEnum.MSAN,\r\n placementConfig: [{\r\n placementSetName: 'msanMMAConfig',\r\n placementTypes: [\r\n ...EPT.MSAN.All,\r\n EPT.Outlook.Web,\r\n EPT.Outlook.Mobile,\r\n ],\r\n }],\r\n};\r\n\r\nconst msanMMAV2Config = {\r\n adType: AdTypeEnum.MSANV2,\r\n placementConfig: [{\r\n placementSetName: 'msanMMAV2Config',\r\n placementTypes: [\r\n ...EPT.MSANV2.All,\r\n EPT.Outlook.Web,\r\n EPT.Outlook.Mobile,\r\n ],\r\n }],\r\n};\r\n\r\n// Boost\r\nconst basicBoostPlacementTypes = [\r\n EPT.Boost.WindowsSpotlight,\r\n EPT.Boost.DiscoverCard,\r\n EPT.Boost.StartMenu,\r\n EPT.Boost.ActionCenter,\r\n EPT.Boost.Banner,\r\n EPT.Boost.Prong1Prong2Feed,\r\n EPT.Boost.Coachmark,\r\n];\r\nconst msanMMABoostConfigBasic = {\r\n adType: AdTypeEnum.Boost,\r\n placementConfig: [{\r\n placementSetName: 'msanMMABoostConfigBasic',\r\n placementTypes: [\r\n ...EPT.MSAN.All, // MMA V2 is not supported in MSAN Boost\r\n ...basicBoostPlacementTypes,\r\n ],\r\n }],\r\n};\r\nconst msanMMABoostConfigNew = {\r\n adType: AdTypeEnum.Boost,\r\n placementConfig: [{\r\n placementSetName: 'msanMMABoostConfigNew',\r\n placementTypes: [\r\n ...EPT.MSAN.All, // MMA V2 is not supported in MSAN Boost\r\n EPT.Boost.HeroImageCarousel200x100,\r\n ...basicBoostPlacementTypes,\r\n ],\r\n }],\r\n};\r\nconst msanMMABoostConfigAll = {\r\n adType: AdTypeEnum.NewBoost,\r\n placementConfig: [{\r\n placementSetName: 'msanMMABoostConfigAll',\r\n placementTypes: [\r\n ...EPT.MSAN.All, // MMA V2 is not supported in MSAN Boost\r\n ...EPT.Boost.All,\r\n ],\r\n }],\r\n};\r\n\r\nconst defaultConfig = {\r\n adType: 'default',\r\n placementConfig: [{\r\n placementSetName: 'defaultConfig',\r\n placementTypes: [\r\n EPT.Outlook.Web,\r\n EPT.Outlook.Mobile,\r\n ],\r\n }],\r\n};\r\n\r\nexport const getUnifiedAdPreviewConfig = ({\r\n isMultimediaAd,\r\n isMultimediaAdinMSANEnabled,\r\n isMMAV2Enabled,\r\n isMSANBoostEnabled,\r\n isBoost200x100ImageEnabled,\r\n isBoostNewAspectRatioSupportEnabled,\r\n}) => {\r\n if (isMultimediaAd) {\r\n return searchMMAConfig;\r\n }\r\n\r\n if (isMultimediaAdinMSANEnabled && !isMSANBoostEnabled && !isMMAV2Enabled) {\r\n return msanMMAConfig;\r\n }\r\n\r\n if (isMMAV2Enabled) {\r\n return msanMMAV2Config;\r\n }\r\n\r\n if (isMSANBoostEnabled) {\r\n if (isBoostNewAspectRatioSupportEnabled) {\r\n return msanMMABoostConfigAll;\r\n } else if (isBoost200x100ImageEnabled) {\r\n return msanMMABoostConfigNew;\r\n }\r\n return msanMMABoostConfigBasic;\r\n }\r\n\r\n return defaultConfig;\r\n};\r\n","export const getBulkMMAEditorStyles = () => ({\r\n '@global': {\r\n '.top-grid-form#bulkEditContainer .crud-audience-ad .react-image-experience .crud-audience-ad-react.crud-multimedia-ad-react': {\r\n '& .ad-edit-and-preview-container .image-experience-content': {\r\n minWidth: 'unset',\r\n '& .image-list-view-content .image-list .image-list-content': {\r\n width: '100%',\r\n border: 'none',\r\n margin: 0,\r\n padding: 0,\r\n '& .image-list-item.image-list-add-placeholder': {\r\n borderStyle: 'dashed',\r\n borderColor: '#c8c6c4',\r\n borderRadius: 6,\r\n borderWidth: 1,\r\n marginTop: 8,\r\n },\r\n '& .image-list-choice-group': {\r\n '& .ms-ChoiceFieldGroup-flexContainer': {\r\n flexWrap: 'wrap',\r\n width: 'unset',\r\n '& .ms-ChoiceField': {\r\n marginBottom: 4,\r\n marginRight: 8,\r\n '& ~ .ms-ChoiceField': {\r\n marginLeft: 0,\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n '& .actionextension-search-dropdown-container .dropdown-search-selector__dropdown': {\r\n marginLeft: 0,\r\n '& .dropdown-toggle .text-left': {\r\n padding: '4px 0 0 8px',\r\n },\r\n },\r\n },\r\n },\r\n adEditorShell: {\r\n width: '100%',\r\n },\r\n mmaAdImagePreviewCarousel: {\r\n position: 'sticky',\r\n width: '100%',\r\n minWidth: 669,\r\n top: '0px',\r\n '& .new-preview-carousel-container-adprelib': {\r\n '& .new-carousel-navigation-mma-adprelib': {\r\n '& .carousel-indicators': {\r\n left: 20,\r\n margin: '20px 24px',\r\n position: 'absolute',\r\n width: 'auto',\r\n },\r\n '& .carousel-control.left': {\r\n left: 0,\r\n bottom: -7,\r\n position: 'absolute',\r\n marginLeft: 15,\r\n marginRight: 76,\r\n height: 32,\r\n marginTop: 20,\r\n marginBottom: 20,\r\n top: 'auto',\r\n right: 0,\r\n },\r\n '& .carousel-control.right': {\r\n left: 0,\r\n bottom: -7,\r\n position: 'absolute',\r\n marginLeft: 135,\r\n marginRight: 76,\r\n height: 32,\r\n marginTop: 20,\r\n marginBottom: 20,\r\n top: 'auto',\r\n right: 0,\r\n },\r\n },\r\n },\r\n },\r\n rightStyles: {\r\n '& .image-experience-content': {\r\n minWidth: 'unset !important',\r\n },\r\n },\r\n container: {\r\n display: 'flex',\r\n width: '100%',\r\n gap: '32px',\r\n '& .text-input-container': {\r\n width: '100% !important',\r\n },\r\n '& .title-item': {\r\n width: 'auto',\r\n maxWidth: '100%',\r\n },\r\n },\r\n leftStyles: {\r\n width: '40%',\r\n maxWidth: 600,\r\n minWidth: 482,\r\n '& .text-assets-collection-container': {\r\n width: 'unset',\r\n '& label.control-label': {\r\n textAlign: 'left',\r\n },\r\n },\r\n '& .business-name-container': {\r\n width: 'unset',\r\n },\r\n },\r\n headerStackStyles: {\r\n width: 'unset',\r\n '& .server-errors': {\r\n marginBottom: 15,\r\n '& .error a': {\r\n color: '#A80000',\r\n },\r\n },\r\n },\r\n businessNameStyle: {\r\n '& .business-name-container': {\r\n width: '100%',\r\n },\r\n },\r\n imageExperienceStyle: {\r\n '& .image-experience-content': {\r\n minWidth: 'unset !important',\r\n },\r\n '& .image-list-choice-group .ms-ChoiceFieldGroup-flexContainer': {\r\n width: 'unset !important',\r\n },\r\n '& .image-suggestion-carousel-root .panel-heading .see-all-link': {\r\n fontWeight: 'normal',\r\n },\r\n },\r\n});\r\n\r\n","import React, { useEffect, useContext, useCallback, useMemo } from 'react';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport { validateAdUrl } from '@bingads-webui-campaign-react/url-input-fluent';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { ActivityContext, ScenarioContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { InstrumentationContext } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { constants } from '@bingads-webui-campaign-react/image-experience';\r\nimport { RecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { ValidatedImageExperienceWrapper } from '@bingads-webui-campaign-react/pmax-image-experience';\r\nimport { useWebsiteSuggestion } from '@bingads-webui-campaign-react/add-image-hooks';\r\nimport { getUnifiedAdPreviewConfig } from '../get-unified-ad-preview-config';\r\n\r\nexport const ImageExperienceWithSuggestionPollerForBulk = ({\r\n campaignId,\r\n oDataConfig,\r\n data,\r\n ctaText,\r\n url,\r\n setUrl,\r\n permissions,\r\n perfMarker,\r\n imagesContainerRef,\r\n logosContainerRef,\r\n genericImage,\r\n previewImagesSharedState,\r\n setPreviewImagesSharedState,\r\n setImageExperiencePortalContainerState,\r\n setImageExperienceAddNewImageCallback,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const instrumentation = useContext(InstrumentationContext);\r\n const serverContext = useContext(ServerContext);\r\n const { scope } = useContext(ScopeContext);\r\n const activityContext = useContext(ActivityContext);\r\n const scenario = useContext(ScenarioContext);\r\n const [, setRecommendationContext] = useContext(RecommendationContext);\r\n const { aid } = scope.values || {};\r\n const adPreviewConfig = getUnifiedAdPreviewConfig({ isMultimediaAd: true });\r\n const businessName = data.BusinessName;\r\n const images = data.Images;\r\n const imageData = useMemo(() => ({\r\n Images: images,\r\n BusinessName: businessName,\r\n CallToAction: ctaText,\r\n FinalUrls: [url],\r\n }), [businessName, ctaText, images, url]);\r\n\r\n const {\r\n suggestionState,\r\n suggestionPoller,\r\n } = useWebsiteSuggestion({\r\n oDataConfig,\r\n adContext: {\r\n advertiserCustomerId: _.get(serverContext, ['CurrentAccount', 'AdvertiserCustomerID']),\r\n accountId: aid,\r\n campaignId,\r\n },\r\n instrumentation,\r\n logActivity: activityContext.signal,\r\n permissions,\r\n fullUrl: url,\r\n hasErrorInUrl: validateAdUrl(url) !== null,\r\n adCreatorScenario: {\r\n scenarioName: `${scenario.name}AdCreation`,\r\n scenarioValue: `${scenario.name}AdCreation`,\r\n },\r\n customizedGetMinimumSizeForImage: _.partial(constants.getMinimumSizeForImage, null, true),\r\n });\r\n\r\n const updateFinalUrlCallback = useCallback((newFinalUrls) => {\r\n setUrl(newFinalUrls[0]);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (suggestionState && suggestionState.suggestion && suggestionState.suggestion.images) {\r\n setRecommendationContext({\r\n images: {\r\n websiteImagesState: {\r\n suggestion: suggestionState.suggestion,\r\n },\r\n },\r\n });\r\n }\r\n }, [setRecommendationContext, suggestionState]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nImageExperienceWithSuggestionPollerForBulk.propTypes = {\r\n data: PropTypes.shape({\r\n FinalUrls: PropTypes.arrayOf(PropTypes.string),\r\n MobileFinalUrls: PropTypes.string,\r\n BusinessName: PropTypes.string,\r\n Headlines: PropTypes.arrayOf(PropTypes.string),\r\n LongHeadlines: PropTypes.arrayOf(PropTypes.string),\r\n Descriptions: PropTypes.arrayOf(PropTypes.string),\r\n Images: PropTypes.shape({\r\n ImageList: PropTypes.arrayOf(PropTypes.shape({})),\r\n }),\r\n TrackingUrlTemplate: PropTypes.string,\r\n FinalUrlSuffix: PropTypes.string,\r\n UrlCustomParameters: PropTypes.string,\r\n FinalUrlForRecommendation: PropTypes.string,\r\n CallToAction: PropTypes.shape({\r\n cta: PropTypes.string,\r\n language: PropTypes.string,\r\n }),\r\n }).isRequired,\r\n perfMarker: PropTypes.shape({}).isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({\r\n AdPreviewLibrarySearchMMA: PropTypes.bool,\r\n }),\r\n }).isRequired,\r\n genericImage: PropTypes.string.isRequired,\r\n campaignId: PropTypes.string.isRequired,\r\n oDataConfig: PropTypes.shape({}).isRequired,\r\n ctaText: PropTypes.string.isRequired,\r\n imagesContainerRef: PropTypes.shape({\r\n current: PropTypes.instanceOf(Element),\r\n }).isRequired,\r\n logosContainerRef: PropTypes.shape({\r\n current: PropTypes.instanceOf(Element),\r\n }).isRequired,\r\n previewImagesSharedState: PropTypes.shape({}).isRequired,\r\n setPreviewImagesSharedState: PropTypes.func.isRequired,\r\n setImageExperiencePortalContainerState: PropTypes.func.isRequired,\r\n setImageExperienceAddNewImageCallback: PropTypes.func.isRequired,\r\n url: PropTypes.string.isRequired,\r\n setUrl: PropTypes.func.isRequired,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nexport const BulkMMAConvertEditorHeader = ({\r\n i18n,\r\n selectedRowCount,\r\n}) => (\r\n
    \r\n
    {i18n.getString(_TL_('Copy responsive search ads to Multimedia ads ({{count}} ads selected)'), { count: selectedRowCount })}
    \r\n
    {i18n.getString(_TL_('Your existing responsive search ads will continue to serve after you copy them to Multimedia ads.'))}
    \r\n
    \r\n);\r\n\r\nBulkMMAConvertEditorHeader.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n selectedRowCount: PropTypes.number.isRequired,\r\n};\r\n","import classNames from 'classnames';\r\nimport React, { useContext, useMemo, useRef, useState, useCallback } from 'react';\r\nimport { noop } from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n Collapse,\r\n useCollapseState,\r\n collapseExpander,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { ValidationGroup } from '@bingads-webui-react/validation';\r\nimport { ActuationGroup } from '@bingads-webui-campaign-react/actuator';\r\nimport { AttentionBeaconGroup } from '@bingads-webui-campaign-react/attention-beacon';\r\nimport { /* ResponsiveAd, */ AssetGroup } from '@bingads-webui/campaign-odata-schemas';\r\nimport { ValidatedLegacyCallToActionWithLanguageSection } from '@bingads-webui-campaign-react/legacy-call-to-action';\r\nimport { FormErrorGroup, UnmappedFormErrors } from '@bingads-webui-campaign-react/form-error';\r\nimport {\r\n ValidatedBusinessNameWithRecommendationSection,\r\n} from '@bingads-webui-campaign-react/pmax-text-input';\r\nimport {\r\n ImageListPortalContainerSection,\r\n LogoListPortalContainerSection,\r\n} from '@bingads-webui-campaign-react/pmax-image-experience';\r\nimport { constants } from '@bingads-webui-campaign-react/image-experience';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { AdStatusSection } from '@bingads-webui-campaign-react/ad-status';\r\n\r\nimport { getBulkMMAEditorStyles } from './bulk-mma-convert-editor-style';\r\nimport { SearchMMAAdPreview } from '../search-mma-ad-preview';\r\nimport { errorMapper } from '../utils/errors-util';\r\nimport { ImageExperienceWithSuggestionPollerForBulk } from './image-experience-with-suggestion-poller';\r\nimport { BulkMMAConvertEditorHeader } from './bulk-mma-convert-editor-header';\r\n\r\nconst entity = 'ResponsiveAd';\r\n\r\nexport const BulkMMAConvertEditorContainer = ({\r\n data,\r\n errors,\r\n onDataChange,\r\n perfMarker,\r\n permissions,\r\n viewContext,\r\n genericImage,\r\n showAllValidationErrors,\r\n oDataConfig,\r\n selectedRowCount,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const errorMapperWithI18n = useMemo(() => error => errorMapper(error, i18n), [i18n]);\r\n const campaignId = viewContext.currentCampaign && viewContext.currentCampaign.Id;\r\n const classes = useDefaultStyles(getBulkMMAEditorStyles);\r\n const [url, setUrl] = useState('');\r\n const businessName = data.BusinessName;\r\n const images = data.Images;\r\n const callToAction = data.CallToAction;\r\n const [ctaText, setCTAText] = useState(callToAction && callToAction.cta);\r\n\r\n const previewData = useMemo(() => ({\r\n shortHeadline: i18n.getString('Audience_Campaign_Ad_Preview_Default_ShortHeadline'),\r\n longHeadline: i18n.getString('Audience_Campaign_Ad_Preview_Default_LongHeadline'),\r\n description: i18n.getString('Audience_Campaign_Ad_Preview_Default_Description'),\r\n businessName: businessName || i18n.getString('Audience_Campaign_Ad_Preview_Default_BusinessName'),\r\n displayUrl: url,\r\n url: url || 'https://www.bing.com',\r\n callToAction: ctaText,\r\n }), [businessName, ctaText, i18n, url]);\r\n\r\n const [\r\n allAdSettingsSections,\r\n adSettingsExpandedSections,\r\n setAdSettingsExpandedSections,\r\n ] = useCollapseState(\r\n ['images', 'logos', 'business-name', 'call-to-action', 'ad-status'] /* all sections */,\r\n ['images', 'logos', 'business-name', 'call-to-action', 'ad-status'] /* initially expanded sections */\r\n );\r\n\r\n const imagesContainerRef = useRef(null);\r\n const logosContainerRef = useRef(null);\r\n const [imageExperiencePortalContainerState, setImageExperiencePortalContainerState] = useState({});\r\n const [previewImagesSharedState, setPreviewImagesSharedState] = useState({ previewImageId: null, cropImageObj: null });\r\n const [, setImageExperienceAddNewImageCallback] = useState(noop);\r\n\r\n const allAssetsExpand = useMemo(\r\n () => collapseExpander({ setActiveKeys: setAdSettingsExpandedSections }),\r\n [setAdSettingsExpandedSections]\r\n );\r\n\r\n const onCallActionLanguageChange = useCallback((updates) => {\r\n setCTAText(updates.ctaText);\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 \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\nBulkMMAConvertEditorContainer.propTypes = {\r\n data: PropTypes.shape({\r\n FinalUrls: PropTypes.string,\r\n MobileFinalUrls: PropTypes.string,\r\n BusinessName: PropTypes.string,\r\n Headlines: PropTypes.arrayOf(PropTypes.string),\r\n LongHeadlines: PropTypes.arrayOf(PropTypes.string),\r\n Descriptions: PropTypes.arrayOf(PropTypes.string),\r\n Images: PropTypes.shape({\r\n ImageList: PropTypes.arrayOf(PropTypes.shape({})),\r\n }),\r\n TrackingUrlTemplate: PropTypes.string,\r\n FinalUrlSuffix: PropTypes.string,\r\n UrlCustomParameters: PropTypes.string,\r\n FinalUrlForRecommendation: PropTypes.string,\r\n CallToAction: PropTypes.shape({\r\n cta: PropTypes.string,\r\n language: PropTypes.string,\r\n }),\r\n AdStatus: PropTypes.string,\r\n }).isRequired,\r\n onDataChange: PropTypes.func.isRequired,\r\n errors: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n perfMarker: PropTypes.shape({}).isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({\r\n AdPreviewLibrarySearchMMA: PropTypes.bool,\r\n }),\r\n }).isRequired,\r\n genericImage: PropTypes.string.isRequired,\r\n viewContext: PropTypes.shape({\r\n currentCampaign: PropTypes.shape({\r\n Id: PropTypes.string,\r\n }),\r\n }).isRequired,\r\n showAllValidationErrors: PropTypes.bool.isRequired,\r\n oDataConfig: PropTypes.shape({\r\n odataRootUrl: PropTypes.string,\r\n odataPath: PropTypes.string,\r\n odataToken: PropTypes.string,\r\n }).isRequired,\r\n selectedRowCount: PropTypes.number.isRequired,\r\n};\r\n\r\nBulkMMAConvertEditorContainer.defaultProps = {\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Button } from '@bingads-webui-react/primitive';\r\n\r\nexport const BulkMMAConvertEditorFooter = ({\r\n i18n,\r\n showSave,\r\n onSave,\r\n onClose,\r\n}) => (\r\n
    \r\n {showSave &&\r\n \r\n {i18n.getString('Audience_Campaign_Ad_Save')}\r\n \r\n }\r\n \r\n {i18n.getString('Audience_Campaign_Cancel_Label')}\r\n \r\n
    \r\n);\r\n\r\nBulkMMAConvertEditorFooter.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n showSave: PropTypes.bool.isRequired,\r\n onSave: PropTypes.func.isRequired,\r\n onClose: PropTypes.func.isRequired,\r\n};\r\n","import React, { useMemo, } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { ReactTemplate } from '@bingads-webui-react/react-template';\r\n\r\nconst noTranslateModel = { noTranslate: text => ({text}) };\r\n\r\nexport const BulkMMAConvertProgress = ({\r\n onHide, i18n, show, totalCount, completeCount,\r\n}) => {\r\n const completePercentage = useMemo(() => {\r\n const total = totalCount;\r\n if (total === 0) {\r\n return '1%';\r\n }\r\n\r\n const completed = Math.floor((completeCount * 100) / total);\r\n return completed < 1 ? `${completed + 1}%` : `${completed}%`;\r\n }, [completeCount, totalCount]);\r\n\r\n if (!show) {\r\n return null;\r\n }\r\n\r\n const messageTemplate = i18n.getString(_TL_('You can see a summary of your changes on the {{noTranslate}}Bulk Edits{{/noTranslate}} page.'));\r\n\r\n return (\r\n
    \r\n
    {i18n.getString('BulkEdit_InitialStatus')}
    \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\nBulkMMAConvertProgress.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n onHide: PropTypes.func.isRequired,\r\n totalCount: PropTypes.number.isRequired,\r\n completeCount: PropTypes.number.isRequired,\r\n show: PropTypes.bool.isRequired,\r\n};\r\n\r\nBulkMMAConvertProgress.defaultProps = {\r\n};\r\n","/* eslint-disable no-script-url */\r\nimport React, { useMemo, useState, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nexport const BulkMMAConvertError = ({\r\n show, inlineErrors, i18n, errorCount,\r\n}) => {\r\n const [showErrorGrid, setShowErrorGrid] = useState(false);\r\n const errorCountString = i18n.getString('BulkEdit_InlineError_ErrorCount').replace('{0}', errorCount);\r\n const errorCountLinkText = useMemo(() => {\r\n if (showErrorGrid) {\r\n return i18n.getString('BulkEdit_InlineError_HideErrorLink');\r\n }\r\n return i18n.getString('BulkEdit_InlineError_ErrorLink').replace('{0}', errorCount);\r\n }, [errorCount, i18n, showErrorGrid]);\r\n const errorsGrids = useMemo(() => [i18n.getString(_TL_('Ad')), i18n.getString(_TL_('Error'))], [i18n]);\r\n\r\n const onToggleErrorGrid = useCallback(() => {\r\n setShowErrorGrid(!showErrorGrid);\r\n }, [showErrorGrid]);\r\n\r\n if (!show) {\r\n return null;\r\n }\r\n\r\n return (\r\n
    \r\n
    {errorCountString}
    \r\n {errorCountLinkText}\r\n
    \r\n {showErrorGrid && (\r\n
    \r\n \r\n \r\n \r\n {errorsGrids.map(item => (\r\n \r\n ))}\r\n \r\n \r\n \r\n {inlineErrors.map(item => (\r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
    \r\n
    \r\n {item}\r\n
    \r\n
    \r\n
    {item.name}
    \r\n
    \r\n
    {item.error}
    \r\n
    \r\n
    \r\n )}\r\n
    \r\n );\r\n};\r\n\r\nBulkMMAConvertError.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n errorCount: PropTypes.number.isRequired,\r\n show: PropTypes.bool.isRequired,\r\n inlineErrors: PropTypes.arrayOf(PropTypes.shape({\r\n name: PropTypes.string,\r\n error: PropTypes.string,\r\n })).isRequired,\r\n};\r\n\r\nBulkMMAConvertError.defaultProps = {\r\n};\r\n","import React, { useContext, useMemo, useState, useCallback } from 'react';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport { MessageBar, MessageBarType } from '@bingads-webui-react/fabric-control';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { UiBlocker } from '@bingads-webui-react/ui-blocker';\r\nimport { ImageOData } from '@bingads-webui-campaign/image-odata';\r\nimport { processImageListViewModelToModel } from '@bingads-webui-campaign-react/responsive-ad-editor-utils';\r\nimport { withRecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { bulkEditChange } from '@bingads-webui-campaign-legacy/bulk-edit/service/bulk-edit';\r\nimport { BulkMMAConvertEditorContainer } from './bulk-mma-convert-editor-container';\r\nimport { mapBulkUpsertErrors } from '../utils/errors-util';\r\nimport { BulkMMAConvertEditorFooter } from './bulk-mma-convert-editor-footer';\r\nimport { BulkMMAConvertProgress } from './bulk-mma-convert-progress';\r\nimport { BulkMMAConvertError } from './bulk-mma-convert-error';\r\nimport { getJobResults } from './repository';\r\nimport { getBulkEditParams, processViewModelDataForSaving } from './data-util';\r\n\r\nconst BulkMMAConvertEditorInternal = ({\r\n genericImage,\r\n viewContext,\r\n onAdSaved,\r\n onClose,\r\n perfMarker,\r\n oDataConfig,\r\n permissions,\r\n odata,\r\n allPages,\r\n selectedItems,\r\n filterService,\r\n selectedRowCount,\r\n}) => {\r\n const { scope } = useContext(ScopeContext);\r\n const { cid, aid } = scope.values || {};\r\n const i18n = useContext(I18nContext);\r\n const [data, setData] = useState({});\r\n const [isDataValid, setIsDataValid] = useState(true);\r\n const [errors, setErrors] = useState([]);\r\n const [blocking, setBlocking] = useState(false);\r\n const imageOData = useMemo(() => new ImageOData(cid, aid, oDataConfig), [cid, aid, oDataConfig]);\r\n const [saveFailed, setSaveFailed] = useState(false);\r\n const [isUnSaved, setUnSaved] = useState(false);\r\n const [showProgress, setShowProgress] = useState(false);\r\n const [bulkSuccessCount, setBulkSuccessCount] = useState(0);\r\n const [bulkErrorCount, setBulkErrorCount] = useState(0);\r\n const [bulkTotalCount, setBulkTotalCount] = useState(0);\r\n const [bulkInlineErrors, setBulkInlineErrors] = useState([]);\r\n const [bulkFailed, setBulkFailed] = useState(false);\r\n const [showBulkPartialError, setShowBulkPartialError] = useState(false);\r\n const [genericErrorMessages, setGenericErrorMessages] = useState([]);\r\n\r\n const clearAllErrors = useCallback(() => {\r\n setErrors([]);\r\n }, []);\r\n\r\n const onDataChange = useCallback(({ data: newData, isValid }) => {\r\n setData(newData);\r\n setIsDataValid(isValid);\r\n }, []);\r\n\r\n const onProgess = useCallback(() => {\r\n setShowProgress(true);\r\n }, []);\r\n\r\n const onHideProgress = useCallback(() => {\r\n setShowProgress(false);\r\n onClose();\r\n }, [onClose]);\r\n\r\n const onSave = useCallback(() => {\r\n if (isDataValid) {\r\n setSaveFailed(false);\r\n setBlocking(true);\r\n clearAllErrors();\r\n const adData = processViewModelDataForSaving(data);\r\n return processImageListViewModelToModel(adData.Images.ImageList, imageOData)\r\n .then((result) => {\r\n const {\r\n mtModel,\r\n } = result;\r\n\r\n const params = _.defaults(mtModel, adData);\r\n const bulkParams = getBulkEditParams(params, { allPages, selectedItems, filterService });\r\n return bulkEditChange({\r\n params: bulkParams,\r\n progressCB: onProgess,\r\n completeCB: (response) => {\r\n setShowProgress(false);\r\n setBlocking(false);\r\n if (response.Status === 'CompletedWithErrors') {\r\n setShowBulkPartialError(true);\r\n setBulkSuccessCount(response.SuccessRowCount);\r\n setBulkTotalCount(response.TotalRowCount);\r\n setBulkErrorCount(response.ErrorRowCount);\r\n setUnSaved(true);\r\n setBulkFailed(true);\r\n getJobResults(response.Id, 'errors', 0, 100, 'Ad', odata)\r\n .done((jobResponse) => {\r\n if (jobResponse && jobResponse.value) {\r\n const err = jobResponse.value.map((errorObject) => {\r\n const errorKey = errorObject.Errors[0];\r\n const entityName = errorObject.EntityKey[0].Value;\r\n\r\n return {\r\n error: i18n.getString(`Error_Campaign_API_${errorKey}`),\r\n name: entityName,\r\n };\r\n });\r\n\r\n setBulkInlineErrors(err);\r\n }\r\n });\r\n } else if (response.Status === 'Completed') {\r\n onAdSaved();\r\n }\r\n return response;\r\n },\r\n failedCB: (e) => {\r\n // mma bulk conversion failed\r\n setUnSaved(true);\r\n setBulkFailed(true);\r\n const errorMes = e.errors.map(error => JSON.stringify(error));\r\n setGenericErrorMessages(errorMes);\r\n },\r\n })\r\n .finally(() => { setBlocking(false); });\r\n })\r\n .catch((response) => {\r\n // mma bulk get params failed\r\n setSaveFailed(true);\r\n if (response) {\r\n const resErrors = _.unique(response.errors, false, err => err.ErrorNumber);\r\n setErrors(mapBulkUpsertErrors({\r\n errors: resErrors, i18n, scenario: 'mmaSave',\r\n }));\r\n return false;\r\n }\r\n return false;\r\n })\r\n .finally(() => { setBlocking(false); });\r\n }\r\n setSaveFailed(true);\r\n return Promise.resolve(false);\r\n }, [allPages, clearAllErrors, data, filterService, i18n, imageOData, isDataValid, odata, onAdSaved, onProgess, selectedItems]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n
    \r\n {\r\n genericErrorMessages.map((errMsg, index) => (\r\n
    \r\n {errMsg}\r\n
    \r\n ))\r\n }\r\n
    \r\n \r\n {\r\n bulkFailed &&\r\n setBulkFailed(false)}\r\n >\r\n {i18n.getString(_TL_('we’re unable to save your multimedia ad(s) due to an error. Please try again. '))}\r\n \r\n }\r\n \r\n );\r\n};\r\n\r\nBulkMMAConvertEditorInternal.propTypes = {\r\n selectedItems: PropTypes.arrayOf(PropTypes.shape({})),\r\n allPages: PropTypes.bool,\r\n filterService: PropTypes.shape({}),\r\n selectedRowCount: PropTypes.number,\r\n genericImage: PropTypes.string.isRequired,\r\n viewContext: PropTypes.shape({\r\n currentAdGroup: PropTypes.shape({\r\n Id: PropTypes.number,\r\n }),\r\n currentCampaign: PropTypes.shape({\r\n Id: PropTypes.number,\r\n }),\r\n }).isRequired,\r\n onAdSaved: PropTypes.func.isRequired,\r\n onClose: PropTypes.func.isRequired,\r\n perfMarker: PropTypes.shape({\r\n willFetchFile: PropTypes.func.isRequired,\r\n willInit: PropTypes.func.isRequired,\r\n willFetchData: PropTypes.func.isRequired,\r\n willRender: PropTypes.func.isRequired,\r\n done: PropTypes.func.isRequired,\r\n createChild: PropTypes.func.isRequired,\r\n }),\r\n oDataConfig: PropTypes.shape({\r\n odataRootUrl: PropTypes.string,\r\n odataPath: PropTypes.string,\r\n odataToken: PropTypes.string,\r\n }),\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({}),\r\n }),\r\n odata: PropTypes.shape({\r\n get: PropTypes.func.isRequired,\r\n post: PropTypes.func.isRequired,\r\n }).isRequired,\r\n};\r\n\r\nBulkMMAConvertEditorInternal.defaultProps = {\r\n selectedItems: [],\r\n allPages: false,\r\n selectedRowCount: 0,\r\n filterService: {},\r\n perfMarker: {\r\n willFetchFile: _.noop,\r\n willInit: _.noop,\r\n willFetchData: _.noop,\r\n willRender: _.noop,\r\n done: _.noop,\r\n createChild: _.noop,\r\n },\r\n oDataConfig: null,\r\n permissions: { dynamic: {} },\r\n};\r\n\r\nexport const BulkMMAConvertEditor = _.compose(withRecommendationContext)(BulkMMAConvertEditorInternal);\r\n","/* istanbul ignore file */\r\nimport _ from 'underscore';\r\nimport getParams from '@bingads-webui-campaign-legacy/bulk-edit/service/get-params';\r\n\r\nexport const getBulkEditParams = (params, selectionParams) => {\r\n const {\r\n CallToAction, CallToActionLanguage, Images, BusinessName, AdStatus,\r\n } = params;\r\n const { allPages, selectedItems, filterService } = selectionParams;\r\n const AdditionalData = {\r\n BusinessName,\r\n Images,\r\n CallToAction,\r\n CallToActionLanguage,\r\n Status: AdStatus,\r\n };\r\n const batchAction = {\r\n Actions: [{\r\n PasteAs: 'MultiMediaAd',\r\n '@odata.type': '#Model.CopyAction',\r\n AdditionalData: JSON.stringify(AdditionalData),\r\n }],\r\n EditCopy: false,\r\n };\r\n const filters = _.result(filterService, 'query');\r\n const projection = {\r\n selectedIds: allPages ? [] : _.pluck(selectedItems, 'Id'),\r\n isSelectAll: allPages,\r\n filters,\r\n filterOptions: filterService.odataOptions,\r\n };\r\n const finalParams = getParams(projection, batchAction, 'Ad');\r\n return finalParams;\r\n};\r\n\r\nexport const processViewModelDataForSaving = viewModel => ({\r\n CallToAction: viewModel.CallToAction.cta,\r\n CallToActionLanguage: viewModel.CallToAction.language,\r\n BusinessName: viewModel.BusinessName,\r\n Images: viewModel.Images,\r\n AdStatus: viewModel.AdStatus,\r\n});\r\n","/* istanbul ignore file */\r\nimport _ from 'underscore';\r\n\r\nexport const getJobResults = (jobId, statusFilter, skip, take, entity, odata) => {\r\n const urlTmpls = _.mapObject({\r\n getJobResults: '/Customers()/{{accountInUrl ? \\'Accounts()/\\' : \\'\\'}}BulkEditSessions(\\'{{jobId}}\\')/BulkEditResults?$top={{top}}&$skip={{skip}}',\r\n }, url => _.template(url));\r\n let url = urlTmpls.getJobResults({\r\n jobId,\r\n top: take,\r\n skip,\r\n accountInUrl: !entity || entity !== 'Account',\r\n });\r\n\r\n let filter = '';\r\n if (statusFilter === 'OnlyErrors') {\r\n filter = 'Errors/any() or EditorialErrors/any()';\r\n } else if (statusFilter ==='OnlySuccessful') {\r\n filter = 'not (Errors/any() or EditorialErrors/any())';\r\n }\r\n\r\n if (filter !== '') {\r\n url += urlTmpls.filterSuffix({\r\n statusFilter: filter,\r\n });\r\n }\r\n\r\n return odata.get(url);\r\n};\r\n","import React, { useContext, useState, useImperativeHandle } from 'react';\r\nimport classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\n\r\nexport const PlaceholderMMAEditor = ({\r\n responsiveAdRepository,\r\n pageContext,\r\n editorRef,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const [errors, setErrors] = useState([]);\r\n\r\n useImperativeHandle(editorRef, () => ({\r\n saveAdAsync: () => {\r\n setErrors([]);\r\n\r\n return responsiveAdRepository.savePlaceholderMMA(pageContext)\r\n .then((data) => {\r\n if (_.isFinite(data.value)) {\r\n _.defaults(data, {\r\n Type: 'Responsive',\r\n });\r\n return data;\r\n }\r\n\r\n return false;\r\n })\r\n .catch((response) => {\r\n if (response) {\r\n const errorMsgs = [];\r\n const errorsFromResponse = _.unique(response, false, error => error.Code);\r\n\r\n _.forEach(errorsFromResponse, (error) => {\r\n const genericErrorMessage = i18n.getString(`Multimedia_Ad_Error_${error.Code}`)\r\n || i18n.getString('ErrorNumber_-1');\r\n errorMsgs.push(genericErrorMessage);\r\n });\r\n\r\n setErrors(errorMsgs);\r\n return false;\r\n }\r\n return false;\r\n });\r\n },\r\n }));\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n {\r\n errors.map((errMsg, index) => (\r\n
    \r\n {errMsg}\r\n
    \r\n ))\r\n }\r\n
    \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nPlaceholderMMAEditor.propTypes = {\r\n responsiveAdRepository: PropTypes.shape({\r\n savePlaceholderMMA: PropTypes.func.isRequired,\r\n }).isRequired,\r\n pageContext: PropTypes.shape({\r\n CurrentCustomer: PropTypes.shape({\r\n Id: PropTypes.number,\r\n }),\r\n CurrentAccount: PropTypes.shape({\r\n Id: PropTypes.number,\r\n }),\r\n }).isRequired,\r\n editorRef: PropTypes.shape({\r\n current: PropTypes.shape({}),\r\n }).isRequired,\r\n};\r\n","import React, { useContext, useMemo, useCallback, useEffect } from 'react';\r\nimport _, { get } from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { InstrumentationContext } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { getAutoCroppedImages, UnifiedPreviewCarousel, PreviewCarousel, getDefaultCurrentSelectedImageId, getImageListWithoutLogo } from '@bingads-webui-campaign-react/image-experience';\r\n\r\nimport { getUnifiedAdPreviewConfig } from './get-unified-ad-preview-config';\r\n\r\nconst findImageSetById = (imageList, baseImageId) => {\r\n if (!baseImageId) return false;\r\n\r\n const imageSetToEdit = _.find(imageList, placements => placements[0].BaseId.toString() === baseImageId.toString());\r\n return imageSetToEdit;\r\n};\r\n\r\nconst setImageSetById = (imageList, baseImageId, newImageSet) => {\r\n if (!baseImageId) return false;\r\n\r\n const imageSetIdx = _.findIndex(imageList, placements =>\r\n placements[0].BaseId.toString() === baseImageId.toString());\r\n\r\n if (imageSetIdx >= 0) {\r\n const newImageList = [...imageList];\r\n newImageList.splice(imageSetIdx, 1, newImageSet);\r\n return newImageList;\r\n }\r\n return [...imageList, newImageSet];\r\n};\r\n\r\nexport const SearchMMAAdPreview = ({\r\n data,\r\n onDataChange,\r\n permissions,\r\n genericImage,\r\n previewTexts,\r\n previewImagesSharedState,\r\n setPreviewImagesSharedState,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const instrumentation = useContext(InstrumentationContext);\r\n const enableAdPreviewLibrary = get(permissions.dynamic, 'AdPreviewLibrarySearchMMA', false);\r\n const imageList = data.Images && data.Images.ImageList;\r\n\r\n const onCropImage = useCallback((cropImageObj) => {\r\n setPreviewImagesSharedState({ ...previewImagesSharedState, cropImageObj });\r\n // autorotate=false\r\n }, [previewImagesSharedState, setPreviewImagesSharedState]);\r\n\r\n\r\n const { previewImageId } = previewImagesSharedState;\r\n\r\n useEffect(() => {\r\n if (!previewImageId && imageList && imageList.length > 0) {\r\n const firstImageId = getDefaultCurrentSelectedImageId(imageList);\r\n if (firstImageId) {\r\n setPreviewImagesSharedState({ ...previewImagesSharedState, previewImageId: firstImageId });\r\n }\r\n }\r\n }, [imageList, previewImageId, previewImagesSharedState, setPreviewImagesSharedState]);\r\n\r\n const onAddAspectRatio = useCallback((imageType) => {\r\n // We don't support logo in ad preview, so we need to filter out logo images\r\n const imageListWithoutLogo = getImageListWithoutLogo(imageList);\r\n const previewImages = findImageSetById(imageListWithoutLogo, previewImageId);\r\n\r\n let newPreviewImages = null;\r\n const targetedRatioIdx = _.findIndex(previewImages, image => image.type === imageType);\r\n if (targetedRatioIdx >= 0) {\r\n const targetedRatio = previewImages[targetedRatioIdx].clone();\r\n targetedRatio.setIncluded(true);\r\n newPreviewImages = [...previewImages];\r\n newPreviewImages.splice(targetedRatioIdx, 1, targetedRatio);\r\n } else {\r\n // for image added before partial aspect ratio is supported, may missed some ratio info\r\n const croppedImages = getAutoCroppedImages({\r\n originalImageToCrop: _.first(previewImages),\r\n isMultimediaAd: true,\r\n isMultimediaAdinMSANEnabled: false,\r\n });\r\n const target = _.find(croppedImages, image => image.type === imageType);\r\n target.isIncluded = true;\r\n newPreviewImages = [...previewImages, target];\r\n newPreviewImages.sort((a, b) => b.aspectRatio - a.aspectRatio);\r\n }\r\n\r\n const newImageList = setImageSetById(imageList, previewImageId, newPreviewImages);\r\n onDataChange({\r\n data: {\r\n ...data,\r\n Images: {\r\n ...data.Images,\r\n ImageList: newImageList,\r\n },\r\n },\r\n });\r\n return newImageList;\r\n }, [data, imageList, onDataChange, previewImageId]);\r\n\r\n const onRemoveAspectRatio = (imageType) => {\r\n const imageListWithoutLogo = getImageListWithoutLogo(imageList);\r\n const previewImages = findImageSetById(imageListWithoutLogo, previewImageId);\r\n\r\n const targetedRatioIdx = _.findIndex(previewImages, image => image.type === imageType);\r\n if (targetedRatioIdx >= 0) {\r\n const targetedRatio = previewImages[targetedRatioIdx].clone();\r\n targetedRatio.setIncluded(false);\r\n const newPreviewImages = [...previewImages];\r\n newPreviewImages.splice(targetedRatioIdx, 1, targetedRatio);\r\n const newImageList = setImageSetById(imageList, previewImageId, newPreviewImages);\r\n onDataChange({\r\n data: {\r\n ...data,\r\n Images: {\r\n ...data.Images,\r\n ImageList: newImageList,\r\n },\r\n },\r\n });\r\n return newImageList;\r\n }\r\n return imageList;\r\n };\r\n\r\n const PreviewCarouselComponent = enableAdPreviewLibrary ? UnifiedPreviewCarousel : PreviewCarousel;\r\n const adPreviewConfig = getUnifiedAdPreviewConfig({ isMultimediaAd: true });\r\n\r\n const imagesForPreview = useMemo(() => {\r\n const imageListWithoutLogo = getImageListWithoutLogo(imageList);\r\n\r\n if (previewImageId) {\r\n const previewImages = findImageSetById(imageListWithoutLogo, previewImageId);\r\n\r\n if (previewImages) {\r\n return previewImages;\r\n }\r\n }\r\n\r\n if (imageListWithoutLogo.length > 0) {\r\n return _.first(imageListWithoutLogo);\r\n }\r\n\r\n return [];\r\n }, [imageList, previewImageId]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nSearchMMAAdPreview.propTypes = {\r\n data: PropTypes.shape({\r\n FinalUrls: PropTypes.string,\r\n MobileFinalUrls: PropTypes.string,\r\n BusinessName: PropTypes.string,\r\n Headlines: PropTypes.arrayOf(PropTypes.string),\r\n LongHeadlines: PropTypes.arrayOf(PropTypes.string),\r\n Descriptions: PropTypes.arrayOf(PropTypes.string),\r\n Images: PropTypes.shape({\r\n ImageList: PropTypes.arrayOf(PropTypes.shape({})),\r\n }),\r\n TrackingUrlTemplate: PropTypes.string,\r\n FinalUrlSuffix: PropTypes.string,\r\n UrlCustomParameters: PropTypes.string,\r\n FinalUrlForRecommendation: PropTypes.string,\r\n CallToAction: PropTypes.shape({\r\n cta: PropTypes.string,\r\n language: PropTypes.string,\r\n }),\r\n }).isRequired,\r\n onDataChange: PropTypes.func.isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({\r\n AdPreviewLibrarySearchMMA: PropTypes.bool,\r\n }),\r\n }).isRequired,\r\n genericImage: PropTypes.string.isRequired,\r\n previewTexts: PropTypes.shape({\r\n shortHeadline: PropTypes.string,\r\n longHeadline: PropTypes.string,\r\n description: PropTypes.string,\r\n businessName: PropTypes.string,\r\n displayUrl: PropTypes.string,\r\n url: PropTypes.string,\r\n callToAction: PropTypes.string,\r\n }).isRequired,\r\n previewImagesSharedState: PropTypes.shape({\r\n previewImageId: PropTypes.string,\r\n cropImageObj: PropTypes.shape({}),\r\n }).isRequired,\r\n setPreviewImagesSharedState: PropTypes.func.isRequired,\r\n};\r\n","import { identity, result } from 'underscore';\r\nimport { getBulkApiErrors } from '@bingads-webui-campaign/api-errors';\r\nimport { ResponsiveAd } from '@bingads-webui/campaign-odata-schemas';\r\nimport { MMAAssetConfigs } from '../config';\r\n\r\nconst getBulkUploadEntityType = entitySchema =>\r\n (entitySchema.properties['bulk-upload-type'] || {}).value ||\r\n entitySchema.name;\r\n\r\nconst getBulkUploadErrorType = entitySchema =>\r\n `${getBulkUploadEntityType(entitySchema)} Error`;\r\n\r\nconst bulkUpsertAdSettingsEntityErrorMap = {\r\n [getBulkUploadErrorType(ResponsiveAd)]: 'ResponsiveAd',\r\n};\r\n\r\nexport const mapBulkUpsertErrors = ({\r\n errors,\r\n bulkUpsertEntityErrorMap = bulkUpsertAdSettingsEntityErrorMap,\r\n errorProcessor = identity,\r\n scenario,\r\n i18n,\r\n activityLogger,\r\n}) =>\r\n getBulkApiErrors(errors, scenario, i18n, activityLogger).map((error) => {\r\n const errorType = error.type;\r\n const mappedErrorType = result(bulkUpsertEntityErrorMap, errorType, errorType);\r\n // eslint-disable-next-line no-param-reassign\r\n error.type = mappedErrorType;\r\n return errorProcessor(error);\r\n });\r\n\r\nexport const errorMapper = (error, i18n) => {\r\n if ((error && error.message && error.message.indexOf(' ({\r\n textAssetRecommendationsContent: {\r\n '& .collapsible-content': {\r\n '& .suggested-item-add': {\r\n '& .ms-Button-label': {\r\n height: '30px',\r\n lineHeight: '30px',\r\n },\r\n },\r\n },\r\n },\r\n textAssetRecommendationsPanel: {\r\n '& .ms-Panel-content': {\r\n paddingTop: '20px',\r\n '& .selectable-suggested-item-toggle': {\r\n height: 'auto',\r\n padding: '6px 0',\r\n '& .ms-Button-label': {\r\n lineHeight: '120%',\r\n },\r\n },\r\n },\r\n },\r\n});\r\n","import { chain, contains, filter, isEmpty, isFunction, map, negate, noop, property, size, values } from 'underscore';\r\nimport React, { useCallback, useState, useMemo, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { DefaultButton, PrimaryButton, Panel, PanelType, Stack } from '@fluentui/react';\r\nimport { FluentProvider, makeStyles, webLightTheme } from '@fluentui/react-components';\r\nimport { SuggestedItemsMultiSelect } from '@bingads-webui-campaign-react/pill-item-components';\r\nimport { CopilotTab, CopilotTabItem } from '@bingads-webui/inline-copilot-ui';\r\nimport { HelpButton } from '@bingads-webui-react/help-popup';\r\n\r\nconst useInlineCopilotUIStyles = makeStyles({\r\n header: {\r\n display: 'flex',\r\n fontSize: '20px',\r\n fontWeight: '600',\r\n lineHeight: '27px',\r\n justifyContent: 'flex-start',\r\n paddingLeft: '24px',\r\n paddingRight: '24px',\r\n width: '100%',\r\n\r\n '& button': {\r\n marginLeft: '8px',\r\n },\r\n },\r\n theme: {\r\n marginTop: '10px',\r\n marginBottom: '16px',\r\n },\r\n summary: {\r\n marginLeft: '16px',\r\n },\r\n});\r\n\r\nconst deriveSuggestedItems = (recommendations, fieldValues) => () =>\r\n chain(recommendations)\r\n .map(({ name, assets }) => ({\r\n assets: map(assets, asset => ({\r\n key: asset,\r\n itemText: asset,\r\n theme: name,\r\n })),\r\n }))\r\n .pluck('assets')\r\n .flatten()\r\n .filter(({ itemText }) => !contains(fieldValues, itemText))\r\n .value();\r\n\r\nexport const TextAssetRecommendationsWithThemesPanel = ({\r\n i18n,\r\n onSave,\r\n onCancel,\r\n collection,\r\n availableRecommendations,\r\n maxCollectionSize,\r\n title,\r\n topicKey,\r\n topicAriaLabel,\r\n disabledSuggestionTooltip,\r\n reportDisplayedRecommendations,\r\n DKIThemeName,\r\n}) => {\r\n const [activeTheme, setActiveTheme] = useState(i18n.getString(_TL_('All')));\r\n\r\n const fieldValues = useMemo(() => values(collection), [collection]);\r\n const [allSuggestedItems, setAllSuggestedItems] = useState(deriveSuggestedItems(availableRecommendations, fieldValues));\r\n const [suggestedItems, setSuggestedItems] = useState(allSuggestedItems);\r\n\r\n const selectedItemsCount = useMemo(() => size(allSuggestedItems.filter(property('isSelected'))), [allSuggestedItems]);\r\n const emptyFieldsCount = useMemo(() => maxCollectionSize - size(filter(fieldValues, negate(isEmpty))), [maxCollectionSize, fieldValues]);\r\n const remaningItemsCount = useMemo(() => emptyFieldsCount - selectedItemsCount, [emptyFieldsCount, selectedItemsCount]);\r\n\r\n const styles = useInlineCopilotUIStyles();\r\n\r\n useEffect(() => {\r\n if (!isEmpty(availableRecommendations) && isFunction(reportDisplayedRecommendations)) {\r\n // TODO: Logging\r\n // reportDisplayedRecommendations(availableRecommendations);\r\n }\r\n }, [availableRecommendations, reportDisplayedRecommendations]);\r\n\r\n const onSwitchTheme = useCallback((theme) => {\r\n setActiveTheme(theme);\r\n if (theme === i18n.getString(_TL_('All'))) {\r\n setSuggestedItems(allSuggestedItems);\r\n } else {\r\n setSuggestedItems(filter(allSuggestedItems, item => item.theme === theme));\r\n }\r\n }, [allSuggestedItems, i18n]);\r\n\r\n const onSuggestedItemToggle = useCallback((itemIndex, itemText) => {\r\n setSuggestedItems(suggestedItems.map(item => ({\r\n ...item,\r\n isSelected: item.itemText === itemText ? !item.isSelected : item.isSelected,\r\n })));\r\n setAllSuggestedItems(allSuggestedItems.map(item => ({\r\n ...item,\r\n isSelected: item.itemText === itemText ? !item.isSelected : item.isSelected,\r\n })));\r\n }, [allSuggestedItems, suggestedItems]);\r\n\r\n const onSaveClick = useCallback(() => {\r\n onSave(allSuggestedItems.filter(property('isSelected')).map(item => item.itemText));\r\n }, [allSuggestedItems, onSave]);\r\n\r\n const onCancelClick = useCallback(() => {\r\n onCancel();\r\n }, [onCancel]);\r\n\r\n const onRenderHeader = useCallback(() => (\r\n
    \r\n {title}\r\n { HelpButton && }\r\n
    \r\n ), [styles.header, title, topicAriaLabel, topicKey]);\r\n\r\n const onRenderFooterContent = useCallback(() => (\r\n \r\n \r\n 0)}>\r\n {i18n.getString(_TL_('Add'))}\r\n \r\n \r\n \r\n \r\n {i18n.getString(_TL_('Cancel'))}\r\n \r\n \r\n \r\n \r\n {i18n.getString(_TL_('{{count}} selected'), { count: selectedItemsCount })}\r\n \r\n \r\n \r\n ), [onSaveClick, selectedItemsCount, i18n, onCancelClick, styles.summary]);\r\n\r\n return (\r\n \r\n \r\n
    \r\n onSwitchTheme(key)}\r\n >\r\n \r\n {i18n.getString(_TL_('All'))}\r\n \r\n {map(availableRecommendations, ({ name }) => (\r\n \r\n {name === DKIThemeName ? i18n.getString(DKIThemeName) : name}\r\n \r\n ))}\r\n \r\n
    \r\n 0)}\r\n disabledSuggestionTooltip={disabledSuggestionTooltip}\r\n />\r\n
    \r\n \r\n );\r\n};\r\n\r\nTextAssetRecommendationsWithThemesPanel.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n onSave: PropTypes.func.isRequired,\r\n onCancel: PropTypes.func.isRequired,\r\n collection: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.shape({}))).isRequired,\r\n availableRecommendations: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n maxCollectionSize: PropTypes.number.isRequired,\r\n title: PropTypes.string.isRequired,\r\n topicKey: PropTypes.string.isRequired,\r\n topicAriaLabel: PropTypes.string.isRequired,\r\n disabledSuggestionTooltip: PropTypes.string.isRequired,\r\n reportDisplayedRecommendations: PropTypes.func,\r\n DKIThemeName: PropTypes.string,\r\n};\r\n\r\nTextAssetRecommendationsWithThemesPanel.defaultProps = {\r\n reportDisplayedRecommendations: undefined,\r\n DKIThemeName: '',\r\n};\r\n","import { chain, findKey, isEmpty, isFunction, result, size } from 'underscore';\r\nimport React, { useCallback, useState, useEffect, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Separator } from '@fluentui/react';\r\nimport { SuggestionSectionCollapse } from '@bingads-webui-campaign-react/pill-item-components';\r\nimport RecommendationsSectionIcon from './media/recommendations-section.svg';\r\nimport { useCircularBufferView } from './use-circular-buffer-view';\r\nimport { TextAssetRecommendationsWithThemesPanel } from './text-asset-recommendations-panel';\r\n\r\nexport const MAX_INLINE_RECOMMENDATIONS_PER_PAGE = 5;\r\nexport const MAX_DKI_INLINE_RECOMMENDATIONS_PER_PAGE = 1;\r\n\r\nconst keyIsEmpty = ([text]) => isEmpty(text);\r\n\r\nexport const InlineRecommendations = ({\r\n i18n, collection, maxCollectionSize, availableRecommendations, singleAssetValidationPropsField,\r\n inlineRecommendationsHelpTopicKey, inlineRecommendationsHelpTopicAriaLabel, inlineRecommendationsTitle,\r\n inlineRecommendationsDisabledItemTooltip, applyRecommendation, applyRecommendations,\r\n reportDisplayedRecommendations, enableDKI, DKIThemeName,\r\n}) => {\r\n const flattenedAvailableRecommendations = useMemo(() => chain(availableRecommendations)\r\n .map(theme => result(theme, 'assets'))\r\n .flatten()\r\n .compact()\r\n .uniq() // dedup\r\n .value(), [availableRecommendations]);\r\n\r\n const flattenedAllAvailableRecommendations = useMemo(() => {\r\n if (enableDKI) {\r\n const flattenedAvailableDKIRecommendations = chain(availableRecommendations.filter(theme => theme.name === DKIThemeName))\r\n .map(theme => result(theme, 'assets'))\r\n .flatten()\r\n .compact()\r\n .uniq() // dedup\r\n .value();\r\n\r\n const flattenedAvailableNoDKIRecommendations = chain(availableRecommendations.filter(theme => theme.name !== DKIThemeName))\r\n .map(theme => result(theme, 'assets'))\r\n .flatten()\r\n .compact()\r\n .uniq() // dedup\r\n .value();\r\n return [...flattenedAvailableDKIRecommendations.slice(0, MAX_DKI_INLINE_RECOMMENDATIONS_PER_PAGE), ...flattenedAvailableNoDKIRecommendations];\r\n }\r\n return flattenedAvailableRecommendations;\r\n }, [DKIThemeName, availableRecommendations, enableDKI, flattenedAvailableRecommendations]);\r\n\r\n const [availableInlineRecommendations, canMoveNext, moveNext] = useCircularBufferView(flattenedAllAvailableRecommendations, MAX_INLINE_RECOMMENDATIONS_PER_PAGE);\r\n\r\n useEffect(() => {\r\n if (!isEmpty(availableInlineRecommendations) && isFunction(reportDisplayedRecommendations)) {\r\n reportDisplayedRecommendations(availableInlineRecommendations);\r\n }\r\n }, [availableInlineRecommendations, reportDisplayedRecommendations]);\r\n\r\n let firstAvailableKey = findKey(collection, keyIsEmpty);\r\n if (!firstAvailableKey && size(collection) < maxCollectionSize) {\r\n firstAvailableKey = `${singleAssetValidationPropsField}${size(collection)}`;\r\n }\r\n\r\n const [prevAvailbleKeyWasDefined, setPrevAvailbleKeyWasDefined] = useState(!!firstAvailableKey);\r\n const [shouldForceCloseCollapse, setShouldForceCloseCollapse] = useState(!firstAvailableKey);\r\n useEffect(() => {\r\n const firstAvailableKeyIsDefined = !!firstAvailableKey;\r\n if (prevAvailbleKeyWasDefined !== firstAvailableKeyIsDefined) {\r\n if (!shouldForceCloseCollapse && (prevAvailbleKeyWasDefined && !firstAvailableKeyIsDefined)) {\r\n setShouldForceCloseCollapse(true);\r\n } else if (shouldForceCloseCollapse && (!prevAvailbleKeyWasDefined && firstAvailableKeyIsDefined)) {\r\n setShouldForceCloseCollapse(false);\r\n }\r\n setPrevAvailbleKeyWasDefined(firstAvailableKeyIsDefined);\r\n }\r\n }, [firstAvailableKey, prevAvailbleKeyWasDefined, shouldForceCloseCollapse]);\r\n\r\n const onAddSuggestedItem = useCallback(\r\n (itemIndex, itemText) => firstAvailableKey && applyRecommendation(firstAvailableKey, itemText),\r\n [firstAvailableKey, applyRecommendation]\r\n );\r\n\r\n const onAddAllSuggestedItems = useCallback(\r\n () => applyRecommendations(availableInlineRecommendations),\r\n [availableInlineRecommendations, applyRecommendations]\r\n );\r\n\r\n const [isSuggestionsPanelOpen, setIsSuggestionsPanelOpen] = useState(false);\r\n const onMoreSuggestionsButtonClick = useCallback(() => {\r\n setIsSuggestionsPanelOpen(true);\r\n reportDisplayedRecommendations(flattenedAvailableRecommendations);\r\n }, [flattenedAvailableRecommendations, reportDisplayedRecommendations]);\r\n\r\n const onCancelAddingMultipleRecommendations = useCallback(\r\n () => setIsSuggestionsPanelOpen(false),\r\n []\r\n );\r\n\r\n const onAddMultipleRecommendations = useCallback(\r\n (recommendations) => {\r\n applyRecommendations(recommendations);\r\n setIsSuggestionsPanelOpen(false);\r\n },\r\n [applyRecommendations]\r\n );\r\n\r\n if (!isEmpty(availableInlineRecommendations)) {\r\n return (\r\n <>\r\n \r\n ({ itemText, key: itemText }))}\r\n onAddSuggestedItem={onAddSuggestedItem}\r\n onAddAllSuggestedItems={onAddAllSuggestedItems}\r\n suggestedSectionTitle={i18n.getString(inlineRecommendationsTitle)}\r\n showSuggestionsSectionShimmer={false}\r\n showMoreSuggestionsInlineButton={canMoveNext}\r\n onMoreSuggestionsInlineButtonClick={moveNext}\r\n showAddAllSuggestionsButton={!!firstAvailableKey}\r\n addAllSuggestionsButtonText={i18n.getString(_TL_('Add all'))}\r\n showMoreSuggestionsButton={canMoveNext}\r\n moreSuggestionsButtonText={i18n.getString(_TL_('View more'))}\r\n disableAllSuggestions={!firstAvailableKey}\r\n disabledSuggestionTooltip={i18n.getString(inlineRecommendationsDisabledItemTooltip)}\r\n useStyleFluent2\r\n onMoreSuggestionsButtonClick={onMoreSuggestionsButtonClick}\r\n forceClose={shouldForceCloseCollapse}\r\n />\r\n {isSuggestionsPanelOpen &&\r\n \r\n }\r\n \r\n );\r\n }\r\n\r\n return null;\r\n};\r\n\r\nInlineRecommendations.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n collection: PropTypes.objectOf(PropTypes.string).isRequired,\r\n maxCollectionSize: PropTypes.number.isRequired,\r\n availableRecommendations: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n singleAssetValidationPropsField: PropTypes.string.isRequired,\r\n inlineRecommendationsHelpTopicKey: PropTypes.string.isRequired,\r\n inlineRecommendationsHelpTopicAriaLabel: PropTypes.string.isRequired,\r\n inlineRecommendationsTitle: PropTypes.string.isRequired,\r\n inlineRecommendationsDisabledItemTooltip: PropTypes.string.isRequired,\r\n applyRecommendation: PropTypes.func.isRequired,\r\n applyRecommendations: PropTypes.func.isRequired,\r\n reportDisplayedRecommendations: PropTypes.func,\r\n enableDKI: PropTypes.bool,\r\n DKIThemeName: PropTypes.string,\r\n};\r\n\r\nInlineRecommendations.defaultProps = {\r\n reportDisplayedRecommendations: undefined,\r\n enableDKI: false,\r\n DKIThemeName: '',\r\n};\r\n","import { useCallback, useEffect, useState } from 'react';\r\n\r\nexport const useCircularBufferView = (collection, pageSize) => {\r\n const [page, setPage] = useState([]);\r\n const [currentIndex, setCurrentIndex] = useState(0);\r\n\r\n useEffect(() => {\r\n if (collection.length === 0) {\r\n setPage([]);\r\n return;\r\n }\r\n\r\n const newPage = [];\r\n let index = currentIndex % collection.length;\r\n let count = 0;\r\n while (count < pageSize && count < collection.length) {\r\n newPage.push(collection[index]);\r\n index = (index + 1) % collection.length;\r\n count += 1;\r\n }\r\n setPage(newPage);\r\n }, [collection, currentIndex, pageSize]);\r\n\r\n const canMoveNext = collection.length > pageSize;\r\n\r\n const moveNext = useCallback(() => {\r\n setCurrentIndex((currentIndex + pageSize) % collection.length);\r\n }, [currentIndex, collection.length, pageSize]);\r\n\r\n return [page, canMoveNext, moveNext];\r\n};\r\n","import _ from 'underscore';\r\n\r\nexport const maxHeadlineCount = 15;\r\nexport const maxDescriptionCount = 4;\r\nexport const DKIThemeDefaultName = 'Asset_Theme_For_DKI';\r\n\r\nconst rsaCollectionConfig = {\r\n headlines: {\r\n singleAssetValidationPropsField: 'Headline',\r\n validationPropsField: 'Headlines',\r\n minCollectionSize: 3,\r\n maxCollectionSize: maxHeadlineCount,\r\n inlineRecommendationsTitle: _TL_('Headlines from your website'),\r\n inlineRecommendationsHelpTopicKey: 'pop_BA_Recommendations_AI_ChatGPT_Headlines',\r\n inlineRecommendationsHelpTopicAriaLabel: _TL_('Click to learn more about headlines recommendations'),\r\n inlineRecommendationsDisabledItemTooltip: _TL_('You have entered the maximum number of descriptions. To add another description, remove an existing one.'),\r\n enableDKI: true,\r\n DKIThemeName: _TL_('Headline with dynamic keyword'),\r\n },\r\n descriptions: {\r\n singleAssetValidationPropsField: 'Description',\r\n validationPropsField: 'Descriptions',\r\n minCollectionSize: 2,\r\n maxCollectionSize: maxDescriptionCount,\r\n inlineRecommendationsTitle: _TL_('Descriptions from your website'),\r\n inlineRecommendationsHelpTopicKey: 'pop_BA_Recommendations_AI_ChatGPT_Descriptions',\r\n inlineRecommendationsHelpTopicAriaLabel: _TL_('Click to learn more about descriptions recommendations'),\r\n inlineRecommendationsDisabledItemTooltip: _TL_('You have entered the maximum number of descriptions. To add another description, remove an existing one.'),\r\n },\r\n};\r\n\r\nexport const getTextAssetCollectionConfig = (collectionName) => {\r\n const unlocalizedArgs = _.result(rsaCollectionConfig, collectionName, undefined);\r\n\r\n if (!unlocalizedArgs) {\r\n throw new Error(`Invalid text asset collection name: ${collectionName}`);\r\n }\r\n\r\n const localizedArgs = {\r\n ...unlocalizedArgs,\r\n };\r\n\r\n return localizedArgs;\r\n};\r\n\r\n","import _ from 'underscore';\r\n\r\nexport const getEmptyRecommendationsContext = finalUrl => ({\r\n finalUrl,\r\n themes: [],\r\n});\r\n\r\nexport class SuggestionsTracker {\r\n constructor() {\r\n this.trackingData = {};\r\n }\r\n\r\n add(finalUrl, suggestions, suggestionsReport) {\r\n this.trackingData = this.trackingData || {};\r\n this.trackingData.finalUrl = finalUrl;\r\n this.trackingData.allTextSuggestions = this.trackingData.allTextSuggestions || {\r\n themes: [],\r\n };\r\n\r\n if (suggestions) {\r\n this.trackingData.allTextSuggestions = {\r\n themes: _.uniq((this.trackingData.allTextSuggestions.themes).concat(suggestions.themes)),\r\n };\r\n }\r\n if (_.isArray(suggestionsReport.view)) {\r\n this.trackingData.view = _.uniq((this.trackingData.view || []).concat(suggestionsReport.view));\r\n }\r\n if (_.isArray(suggestionsReport.apply)) {\r\n this.trackingData.apply = _.uniq((this.trackingData.apply || []).concat(suggestionsReport.apply));\r\n }\r\n if (_.isArray(suggestionsReport.returned)) {\r\n this.trackingData.returned = _.uniq((this.trackingData.returned || []).concat(suggestionsReport.returned));\r\n }\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\nimport { CopilotSuggestionsTracker } from '@bingads-webui-campaign-react/copilot-common';\r\nimport { getDisplayName } from '@bingads-webui-react/hoc-utils';\r\nimport { SuggestionsTracker } from './util';\r\n\r\nexport const RecommendationContext = React.createContext([\r\n {},\r\n _.noop,\r\n _.noop,\r\n]);\r\n\r\nexport function RecommendationContextProvider(props) {\r\n const { children } = props;\r\n const [recommendationContext, setRecommendationContext] = useState({\r\n finalUrl: undefined,\r\n finalUrls: [],\r\n themes: [],\r\n tracking: new SuggestionsTracker(),\r\n copilotTracking: new CopilotSuggestionsTracker(),\r\n });\r\n const updateRecommendationContext = useCallback((delta) => {\r\n setRecommendationContext(currentContext => ({\r\n ...currentContext,\r\n ...delta,\r\n }));\r\n }, []);\r\n\r\n const reportRecommendations = useCallback((recommendationsReport) => {\r\n setRecommendationContext((currentContext) => {\r\n const {\r\n finalUrl,\r\n tracking,\r\n themes,\r\n } = currentContext;\r\n const recommendations = {\r\n themes,\r\n };\r\n tracking.add(finalUrl, recommendations, recommendationsReport);\r\n return currentContext;\r\n });\r\n }, []);\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\n\r\nRecommendationContextProvider.propTypes = {\r\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.arrayOf(PropTypes.node)]).isRequired,\r\n};\r\n\r\nexport const withRecommendationContext = (WrappedComponent) => {\r\n const HoC = props => (\r\n \r\n \r\n \r\n );\r\n HoC.displayName = `WithRecommendationContext(${getDisplayName(WrappedComponent)})`;\r\n\r\n hoistNonReactStatics(HoC, WrappedComponent);\r\n\r\n return HoC;\r\n};\r\n","import _ from 'underscore';\r\nimport { useEffect, useContext, useCallback, useMemo, useState } from 'react';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { AssetEventFeature, useLogRecommendationsApiError } from '@bingads-webui-campaign-react/copilot-common';\r\nimport { usePostAssetEvent, AssetChannel, AssetScenario } from '@bingads-webui-react/copilot-event-provider';\r\nimport { isCopilotRegionRestricted } from '@bingads-webui-react/copilot-utils';\r\nimport { RecommendationContext } from './recommendation-context';\r\nimport { getEmptyRecommendationsContext } from './util';\r\n\r\nexport function useCopilotRecommendations({\r\n campaignId,\r\n serverContext,\r\n editMode,\r\n entityId,\r\n instrumentation,\r\n activityLogger,\r\n}) {\r\n const activity = useContext(ActivityContext);\r\n\r\n const logRecommendationsAPIError = useLogRecommendationsApiError(activity || activityLogger);\r\n\r\n const logTrace = useMemo(() => {\r\n if (activity && activity.trace) {\r\n return activity.trace;\r\n }\r\n if (activityLogger && activityLogger.trace) {\r\n return activityLogger.trace;\r\n }\r\n if (instrumentation && instrumentation.AdsCopilot) {\r\n const scenario = instrumentation.AdsCopilot.create();\r\n return scenario.createActivity('AssetEvent').trace;\r\n }\r\n return null;\r\n }, [activity, activityLogger, instrumentation]);\r\n\r\n const [, setRecommendationContext] = useContext(RecommendationContext);\r\n\r\n const { Permissions, DynamicPermissions } = serverContext || { };\r\n const permissions = useMemo(() => ({ dynamic: { ...DynamicPermissions }, ...Permissions }), [DynamicPermissions, Permissions]);\r\n\r\n const [isRegionRestricted, setIsRegionRestricted] = useState(true);\r\n useEffect(() => {\r\n isCopilotRegionRestricted({\r\n feature: 'Recommendations',\r\n permissions,\r\n serverContext,\r\n }).then(setIsRegionRestricted);\r\n }, [permissions, serverContext]);\r\n\r\n const postAssetEventLog = usePostAssetEvent({\r\n shouldLog: _.isFunction(logTrace) && !isRegionRestricted,\r\n serverContext,\r\n channel: AssetChannel.WEB_UI,\r\n feature: AssetEventFeature.RSA,\r\n scenario: editMode ? AssetScenario.EDIT_WORK_FLOW : AssetScenario.CREATE_WORK_FLOW,\r\n campaignId,\r\n assetGroupId: editMode ? entityId : undefined,\r\n logTrace,\r\n });\r\n\r\n useEffect(() => {\r\n // create the postAssetEventLog function and save it in the context\r\n setRecommendationContext({ postAssetEventLog });\r\n }, [postAssetEventLog, setRecommendationContext]);\r\n\r\n const resetRecommendations = useCallback((newFinalUrl) => {\r\n setRecommendationContext(getEmptyRecommendationsContext(newFinalUrl));\r\n }, [setRecommendationContext]);\r\n\r\n return {\r\n logRecommendationsAPIError,\r\n resetRecommendations,\r\n };\r\n}\r\n","import React, { useCallback, useMemo, useContext, useEffect, useState } from 'react';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport { ThemeProvider } from 'react-jss';\r\nimport { AssetEventRecordType, AssetType, POST_ASSET_EVENT_NAME } from '@bingads-webui-campaign-react/copilot-common';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { ComponentSettings, ThemeFluent } from '@bingads-webui-theme-2018/theme-fluent';\r\nimport { cloneDeep } from '@bingads-webui-universal/primitive-utilities';\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\nimport { PermissionsContext } from '@bingads-webui-react/hoc-with-permissions';\r\n\r\nimport { getTextAssetRecommendationsStyles } from './style';\r\nimport { InlineRecommendations } from './inline-recommendation';\r\nimport { maxHeadlineCount, maxDescriptionCount, DKIThemeDefaultName } from './config/text-asset-collection-config';\r\nimport { RecommendationContext } from './recommendation-context';\r\n\r\nconst recommendationFieldMap = {\r\n Headlines: 'headlines',\r\n Descriptions: 'descriptions',\r\n};\r\nconst assetCountMap = {\r\n Headlines: maxHeadlineCount,\r\n Descriptions: maxDescriptionCount,\r\n};\r\n\r\nexport const TextAssetCollectionWithRecommendations = React.memo((props) => {\r\n const {\r\n validationPropsField,\r\n maxCollectionSize,\r\n inlineRecommendationsTitle,\r\n inlineRecommendationsHelpTopicKey,\r\n inlineRecommendationsHelpTopicAriaLabel,\r\n inlineRecommendationsDisabledItemTooltip,\r\n singleAssetValidationPropsField,\r\n i18n,\r\n withInlineRecommendations,\r\n data,\r\n onChange,\r\n updateSuggestionMeasurement,\r\n setApplyTextAssetCallback,\r\n enableDKI,\r\n DKIThemeName,\r\n } = props;\r\n\r\n const permissions = useContext(PermissionsContext);\r\n const classes = useDefaultStyles(getTextAssetRecommendationsStyles);\r\n const currentCollection = _.result(data, validationPropsField, []); // Currently filled headlines\r\n const currentCollectionAsset = _.pluck(currentCollection, 'Asset').filter(item => (item !== undefined && !_.isNull(item)));\r\n const currentCollectionAssetText = _.pluck(currentCollectionAsset, 'Text');\r\n const [viewedCopilotSuggestions, setViewedCopilotSuggestions] = useState();\r\n\r\n const collection = {};\r\n currentCollectionAssetText.forEach((item, index) => { collection[`Headline${index}`] = item; });\r\n\r\n const [recommendationContext, , reportRecommendations] = useContext(RecommendationContext);\r\n const { postAssetEventLog = _.noop, copilotTracking } = recommendationContext;\r\n\r\n const logCopilotSuggestions = useCallback((suggestionIds) => {\r\n if (copilotTracking) {\r\n const suggestionsToLog = copilotTracking.getUntrackedViewedSuggestionIds(suggestionIds);\r\n if (suggestionsToLog.length > 0) {\r\n postAssetEventLog({\r\n EventName: POST_ASSET_EVENT_NAME,\r\n EventValue: {\r\n AssetType: _.map(suggestionsToLog, () => AssetType.TEXT),\r\n SuggestionIds: suggestionsToLog,\r\n RecordType: AssetEventRecordType.VIEWED,\r\n },\r\n });\r\n copilotTracking.trackViewedSuggestionIds(suggestionsToLog);\r\n }\r\n }\r\n }, [copilotTracking, postAssetEventLog]);\r\n\r\n const recommendationsField = recommendationFieldMap[validationPropsField];\r\n const collectionRecommendations = useMemo(() => {\r\n const { themes } = recommendationContext;\r\n return _.map(themes, theme => ({\r\n name: theme.name,\r\n assets: _.result(theme, recommendationsField),\r\n }));\r\n }, [recommendationContext, recommendationsField]);\r\n\r\n const availableRecommendations = useMemo(\r\n () => {\r\n let availableCollectionRecommendations = collectionRecommendations.filter(theme => theme.name !== DKIThemeDefaultName);\r\n if (permissions && permissions.dynamic && permissions.dynamic.CopilotDKIRecommendation && enableDKI) {\r\n const DKItheme = collectionRecommendations.filter(theme => theme.name === DKIThemeDefaultName);\r\n availableCollectionRecommendations = [...DKItheme, ...availableCollectionRecommendations];\r\n }\r\n return _.chain(availableCollectionRecommendations)\r\n .map(theme => ({\r\n name: theme.name === DKIThemeDefaultName ? DKIThemeName : theme.name,\r\n assets: _.chain(theme.assets)\r\n .map(_.property('Text'))\r\n .filter(recommendation => !_.contains(currentCollectionAssetText, recommendation))\r\n .value(),\r\n }))\r\n .filter(theme => !_.isEmpty(theme.assets))\r\n .value();\r\n },\r\n [DKIThemeName, collectionRecommendations, currentCollectionAssetText, enableDKI, permissions]\r\n );\r\n\r\n const flattenedCollectionRecommendations = useMemo(() => _.chain(collectionRecommendations)\r\n .map(theme => _.result(theme, 'assets'))\r\n .flatten()\r\n .compact()\r\n .value(), [collectionRecommendations]);\r\n\r\n const recommendationsMap = useMemo(\r\n () => _.chain(flattenedCollectionRecommendations)\r\n .map(recommendation => [\r\n recommendation.Text,\r\n {\r\n ...recommendation,\r\n SuggestionId: recommendation.RecommendationId,\r\n },\r\n ])\r\n .object()\r\n .value(),\r\n [flattenedCollectionRecommendations]\r\n );\r\n\r\n const getSuggestionIds = useCallback((recommendations) => {\r\n const displayedRecommendations = _.chain(recommendations)\r\n .map(recommendation => recommendationsMap[recommendation])\r\n .compact()\r\n .value();\r\n if (!_.isEmpty(displayedRecommendations)) {\r\n return _.pluck(displayedRecommendations, 'SuggestionId');\r\n }\r\n return [];\r\n }, [recommendationsMap]);\r\n\r\n const reportDisplayedRecommendations = useCallback((recommendations) => {\r\n const displayedRecommendationsIds = getSuggestionIds(recommendations);\r\n reportRecommendations({\r\n view: displayedRecommendationsIds,\r\n });\r\n logCopilotSuggestions(displayedRecommendationsIds);\r\n }, [getSuggestionIds, logCopilotSuggestions, reportRecommendations]);\r\n\r\n const addAssetSuggestion = useCallback((assets, text) => {\r\n const applySuggestionIds = getSuggestionIds([text]);\r\n if (_.isEmpty(assets)) {\r\n onChange([{\r\n Asset: {\r\n '@odata.type': '#Model.TextAsset',\r\n AssetType: 'Text',\r\n Name: null,\r\n Text: text,\r\n },\r\n PinnedField: 'None',\r\n }], validationPropsField);\r\n return;\r\n }\r\n const index = _.findIndex(_.range(assets.length), i =>\r\n _.isEmpty(assets[i].Asset.Text));\r\n\r\n // add suggestion to empty field first; if no empty field, try to add a new field\r\n if (index !== -1) {\r\n const newAssets = [...assets];\r\n newAssets[index].Asset.Text = text;\r\n onChange(newAssets, validationPropsField);\r\n } else if (assets.length < assetCountMap[validationPropsField]) {\r\n const newAssets = [\r\n ...assets,\r\n {\r\n Asset: {\r\n '@odata.type': '#Model.TextAsset',\r\n AssetType: 'Text',\r\n Name: null,\r\n Text: text,\r\n },\r\n PinnedField: 'None',\r\n },\r\n ];\r\n onChange(newAssets, validationPropsField);\r\n }\r\n updateSuggestionMeasurement({ applySuggestionIds }); // todo: get real id\r\n }, [validationPropsField, getSuggestionIds, onChange, updateSuggestionMeasurement]);\r\n\r\n const applyRecommendation = useCallback((key, text) => {\r\n const collectionData = cloneDeep(currentCollection);\r\n addAssetSuggestion(collectionData, text);\r\n }, [addAssetSuggestion, currentCollection]);\r\n\r\n const isAbleToAddSuggestion = useCallback(() => {\r\n if (_.isEmpty(currentCollection)) return true;\r\n // has at least one empty field\r\n return _.some(currentCollection, asset => _.isEmpty(asset.Asset.Text)) ||\r\n // not reach the asset count limit\r\n currentCollection.length < assetCountMap[validationPropsField];\r\n }, [validationPropsField, currentCollection]);\r\n\r\n useEffect(() => {\r\n if (viewedCopilotSuggestions && recommendationContext) {\r\n reportDisplayedRecommendations(viewedCopilotSuggestions);\r\n }\r\n }, [recommendationContext, reportDisplayedRecommendations, viewedCopilotSuggestions]);\r\n\r\n useEffect(() => {\r\n setClarityTag({ RSANewCopilotUI: 'true' });\r\n }, []);\r\n\r\n const addAllAssetSuggestion = useCallback((assets, texts) => {\r\n let newAssets = [...assets];\r\n const applySuggestionIds = getSuggestionIds(texts);\r\n\r\n // Track which auto-filled suggestions have been viewed\r\n const newViewedCopilotSuggestions = [];\r\n _.each(texts, (text) => {\r\n if (!isAbleToAddSuggestion()) { return; }\r\n // dedup\r\n if (_.some(newAssets, asset => _.result(asset, ['Asset', 'Text']) === text)) { return; }\r\n if (_.isEmpty(newAssets)) {\r\n newAssets = [{\r\n Asset: {\r\n '@odata.type': '#Model.TextAsset',\r\n AssetType: 'Text',\r\n Name: null,\r\n Text: text,\r\n },\r\n PinnedField: 'None',\r\n }];\r\n return;\r\n }\r\n const index = _.findIndex(_.range(newAssets.length), i =>\r\n _.isEmpty(newAssets[i].Asset.Text));\r\n\r\n // add suggestion to empty field first; if no empty field, try to add a new field\r\n if (index !== -1) {\r\n newAssets[index].Asset.Text = text;\r\n newViewedCopilotSuggestions.push(text);\r\n } else if (newAssets.length < assetCountMap[validationPropsField]) {\r\n newAssets = [\r\n ...newAssets,\r\n {\r\n Asset: {\r\n '@odata.type': '#Model.TextAsset',\r\n AssetType: 'Text',\r\n Name: null,\r\n Text: text,\r\n },\r\n PinnedField: 'None',\r\n },\r\n ];\r\n newViewedCopilotSuggestions.push(text);\r\n }\r\n });\r\n onChange(newAssets, validationPropsField);\r\n updateSuggestionMeasurement({ applySuggestionIds });\r\n setViewedCopilotSuggestions(newViewedCopilotSuggestions);\r\n }, [getSuggestionIds, onChange, validationPropsField, updateSuggestionMeasurement, isAbleToAddSuggestion]);\r\n\r\n const applyRecommendations = useCallback((recommendations) => {\r\n const collectionData = cloneDeep(currentCollection);\r\n addAllAssetSuggestion(collectionData, recommendations);\r\n }, [addAllAssetSuggestion, currentCollection]);\r\n\r\n useEffect(() => {\r\n if (_.isFunction(setApplyTextAssetCallback)) {\r\n setApplyTextAssetCallback(() => (recommendations) => {\r\n applyRecommendations(recommendations);\r\n });\r\n }\r\n }, [setApplyTextAssetCallback, applyRecommendations]);\r\n\r\n return (\r\n \r\n
    \r\n {withInlineRecommendations &&\r\n \r\n }\r\n
    \r\n
    \r\n );\r\n});\r\n\r\nTextAssetCollectionWithRecommendations.propTypes = {\r\n validationPropsField: PropTypes.string.isRequired,\r\n data: PropTypes.shape({}).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n singleAssetValidationPropsField: PropTypes.string.isRequired,\r\n maxCollectionSize: PropTypes.number.isRequired,\r\n inlineRecommendationsTitle: PropTypes.string.isRequired,\r\n inlineRecommendationsHelpTopicKey: PropTypes.string.isRequired,\r\n inlineRecommendationsHelpTopicAriaLabel: PropTypes.string.isRequired,\r\n inlineRecommendationsDisabledItemTooltip: PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.element,\r\n PropTypes.arrayOf(PropTypes.element),\r\n ]).isRequired,\r\n withInlineRecommendations: PropTypes.bool,\r\n onChange: PropTypes.func.isRequired,\r\n updateSuggestionMeasurement: PropTypes.func.isRequired,\r\n setApplyTextAssetCallback: PropTypes.func,\r\n enableDKI: PropTypes.bool,\r\n DKIThemeName: PropTypes.string,\r\n};\r\n\r\nTextAssetCollectionWithRecommendations.defaultProps = {\r\n withInlineRecommendations: false,\r\n setApplyTextAssetCallback: _.noop,\r\n enableDKI: false,\r\n DKIThemeName: '',\r\n};\r\n","import React, { useContext, useMemo } from 'react';\r\nimport { noop } from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { TextAssetCollectionWithRecommendations } from './text-asset-collection-with-recommendations';\r\nimport { getTextAssetCollectionConfig } from './config/text-asset-collection-config';\r\n\r\nexport const HeadlineAssetCollection = React.memo((props) => {\r\n const {\r\n data,\r\n onChange,\r\n updateSuggestionMeasurement,\r\n setApplyHeadlinesCallback,\r\n } = props;\r\n const i18n = useContext(I18nContext);\r\n const headlineConfig = useMemo(() => getTextAssetCollectionConfig('headlines'), []);\r\n\r\n return (\r\n
    \r\n \r\n
    );\r\n});\r\n\r\nHeadlineAssetCollection.propTypes = {\r\n data: PropTypes.shape({}).isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n updateSuggestionMeasurement: PropTypes.func.isRequired,\r\n setApplyHeadlinesCallback: PropTypes.func,\r\n};\r\n\r\nHeadlineAssetCollection.defaultProps = {\r\n setApplyHeadlinesCallback: noop,\r\n};\r\n\r\n","import React, { useContext, useMemo } from 'react';\r\nimport { noop } from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { TextAssetCollectionWithRecommendations } from './text-asset-collection-with-recommendations';\r\nimport { getTextAssetCollectionConfig } from './config/text-asset-collection-config';\r\n\r\nexport const DescriptionAssetCollection = React.memo((props) => {\r\n const {\r\n data,\r\n onChange,\r\n updateSuggestionMeasurement,\r\n setApplyDescriptionsCallback,\r\n } = props;\r\n const i18n = useContext(I18nContext);\r\n const headlineConfig = useMemo(() => getTextAssetCollectionConfig('descriptions'), []);\r\n\r\n return (\r\n
    \r\n \r\n
    );\r\n});\r\n\r\nDescriptionAssetCollection.propTypes = {\r\n data: PropTypes.shape({}).isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n updateSuggestionMeasurement: PropTypes.func.isRequired,\r\n setApplyDescriptionsCallback: PropTypes.func,\r\n};\r\n\r\nDescriptionAssetCollection.defaultProps = {\r\n setApplyDescriptionsCallback: noop,\r\n};\r\n\r\n","import _ from 'underscore';\r\n\r\n\r\nfunction getCollectionAsset(data, validationPropsField) {\r\n const currentCollection = _.result(data, validationPropsField, []); // Currently filled headlines\r\n const currentCollectionAsset = _.pluck(currentCollection, 'Asset').filter(item => (item !== undefined && !_.isNull(item)));\r\n const currentCollectionAssetText = _.pluck(currentCollectionAsset, 'Text');\r\n return currentCollectionAssetText;\r\n}\r\n\r\nfunction getAvailableRecommendations(collectionRecommendations, currentCollectionAssetText) {\r\n return _.filter(collectionRecommendations, recommendation => recommendation && recommendation.Text && !_.contains(currentCollectionAssetText, recommendation.Text));\r\n}\r\n// TODO: will remodify when the data layer is ready\r\nexport function formatToLLMSuggestion(recommendationContext, data) {\r\n if (!recommendationContext.themes) return {};\r\n\r\n const llmSuggestions = {\r\n Perspectives: [], SuggestionLanguage: '', Suggestions: [], SummaryReason: 'summarized_reason',\r\n };\r\n const currentCollectionHeadlines = getCollectionAsset(data, 'Headlines');\r\n const currentCollectionDescriptions = getCollectionAsset(data, 'Descriptions');\r\n\r\n _.each(recommendationContext.themes, (theme) => {\r\n let { headlines, descriptions } = theme;\r\n const { name: Perspective } = theme;\r\n headlines = getAvailableRecommendations(headlines, currentCollectionHeadlines);\r\n descriptions = getAvailableRecommendations(descriptions, currentCollectionDescriptions);\r\n const headlineSuggestions = _.map(headlines, (headline) => {\r\n const { Text, SuggestionId } = headline;\r\n return {\r\n Asset: Text,\r\n AssetType: 'Headline',\r\n Perspective,\r\n Reason: '',\r\n SrcId: '',\r\n SuggestionId,\r\n };\r\n });\r\n const descriptionSuggestions = _.map(descriptions, (description) => {\r\n const { Text, SuggestionId } = description;\r\n return {\r\n Asset: Text,\r\n AssetType: 'Description',\r\n Perspective,\r\n Reason: '',\r\n SrcId: '',\r\n SuggestionId,\r\n };\r\n });\r\n llmSuggestions.Perspectives.push({ Perspective, PitchingPoint: '' });\r\n llmSuggestions.Suggestions.push(...headlineSuggestions, ...descriptionSuggestions);\r\n });\r\n return llmSuggestions;\r\n}\r\n","import _ from 'underscore';\r\n\r\nconst Order = {\r\n 'AddMoreHeadlines-not-met': 1,\r\n 'AddMoreDescriptions-not-met': 2,\r\n 'AddMoreHeadlines-half-met': 3,\r\n 'AddMoreDescriptions-half-met': 4,\r\n 'LongerHeadlines-not-met': 5,\r\n 'LongerDescriptions-not-met': 6,\r\n 'DistinctHeadlines-not-met': 7,\r\n 'DistinctDescriptions-not-met': 8,\r\n 'UnpinHeadlinePositions-not-met': 9,\r\n 'UnpinDescriptionPositions-not-met': 10,\r\n 'LongerHeadlines-half-met': 11,\r\n 'LongerDescriptions-half-met': 12,\r\n 'DistinctHeadlines-half-met': 13,\r\n 'DistinctDescriptions-half-met': 14,\r\n 'UnpinHeadlinePositions-half-met': 15,\r\n 'UnpinDescriptionPositions-half-met': 16,\r\n 'MoreCombinations-not-met': 17,\r\n 'MoreCombinations-half-met': 18,\r\n 'AddMoreHeadlines-met': 19,\r\n 'AddMoreDescriptions-met': 20,\r\n 'LongerHeadlines-met': 21,\r\n 'LongerDescriptions-met': 22,\r\n 'DistinctHeadlines-met': 23,\r\n 'DistinctDescriptions-met': 24,\r\n 'UnpinHeadlinePositions-met': 25,\r\n 'UnpinDescriptionPositions-met': 26,\r\n 'MoreCombinations-met': 27,\r\n};\r\n\r\nconst SuggestionState = {\r\n Met: 'met',\r\n HalfMet: 'half-met',\r\n NotMet: 'not-met',\r\n};\r\n\r\nconst StrengthScore = {\r\n Poor: 25,\r\n Average: 50,\r\n Good: 75,\r\n Excellent: 100,\r\n};\r\n\r\nexport const maxHeadlineCount = 15;\r\n\r\nexport const maxDescriptionCount = 4;\r\n\r\nexport const ViewSuggestionType = {\r\n None: 'none',\r\n Headline: 'headline',\r\n Description: 'description',\r\n};\r\n\r\nexport function getStrengthScore(strength) {\r\n return StrengthScore[strength] || 0;\r\n}\r\n\r\nexport function generateSuggestion({\r\n i18n,\r\n assets,\r\n actionItem,\r\n strength,\r\n}) {\r\n const suggestion = i18n.getString(`Ad_Strength_Suggestion_${actionItem}`);\r\n let state = 'not-met';\r\n let suggestionType = ViewSuggestionType.None;\r\n\r\n switch (actionItem) {\r\n case 'AddMoreHeadlines': {\r\n const headlineCount = assets.headlines.length;\r\n if (headlineCount < 5) {\r\n state = SuggestionState.NotMet;\r\n } else if (headlineCount >= maxHeadlineCount\r\n || (headlineCount > 8 && getStrengthScore(strength) >= StrengthScore.Good)) {\r\n state = SuggestionState.Met;\r\n } else {\r\n state = SuggestionState.HalfMet;\r\n }\r\n suggestionType = ViewSuggestionType.Headline;\r\n break;\r\n }\r\n case 'AddMoreDescriptions': {\r\n const descriptionCount = assets.descriptions.length;\r\n if (descriptionCount < 2) {\r\n state = SuggestionState.NotMet;\r\n } else if (descriptionCount >= maxDescriptionCount\r\n || (descriptionCount > 3 && getStrengthScore(strength) >= StrengthScore.Good)) {\r\n state = SuggestionState.Met;\r\n } else {\r\n state = SuggestionState.HalfMet;\r\n }\r\n suggestionType = ViewSuggestionType.Description;\r\n break;\r\n }\r\n case 'DistinctHeadlines': {\r\n state = _.uniq(assets.headlines).length === assets.headlines.length\r\n ? SuggestionState.HalfMet\r\n : SuggestionState.NotMet;\r\n suggestionType = ViewSuggestionType.Headline;\r\n break;\r\n }\r\n case 'DistinctDescriptions':\r\n state = _.uniq(assets.descriptions).length === assets.descriptions.length\r\n ? SuggestionState.HalfMet\r\n : SuggestionState.NotMet;\r\n suggestionType = ViewSuggestionType.Description;\r\n break;\r\n case 'LongerHeadlines':\r\n state = (_.size(assets.headlines) === 0\r\n || _.any(assets.headlines, headline => _.size(headline) < 10))\r\n ? SuggestionState.NotMet\r\n : SuggestionState.HalfMet;\r\n suggestionType = ViewSuggestionType.Headline;\r\n break;\r\n case 'LongerDescriptions':\r\n state = (_.size(assets.descriptions) === 0\r\n || _.any(assets.descriptions, description => _.size(description) < 10))\r\n ? SuggestionState.NotMet\r\n : SuggestionState.HalfMet;\r\n suggestionType = ViewSuggestionType.Description;\r\n break;\r\n case 'UnpinHeadlinePositions': {\r\n const pinCount = assets.headlinePins.length;\r\n if (pinCount > 0) {\r\n state = pinCount === assets.headlines.length\r\n ? SuggestionState.NotMet\r\n : SuggestionState.HalfMet;\r\n } else {\r\n state = SuggestionState.Met;\r\n }\r\n suggestionType = ViewSuggestionType.None;\r\n break;\r\n }\r\n case 'UnpinDescriptionPositions': {\r\n const pinCount = assets.descriptionPins.length;\r\n if (pinCount > 0) {\r\n state = pinCount === assets.descriptions.length\r\n ? SuggestionState.NotMet\r\n : SuggestionState.HalfMet;\r\n } else {\r\n state = SuggestionState.Met;\r\n }\r\n suggestionType = ViewSuggestionType.None;\r\n break;\r\n }\r\n case 'MoreCombinations':\r\n if (assets.headlines.length < 5 || assets.descriptions.length < 3) {\r\n state = SuggestionState.NotMet;\r\n } else {\r\n state = SuggestionState.HalfMet;\r\n }\r\n if (assets.headlines.length < 10) {\r\n suggestionType = ViewSuggestionType.Headline;\r\n } else if (assets.descriptions.length < maxDescriptionCount) {\r\n suggestionType = ViewSuggestionType.Description;\r\n } else {\r\n suggestionType = ViewSuggestionType.None;\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n return {\r\n action: actionItem,\r\n state,\r\n suggestion,\r\n suggestionType,\r\n };\r\n}\r\n\r\nexport function sortSuggestions(suggestions) {\r\n return _.sortBy(suggestions, suggestion => Order[`${suggestion.action}-${suggestion.state}`] || 100);\r\n}\r\n","import $ from 'jquery';\r\nimport PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { HighchartReactWrapper } from '@bingads-webui-react/highchart-react-wrapper';\r\nimport { getStrengthScore } from './ad-strength-helper';\r\n\r\nexport function AdStrengthScore({\r\n isForVNext = false,\r\n label,\r\n strength,\r\n}) {\r\n const score = getStrengthScore(strength);\r\n let options = {\r\n chart: {\r\n marginBottom: 15,\r\n marginTop: 0,\r\n plotBackgroundColor: null,\r\n plotBorderWidth: 0,\r\n plotShadow: false,\r\n type: 'pie',\r\n height: 110,\r\n width: 110,\r\n },\r\n colors: ['#4285f4', '#e8f0fe'],\r\n credits: {\r\n enabled: false,\r\n },\r\n plotOptions: {\r\n pie: {\r\n allowPointSelect: false,\r\n dataLabels: {\r\n enabled: false,\r\n },\r\n endAngle: 360,\r\n startAngle: 0,\r\n size: '100%',\r\n },\r\n series: {\r\n animation: false,\r\n },\r\n },\r\n series: [{\r\n type: 'pie',\r\n name: 'Ad Strength',\r\n data: [score, 100 - score],\r\n innerSize: '75%',\r\n showInLegend: false,\r\n states: {\r\n hover: {\r\n enabled: false,\r\n },\r\n inactive: {\r\n enabled: false,\r\n },\r\n },\r\n }],\r\n title: {\r\n text: label,\r\n align: 'center',\r\n verticalAlign: 'bottom',\r\n style: {\r\n fontSize: 14,\r\n fontWeight: 'bold',\r\n },\r\n },\r\n tooltip: {\r\n enabled: false,\r\n },\r\n };\r\n\r\n if (isForVNext) {\r\n options = $.extend(true, options, {\r\n chart: {\r\n height: 150,\r\n width: 150,\r\n },\r\n colors: ['#0078D4', '#C7E0F4'],\r\n series: [{\r\n innerSize: '80%',\r\n }],\r\n title: {\r\n y: 30,\r\n },\r\n });\r\n }\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nAdStrengthScore.propTypes = {\r\n isForVNext: PropTypes.bool,\r\n label: PropTypes.string.isRequired,\r\n strength: PropTypes.string.isRequired,\r\n};\r\n\r\nAdStrengthScore.defaultProps = {\r\n isForVNext: false,\r\n};\r\n","import _ from 'underscore';\r\n\r\nfunction getTextAsset(text, pinPosition) {\r\n return {\r\n Asset: {\r\n '@odata.type': '#Model.TextAsset',\r\n AssetType: 'Text',\r\n Text: text,\r\n },\r\n PinnedField: pinPosition,\r\n };\r\n}\r\n\r\nfunction getAssets(assets) {\r\n const availableAssets = _.filter(assets, asset => asset.text !== '');\r\n return _.map(availableAssets, asset => getTextAsset(asset.text, asset.pinPosition));\r\n}\r\n\r\nexport class AdStrengthRepository {\r\n constructor({\r\n adId,\r\n edm,\r\n jsdata,\r\n }) {\r\n this.adId = adId;\r\n this.edm = edm;\r\n this.jsdata = jsdata;\r\n }\r\n\r\n fetchAdStrength(viewModel) {\r\n const headlines = _.map(_.range(15), i => ({\r\n text: _.result(viewModel, `Headline${i}`),\r\n pinPosition: _.result(viewModel, `Headline${i}Position`),\r\n }));\r\n const descriptions = _.map(_.range(4), i => ({\r\n text: _.result(viewModel, `Description${i}`),\r\n pinPosition: _.result(viewModel, `Description${i}Position`),\r\n }));\r\n\r\n const params = this.edm.currentAccount ? {\r\n query: {\r\n entitySet: this.edm.currentAccount\r\n .Ads['Default.GetAdStrengthAndActionItems']\r\n .$call({\r\n ad: {\r\n '@odata.type': '#Model.ResponsiveSearchAd',\r\n Type: 'ResponsiveSearch',\r\n adId: this.adId,\r\n Headlines: getAssets(headlines),\r\n Descriptions: getAssets(descriptions),\r\n },\r\n })\r\n .toJSON(),\r\n },\r\n } : {\r\n query: {\r\n entitySet: this.edm.currentCustomer\r\n .Accounts.$withKey(viewModel.accountId)\r\n .Ads['Default.GetAdStrengthAndActionItems']\r\n .$call({\r\n ad: {\r\n '@odata.type': '#Model.ResponsiveSearchAd',\r\n Type: 'ResponsiveSearch',\r\n adId: this.adId,\r\n Headlines: getAssets(headlines),\r\n Descriptions: getAssets(descriptions),\r\n },\r\n })\r\n .toJSON(),\r\n },\r\n };\r\n const options = {\r\n cacheResponse: false,\r\n };\r\n return this.jsdata.Ad.findAll(params, options);\r\n }\r\n}\r\n","import Promise from 'bluebird';\r\nimport _ from 'underscore';\r\nimport $ from 'jquery';\r\nimport { stringifySync } from '@bingads-webui/safe-json';\r\n\r\nconst adStrengthSuggestionEndpoint = '{odataPath}AdInsight/V2/Customers({customer_id})/Accounts({account_id})/Campaigns({campaign_id})/AdGroups({adgroup_id})/RSAV2.GetRSAV2AssetsSuggestions';\r\n\r\nconst formatUrl = (url, odataPath, appState, campaignId, adGroupId, accountId = 0) => url\r\n .replace('{odataPath}', odataPath)\r\n .replace('{account_id}', !_.isUndefined(appState.get('account_id')) ? appState.get('account_id') : accountId)\r\n .replace('{customer_id}', appState.get('customer_id'))\r\n .replace('{campaign_id}', campaignId)\r\n .replace('{adgroup_id}', adGroupId);\r\n\r\nexport class AdStrengthSuggestionRepository {\r\n constructor({\r\n viewModel,\r\n appState,\r\n token,\r\n odataPath,\r\n }) {\r\n this.viewModel = viewModel;\r\n this.appState = appState;\r\n this.token = token;\r\n this.odataPath = odataPath;\r\n }\r\n\r\n fetchAdStrengthSuggestion() {\r\n const {\r\n viewModel,\r\n appState,\r\n token,\r\n odataPath,\r\n } = this;\r\n\r\n let currentFinalUrl = null;\r\n if (!_.isEmpty(this.viewModel.FinalUrls()) && !_.isUndefined(this.viewModel.FinalUrls()) && !_.isEmpty(_.first(this.viewModel.FinalUrls()))) {\r\n currentFinalUrl = _.first(this.viewModel.FinalUrls());\r\n } else {\r\n return Promise.resolve({ data: [] });\r\n }\r\n\r\n const requestBody = {\r\n finalUrl: currentFinalUrl,\r\n };\r\n\r\n const option = {\r\n url: formatUrl(\r\n adStrengthSuggestionEndpoint,\r\n odataPath,\r\n appState,\r\n viewModel.scope().campaignId,\r\n viewModel.scope().adGroupId,\r\n viewModel.accountId\r\n ),\r\n contentType: 'application/json',\r\n headers: {\r\n authorization: `CCMTSmallToken ${token}`,\r\n },\r\n type: 'POST',\r\n data: stringifySync(requestBody),\r\n };\r\n\r\n const fetchDataPromise = new Promise((resolve, reject) => {\r\n $.ajax(option).then((rawData) => {\r\n resolve(rawData);\r\n }, reject);\r\n });\r\n\r\n return fetchDataPromise.then(rawData => ({\r\n data: rawData,\r\n }));\r\n }\r\n}\r\n","/* eslint-disable jsx-a11y/anchor-is-valid, no-param-reassign, max-len */\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport $ from 'jquery';\r\nimport classnames from 'classnames';\r\nimport { AdStrengthSuggestionRepository } from './rsa-ad-strength-suggestion-repository';\r\nimport { ViewSuggestionType } from './ad-strength-helper';\r\n\r\nimport { viewSuggestionMeasurement,\r\n applySuggestionMeasurement,\r\n returnSuggestionMeasurement,\r\n isViewSuggestionApplied,\r\n containerExists } from './rsa-ad-strength-suggestion-helper';\r\n\r\nexport class AdStrengthSuggestionPicker extends React.Component {\r\n static defaultProps = {\r\n itemsToDisplay: [],\r\n container: $(document.body),\r\n };\r\n\r\n getDisplayPosition(target, container) {\r\n const $target = $(target);\r\n const targetOffset = $target.offset();\r\n const containerOffset = container.offset();\r\n\r\n // Calculate the position of the popup relative to the container.\r\n // The container needs to be non-statically positioned, either fixed, relative or absolute,\r\n // because the popup is position: absolute.\r\n return {\r\n top: (targetOffset.top - containerOffset.top) + $target.outerHeight(),\r\n left: targetOffset.left - containerOffset.left,\r\n };\r\n }\r\n\r\n addAssetSuggestion(event, target, description, suggestionId) {\r\n const { viewModel, pickerContainer } = this.props;\r\n if (!_.isEmpty(target)) {\r\n viewModel[target.name](description);\r\n if (!_.isEmpty(suggestionId)) {\r\n applySuggestionMeasurement(viewModel, suggestionId);\r\n }\r\n }\r\n event.stopPropagation();\r\n event.preventDefault();\r\n // Hide picker\r\n ReactDOM.unmountComponentAtNode(pickerContainer);\r\n }\r\n\r\n render() {\r\n const {\r\n container, i18n, target, itemsToDisplay, assetType,\r\n } = this.props;\r\n\r\n const position = this.getDisplayPosition(target, container);\r\n\r\n const containerStyle = {\r\n display: 'block', left: `${position.left}px`, top: `${position.top}px`, zIndex: 1001,\r\n };\r\n\r\n const pickerTitle = assetType === ViewSuggestionType.Headline ?\r\n i18n.getString('Ad_Strength_Suggestion_Picker_Title_Headline') :\r\n i18n.getString('Ad_Strength_Suggestion_Picker_Title_Description');\r\n\r\n let contentView = null;\r\n const contentClasses = ['picker-list'];\r\n contentView = itemsToDisplay.map(({ SuggestionId, Asset }, index) => (\r\n
  • \r\n this.addAssetSuggestion(event, target, Asset, SuggestionId)}\r\n key={SuggestionId}\r\n data-index={index}\r\n >\r\n { Asset ?
    {Asset}
    : null}\r\n
    \r\n
  • ), this);\r\n\r\n // The title in picker needs a specific style.\r\n const pickerTitleStyle = { padding: '10px 10px 3px 10px', 'font-weight': 'bold' };\r\n return (\r\n
      \r\n
    • \r\n {pickerTitle}\r\n
    • \r\n {contentView}\r\n
    \r\n );\r\n }\r\n}\r\n\r\nAdStrengthSuggestionPicker.propTypes = {\r\n itemsToDisplay: PropTypes.arrayOf(PropTypes.shape({\r\n name: PropTypes.string,\r\n description: PropTypes.string,\r\n })),\r\n target: PropTypes.shape({}).isRequired,\r\n container: PropTypes.shape({ offset: PropTypes.func }),\r\n pickerContainer: PropTypes.objectOf(PropTypes.any).isRequired,\r\n viewModel: PropTypes.objectOf(PropTypes.any).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n assetType: PropTypes.string.isRequired,\r\n};\r\n\r\nexport class AdStrengthSuggestionController {\r\n constructor({\r\n container,\r\n appState,\r\n token,\r\n odataPath,\r\n i18n,\r\n }) {\r\n this.container = container;\r\n this.appState = appState;\r\n this.token = token;\r\n this.odataPath = odataPath;\r\n this.i18n = i18n;\r\n this.cachedSuggestions = [];\r\n this.cachedAdGroupId = -1;\r\n this.cachedFinalUrl = null;\r\n }\r\n\r\n keydown(event) {\r\n switch (event.key) {\r\n case 'Escape':\r\n this.hidePicker();\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n updateDisplayPosition(target) {\r\n const $target = $(target);\r\n const targetOffset = $target.offset();\r\n const containerOffset = this.container.offset();\r\n $('.dropdown-menu.picker-list').css('top', `${(targetOffset.top - containerOffset.top) + $target.outerHeight()}px`);\r\n }\r\n\r\n handelScroll(target) {\r\n const existingPickerContainer = $('.dropdown-menu.picker-list');\r\n const header = $('.sticky-header.table-bordered');\r\n const focused = $(':focus');\r\n if (containerExists(existingPickerContainer) && containerExists(header) && containerExists(focused)) {\r\n this.updateDisplayPosition(target);\r\n if (existingPickerContainer[0].getBoundingClientRect().top < header[0].getBoundingClientRect().bottom) {\r\n this.hidePicker();\r\n focused[0].blur();\r\n }\r\n }\r\n }\r\n\r\n registerGlobalEvents(target) {\r\n $('.recommend-ad-editor-panel').on('click', event => this.clickedAway(event));\r\n $('.recommendation-grid-page').on('scroll', () => this.handelScroll(target));\r\n $(target).on('keydown', event => this.keydown(event));\r\n }\r\n\r\n hidePicker() {\r\n const existingPickerContainer = $('.ad-strength-suggestion-container');\r\n if (containerExists(existingPickerContainer)) {\r\n ReactDOM.unmountComponentAtNode(_.first(existingPickerContainer));\r\n }\r\n $('.ad-strength-suggestion-container').remove();\r\n $('.recommend-ad-editor-panel').off('click');\r\n $('.recommendation-grid-page').off('scroll', this.handelScroll);\r\n $(this.target).off('keydown', this.keydown);\r\n }\r\n\r\n clickedAway(event) {\r\n const target = $(event.target);\r\n if (target.closest('.ad-strength-suggestion-helper-area').length === 0 &&\r\n target.closest('.ad-strength-suggestion-container').length === 0) {\r\n this.hidePicker();\r\n }\r\n }\r\n\r\n renderPicker(target, suggestions, viewModel, assetType) {\r\n const { container, i18n } = this;\r\n if (!containerExists($('.ad-strength-suggestion-container'))) {\r\n const containerToUse = $('
    ');\r\n containerToUse.appendTo(container);\r\n }\r\n const existingPickerContainer = $('.ad-strength-suggestion-container');\r\n if (!_.isEmpty(suggestions) && containerExists(existingPickerContainer)) {\r\n const pickerContainer = _.first(existingPickerContainer);\r\n // render latest picker\r\n ReactDOM.render(React.createElement(AdStrengthSuggestionPicker, {\r\n itemsToDisplay: suggestions,\r\n target,\r\n container,\r\n pickerContainer,\r\n viewModel,\r\n i18n,\r\n assetType,\r\n }), pickerContainer);\r\n this.registerGlobalEvents(target);\r\n } else {\r\n this.hidePicker();\r\n }\r\n }\r\n\r\n isSuggestionCached(adGroupId, finalUrl) {\r\n const {\r\n cachedAdGroupId, cachedFinalUrl,\r\n } = this;\r\n\r\n return (cachedAdGroupId !== -1 && !_.isEmpty(cachedFinalUrl)\r\n && cachedAdGroupId === adGroupId && finalUrl === cachedFinalUrl);\r\n }\r\n\r\n filterSuggestion(viewModel, assetType, input) {\r\n const viewSuggestionIds = [];\r\n const returnSuggestionIds = [];\r\n const filteredSuggestions = _.filter(this.cachedSuggestions, (suggestion) => {\r\n returnSuggestionIds.push(suggestion.SuggestionId);\r\n if (suggestion.AssetType.toLowerCase() !== assetType || _.isEmpty(suggestion.Asset)) {\r\n return false;\r\n }\r\n const suggestionContent = suggestion.Asset.toLowerCase();\r\n // If the input field is not empty, provide suggestions which start with the inputted text.\r\n if (!_.isEmpty(input) && !suggestionContent.startsWith(input.toLowerCase())) {\r\n return false;\r\n }\r\n\r\n const isViewSuggestionNotApplied =\r\n !isViewSuggestionApplied(viewModel, assetType, suggestionContent);\r\n\r\n if (isViewSuggestionNotApplied) {\r\n viewSuggestionIds.push(suggestion.SuggestionId);\r\n }\r\n return isViewSuggestionNotApplied;\r\n });\r\n viewSuggestionMeasurement(viewModel, viewSuggestionIds);\r\n returnSuggestionMeasurement(viewModel, returnSuggestionIds);\r\n return filteredSuggestions;\r\n }\r\n\r\n getAdStrengthSuggestion({\r\n assetType,\r\n target,\r\n input,\r\n viewModel,\r\n isInitPicker,\r\n }) {\r\n const {\r\n appState, token, odataPath,\r\n } = this;\r\n\r\n const repository = new AdStrengthSuggestionRepository({\r\n viewModel,\r\n appState,\r\n token,\r\n odataPath,\r\n });\r\n\r\n const { adGroupId } = viewModel.scope();\r\n const finalUrl = !_.isEmpty(viewModel.FinalUrls()) ?\r\n _.first(viewModel.FinalUrls()) : null;\r\n\r\n if (isInitPicker && !this.isSuggestionCached(viewModel.scope().adGroupId, finalUrl)) {\r\n // When ad group id or final url is changed, need to get suggestion from MT again.\r\n repository.fetchAdStrengthSuggestion().then(({ data }) => {\r\n this.cachedAdGroupId = adGroupId;\r\n this.cachedFinalUrl = finalUrl;\r\n this.cachedSuggestions = []; // clean up cached suggestions\r\n if (!_.isEmpty(data)) {\r\n const {\r\n ErrorCode,\r\n RSAV2AssetsSuggestions,\r\n } = data;\r\n if (ErrorCode === 'Success' && !_.isEmpty(RSAV2AssetsSuggestions)) {\r\n this.cachedSuggestions = _.first(RSAV2AssetsSuggestions).Suggestions;\r\n const filteredSuggestions\r\n = this.filterSuggestion(viewModel, assetType, input);\r\n this.renderPicker(target, filteredSuggestions, viewModel, assetType);\r\n }\r\n }\r\n });\r\n } else {\r\n const filteredSuggestions\r\n = this.filterSuggestion(viewModel, assetType, input);\r\n this.renderPicker(target, filteredSuggestions, viewModel, assetType);\r\n }\r\n }\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport $ from 'jquery';\r\nimport _ from 'underscore';\r\nimport { ViewSuggestionType, maxHeadlineCount, maxDescriptionCount } from './ad-strength-helper';\r\nimport { AdStrengthSuggestionRepository } from './rsa-ad-strength-suggestion-repository';\r\nimport { updateAdStrengthSuggestion,\r\n containerExists,\r\n renderContainer,\r\n viewSuggestionMeasurement,\r\n applySuggestionMeasurement,\r\n returnSuggestionMeasurement,\r\n isViewSuggestionApplied,\r\n renderNoSuggestion } from './rsa-ad-strength-suggestion-helper';\r\n\r\nlet currentFinalUrl = '';\r\n\r\nconst TIPS_CATEGORIES = [\r\n { name: 'Product', numItems: 4 },\r\n { name: 'Benefits', numItems: 4 },\r\n { name: 'Brand', numItems: 4 },\r\n { name: 'Action', numItems: 4 },\r\n { name: 'Inventory', numItems: 4 },\r\n { name: 'Pricing', numItems: 4 },\r\n { name: 'Promotion', numItems: 4 },\r\n];\r\n\r\nconst manageVisiblity = (e, targetContainer, expandingIcon) => {\r\n const target = $(e.target);\r\n const detailContainer = target.parent().parent().find(targetContainer);\r\n const expendingContainer = target.parent().parent().find(expandingIcon);\r\n const isDetailSuggestionVisible = detailContainer.is(':visible');\r\n // Hide all tips items\r\n $(targetContainer).hide();\r\n // Change all expending icon to expander\r\n $(expandingIcon).removeClass('expandedImage');\r\n $(expandingIcon).addClass('expanderImage');\r\n\r\n if (isDetailSuggestionVisible) {\r\n detailContainer.hide();\r\n return false;\r\n }\r\n detailContainer.show();\r\n expendingContainer.removeClass('expanderImage');\r\n expendingContainer.addClass('expandedImage');\r\n return true;\r\n};\r\n\r\nconst viewHeadlineSuggestionTipCategoryItems = (category, i18n, e) => {\r\n manageVisiblity(e, '.ad-strength-suggestion-detail-tips-item-container', '.ad-strength-suggestion-detail-tips-expending');\r\n const target = $(e.target);\r\n const container = target.parent().parent().find('.ad-strength-suggestion-detail-tips-item-container');\r\n const items = _.map(_.range(1, category.numItems + 1), num => (\r\n
    {i18n.getString(`Ad_Strength_Suggestion_Tips_Category_${category.name}_Item${num}`)}
    \r\n ));\r\n const itemsWithSubtitle = (\r\n
    \r\n
    {i18n.getString(`Ad_Strength_Suggestion_Tips_Category_${category.name}_Subtitle`)}
    \r\n {items}\r\n
    \r\n );\r\n renderContainer(itemsWithSubtitle, container);\r\n};\r\n\r\nconst viewHeadlineSuggestionTips = (i18n) => {\r\n const categoryItems = _.map(TIPS_CATEGORIES, category => (\r\n
    \r\n viewHeadlineSuggestionTipCategoryItems(category, i18n, e)}\r\n onKeyPress={e => viewHeadlineSuggestionTipCategoryItems(category, i18n, e)}\r\n >\r\n \r\n
    {i18n.getString(`Ad_Strength_Suggestion_Tips_Category_${category.name}_Title`)}
    \r\n
    \r\n
    \r\n
    \r\n ));\r\n const tips = (\r\n
    \r\n
    {i18n.getString('Ad_Strength_Suggestion_Tips_Header')}
    \r\n
    {i18n.getString('Ad_Strength_Suggestion_Tips_Header_Desc')}
    \r\n {categoryItems}\r\n
    \r\n );\r\n return tips;\r\n};\r\n\r\nconst addAssetSuggestion = (assetType, viewModel, e) => {\r\n let target = $(e.target);\r\n if (_.first(target).className === `ad-strength-suggestion-detail-suggestion-add-symbol ${assetType}`\r\n || _.first(target).className === `ad-strength-suggestion-detail-suggestion-content ${assetType}`) {\r\n target = target.parent();\r\n }\r\n if (_.first(target).className === `ad-strength-suggestion-detail-suggestion-disabled ${assetType}`) {\r\n return;\r\n }\r\n const content = _.first(target.find(`.ad-strength-suggestion-detail-suggestion-content.${assetType}`));\r\n if (_.isEmpty(content)) {\r\n return;\r\n }\r\n const suggestionId = _.first(target.find(`.ad-strength-suggestion-detail-suggestion-id.${assetType}`));\r\n if (!_.isEmpty(suggestionId)) {\r\n applySuggestionMeasurement(viewModel, suggestionId.textContent);\r\n }\r\n const suggestionToAdd = content.textContent;\r\n if (assetType === ViewSuggestionType.Headline) {\r\n const index = _.findIndex(_.range(viewModel.showHeadlineCount()), i =>\r\n _.isEmpty(`${viewModel[`Headline${i}`]()}`));\r\n if (index !== -1) {\r\n viewModel[`Headline${index}`](suggestionToAdd);\r\n } else if (viewModel.showHeadlineCount() < maxHeadlineCount) {\r\n viewModel.showHeadlineCount(viewModel.showHeadlineCount() + 1);\r\n viewModel[`Headline${viewModel.showHeadlineCount() - 1}`](suggestionToAdd);\r\n }\r\n } else if (assetType === ViewSuggestionType.Description) {\r\n const index = _.findIndex(_.range(viewModel.showDescriptionCount()), i =>\r\n _.isEmpty(`${viewModel[`Description${i}`]()}`));\r\n if (index !== -1) {\r\n viewModel[`Description${index}`](suggestionToAdd);\r\n } else if (viewModel.showDescriptionCount() < maxDescriptionCount) {\r\n viewModel.showDescriptionCount(viewModel.showDescriptionCount() + 1);\r\n viewModel[`Description${viewModel.showDescriptionCount() - 1}`](suggestionToAdd);\r\n }\r\n }\r\n};\r\n\r\n\r\nconst renderSuggestionContent = (\r\n container,\r\n content,\r\n repository,\r\n i18n,\r\n assetType,\r\n viewModel,\r\n isForVNext\r\n) => {\r\n // Show suggestion\r\n _.first(container).style.display = 'block';\r\n\r\n // Render suggestion static content in advance\r\n renderContainer(content, container);\r\n\r\n if (currentFinalUrl === _.first(viewModel.FinalUrls())) {\r\n return;\r\n }\r\n\r\n currentFinalUrl = _.first(viewModel.FinalUrls());\r\n\r\n // Get suggestion from AdInsight MT\r\n repository.fetchAdStrengthSuggestion().then(({ data }) => {\r\n currentFinalUrl = '';\r\n\r\n const suggestionContainers = container.find(`.ad-strength-suggestion-detail-suggestions-container.${assetType}`);\r\n const noSuggestionContainers = container.find(`.ad-strength-suggestion-detail-nosuggestion-container.${assetType}`);\r\n // Empty suggestions\r\n renderContainer([], suggestionContainers);\r\n\r\n if (!_.isEmpty(data)) {\r\n const {\r\n ErrorCode,\r\n RSAV2AssetsSuggestions,\r\n } = data;\r\n if (ErrorCode !== 'Success' || _.isEmpty(RSAV2AssetsSuggestions)) {\r\n renderNoSuggestion(noSuggestionContainers, i18n);\r\n } else {\r\n const allSuggestions = _.first(RSAV2AssetsSuggestions).Suggestions;\r\n const suggestions = _.filter(allSuggestions, suggestion =>\r\n suggestion.AssetType.toLowerCase() === assetType && !_.isEmpty(suggestion.Asset));\r\n const viewSuggestionIds = [];\r\n const returnSuggestionIds = [];\r\n const items = _.map(suggestions, (suggestion) => {\r\n returnSuggestionIds.push(suggestion.SuggestionId);\r\n const suggestionAssetType = suggestion.AssetType.toLowerCase();\r\n const suggestionClassName = `ad-strength-suggestion-detail-suggestion ${suggestionAssetType}`;\r\n const addSymbolClassName = `ad-strength-suggestion-detail-suggestion-add-symbol ${suggestionAssetType}`;\r\n const idClassName = `ad-strength-suggestion-detail-suggestion-id ${suggestionAssetType}`;\r\n const contentClassName = `ad-strength-suggestion-detail-suggestion-content ${suggestionAssetType}`;\r\n if (!isViewSuggestionApplied(viewModel, assetType, suggestion.Asset)) {\r\n viewSuggestionIds.push(suggestion.SuggestionId);\r\n }\r\n return (\r\n addAssetSuggestion(assetType, viewModel, e)}\r\n onKeyPress={e => addAssetSuggestion(assetType, viewModel, e)}\r\n >\r\n
    +
    \r\n
    {suggestion.SuggestionId}
    \r\n
    {suggestion.Asset}
    \r\n
    );\r\n });\r\n\r\n viewSuggestionMeasurement(viewModel, viewSuggestionIds);\r\n returnSuggestionMeasurement(viewModel, returnSuggestionIds);\r\n if (!_.isEmpty(items) && containerExists(suggestionContainers)) {\r\n let suggestionContent = [];\r\n const header = (\r\n
    \r\n { assetType === ViewSuggestionType.Headline ?\r\n i18n.getString('Ad_Strength_Suggestion_HeadlineSuggestions_Subtitle') :\r\n i18n.getString('Ad_Strength_Suggestion_DescriptionSuggestions_Subtitle')\r\n }\r\n
    );\r\n const noAvailableNewAssetContentClassName = `ad-strength-suggestion-detail-no-new-asset-content ${assetType}`;\r\n const noAvailableNewAssetContainerClassName = `alert alert-info form-group ad-strength-suggestion-detail-no-new-asset-container ${assetType}`;\r\n const noAvailableNewAsset = (\r\n
    \r\n
    \r\n
    \r\n
    );\r\n suggestionContent.push(header);\r\n suggestionContent.push(noAvailableNewAsset);\r\n suggestionContent = suggestionContent.concat(items);\r\n renderContainer(suggestionContent, suggestionContainers);\r\n updateAdStrengthSuggestion(i18n, viewModel);\r\n } else {\r\n renderNoSuggestion(noSuggestionContainers, i18n);\r\n }\r\n }\r\n } else if (_.isEmpty(viewModel.FinalUrls())) {\r\n const warningIconClassName = isForVNext ?\r\n 'status-icon iconba iconba-Warning' :\r\n 'status_warning status ad-strength-suggestion-detail-warning';\r\n const warningIconStyle = isForVNext ?\r\n { paddingRight: '5px', color: 'red' } :\r\n { paddingRight: '5px' };\r\n const noFinalUrl = (\r\n
    \r\n \r\n {i18n.getString('Ad_Strength_Suggestion_NoSuggestion_Add_Final_URL')}\r\n
    \r\n );\r\n // Add a final URL to see more recommendations.\r\n renderContainer(noFinalUrl, noSuggestionContainers);\r\n } else {\r\n renderNoSuggestion(noSuggestionContainers, i18n);\r\n }\r\n });\r\n};\r\n\r\nconst hideAdStrengthSuggestionContainer = () => {\r\n const container = $('.ad-strength-suggestions-detail');\r\n if (containerExists(container)) {\r\n _.first(container).style.display = 'none';\r\n }\r\n};\r\n\r\nexport const viewInlineSuggestion = (\r\n i18n,\r\n viewModel,\r\n repository,\r\n assetType,\r\n action,\r\n isForVNext\r\n) => {\r\n const suggestionContanerClassName = `ad-strength-suggestion-detail-suggestions-container ${assetType}`;\r\n const noSuggestionContainerClassName = `ad-strength-suggestion-detail-nosuggestion-container ${assetType}`;\r\n const currentActionClasName = 'ad-strength-suggestion-current-action';\r\n\r\n let combinedClickViewIdeas = viewModel.clickViewIdeas || [];\r\n combinedClickViewIdeas = combinedClickViewIdeas.concat([action]);\r\n // eslint-disable-next-line no-param-reassign\r\n viewModel.clickViewIdeas = _.uniq(combinedClickViewIdeas);\r\n\r\n let title = assetType === ViewSuggestionType.Headline ?\r\n i18n.getString('Ad_Strength_Suggestion_HeadlineSuggestions') :\r\n i18n.getString('Ad_Strength_Suggestion_DescriptionSuggestions');\r\n switch (action) {\r\n case 'LongerHeadlines':\r\n title = i18n.getString('Ad_Strength_Suggestion_HeadlineSuggestions_LongerHeadlines');\r\n break;\r\n case 'LongerDescriptions':\r\n title = i18n.getString('Ad_Strength_Suggestion_DescriptionSuggestions_LongerDescriptions');\r\n break;\r\n case 'DistinctHeadlines':\r\n title = i18n.getString('Ad_Strength_Suggestion_HeadlineSuggestions_DistinctHeadlines');\r\n break;\r\n case 'DistinctDescriptions':\r\n title = i18n.getString('Ad_Strength_Suggestion_DescriptionSuggestions_DistinctDescriptions');\r\n break;\r\n default:\r\n break;\r\n }\r\n const content = (\r\n
    \r\n hideAdStrengthSuggestionContainer()}\r\n onKeyPress={() => hideAdStrengthSuggestionContainer()}\r\n />\r\n
    \r\n { title }\r\n
    \r\n
    \r\n
    \r\n
    {action}
    \r\n { assetType === ViewSuggestionType.Headline ? viewHeadlineSuggestionTips(i18n) : null }\r\n
    \r\n );\r\n const container = $('.ad-strength-suggestions-detail');\r\n if (containerExists(container)) {\r\n renderSuggestionContent(\r\n container,\r\n content,\r\n repository,\r\n i18n,\r\n assetType,\r\n viewModel,\r\n isForVNext\r\n );\r\n }\r\n};\r\n\r\nexport const AdStrengthSuggestion = ({\r\n i18n,\r\n inlineSuggestionsEnabled,\r\n suggestion,\r\n viewModel,\r\n appState,\r\n token,\r\n odataPath,\r\n isForVNext,\r\n}) => {\r\n const { action, suggestionType } = suggestion;\r\n const repository = new AdStrengthSuggestionRepository({\r\n viewModel,\r\n appState,\r\n token,\r\n odataPath,\r\n });\r\n\r\n if (!inlineSuggestionsEnabled || suggestionType === ViewSuggestionType.None) {\r\n return '';\r\n }\r\n\r\n return (\r\n \r\n viewInlineSuggestion(i18n, viewModel, repository, suggestionType, action, isForVNext)}\r\n onKeyPress={() =>\r\n viewInlineSuggestion(i18n, viewModel, repository, suggestionType, action, isForVNext)}\r\n >\r\n {i18n.getString('Ad_Strength_Suggestion_ViewSuggestions')}\r\n \r\n );\r\n};\r\n\r\nAdStrengthSuggestion.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n inlineSuggestionsEnabled: PropTypes.bool.isRequired,\r\n suggestion: PropTypes.shape({\r\n suggestion: PropTypes.string.isRequired,\r\n suggestionType: PropTypes.string.isRequired,\r\n action: PropTypes.string.isRequired,\r\n }).isRequired,\r\n viewModel: PropTypes.objectOf(PropTypes.any).isRequired,\r\n appState: PropTypes.objectOf(PropTypes.any).isRequired,\r\n token: PropTypes.string.isRequired,\r\n odataPath: PropTypes.string.isRequired,\r\n isForVNext: PropTypes.bool.isRequired,\r\n};\r\n","/* eslint-disable no-param-reassign */\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport $ from 'jquery';\r\nimport _ from 'underscore';\r\nimport { ViewSuggestionType, maxHeadlineCount, maxDescriptionCount } from './ad-strength-helper';\r\nimport { AdStrengthSuggestionController } from './rsa-ad-strength-suggestion-picker';\r\nimport { AdStrengthSuggestionRepository } from './rsa-ad-strength-suggestion-repository';\r\nimport { viewInlineSuggestion } from './rsa-ad-strength-suggestion';\r\n\r\nlet controller;\r\n\r\nexport const containerExists = container => (!_.isEmpty(container) && container.length > 0);\r\n\r\nexport const renderContainer = (content, container) => {\r\n if (containerExists(container)) {\r\n ReactDOM.render(\r\n content,\r\n _.first(container)\r\n );\r\n }\r\n};\r\n\r\nexport const renderNoSuggestion = (container, i18n) => {\r\n const noSuggestion = (\r\n
    \r\n {i18n.getString('Ad_Strength_Suggestion_NoSuggestion')}\r\n  \r\n \r\n {i18n.getString('Ad_Strength_Suggestion_NoSuggestion_Help')}\r\n \r\n
    \r\n );\r\n renderContainer(noSuggestion, container);\r\n};\r\n\r\nconst renderUpdateSuggestion = (i18n, viewModel, assetType) => {\r\n let suggestions = $(`.ad-strength-suggestion-detail-suggestion.${assetType}`);\r\n if (!containerExists(suggestions)) {\r\n suggestions = $(`.ad-strength-suggestion-detail-suggestion-disabled.${assetType}`);\r\n }\r\n if (!containerExists(suggestions)) {\r\n return;\r\n }\r\n let hiddenSuggestionCount = 0;\r\n let viewModelShowCount = 0;\r\n let availableNewAsset = true;\r\n if (assetType === ViewSuggestionType.Headline) {\r\n viewModelShowCount = viewModel.showHeadlineCount();\r\n availableNewAsset = viewModelShowCount < maxHeadlineCount;\r\n } else if (assetType === ViewSuggestionType.Description) {\r\n viewModelShowCount = viewModel.showDescriptionCount();\r\n availableNewAsset = viewModelShowCount < maxDescriptionCount;\r\n } else {\r\n return;\r\n }\r\n const type = assetType === ViewSuggestionType.Headline ? 'Headline' : 'Description';\r\n _.each(suggestions, (suggestion) => {\r\n const content = suggestion.lastChild;\r\n if (!_.isEmpty(content)) {\r\n const suggestionContent = content.textContent.toLowerCase();\r\n const index = _.findIndex(_.range(viewModelShowCount), i =>\r\n suggestionContent === `${viewModel[`${type}${i}`]()}`.toLowerCase());\r\n if (index !== -1) {\r\n suggestion.style.display = 'none';\r\n hiddenSuggestionCount += 1;\r\n } else {\r\n suggestion.style.display = 'inline-block';\r\n }\r\n }\r\n });\r\n\r\n const noAvailableNewAssetContainer = $(`.ad-strength-suggestion-detail-no-new-asset-container.${assetType}`);\r\n\r\n const index = assetType === ViewSuggestionType.Headline ?\r\n _.findIndex(\r\n _.range(viewModel.showHeadlineCount()),\r\n i => _.isEmpty(`${viewModel[`Headline${i}`]()}`)\r\n ) :\r\n _.findIndex(\r\n _.range(viewModel.showDescriptionCount()),\r\n i => _.isEmpty(`${viewModel[`Description${i}`]()}`)\r\n );\r\n const hasEmptyAssetToAdd = index !== -1;\r\n\r\n if (!hasEmptyAssetToAdd && !availableNewAsset && hiddenSuggestionCount < suggestions.length) {\r\n const noAvailableNewAssetContent = assetType === ViewSuggestionType.Headline ?\r\n i18n.getString('Ad_Strength_Suggestion_NoSuggestion_Headline_Number_Limit') :\r\n i18n.getString('Ad_Strength_Suggestion_NoSuggestion_Description_Number_Limit');\r\n if (containerExists(noAvailableNewAssetContainer)) {\r\n _.first(noAvailableNewAssetContainer).style.display = 'flex';\r\n }\r\n const noAvailableNewAssetContentContainer = $(`.ad-strength-suggestion-detail-no-new-asset-content.${assetType}`);\r\n renderContainer(noAvailableNewAssetContent, noAvailableNewAssetContentContainer);\r\n\r\n // Disable all suggestions\r\n _.each(suggestions, (suggestion) => {\r\n suggestion.className = `ad-strength-suggestion-detail-suggestion-disabled ${assetType}`;\r\n });\r\n } else {\r\n if (containerExists(noAvailableNewAssetContainer)) {\r\n _.first(noAvailableNewAssetContainer).style.display = 'none';\r\n }\r\n\r\n // Enable all suggestions\r\n _.each(suggestions, (suggestion) => {\r\n suggestion.className = `ad-strength-suggestion-detail-suggestion ${assetType}`;\r\n });\r\n }\r\n\r\n // No recommendations available.\r\n const noSuggestionContainers = $(`.ad-strength-suggestion-detail-nosuggestion-container.${assetType}`);\r\n if (hiddenSuggestionCount === suggestions.length) {\r\n renderNoSuggestion(noSuggestionContainers, i18n);\r\n } else {\r\n renderContainer('', noSuggestionContainers);\r\n }\r\n};\r\n\r\nexport const updateAdStrengthSuggestion = (i18n, viewModel) => {\r\n const container = $('.ad-strength-suggestions-detail');\r\n if (containerExists(container)\r\n && _.first(container).style.display === 'block') {\r\n renderUpdateSuggestion(i18n, viewModel, ViewSuggestionType.Headline);\r\n renderUpdateSuggestion(i18n, viewModel, ViewSuggestionType.Description);\r\n }\r\n};\r\n\r\nexport const renewAdStrengthSuggestion = (options) => {\r\n const {\r\n i18n, viewModel, appState, token, odataPath, isForVNext,\r\n } = options;\r\n const container = $('.ad-strength-suggestions-detail');\r\n // Renew the suggestions when suggestion pannel is open\r\n if (containerExists(container)\r\n && _.first(container).style.display === 'block') {\r\n const headlineConatiner = container.find('.ad-strength-suggestion-detail-suggestions-container.headline');\r\n const descriptionConatiner = container.find('.ad-strength-suggestion-detail-suggestions-container.description');\r\n let suggestionType = null;\r\n if (containerExists(headlineConatiner)) {\r\n suggestionType = ViewSuggestionType.Headline;\r\n } else if (containerExists(descriptionConatiner)) {\r\n suggestionType = ViewSuggestionType.Description;\r\n }\r\n\r\n let action = null;\r\n const currentActionContainer = container.find('.ad-strength-suggestion-current-action');\r\n if (containerExists(currentActionContainer)) {\r\n action = _.first(currentActionContainer).textContent;\r\n }\r\n\r\n if (!_.isEmpty(suggestionType)) {\r\n const repository = new AdStrengthSuggestionRepository({\r\n viewModel,\r\n appState,\r\n token,\r\n odataPath,\r\n });\r\n viewInlineSuggestion(i18n, viewModel, repository, suggestionType, action, isForVNext);\r\n }\r\n }\r\n};\r\nexport const isViewSuggestionApplied = (viewModel, assetType, suggestionContent = '') => {\r\n let viewModelShowCount = 0;\r\n let type;\r\n if (assetType === ViewSuggestionType.Headline) {\r\n viewModelShowCount = viewModel.showHeadlineCount() > maxHeadlineCount ?\r\n maxHeadlineCount : viewModel.showHeadlineCount();\r\n type = 'Headline';\r\n } else if (assetType === ViewSuggestionType.Description) {\r\n viewModelShowCount = viewModel.showDescriptionCount() > maxDescriptionCount ?\r\n maxDescriptionCount : viewModel.showDescriptionCount();\r\n type = 'Description';\r\n }\r\n const index = _.findIndex(_.range(viewModelShowCount), i =>\r\n suggestionContent.toLowerCase() === `${viewModel[`${type}${i}`]()}`.toLowerCase());\r\n\r\n return (index !== -1);\r\n};\r\n\r\nexport const viewSuggestionMeasurement = (viewModel, viewSuggestionIds) => {\r\n let combinedViewSuggestionIds = viewModel.viewSuggestionIds || [];\r\n combinedViewSuggestionIds = combinedViewSuggestionIds.concat(viewSuggestionIds);\r\n viewModel.viewSuggestionIds = _.uniq(combinedViewSuggestionIds);\r\n};\r\n\r\nexport const applySuggestionMeasurement = (viewModel, suggestionId) => {\r\n const combinedApplySuggestionIds = viewModel.applySuggestionIds || [];\r\n combinedApplySuggestionIds.push(suggestionId);\r\n viewModel.applySuggestionIds = _.uniq(combinedApplySuggestionIds);\r\n};\r\n\r\nexport const returnSuggestionMeasurement = (viewModel, returnSuggestionIds) => {\r\n let combinedReturnSuggestionIds = viewModel.returnSuggestionIds || [];\r\n combinedReturnSuggestionIds = combinedReturnSuggestionIds.concat(returnSuggestionIds);\r\n viewModel.returnSuggestionIds = _.uniq(combinedReturnSuggestionIds);\r\n};\r\n\r\n/*\r\n * Attaches focus, input event listeners to ad text fields\r\n */\r\nexport const attachAdStrengthSuggestionHelpers = ({\r\n element,\r\n viewModel,\r\n appState,\r\n token,\r\n odataPath,\r\n assetType,\r\n i18n,\r\n}) => {\r\n // add the class so that click in the input will not trigger picker to be hidden\r\n element.addClass('ad-strength-suggestion-helper-area');\r\n\r\n element.on('input keyup focus', (event) => {\r\n const { type, target, key } = event;\r\n\r\n const {\r\n selectionStart, selectionEnd,\r\n } = target;\r\n // Ignore if any text is selected, we are only interested in the cursor\r\n if (selectionStart !== selectionEnd) {\r\n return;\r\n }\r\n\r\n // Ignore escape key up since it shouldn't prompt any helper\r\n if (type === 'keyup' && key === 'Escape') {\r\n return;\r\n }\r\n\r\n if (_.isEmpty(controller)) {\r\n controller = new AdStrengthSuggestionController({\r\n container: $(document.body),\r\n appState,\r\n token,\r\n odataPath,\r\n i18n,\r\n });\r\n }\r\n\r\n controller.getAdStrengthSuggestion({\r\n assetType,\r\n target,\r\n input: target.value,\r\n viewModel,\r\n isInitPicker: type === 'focus',\r\n });\r\n });\r\n};\r\n","/* eslint-disable jsx-a11y/label-has-for */\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\nimport { AdStrengthScore } from './ad-strength-score';\r\nimport { AdStrengthRepository } from './ad-strength-repository';\r\nimport { generateSuggestion, sortSuggestions } from './ad-strength-helper';\r\nimport { updateAdStrengthSuggestion, renewAdStrengthSuggestion } from './rsa-ad-strength-suggestion-helper';\r\n\r\nexport class AdStrengthView extends React.Component {\r\n static propTypes = {\r\n className: PropTypes.string,\r\n adId: PropTypes.number.isRequired,\r\n edm: PropTypes.objectOf(PropTypes.any).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n jsdata: PropTypes.objectOf(PropTypes.any).isRequired,\r\n viewModel: PropTypes.objectOf(PropTypes.any).isRequired,\r\n isForVNext: PropTypes.bool,\r\n inlineSuggestionsEnabled: PropTypes.bool,\r\n };\r\n\r\n static defaultProps = {\r\n className: 'responsive-search-ad-strength-view',\r\n isForVNext: false,\r\n inlineSuggestionsEnabled: false,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {};\r\n this.subscriptions = {};\r\n this.repository = new AdStrengthRepository({\r\n adId: props.adId,\r\n edm: props.edm,\r\n jsdata: props.jsdata,\r\n });\r\n }\r\n\r\n componentDidMount() {\r\n this.fetchData();\r\n\r\n const lazyFetchData = _.debounce(() => this.fetchData(), 1000);\r\n\r\n _.each(_.range(15), (i) => {\r\n this.subscriptions[`Headline${i}`] = this.props.viewModel[`Headline${i}`].subscribe(() => {\r\n lazyFetchData();\r\n });\r\n this.subscriptions[`Headline${i}Position`] = this.props.viewModel[`Headline${i}Position`].subscribe(() => {\r\n lazyFetchData();\r\n });\r\n });\r\n _.each(_.range(4), (i) => {\r\n this.subscriptions[`Description${i}`] = this.props.viewModel[`Description${i}`].subscribe(() => {\r\n lazyFetchData();\r\n });\r\n this.subscriptions[`Description${i}Position`] = this.props.viewModel[`Description${i}Position`].subscribe(() => {\r\n lazyFetchData();\r\n });\r\n });\r\n if (this.props.inlineSuggestionsEnabled) {\r\n this.props.viewModel.FinalUrls.extend({\r\n rateLimit: 1000,\r\n });\r\n this.subscriptions.FinalUrls = this.props.viewModel.FinalUrls.subscribe(() => {\r\n renewAdStrengthSuggestion(_.pick(this.props, 'i18n', 'viewModel', 'appState', 'token', 'odataPath', 'isForVNext'));\r\n });\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n _.each(this.subscriptions, subscription => subscription.dispose());\r\n this.subscriptions = {};\r\n }\r\n\r\n fetchData() {\r\n if (!_.isNull(this.props.edm.currentAccount) || !_.isNull(this.props.viewModel.accountId)) {\r\n this.repository.fetchAdStrength(this.props.viewModel)\r\n .then((response) => {\r\n this.parseAdStrengthActionItems(response);\r\n });\r\n }\r\n }\r\n\r\n parseAdStrengthActionItems(response) {\r\n const {\r\n i18n,\r\n viewModel,\r\n } = this.props;\r\n const {\r\n Strength,\r\n ActionItems,\r\n } = response;\r\n\r\n const assets = {\r\n headlines: _.filter(_.map(_.range(15), i => _.result(viewModel, `Headline${i}`)), i => _.size(i) > 0),\r\n descriptions: _.filter(_.map(_.range(4), i => _.result(viewModel, `Description${i}`)), i => _.size(i) > 0),\r\n headlinePins: _.filter(_.range(15), i => _.result(viewModel, `Headline${i}Position`) !== 'None'),\r\n descriptionPins: _.filter(_.range(4), i => _.result(viewModel, `Description${i}Position`) !== 'None'),\r\n };\r\n const suggestions = _.map(ActionItems, item => generateSuggestion({\r\n i18n,\r\n assets,\r\n actionItem: item,\r\n strength: Strength,\r\n }));\r\n const sortedSuggestions = sortSuggestions(suggestions);\r\n\r\n this.setState({\r\n label: i18n.getString(`Ad_Strength_Score_${Strength}`),\r\n strength: Strength,\r\n suggestions: sortedSuggestions.slice(0, 4),\r\n });\r\n\r\n if (this.props.inlineSuggestionsEnabled) {\r\n // Update the corresponding suggestions when all ad strengthes are updated\r\n updateAdStrengthSuggestion(i18n, viewModel);\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
      \r\n {_.map(this.state.suggestions, suggestion => (\r\n
    • \r\n \r\n {suggestion.suggestion}\r\n
    • \r\n ))}\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n );\r\n }\r\n}\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { DeterministicView } from '@bingads-webui/deterministic-view';\r\nimport { AdStrengthView } from './ad-strength-view';\r\n\r\nexport class ResponsiveSearchAdStrengthView extends DeterministicView {\r\n initialize({\r\n adId,\r\n edm,\r\n i18n,\r\n jsdata,\r\n scope,\r\n viewModel,\r\n isForVNext,\r\n inlineSuggestionsEnabled,\r\n appState,\r\n token,\r\n odataPath,\r\n }) {\r\n super.initialize();\r\n\r\n this.viewRef = React.createRef();\r\n this.view = (\r\n \r\n );\r\n }\r\n\r\n setState(state) {\r\n if (this.viewRef.current) {\r\n this.viewRef.current.setState(state);\r\n }\r\n return this;\r\n }\r\n\r\n renderTrunk() {\r\n ReactDOM.render(this.view, this.el);\r\n return this;\r\n }\r\n\r\n remove() {\r\n ReactDOM.unmountComponentAtNode(this.el);\r\n return super.remove();\r\n }\r\n}\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport $ from 'jquery';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport { containerExists } from './rsa-ad-strength-suggestion-helper';\r\n\r\nexport class AIGenAssetContextualAttribute extends React.Component {\r\n static defaultProps = {\r\n container: $(document.body),\r\n improveMMAOption: {},\r\n newI18n: {\r\n getString: _.noop,\r\n },\r\n };\r\n\r\n getDisplayPosition(target, container) {\r\n const $target = $(target);\r\n const targetOffset = $target.offset();\r\n const containerOffset = container.offset();\r\n\r\n return {\r\n top: (targetOffset.top - containerOffset.top) - ($target.outerHeight() - 35),\r\n left: targetOffset.left - containerOffset.left - 103,\r\n };\r\n }\r\n\r\n render() {\r\n const {\r\n container, i18n, target, isAIGeneratedAsset, improveMMAOption, newI18n,\r\n } = this.props;\r\n\r\n const position = this.getDisplayPosition(target, container);\r\n\r\n const containerStyle = {\r\n display: 'block',\r\n left: `${position.left}px`,\r\n top: `${position.top}px`,\r\n width: '220px',\r\n };\r\n\r\n let content = i18n.getString('Ad_Strength_Improve_RSA_Contextual_Content');\r\n\r\n if (improveMMAOption && improveMMAOption.type) {\r\n if (improveMMAOption.type === 'Text') {\r\n content = newI18n.getString(_TL_('We\\'ve made these recommendations based on text generated from your websites.'));\r\n } else if (improveMMAOption.type === 'Image') {\r\n content = newI18n.getString(_TL_('Our recommendations are based on the images generated from your websites.'));\r\n }\r\n } else if (isAIGeneratedAsset) {\r\n content = i18n.getString('Ad_Strength_RSA_AI_Generated_Asset_Contextual_Content');\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 {content}\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\nAIGenAssetContextualAttribute.propTypes = {\r\n target: PropTypes.shape({}).isRequired,\r\n container: PropTypes.shape({ offset: PropTypes.func }),\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n isAIGeneratedAsset: PropTypes.bool.isRequired,\r\n improveMMAOption: PropTypes.shape({\r\n type: PropTypes.string,\r\n }),\r\n newI18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }),\r\n};\r\n\r\n/*\r\n * Attaches event listeners to on the light bulb icon to show contextual attribute\r\n */\r\nexport const attachAIGenAssetContextualAttribute = ({\r\n element,\r\n i18n,\r\n isAIGeneratedAsset,\r\n improveMMAOption,\r\n newI18n,\r\n}) => {\r\n if (!containerExists($('.rsa-ai-generated-asset-container'))) {\r\n const aiGendAssetCAContainer = $('
    ');\r\n aiGendAssetCAContainer.appendTo($(document.body));\r\n }\r\n\r\n element.on('mouseenter mouseout keydown', (event) => {\r\n const { key, target, type } = event;\r\n const existingContextualAttributeContainer = $('.rsa-ai-generated-asset-container');\r\n if (containerExists(existingContextualAttributeContainer)) {\r\n if (type === 'mouseenter' || (type === 'keydown' && key === 'Enter')) {\r\n // Hide previous contextual attribute pop-up\r\n ReactDOM.unmountComponentAtNode(_.first(existingContextualAttributeContainer));\r\n\r\n // Show current contextual attribute pop-up\r\n const contextualAttributeContainer = _.first(existingContextualAttributeContainer);\r\n ReactDOM.render(React.createElement(AIGenAssetContextualAttribute, {\r\n target,\r\n i18n,\r\n isAIGeneratedAsset,\r\n improveMMAOption,\r\n newI18n,\r\n }), contextualAttributeContainer);\r\n } else if (type === 'mouseout') {\r\n // Hide current contextual attribute pop-up\r\n ReactDOM.unmountComponentAtNode(_.first(existingContextualAttributeContainer));\r\n }\r\n }\r\n });\r\n};\r\n","/* eslint-disable react/no-unused-prop-types */\r\nimport Backbone from 'backbone';\r\nimport ReactDOM from 'react-dom';\r\nimport React from 'react';\r\nimport { ChoiceGroup, TextField, Stack, DefaultButton, PrimaryButton } from '@fluentui/react';\r\nimport decimalNumber from '@bingads-webui-component-legacy/humanize/decimal';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { getInlineEditorViewStyles } from './style';\r\n\r\nconst InlineEditor = (props) => {\r\n const [selectedKey, setSelectedKey] = React.useState(props.isUsingInheritedValue ? 'inherited' : 'customed');\r\n const [customedValue, setCustomedValue] =\r\n React.useState((props.dataType === 'Percent' && !_.isEmpty(props.customedValue)) ? props.customedValue.replace('%', '') : props.customedValue);\r\n\r\n const onChangeOption = (ev, option) => {\r\n setSelectedKey(option.key);\r\n };\r\n const styles = getInlineEditorViewStyles();\r\n const inheritedValueName = props.i18n.getString(`RSAAdCustomizer_${props.inheritedValueLevel}_Value`);\r\n const options = [\r\n {\r\n key: 'inherited',\r\n labelId: 'inherited',\r\n text: props.i18n.getString('RSAAdCustomizer_Use_Inherited_Value'),\r\n onRenderField: (optionPops, render) => (\r\n
    \r\n {render(optionPops)}\r\n
    \r\n
    \r\n {\r\n _.isEmpty(props.inheritedValue) ? '-' : `${inheritedValueName}: ${props.inheritedValue}`\r\n }\r\n
    \r\n
    \r\n ),\r\n },\r\n {\r\n key: 'customed',\r\n labelId: 'customed',\r\n text: props.i18n.getString('RSAAdCustomizer_Use_Custom_Value'),\r\n },\r\n ];\r\n\r\n return (\r\n
    \r\n \r\n {\r\n selectedKey === 'customed' ?\r\n (\r\n \r\n {props.attributeName} ({props.dataType})\r\n \r\n setCustomedValue(value, selectedKey)}\r\n />\r\n {\r\n props.dataType === 'Percent' ?\r\n % : null\r\n }\r\n \r\n \r\n ) : null\r\n }\r\n\r\n \r\n props.save(customedValue, selectedKey, props.dataType)} />\r\n props.cancel()} />\r\n \r\n
    \r\n );\r\n};\r\n\r\nInlineEditor.propTypes = {\r\n isUsingInheritedValue: PropTypes.bool.isRequired,\r\n inheritedValue: (PropTypes.number || PropTypes.string).isRequired,\r\n inheritedValueLevel: PropTypes.string.isRequired,\r\n attributeName: PropTypes.string.isRequired,\r\n dataType: PropTypes.string.isRequired,\r\n customedValue: (PropTypes.number || PropTypes.string).isRequired,\r\n cancel: PropTypes.func.isRequired,\r\n save: PropTypes.func.isRequired,\r\n i18n: PropTypes.func.isRequired,\r\n};\r\n\r\nexport class AdCustomizerAttributeInlineEditor extends Backbone.View {\r\n initialize({\r\n isUsingInheritedValue,\r\n inheritedValue,\r\n inheritedValueLevel,\r\n value,\r\n valueLevel,\r\n currentLevel,\r\n dataType,\r\n attributeName,\r\n i18n = { getString: x => x },\r\n }) {\r\n this.i18n = i18n;\r\n this.isUsingInheritedValue = isUsingInheritedValue;\r\n this.inheritedValue = this.isUsingInheritedValue ? value : inheritedValue;\r\n this.inheritedValueLevel = this.isUsingInheritedValue ? valueLevel : inheritedValueLevel;\r\n this.value = value;\r\n this.valueLevel = valueLevel;\r\n this.currentLevel = currentLevel;\r\n this.dataType = dataType;\r\n this.attributeName = attributeName;\r\n }\r\n\r\n render() {\r\n ReactDOM.render(\r\n this.cancel()}\r\n save={(value, selectedKey, dataType) => this.save(value, selectedKey, dataType)}\r\n i18n={this.i18n}\r\n />,\r\n this.el\r\n );\r\n return this;\r\n }\r\n\r\n save(customedValue, selectedKey, dataType) {\r\n if (selectedKey === 'inherited' && !this.isUsingInheritedValue) {\r\n this.trigger('save', { value: 'delete_value' });\r\n return;\r\n }\r\n if (selectedKey === 'customed' && !_.isEmpty(customedValue) &&\r\n (this.value !== customedValue || this.currentLevel !== this.valueLevel)) {\r\n const formattedValue = dataType === 'String' || dataType === 'Price' ? customedValue : decimalNumber.fromLocalToFloat(customedValue) || customedValue;\r\n this.trigger('save', { value: formattedValue });\r\n return;\r\n }\r\n this.trigger('close');\r\n }\r\n\r\n cancel() {\r\n this.trigger('close');\r\n }\r\n}\r\n","export const getInlineEditorViewStyles = () => ({\r\n choiceGroup: {\r\n root: {\r\n maxWidth: '190px',\r\n selectors: {\r\n 'label.ms-ChoiceField-field': {\r\n padding: '0px',\r\n },\r\n 'div.inherited-value': {\r\n paddingLeft: '30px',\r\n wordBreak: 'break-all',\r\n },\r\n },\r\n },\r\n },\r\n textField: {\r\n fieldGroup: {\r\n root: {\r\n selectors: {\r\n '&:after': {\r\n display: 'none',\r\n },\r\n },\r\n },\r\n },\r\n },\r\n});\r\n","import _ from 'underscore';\r\nimport { CampaignuiBaseColumn } from '@bingads-webui-campaign/campaignui-base-column';\r\nimport { SchemaI18n } from '@bingads-webui-universal/schema-i18n';\r\nimport { GridCustomizedPopupEditor } from '@bingads-webui-campaign/grid-customized-popup-editor';\r\nimport { inlineEditSave } from '@bingads-webui-campaign/summary-grid-helper';\r\nimport CampaignCacheManager from '@bingads-webui-campaign-legacy/cache-manager';\r\nimport template from './rsa-ad-customizer-attribute-template.pug';\r\nimport { AdCustomizerAttributeInlineEditor } from './inline-editor-view';\r\n\r\nexport class RSAAdCustomizerAttributeColumn extends CampaignuiBaseColumn {\r\n constructor(columnConfig) {\r\n const {\r\n Name,\r\n i18n,\r\n i18nErrors,\r\n Datatype,\r\n gridType,\r\n resource,\r\n gridView,\r\n permissions,\r\n } = columnConfig;\r\n const dataTypeI18nKey = `RSAAdCustomizer_Attribute_${Datatype}`;\r\n super(_.defaults({\r\n title: `${Name} (${i18n.getString(dataTypeI18nKey)})`,\r\n name: `RSAAdCustomizerAttributes-${Name}`,\r\n property: 'RSAAdCustomizerAttributes',\r\n sortable: false,\r\n bodyClasses: ['grid-column-Delivery'],\r\n i18n,\r\n enableEdit: item => gridType !== 'Campaign' || item.CampaignType === 'Default',\r\n }, columnConfig));\r\n\r\n this.rawName = Name;\r\n this.gridType = gridType;\r\n this.resource = resource;\r\n this.i18n = i18n;\r\n this.i18nErrors = i18nErrors;\r\n this.gridView = gridView;\r\n this.dataType = Datatype;\r\n this.permissions = permissions;\r\n }\r\n\r\n get title() {\r\n return this.config.title;\r\n }\r\n\r\n onPrompt({ event, item, newPosition }) {\r\n if (event.target.className.includes('editorial-status')) {\r\n return null;\r\n }\r\n const RSAAdCustomizerAttribute = this.findAttribute(item.RSAAdCustomizerAttributes);\r\n if (!RSAAdCustomizerAttribute) return null;\r\n\r\n const AdCustomizerAttributeInlineEditorView = new AdCustomizerAttributeInlineEditor({\r\n i18n: this.i18n,\r\n isUsingInheritedValue: this.gridType !== RSAAdCustomizerAttribute.ValueSetAtLevel,\r\n inheritedValue: RSAAdCustomizerAttribute.InheritedValue,\r\n inheritedValueLevel: RSAAdCustomizerAttribute.InheritedValueSetAtLevel,\r\n valueLevel: RSAAdCustomizerAttribute.ValueSetAtLevel,\r\n value: RSAAdCustomizerAttribute.Value,\r\n currentLevel: this.gridType,\r\n dataType: this.dataType,\r\n attributeName: RSAAdCustomizerAttribute.Name,\r\n });\r\n\r\n AdCustomizerAttributeInlineEditorView.on('save', ({ value }) => {\r\n inlineEditSave({\r\n id: RSAAdCustomizerAttribute.Id,\r\n additionalPayload: {\r\n Name: RSAAdCustomizerAttribute.Name,\r\n AdCustomizerAttributeValue: value,\r\n [this.gridType]: { Id: item.Id },\r\n },\r\n }, {\r\n gridView: this.gridView,\r\n resource: this.resource,\r\n i18n: this.i18n,\r\n i18nErrors: this.i18nErrors,\r\n editorView: AdCustomizerAttributeInlineEditorView,\r\n editorViewCallbackAfterUpdate: () => {\r\n AdCustomizerAttributeInlineEditorView.trigger('close');\r\n CampaignCacheManager.invalidate('AdCustomizerAttribute');\r\n this.gridView.refresh(true);\r\n },\r\n });\r\n });\r\n const groupClass = `grid-group-${_.result(this.config, 'group', 'other')}`;\r\n const editorView = new GridCustomizedPopupEditor({\r\n editorView: AdCustomizerAttributeInlineEditorView.render(),\r\n cellPosition: newPosition,\r\n renderBelow: false,\r\n className: `grid-popupeditor ${groupClass}`,\r\n parentContainerSelector: '.grid-and-disclaim-container',\r\n });\r\n\r\n return editorView.render();\r\n }\r\n\r\n pickProperty(item) {\r\n return {\r\n RSAAdCustomizerAttribute: this.findAttribute(item.RSAAdCustomizerAttributes),\r\n };\r\n }\r\n\r\n findAttribute(attributes) {\r\n return _.find(attributes, attribute => attribute.Name === this.rawName);\r\n }\r\n\r\n template({ value }) {\r\n const { RSAAdCustomizerAttribute } = value;\r\n const schemaI18n = new SchemaI18n({ i18n: this.config.i18n });\r\n\r\n let defaultValue = '-';\r\n let showInheritIcon = false;\r\n if (RSAAdCustomizerAttribute && !_.isEmpty(RSAAdCustomizerAttribute.Value)) {\r\n defaultValue = RSAAdCustomizerAttribute.Value;\r\n if (this.gridType !== RSAAdCustomizerAttribute.ValueSetAtLevel) {\r\n showInheritIcon = true;\r\n }\r\n }\r\n const editorialStatus =\r\n RSAAdCustomizerAttribute ? RSAAdCustomizerAttribute.EditorialStatus : null;\r\n return template({\r\n Value: defaultValue,\r\n editorialStatus,\r\n editorialStatusText: editorialStatus ? schemaI18n.enum('EditorialStatus', editorialStatus) : null,\r\n showInheritIcon,\r\n i18n: this.i18n,\r\n permissions: this.permissions,\r\n Id: RSAAdCustomizerAttribute ? RSAAdCustomizerAttribute.Id : '',\r\n ValueSetAtLevel: RSAAdCustomizerAttribute ? RSAAdCustomizerAttribute.ValueSetAtLevel : '',\r\n });\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { odata } from '@bingads-webui/http-util';\r\n\r\n\r\nconst odataURLMap = {\r\n Account: '/Customers(:customer_id)/Accounts(:account_id)/AdCustomizerAttributes/Default.GetEditorialReasons',\r\n Campaign: '/Customers(:customer_id)/Accounts(:account_id)/Campaigns(:campaign_id)/AdCustomizerAttributes/Default.GetEditorialReasons',\r\n AdGroup: '/Customers(:customer_id)/Accounts(:account_id)/Campaigns(:campaign_id)/AdGroups(:adgroup_id)/AdCustomizerAttributes/Default.GetEditorialReasons',\r\n Keyword: '/Customers(:customer_id)/Accounts(:account_id)/Campaigns(:campaign_id)/AdGroups(:adgroup_id)/Keywords(:keyword_id)/AdCustomizerAttributes/Default.GetEditorialReasons',\r\n};\r\nexport function getAppealRejections({\r\n attributeId,\r\n ajaxOptions,\r\n valueLevel,\r\n}) {\r\n const odataURL = odataURLMap[valueLevel];\r\n const options = _.extend(\r\n { url: odataURL, contentType: 'application/json' }, ajaxOptions,\r\n {\r\n data: {\r\n EntityIds: [parseInt(attributeId, 10)],\r\n },\r\n }\r\n );\r\n\r\n return odata.post(options)\r\n .then((data) => {\r\n if (data && !data.Errors) {\r\n return data;\r\n }\r\n return {};\r\n });\r\n}\r\n","import _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport { getEditorialTemplates, ENTITY } from '@bingads-webui-campaign/delivery-status-popup-factory';\r\nimport { getFwdLinkId } from '@bingads-webui-campaign/api-errors';\r\nimport { getAppealRejections } from './get-editorial-reasons';\r\n\r\nexport function getEditorialReasonsTemplate({\r\n i18n,\r\n commonI18n,\r\n ajaxOptions,\r\n attributeId,\r\n valueLevel,\r\n instrumentation,\r\n permissions,\r\n}, deliveryStatus) {\r\n return new Promise((resolve) => {\r\n // send request to fetch editorial reasons\r\n getAppealRejections({\r\n attributeId, ajaxOptions, valueLevel,\r\n }).then((response) => {\r\n let reasons = [];\r\n const { value } = response || {};\r\n if (value && !_.isEmpty(value) && !_.isEmpty(value[0].Reasons)) {\r\n reasons = value[0].Reasons;\r\n }\r\n\r\n const options = {\r\n reasons,\r\n i18n,\r\n commonI18n,\r\n instrumentation,\r\n ajaxOptions,\r\n editorialRejection: {\r\n getFwdLinkId,\r\n },\r\n errI18n: i18n,\r\n locationI18n: i18n,\r\n entity: ENTITY.CUSTOMIZERFEED,\r\n deliveryStatus,\r\n permissions,\r\n };\r\n\r\n const reasonTemplates = getEditorialTemplates(options);\r\n\r\n resolve(reasonTemplates);\r\n });\r\n });\r\n}\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useEffect, useRef, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { clone } from 'underscore';\r\nimport classnames from 'classnames';\r\nimport Backbone from 'backbone';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport BudgetView from '@bingads-webui-campaign-legacy/budget/view/budget';\r\nimport SharedBudgetView from '@bingads-webui-campaign-legacy/shared-budget/view/shared-budget-switch-editor';\r\nimport '@bingads-webui-campaign/ko-stop-binding';\r\nimport PageContext from '@bingads-webui-static-legacy/page-context';\r\nimport { mergeStyles } from '@bingads-webui-campaign-react/common-styles';\r\n\r\nconst getStyles = (theme, palette = {}) => ({\r\n budgetContainer: {\r\n ...mergeStyles(\r\n { theme },\r\n {\r\n '& .container-budget': {\r\n '& span': {\r\n color: palette.neutralPrimary,\r\n },\r\n '& .form-control-static': {\r\n padding: '9px 0px',\r\n lineHeight: '14px',\r\n minHeight: 'auto',\r\n },\r\n '& .input-group': {\r\n '& .input-group-addon': {\r\n color: '#323130',\r\n border: 0,\r\n padding: '6px',\r\n background: '#ffffff',\r\n },\r\n },\r\n '& .col-sm-3': {\r\n display: 'table',\r\n paddingRight: 0,\r\n paddingLeft: 0,\r\n },\r\n '& .margin-rt-five': {\r\n paddingLeft: 28,\r\n },\r\n\r\n },\r\n '& span.bold': {\r\n fontWeight: 1000,\r\n },\r\n '& .alert-budget-button': {\r\n marginLeft: '10px',\r\n paddingTop: '5px',\r\n '& button': {\r\n color: 'black',\r\n fontSize: '13px',\r\n fontWeight: 500,\r\n borderColor: '#edebe9',\r\n },\r\n },\r\n '& .shared-budget-switch-editor-grid': {\r\n '& .cell-selection': {\r\n '& input': {\r\n outline: 'none !important',\r\n },\r\n },\r\n },\r\n }\r\n ),\r\n },\r\n});\r\n\r\nexport const LegacySharedBudget = React.memo(({\r\n id,\r\n className,\r\n campaignId,\r\n budget,\r\n onChange,\r\n i18n,\r\n validationDailyMinBudget,\r\n hideBudgetMinRecommendation,\r\n noApplyBudgetFromSharedLibrary,\r\n readOnly,\r\n}) => {\r\n const view = useRef();\r\n const viewListener = useMemo(() => clone(Backbone.Events), []);\r\n let container;\r\n\r\n useEffect(() => {\r\n const budgetFactory = SharedBudgetView.newFactory(BudgetView);\r\n const showBudgetMinRecommend = campaignId !== undefined && !hideBudgetMinRecommendation;\r\n const minimumBudget = budget ? budget.Amount * 0.5 : undefined;\r\n\r\n view.current = budgetFactory({\r\n withRealTimeUpdates: true,\r\n model: budget,\r\n campaignId,\r\n isForVNext: true,\r\n hideDailyBudgetOptions: false,\r\n showBudgetMinRecommend,\r\n currencySymbol: i18n.getCurrencySymbol(PageContext.AccountCurrencyCode),\r\n minimumBudget,\r\n validationDailyMinBudget,\r\n showInitialUiBlocker: false,\r\n noApplyBudgetFromSharedLibrary,\r\n showNoSharedBudgetLink: true,\r\n readOnly,\r\n });\r\n\r\n viewListener.listenTo(view.current, 'change', onChange);\r\n view.current.render();\r\n view.current.$el.appendTo(container);\r\n\r\n return () => {\r\n view.current.remove();\r\n };\r\n }, [campaignId]);\r\n\r\n useEffect(() => {\r\n viewListener.stopListening(view.current);\r\n viewListener.listenTo(view.current, 'change', onChange);\r\n\r\n return () => viewListener.stopListening(view.current);\r\n }, [onChange, viewListener]);\r\n\r\n const classes = useDefaultStyles(getStyles);\r\n\r\n return (\r\n \r\n
    { container = ref; }} />\r\n
    \r\n );\r\n});\r\n\r\nLegacySharedBudget.propTypes = {\r\n id: PropTypes.string,\r\n className: PropTypes.string,\r\n campaignId: PropTypes.string,\r\n budget: PropTypes.shape({\r\n Amount: PropTypes.number,\r\n }),\r\n onChange: PropTypes.func.isRequired,\r\n i18n: PropTypes.shape({ getCurrencySymbol: PropTypes.func.isRequired }).isRequired,\r\n validationDailyMinBudget: PropTypes.number,\r\n hideBudgetMinRecommendation: PropTypes.bool,\r\n noApplyBudgetFromSharedLibrary: PropTypes.bool,\r\n readOnly: PropTypes.bool,\r\n};\r\n\r\nLegacySharedBudget.defaultProps = {\r\n id: undefined,\r\n className: undefined,\r\n budget: undefined,\r\n campaignId: undefined,\r\n validationDailyMinBudget: undefined,\r\n hideBudgetMinRecommendation: true,\r\n noApplyBudgetFromSharedLibrary: false,\r\n readOnly: false,\r\n};\r\n","import React, { useCallback, useContext } from 'react';\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 { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { LegacySharedBudget } from './legacy-shared-budget';\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};\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 _ from 'underscore';\r\n\r\nexport const getBudgetTitleDetails = (serverContext, i18n, budget) => {\r\n const currencyCode = serverContext.CurrentAccount.CurrencyCode;\r\n const amount = _.isNumber(budget && budget.Amount) ?\r\n i18n.formatCurrency(budget.Amount, currencyCode) :\r\n '-';\r\n return i18n.getString(_TL_('{{amount}} per day'), {\r\n amount,\r\n });\r\n};\r\n","// todo: [4183561] should update to use palette provided by theme provider\r\nexport const palette = {\r\n neutralLight: '#edebe9',\r\n neutralLighter: '#f3f2f1',\r\n neutralPrimary: '#323130',\r\n neutralQuaternaryAlt: '#e1dfdd',\r\n neutralSecondary: '#605e5c',\r\n neutralSecondaryAlt: '#8a8886',\r\n neutralTertiary: '#a19f9d',\r\n themeDark: '#005a9e',\r\n themeDarkAlt: '#106ebe',\r\n themeDarker: '#004578',\r\n themePrimary: '#0078d4',\r\n white: '#ffffff',\r\n};\r\n","import {\r\n predicateValueEditorStyle,\r\n editImageCommonStyle,\r\n} from '@bingads-webui-campaign-react/common-styles';\r\nimport { getCommonPreviewContainerStyles } from '@bingads-webui-campaign-react/shared-image-preview-styles';\r\n\r\nimport { palette } from './palette';\r\n\r\nconst panelStyle = () => ({\r\n '& .panel-body': {\r\n height: '100%',\r\n marginBottom: '65px',\r\n },\r\n});\r\n\r\nconst floatButtonStyle = () => ({\r\n floatButton: {\r\n background: palette.neutralLighter,\r\n border: 'none',\r\n borderRadius: 0,\r\n color: palette.themeDarkAlt,\r\n fontWeight: 'normal',\r\n height: 'auto',\r\n minHeight: 'auto',\r\n minWidth: 'auto',\r\n width: 'auto',\r\n padding: '14px 8px',\r\n\r\n '&:active, &:focus, &:hover': {\r\n color: palette.themeDark,\r\n background: palette.neutralQuaternaryAlt,\r\n },\r\n },\r\n});\r\n\r\nconst paginationStyle = ({ iconFontFamily = 'MsAds MDL2 Assets' }) => ({\r\n '& .ba-pagination, .dlb-pager-container, .pagination-control': {\r\n height: 'auto',\r\n padding: '6px 0',\r\n\r\n '& > .text': {\r\n display: 'inline-block',\r\n verticalAlign: 'middle',\r\n padding: '0px 0px 8px 5px',\r\n '& > span': {\r\n marginRight: '5px',\r\n },\r\n },\r\n '& button': {\r\n border: 0,\r\n background: 'transparent',\r\n minWidth: '1px',\r\n padding: 0,\r\n color: palette.neutralSecondary,\r\n },\r\n\r\n '& button:hover': {\r\n borderRadius: 2,\r\n background: palette.neutralLighter,\r\n },\r\n\r\n '& button:disabled': {\r\n background: 'transparent',\r\n color: '#BEBBB8',\r\n },\r\n\r\n '& .pager-input': {\r\n border: `1px solid ${palette.neutralSecondary}`,\r\n padding: '6px 8px',\r\n height: 32,\r\n textAlign: 'center',\r\n margin: '0 12px',\r\n width: 70,\r\n display: 'inline-block',\r\n borderRadius: 2,\r\n boxSizing: 'border-box',\r\n color: palette.neutralPrimary,\r\n },\r\n\r\n '& .glyphicon-triangle-left, & .glyphicon-triangle-right': {\r\n display: 'inline-block',\r\n fontFamily: iconFontFamily,\r\n color: 'inherit',\r\n },\r\n\r\n '& .glyphicon-triangle-left:before': {\r\n content: '\"\\\\E76B\"',\r\n },\r\n\r\n '& .glyphicon-triangle-right:before': {\r\n content: '\"\\\\E76C\"',\r\n },\r\n },\r\n\r\n '& .pager, .location-bid-pager-view': {\r\n height: 32,\r\n padding: 0,\r\n margin: 0,\r\n\r\n '& .pager-input, .page-number-input, .grid-pager-input': {\r\n border: `1px solid ${palette.neutralSecondary}`,\r\n padding: '6px 8px',\r\n height: 32,\r\n textAlign: 'center',\r\n margin: '0 12px',\r\n width: 70,\r\n display: 'inline-block',\r\n borderRadius: 2,\r\n boxSizing: 'border-box',\r\n color: palette.neutralPrimary,\r\n background: palette.white,\r\n },\r\n\r\n '& .pager-input[disabled], & .page-number-input[disabled], & .grid-pager-input[disabled]': {\r\n backgroundColor: palette.neutralLighter,\r\n },\r\n\r\n '& .pager-previous, & .pager-next, & .glyphicon-triangle-left, & .glyphicon-triangle-right': {\r\n fontFamily: iconFontFamily,\r\n color: palette.neutralSecondary,\r\n background: 'transparent',\r\n display: 'inline-block',\r\n verticalAlign: 'middle',\r\n padding: '2px 5px',\r\n height: 32,\r\n lineHeight: '32px',\r\n marginTop: '-7px',\r\n outline: 'none',\r\n },\r\n\r\n '& .pager-previous, & .pager-next': {\r\n '&:focus': {\r\n outline: `1px solid ${palette.neutralSecondary}`,\r\n outlineOffset: '-2px',\r\n },\r\n },\r\n\r\n '& .pager-previous:hover, & .pager-next:hover': {\r\n borderRadius: 2,\r\n background: palette.neutralLighter,\r\n },\r\n\r\n '& .pager-previous-disabled, & .pager-next-disabled': {\r\n fontFamily: iconFontFamily,\r\n color: '#BEBBB8',\r\n background: 'transparent',\r\n display: 'inline-block',\r\n verticalAlign: 'middle',\r\n padding: '2px 5px',\r\n height: 32,\r\n lineHeight: '32px',\r\n marginTop: '-7px',\r\n },\r\n\r\n '& .pager-previous-disabled:before, & .pager-previous:before': {\r\n content: '\"\\\\E76B\"',\r\n },\r\n\r\n '& .pager-next-disabled:before, & .pager-next:before': {\r\n content: '\"\\\\E76C\"',\r\n },\r\n\r\n '& .pager-totalCount': {\r\n verticalAlign: 'unset',\r\n marginLeft: 4,\r\n },\r\n },\r\n\r\n '& .pagination-control': {\r\n textAlign: 'left',\r\n\r\n '& .text': {\r\n display: 'inline-block',\r\n width: 'auto',\r\n },\r\n\r\n '& .page-size-selector': {\r\n border: `1px solid ${palette.neutralSecondary}`,\r\n height: 32,\r\n textAlign: 'center',\r\n margin: '0 12px',\r\n width: '70px !important',\r\n display: 'inline-block',\r\n borderRadius: 2,\r\n boxSizing: 'border-box',\r\n color: palette.neutralPrimary,\r\n },\r\n },\r\n\r\n});\r\n\r\nexport const btnStyle = () => {\r\n const primary = {\r\n height: 32,\r\n minWidth: 80,\r\n background: palette.themePrimary,\r\n borderRadius: 2,\r\n textAlign: 'center',\r\n color: palette.white,\r\n boxSizing: 'border-box',\r\n\r\n '&:hover': {\r\n background: palette.themeDarkAlt,\r\n },\r\n\r\n '&:focus': {\r\n background: palette.themePrimary,\r\n outline: 'none',\r\n },\r\n\r\n '&:active': {\r\n background: palette.themeDark,\r\n },\r\n\r\n '&:disabled': {\r\n background: palette.neutralLighter,\r\n color: palette.neutralTertiary,\r\n },\r\n };\r\n\r\n return {\r\n '.btn-primary': primary,\r\n '.btn-hero': primary,\r\n\r\n '.btn-default': {\r\n height: 32,\r\n minWidth: 80,\r\n background: palette.white,\r\n borderRadius: 2,\r\n textAlign: 'center',\r\n color: palette.neutralPrimary,\r\n border: `1px solid ${palette.neutralSecondaryAlt}`,\r\n\r\n '&:hover': {\r\n background: palette.neutralLighter,\r\n },\r\n\r\n '&:focus': {\r\n background: palette.neutralLight,\r\n },\r\n\r\n '&:disabled': {\r\n background: palette.neutralLighter,\r\n color: palette.neutralTertiary,\r\n },\r\n },\r\n };\r\n};\r\n\r\nconst controlStyle = () => ({\r\n '.form-control': {\r\n '-webkit-box-shadow': 'none',\r\n backgroundColor: palette.white,\r\n backgroundImage: 'none',\r\n border: `1px solid ${palette.neutralSecondary}`,\r\n borderRadius: 2,\r\n boxShadow: 'none',\r\n color: palette.neutralPrimary,\r\n display: 'block',\r\n fontSize: 14,\r\n height: 32,\r\n lineHeight: 1.5,\r\n padding: '6px 12px',\r\n transition: 'border-color .15s ease-in-out, box-shadow .15s ease-in-out',\r\n\r\n '&:active': {\r\n borderColor: palette.themePrimary,\r\n },\r\n\r\n '&:hover': {\r\n borderColor: palette.neutralPrimary,\r\n },\r\n\r\n '&:focus': {\r\n '-webkit-box-shadow': 'none',\r\n borderColor: palette.themePrimary,\r\n boxShadow: 'none',\r\n outline: 0,\r\n },\r\n },\r\n});\r\n\r\nconst addEditCommonStyle = ({ iconFontFamily = 'MsAds MDL2 Assets' }) => ({\r\n '& .add-image-content, & .image-edit-content': {\r\n fontSize: 14,\r\n lineHeight: '20px',\r\n position: 'relative',\r\n\r\n '& .add-image-label, & .edit-image-title': {\r\n fontSize: 20,\r\n fontWeight: 600,\r\n lineHeight: '27px',\r\n marginBottom: 16,\r\n },\r\n\r\n '& .add-image-description': {\r\n marginBottom: 20,\r\n paddingBottom: 32,\r\n borderBottom: `1px solid ${palette.neutralSecondary}`,\r\n },\r\n\r\n '& .image-preview-crop-description': {\r\n fontSize: 14,\r\n lineHeight: '20px',\r\n margin: '0 0 32px 0',\r\n },\r\n\r\n '& .image-cropper-ratio-label': {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n lineHeight: '20px',\r\n margin: '16px 0',\r\n },\r\n\r\n '& .close-dialog-button': {\r\n backgroundColor: 'transparent',\r\n color: palette.neutralSecondary,\r\n fontFamily: iconFontFamily,\r\n fontSize: 12,\r\n lineHeight: 1,\r\n position: 'absolute',\r\n right: 0,\r\n top: 0,\r\n border: 'none',\r\n background: 'none',\r\n\r\n '&:before': {\r\n content: '\"\\\\E711\"',\r\n },\r\n },\r\n\r\n '& .search-box-container': {\r\n width: '40%',\r\n display: 'flex',\r\n alignItems: 'center',\r\n\r\n '& .search-box__input-group': {\r\n display: 'flex',\r\n\r\n '& input.search-box__input': {\r\n color: palette.neutralSecondary,\r\n marginLeft: -32,\r\n padding: '6px 8px 6px 32px',\r\n order: 1,\r\n },\r\n\r\n '& .search-box__icon': {\r\n position: 'relative',\r\n fontFamily: iconFontFamily,\r\n fontSize: 16,\r\n lineHeight: 1,\r\n order: 0,\r\n padding: 8,\r\n\r\n '&:before': {\r\n content: '\"\\\\E721\"',\r\n },\r\n },\r\n },\r\n\r\n '& .ba-search-box': {\r\n flex: 1,\r\n },\r\n\r\n '& .clear-search': {\r\n marginLeft: 10,\r\n border: 'none',\r\n backgroundColor: 'transparent',\r\n cursor: 'pointer',\r\n fontFamily: iconFontFamily,\r\n },\r\n },\r\n\r\n '& .sort-by-label': {\r\n display: 'none',\r\n },\r\n\r\n '& .dropdown-selector-container': {\r\n float: 'right',\r\n minWidth: '25%',\r\n\r\n '& .dropdown-toggle': {\r\n background: 'url(\"data:image/svg+xml;base64,PHN2ZyBpZD0iTGF5ZXJfMSIgZGF0YS1uYW1lPSJMYXllciAxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMiAxMiI+PGRlZnM+PHN0eWxlPi5jbHMtMXtmaWxsOiM0ODQ2NDQ7fTwvc3R5bGU+PC9kZWZzPjx0aXRsZT5BcnRib2FyZCAxPC90aXRsZT48cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik0xMS4zNyw0bC41Mi41M0w2LDEwLjQ1LjEyLDQuNTYuNjQsNCw2LDkuNFoiLz48L3N2Zz4=\") no-repeat right 8px top 8px transparent',\r\n backgroundSize: '14px 14px',\r\n borderColor: palette.neutralSecondary,\r\n borderRadius: 2,\r\n boxShadow: 'none',\r\n color: palette.neutralPrimary,\r\n fontWeight: 'normal',\r\n height: 32,\r\n padding: '0px 28px 0px 8px',\r\n transition: 'border-color .15s ease-in-out,box-shadow .15s ease-in-out',\r\n width: '100%',\r\n '-webkit-box-shadow': 'none',\r\n '-webkit-appearance': 'none',\r\n '-moz-appearance': 'none',\r\n\r\n '&:active': {\r\n borderColor: palette.themePrimary,\r\n },\r\n\r\n '&:focus': {\r\n borderColor: palette.themePrimary,\r\n outline: 0,\r\n },\r\n\r\n '&:hover': {\r\n borderColor: palette.neutralPrimary,\r\n },\r\n\r\n '& span': {\r\n margin: 'auto 0',\r\n },\r\n\r\n '& .glyphicon-triangle-bottom': {\r\n display: 'none',\r\n },\r\n },\r\n },\r\n\r\n '& .image-picker-container': {\r\n '& .image-name-section': {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n width: '100%',\r\n marginTop: 5,\r\n marginBottom: 5,\r\n\r\n '& .image-name': {\r\n position: 'relative',\r\n left: 0,\r\n bottom: 0,\r\n width: 'auto',\r\n whiteSpace: 'nowrap',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n },\r\n\r\n '& .glyphicon-pencil': {\r\n border: 'none',\r\n background: 'none',\r\n color: palette.themeDark,\r\n display: 'inline',\r\n fontFamily: iconFontFamily,\r\n paddingLeft: 8,\r\n position: 'relative',\r\n top: 'unset',\r\n right: 'unset',\r\n\r\n '&:before': {\r\n content: '\"\\\\E70F\"',\r\n },\r\n },\r\n },\r\n\r\n '& .image-name-container': {\r\n background: palette.white,\r\n border: 'rgba(0, 0, 0, 0.2)',\r\n boxShadow: '0px 0px 6px rgba(0, 0, 0, 0.2)',\r\n position: 'absolute',\r\n top: 90,\r\n left: 0,\r\n margin: 1,\r\n padding: 16,\r\n minWidth: 240,\r\n width: 'max-content',\r\n zIndex: 9,\r\n display: 'grid',\r\n gridTemplateColumns: 'auto auto 1fr',\r\n\r\n '& .image-name-input': {\r\n extend: controlStyle()['.form-control'],\r\n gridColumnStart: '1',\r\n gridColumnEnd: 'span 3',\r\n\r\n '& + button': {\r\n extend: btnStyle()['.btn-primary'],\r\n },\r\n },\r\n\r\n '& #image-name-field': {\r\n width: '100%',\r\n },\r\n\r\n '& button': {\r\n marginLeft: 0,\r\n marginTop: 16,\r\n\r\n '& ~ button': {\r\n marginLeft: 8,\r\n },\r\n },\r\n },\r\n\r\n '& .replace-failed-video': {\r\n position: 'absolute',\r\n right: 43,\r\n bottom: 30,\r\n padding: '13px 5px',\r\n border: 'none',\r\n },\r\n\r\n '& .replace-failed-video:hover': {\r\n background: '#e1dfdd',\r\n },\r\n\r\n '& button.glyphicon-remove': {\r\n extend: floatButtonStyle().floatButton,\r\n position: 'absolute',\r\n top: 'unset',\r\n right: 5,\r\n bottom: 31,\r\n fontFamily: iconFontFamily,\r\n fontSize: 16,\r\n lineHeight: 1,\r\n float: 'right',\r\n borderRadius: 0,\r\n\r\n '&:before': {\r\n content: '\"\\\\E711\"',\r\n },\r\n\r\n '&.circular-hover': {\r\n backgroundColor: `${palette.white}d4`,\r\n padding: 0,\r\n borderRadius: 0,\r\n height: 32,\r\n width: 32,\r\n right: 0,\r\n bottom: 36,\r\n },\r\n\r\n '&.circular-hover:hover': {\r\n backgroundColor: `${palette.themeDarkAlt}ff`,\r\n '&:before': {\r\n color: palette.white,\r\n },\r\n },\r\n },\r\n\r\n '& .image-delete.glyphicon.glyphicon-remove': {\r\n display: 'inline',\r\n },\r\n\r\n '& .image-info-section': {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n width: '100%',\r\n whiteSpace: 'nowrap',\r\n '& .image-id': {\r\n fontWeight: 'inherit',\r\n padding: 0,\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n },\r\n },\r\n },\r\n\r\n '& .image-picker': {\r\n background: 'none',\r\n border: 'none',\r\n margin: '16px 0',\r\n padding: 0,\r\n\r\n '& .existing-images': {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n height: 'auto',\r\n justifyContent: 'space-between',\r\n\r\n '& .existing-image-container': {\r\n display: 'inline-flex',\r\n margin: '0 0 24px 0',\r\n paddingBottom: 20,\r\n\r\n '& .image-section-wrapper': {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n height: 202,\r\n width: 202,\r\n\r\n '& .image-section': {\r\n position: 'relative',\r\n\r\n '& .image-dimensions': {\r\n display: 'none',\r\n },\r\n\r\n '& button.existing-image': {\r\n border: '1px solid transparent',\r\n\r\n '&:before': {\r\n fontFamily: iconFontFamily,\r\n fontSize: 18,\r\n position: 'absolute',\r\n right: 5,\r\n top: 5,\r\n },\r\n\r\n '& img': {\r\n margin: 0,\r\n maxHeight: 200,\r\n maxWidth: 200,\r\n },\r\n },\r\n\r\n '&:active button.existing-image': {\r\n border: `1px solid ${palette.themePrimary}`,\r\n\r\n '&:before': {\r\n color: palette.themePrimary,\r\n content: '\"\\\\ECCB\"',\r\n },\r\n },\r\n\r\n '&:focus button.existing-image': {\r\n border: `1px solid ${palette.neutralSecondary}`,\r\n },\r\n\r\n '&:hover button.existing-image': {\r\n border: `1px solid ${palette.neutralPrimary}`,\r\n\r\n '&:before': {\r\n color: palette.neutralPrimary,\r\n content: '\"\\\\ECCA\"',\r\n },\r\n },\r\n\r\n '& button.glyphicon-remove': {\r\n extend: floatButtonStyle().floatButton,\r\n position: 'absolute',\r\n top: 'unset',\r\n right: 1,\r\n bottom: 1,\r\n fontFamily: iconFontFamily,\r\n fontSize: 16,\r\n lineHeight: 1,\r\n float: 'right',\r\n\r\n '&:before': {\r\n content: '\"\\\\E711\"',\r\n },\r\n },\r\n },\r\n },\r\n\r\n '& .image-name-section': {\r\n bottom: 0,\r\n left: 0,\r\n position: 'absolute',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n width: '100%',\r\n\r\n '& .image-name': {\r\n position: 'relative',\r\n left: 0,\r\n bottom: 0,\r\n width: 'auto',\r\n whiteSpace: 'nowrap',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n },\r\n\r\n '& .glyphicon-pencil': {\r\n border: 'none',\r\n background: 'none',\r\n color: palette.themeDark,\r\n display: 'inline',\r\n fontFamily: iconFontFamily,\r\n paddingLeft: 8,\r\n position: 'relative',\r\n top: 'unset',\r\n right: 'unset',\r\n\r\n '&:before': {\r\n content: '\"\\\\E70F\"',\r\n },\r\n },\r\n },\r\n\r\n '& .image-name-container': {\r\n background: palette.white,\r\n border: 'rgba(0, 0, 0, 0.2)',\r\n boxShadow: '0px 0px 6px rgba(0, 0, 0, 0.2)',\r\n left: 0,\r\n margin: 1,\r\n padding: 16,\r\n width: 220,\r\n zIndex: 9,\r\n\r\n '& .image-name-input': {\r\n extend: controlStyle()['.form-control'],\r\n\r\n '& + button': {\r\n extend: btnStyle()['.btn-primary'],\r\n },\r\n },\r\n\r\n '& #image-name-field': {\r\n width: '100%',\r\n },\r\n\r\n '& button': {\r\n marginLeft: 0,\r\n marginTop: 16,\r\n\r\n '& ~ button': {\r\n marginLeft: 8,\r\n },\r\n },\r\n },\r\n\r\n '& .image-delete.glyphicon.glyphicon-remove': {\r\n display: 'inline',\r\n },\r\n },\r\n },\r\n },\r\n\r\n '& .ba-pagination': {\r\n display: 'block',\r\n textAlign: 'center',\r\n },\r\n\r\n '& .choose-file-description': {\r\n borderTop: `1px solid ${palette.neutralSecondary}`,\r\n paddingTop: 32,\r\n },\r\n\r\n '& .edit-url-description': {\r\n paddingTop: 16,\r\n },\r\n\r\n '& .file-picker-react-wrapper': {\r\n margin: 0,\r\n padding: '14px 0 0 0',\r\n width: '100%',\r\n\r\n '& .file-picker-btn': {\r\n extend: btnStyle()['.btn-default'],\r\n display: 'inline-block',\r\n float: 'none',\r\n marginLeft: 0,\r\n\r\n '& ~ .file-text': {\r\n display: 'inline-block',\r\n border: 'none',\r\n },\r\n },\r\n },\r\n\r\n '& .file-drag-container': {\r\n position: 'relative',\r\n width: '100%',\r\n height: '190px',\r\n marginTop: '8px',\r\n overflow: 'hidden',\r\n\r\n '& .file-picker-react-wrapper': {\r\n },\r\n\r\n '& .file-picker-react-wrapper.disabled': {\r\n display: 'none',\r\n },\r\n },\r\n\r\n '& .add-image-button-bar, & .image-edit-actions': {\r\n borderTop: '1px solid #EDEBE9',\r\n bottom: 0,\r\n margin: '0 -16px',\r\n padding: '16px',\r\n position: 'fixed',\r\n width: '100%',\r\n\r\n '& button ~ button': {\r\n marginLeft: 12,\r\n },\r\n },\r\n\r\n '& .image-cropper-in-edit': {\r\n margin: 0,\r\n padding: 0,\r\n },\r\n\r\n '& .edit-preview-section': {\r\n display: 'flex',\r\n\r\n '& .edit-section': {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n },\r\n },\r\n\r\n '& > .error': {\r\n color: '#A80000',\r\n fontSize: 12,\r\n margin: '4px 0 0 0',\r\n },\r\n\r\n '& .HelpTopic, & .a': {\r\n color: '#106ebe',\r\n textDecoration: 'underline',\r\n },\r\n },\r\n});\r\n\r\nexport const getEditImageStyle = (_, { iconFontFamily = 'MsAds MDL2 Assets' }) => ({\r\n editImageStyle: {\r\n '& .image-edit-content .edit-image-title': {\r\n fontSize: 14,\r\n fontFamily: '\"Segoe UI\"',\r\n fontWeight: '400',\r\n fontStyle: 'normal',\r\n },\r\n '& .image-edit-content .close-dialog-button': {\r\n top: 10,\r\n right: 5,\r\n },\r\n '& .image-edit-content .image-preview-crop-description': {\r\n fontSize: 12,\r\n margin: '10px 0',\r\n },\r\n '& .image-edit-content .image-cropper-in-edit': {\r\n padding: 5,\r\n marginTop: 30,\r\n },\r\n '& .image-edit-content .image-cropper-in-edit .image-cropper-ratio-label': {\r\n fontSize: 12,\r\n margin: '10px 0 5px 0',\r\n width: '100%',\r\n fontWeight: '700',\r\n textAlign: 'center',\r\n },\r\n '& .image-edit-content .image-replace-description': {\r\n fontSize: 12,\r\n margin: '10px 0',\r\n },\r\n '& .image-edit-content .preview-section': {\r\n border: '1px solid #CCCCCC',\r\n },\r\n '& .image-edit-content .image-edit-actions': {\r\n marginTop: 40,\r\n },\r\n '& .edit-image-content-container': {\r\n minWidth: 1350,\r\n width: 1350,\r\n },\r\n ...getCommonPreviewContainerStyles(),\r\n ...addEditCommonStyle({ iconFontFamily }),\r\n ...paginationStyle({ iconFontFamily }),\r\n ...panelStyle(),\r\n ...editImageCommonStyle(),\r\n },\r\n previewPlacementContainerRoot: {\r\n display: 'flex',\r\n '& > div:first-child': {\r\n top: -20,\r\n },\r\n },\r\n adPreviewCarousel133x100Container: {\r\n '& .ad-placement-card-preview .carousel-control': {\r\n '& .glyphicon-chevron-left, & .glyphicon-chevron-right': {\r\n top: '5px !important',\r\n },\r\n },\r\n },\r\n});\r\n\r\nexport const getAddImageStyle = (_, { iconFontFamily = 'MsAds MDL2 Assets' }) => ({\r\n addImageStyle: {\r\n '& .video-inactive': {\r\n paddingTop: 60,\r\n },\r\n '& .video-inactive:hover': {\r\n cursor: 'not-allowed',\r\n },\r\n '& .add-image-content': {\r\n fontSize: 12,\r\n position: 'relative',\r\n height: '100%',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n },\r\n ['& .image-selector-for-thumbnail .user-image-picker-container .image-picker-container,' +\r\n '& .image-selector-for-thumbnail .stock-image-picker-container .image-picker-container']: {\r\n maxHeight: '50vh',\r\n maxWidth: '60vw',\r\n },\r\n ['& .user-image-picker-container, .stock-image-picker-container, .image-suggestion-picker-container' +\r\n ', .image-suggestion-picker-container > .react-block-ui-none, .image-suggestion-picker-container > .react-block-ui-none > .react-block-ui-none, .image-suggestion-picker-container > .react-block-ui-none > .react-block-ui']: {\r\n flexGrow: 1,\r\n overflow: 'auto',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n },\r\n '& .social-media-container': {\r\n flexGrow: 1,\r\n overflow: 'auto',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n '& .suggestion-error-invalid': {\r\n marginTop: 16,\r\n textAlign: 'center',\r\n color: 'red',\r\n },\r\n '& .suggestion-error img': {\r\n marginLeft: 129,\r\n marginBottom: 24,\r\n },\r\n '& .desc': {\r\n width: '100%',\r\n },\r\n },\r\n '& .add-image-content .disable-mouse': {\r\n pointerEvents: 'none',\r\n },\r\n '& .add-image-content .add-image-label': {\r\n marginBottom: 15,\r\n fontSize: 14,\r\n fontFamily: '\"Segoe UI\"',\r\n fontWeight: '400',\r\n fontStyle: 'normal',\r\n },\r\n '& .add-image-description': {\r\n marginBottom: 20,\r\n paddingBottom: 32,\r\n borderBottom: `1px solid ${palette.neutralSecondary}`,\r\n },\r\n '& .add-image-content .add-image-description': {\r\n marginBottom: 5,\r\n },\r\n '& .add-image-content .search-box-container': {\r\n width: '45%',\r\n float: 'left',\r\n },\r\n '& .add-image-content .search-box-container .search-box__input-group .search-box__input.form-control': {\r\n borderRadius: '0',\r\n },\r\n '& .add-image-content .search-box-container .search-box__input-group .search-box__icon': {\r\n fontSize: 12,\r\n },\r\n '& .add-image-content .add-image-button-bar': {\r\n marginTop: 15,\r\n },\r\n '& .add-image-content .dropdown-selector-container': {\r\n float: 'right',\r\n },\r\n '& .add-image-content .dropdown-selector-container .ba-dropdown-selector': {\r\n position: 'relative',\r\n },\r\n '& .add-image-content .dropdown-selector-container .ba-dropdown-selector button.dropdown-toggle': {\r\n borderRadius: '0',\r\n minWidth: 190,\r\n },\r\n '& .add-image-content .dropdown-selector-container .ba-dropdown-selector button.dropdown-toggle .icon-right.glyphicon-triangle-bottom': {\r\n paddingTop: 3,\r\n },\r\n '& .add-image-content .dropdown-selector-container .ba-dropdown-selector .ba-list-selector .list-selector-content': {\r\n border: 'none',\r\n },\r\n '& .add-image-content .dropdown-selector-container .ba-dropdown-selector .ba-list-selector .empty-message': {\r\n position: 'absolute',\r\n padding: '5px 10px',\r\n },\r\n '& .add-image-content .dropdown-selector-container .ba-dropdown-selector .ba-list-selector .list-selector-item': {\r\n padding: '5px 10px',\r\n margin: '0',\r\n },\r\n '& .add-image-content .dropdown-selector-container .ba-dropdown-selector .ba-list-selector .list-selector-item:hover': {\r\n cursor: 'pointer',\r\n backgroundColor: '#f5f5f5',\r\n },\r\n '& .add-image-content .dropdown-selector-container .ba-dropdown-selector .ba-list-selector .list-selector-item.selected': {\r\n background: '#E7F0F6',\r\n },\r\n '& .add-image-content .dropdown-selector-container .ba-dropdown-selector .ba-list-selector .list-selector-item .item-actions': {\r\n float: 'right',\r\n },\r\n '& .add-image-content .sort-by-label': {\r\n paddingTop: 9,\r\n paddingRight: 5,\r\n float: 'right',\r\n },\r\n '& .add-image-content .image-picker': {\r\n marginTop: 15,\r\n marginBottom: 5,\r\n backgroundColor: '#f4f4f4',\r\n padding: 15,\r\n border: '1px solid #bbb',\r\n },\r\n '& .add-image-content .image-picker .existing-images': {\r\n overflowY: 'auto',\r\n height: 400,\r\n },\r\n '& .add-image-content .image-picker .existing-images .existing-image-container': {\r\n position: 'relative',\r\n display: 'inline-block',\r\n padding: '0',\r\n margin: 10,\r\n },\r\n '& .add-image-content .image-picker .existing-images .existing-image-container:hover .image-dimensions, .add-image-content .image-picker .existing-images .existing-image-container:hover .image-edit.glyphicon.glyphicon-pencil, .add-image-content .image-picker .existing-images .existing-image-container:hover .image-delete.glyphicon.glyphicon-remove': {\r\n display: 'inline',\r\n },\r\n '& .add-image-content .image-picker .existing-images .existing-image-container .existing-image': {\r\n display: 'inline-block',\r\n position: 'relative',\r\n cursor: 'pointer',\r\n border: 'none',\r\n background: 'none',\r\n padding: '0',\r\n },\r\n '& .add-image-content .image-picker .existing-images .existing-image-container .existing-image img': {\r\n margin: 15,\r\n width: 225,\r\n },\r\n '& .add-image-content .image-picker .existing-images .existing-image-container .image-dimensions': {\r\n display: 'none',\r\n position: 'absolute',\r\n bottom: 15,\r\n left: 15,\r\n textIndent: 5,\r\n color: 'white',\r\n backgroundColor: 'rgba(27,27,27,0.616)',\r\n width: 225,\r\n },\r\n '& .add-image-content .image-picker .existing-images .existing-image-container .image-name-container': {\r\n position: 'absolute',\r\n left: 15,\r\n bottom: '0',\r\n marginBottom: -15,\r\n },\r\n '& .add-image-content .image-picker .existing-images .existing-image-container .image-name-container input': {\r\n width: 100,\r\n },\r\n '& .add-image-content .image-picker .existing-images .existing-image-container .image-name-container button': {\r\n marginLeft: 3,\r\n },\r\n '& .add-image-content .image-picker .existing-images .existing-image-container .image-name-container [role=alert]': {\r\n position: 'absolute',\r\n },\r\n '& .add-image-content .image-picker .existing-images .existing-image-container .image-name': {\r\n position: 'absolute',\r\n width: 225,\r\n left: 15,\r\n bottom: '0',\r\n marginBottom: -5,\r\n textAlign: 'center',\r\n textOverflow: 'ellipsis',\r\n overflow: 'hidden',\r\n whiteSpace: 'nowrap',\r\n },\r\n '& .existing-image-container .upload-progress': {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n flexDirection: 'column',\r\n },\r\n '& .add-image-content .file-picker-react-wrapper': {\r\n marginTop: 5,\r\n marginBottom: 5,\r\n },\r\n '& .add-image-content .pagination-control-container': {\r\n marginBottom: 10,\r\n },\r\n '& .add-image-content .pagination-control-container .ba-pagination>*': {\r\n display: 'inline',\r\n },\r\n '& .add-image-content .pagination-control-container .pager-input': {\r\n border: '1px solid #BBB',\r\n width: 25,\r\n padding: '0 3px',\r\n marginRight: 5,\r\n },\r\n '& .add-image-content .pagination-control-container .btn.btn-default': {\r\n border: 'none',\r\n },\r\n '& .add-image-content .pagination-control-container .btn.btn-default:disabled': {\r\n backgroundColor: 'inherit',\r\n },\r\n '& .add-image-content .pagination-control-container .btn.btn-default:disabled .glyphicon': {\r\n color: '#a2a2a2',\r\n },\r\n '& .add-image-content .pagination-control-container span': {\r\n marginRight: 5,\r\n },\r\n '& .add-image-content .existing-opt-in-disclaimer': {\r\n marginTop: 15,\r\n\r\n '& .middle-info.btn-link': {\r\n paddingRight: 0,\r\n },\r\n\r\n '& .btn-link': {\r\n color: palette.themePrimary,\r\n },\r\n },\r\n '& .add-image-button': {\r\n margin: '10px 0',\r\n background: '#008272',\r\n },\r\n '& .panel-body > .react-block-ui-none, .panel-body > .react-block-ui': {\r\n height: '100%',\r\n },\r\n '& .add-image-content-container': {\r\n width: 1059,\r\n height: '100%',\r\n '&.image-selector-for-thumbnail': {\r\n width: '100%',\r\n },\r\n },\r\n\r\n '& .image-suggestion-picker-container': {\r\n '& + div > div > div, .react-block-ui > div:last-child > div > div': {\r\n flexDirection: 'column',\r\n },\r\n '& + div .blocker-image, .react-block-ui > div:last-child > div > div > .blocker-image': {\r\n margin: '0 auto 8px auto !important',\r\n },\r\n },\r\n '& .image-suggestion-picker-container > div > .subdomain-fields': {\r\n marginTop: 16,\r\n '& .divider': {\r\n display: 'inline-block',\r\n marginLeft: 10,\r\n marginRight: 10,\r\n fontSize: 14,\r\n lineHeight: '20px',\r\n },\r\n },\r\n '& .image-suggestion-picker-container > div > .suggestion-error': {\r\n marginTop: 16,\r\n display: 'inline-block',\r\n marginLeft: 271,\r\n fontSize: 14,\r\n lineHeight: '20px',\r\n '& img': {\r\n marginLeft: 129,\r\n marginBottom: 24,\r\n },\r\n '& .suggestion-error-invalid': {\r\n marginTop: 16,\r\n color: 'red',\r\n },\r\n },\r\n\r\n ...addEditCommonStyle({ iconFontFamily }),\r\n ...paginationStyle({ iconFontFamily }),\r\n ...panelStyle(),\r\n '& .add-video-content-container .upload-choice-group': {\r\n marginTop: -4,\r\n '& .ms-Label': {\r\n fontWeight: 400,\r\n marginBottom: 6,\r\n },\r\n },\r\n '& .add-video-content-container .ms-ChoiceField:first-child': {\r\n marginTop: 26,\r\n },\r\n '& .add-video-content-container .ms-ChoiceField:nth-child(2)': {\r\n marginTop: 10,\r\n },\r\n '& .add-video-content-container .ms-ChoiceField-field': {\r\n padding: 0,\r\n fontWeight: 400,\r\n },\r\n '& .add-video-content-container .upload-local-file-container': {\r\n display: 'flex',\r\n alignItems: 'flex-start',\r\n marginTop: 20,\r\n marginLeft: 26,\r\n },\r\n '& .add-video-content-container .upload-progress-container': {\r\n marginLeft: 26,\r\n paddingTop: 4,\r\n '& .bar-upload-progress': {\r\n width: 400,\r\n },\r\n '& .bar-upload-progress-text': {\r\n marginTop: -10,\r\n },\r\n },\r\n '& .add-video-content-container .cancel-upload-button': {\r\n marginLeft: 26,\r\n },\r\n '& .add-video-content-container .file-picker-input': {\r\n display: 'inline-block',\r\n width: 400,\r\n },\r\n '& .add-video-content-container .file-picker-container': {\r\n display: 'inline-block',\r\n marginLeft: 8,\r\n '& .file-picker-react-wrapper': {\r\n padding: 0,\r\n },\r\n },\r\n '& .add-video-content-container .image-url-container': {\r\n background: palette.white,\r\n width: 500,\r\n display: 'flex',\r\n marginTop: 20,\r\n marginLeft: 26,\r\n '& .image-url-input': {\r\n extend: controlStyle()['.form-control'],\r\n width: 400,\r\n display: 'inline-block',\r\n },\r\n\r\n '& #image-url-field, #image-description-field': {\r\n width: '100%',\r\n },\r\n\r\n '& .image-url-button': {\r\n extend: btnStyle()['.btn-default'],\r\n display: 'inline-block',\r\n marginLeft: 8,\r\n width: 130,\r\n },\r\n },\r\n },\r\n '@global': {\r\n '.popover-content': {\r\n overflow: 'auto',\r\n 'max-height': '500px',\r\n },\r\n },\r\n});\r\n\r\nexport const getStockPhotoFilterStyle = (components, { palette: themePalette = {} }) => ({\r\n filterContainer: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n '& > .predicate-list': {\r\n paddingLeft: 0,\r\n },\r\n '& .add-filter-button': {\r\n background: 'transparent',\r\n marginLeft: 0,\r\n '&:focus': {\r\n background: 'transparent',\r\n },\r\n '&:focus:after': {\r\n border: 0,\r\n },\r\n },\r\n '& .filter-bar-button': {\r\n height: '56px',\r\n border: 0,\r\n '&:focus:after': {\r\n border: 0,\r\n },\r\n '& .iconba': {\r\n color: themePalette.themePrimary,\r\n },\r\n },\r\n '& .btn:focus': {\r\n outline: '1px solid',\r\n },\r\n '& .selector-placeholder.labels-selector': predicateValueEditorStyle.selector({ palette: themePalette }),\r\n },\r\n});\r\n\r\nexport const getCircleProgressStyle = () => ({\r\n circle: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n '& .radial-progress-text': {\r\n textAlign: 'center',\r\n display: 'block',\r\n color: 'white',\r\n fontSize: 10,\r\n fontWeight: 600,\r\n },\r\n },\r\n});\r\n","import { result } from 'underscore';\r\nimport types from '@bingads-webui-campaign-legacy/bidding-strategy/bidding-strategy-type';\r\n\r\nconst isSpaSpbCampaignType = (campaignType = '', campaignSubType = '') =>\r\n campaignType.toLocaleLowerCase() === 'shopping' && campaignSubType === 'ShoppingSponsoredProductAd';\r\n\r\nexport const isSponsoredCampaignCashbackOptInAvailable = (\r\n permissions,\r\n campaignType = '',\r\n campaignSubType = '',\r\n isMSStoreAdsGAWorkflow\r\n) => {\r\n const isSponsoredCampaign = isSpaSpbCampaignType(campaignType, campaignSubType);\r\n const isCostPerSaleEnabled = result(permissions, ['IsCostPerSaleEnabled'], false);\r\n const isSponsoredPromotionsByBrandsEnabled = result(permissions, ['dynamic', 'SponsoredPromotionsByBrands'], false);\r\n return isSponsoredCampaign && isCostPerSaleEnabled && isSponsoredPromotionsByBrandsEnabled && !isMSStoreAdsGAWorkflow;\r\n};\r\n\r\nexport const shouldUseNewMmcApi = (\r\n permissions,\r\n campaignType = '',\r\n campaignSubType = ''\r\n) => {\r\n const isSponsoredCampaign = isSpaSpbCampaignType(campaignType, campaignSubType);\r\n const isSpaViaNewMmcApiEnabled = result(permissions, ['dynamic', 'SpaViaNewMmcApi'], false);\r\n return isSponsoredCampaign && isSpaViaNewMmcApiEnabled;\r\n};\r\n\r\nexport const getBiddingStrategyForSponsoredCampaign = ({\r\n isSponsoredCampaignCashbackEnabled = false,\r\n isMranEcpcEnabled = false,\r\n isMranTroasEnabled = false,\r\n isShowManualBidStrategy = false,\r\n i18n,\r\n}) => {\r\n const costPerSaleBidStrategy = {\r\n Value: types.costPerSale,\r\n Text: i18n.getString('BidStrategy_Option_CostPerSale'),\r\n };\r\n const manualBidStrategy = {\r\n Value: types.manual,\r\n Text: i18n.getString('BidStrategy_Option_Manual_Campaign'),\r\n };\r\n const enhancedCPCBidStrategy = {\r\n Value: types.enhancedCPC,\r\n Text: i18n.getString('BidStrategy_Option_EnhancedCPC'),\r\n };\r\n const targetRoasBidStrategy = {\r\n Value: types.targetRoas,\r\n Text: i18n.getString('BidStrategy_Option_TargetROAS'),\r\n };\r\n\r\n const mranOptions = [manualBidStrategy];\r\n\r\n if (isMranEcpcEnabled) {\r\n mranOptions.push(enhancedCPCBidStrategy);\r\n }\r\n\r\n if (isMranTroasEnabled) {\r\n mranOptions.push(targetRoasBidStrategy);\r\n }\r\n\r\n\r\n // For MRAN simplification V2, set isShowManualBidStrategy and isSponsoredCampaignCashbackEnabled both to true to support all bid strategies\r\n if (isShowManualBidStrategy && isSponsoredCampaignCashbackEnabled) {\r\n return {\r\n targetBidStrategy: types.costPerSale,\r\n bidStrategyOptions: [costPerSaleBidStrategy, ...mranOptions],\r\n showBidStrategySection: true,\r\n forceReadOnly: false,\r\n };\r\n }\r\n\r\n return isSponsoredCampaignCashbackEnabled ? {\r\n targetBidStrategy: types.costPerSale,\r\n bidStrategyOptions: [costPerSaleBidStrategy],\r\n showBidStrategySection: true,\r\n forceReadOnly: true,\r\n } : {\r\n targetBidStrategy: types.manual,\r\n bidStrategyOptions: mranOptions,\r\n showBidStrategySection: isShowManualBidStrategy,\r\n forceReadOnly: mranOptions.length === 1,\r\n };\r\n};\r\n","import _ from 'underscore';\r\n\r\nexport const overrideLegacyStoreWithNewMmcApiStoreData = (data) => {\r\n const mmcStoreToProductCollectionAccount = store => ({\r\n IsCoOpStore: true,\r\n IsGlobalStore: store.IsGlobalStore,\r\n IsPlaceHolder: false,\r\n LinkStoreId: store.LinkedStoreId,\r\n Selected: false,\r\n Text: `ID: ${store.RetailerStoreId}, Name: ${store.RetailerStoreName}`,\r\n Value: store.RetailerStoreId.toString(),\r\n AdditionalValues: {\r\n IsSPA: store.NetworkTypes && Array.isArray(store.NetworkTypes) && store.NetworkTypes.includes('SPA'),\r\n IsSPB: store.NetworkTypes && Array.isArray(store.NetworkTypes) && store.NetworkTypes.includes('SPB'),\r\n IsMicrosoftStore: store.NetworkTypes && Array.isArray(store.NetworkTypes) && store.NetworkTypes.includes('MicrosoftStore'),\r\n NetworkTypes: store.NetworkTypes,\r\n ProductMatchCount: store.ProductMatchCount,\r\n OfferMatchCount: store.ProductMatchCount,\r\n },\r\n });\r\n\r\n const newProductCollectionAccounts = _.map(data[1], mmcStoreToProductCollectionAccount);\r\n\r\n const overridenData = _.omit(data[0], ['ProductCollectionAccounts']);\r\n overridenData.ProductCollectionAccounts = newProductCollectionAccounts;\r\n\r\n return overridenData;\r\n};\r\n","import _ from 'underscore';\r\nimport { odata } from '@bingads-webui/http-util';\r\n\r\nexport class StockImageDataService {\r\n constructor({\r\n cid,\r\n aid,\r\n oDataConfig,\r\n controller,\r\n }) {\r\n this.cid = cid;\r\n this.aid = aid;\r\n this.path = oDataConfig.odataPath;\r\n this.controller = controller || 'Images';\r\n this.oDataConfig = {\r\n oDataToken: oDataConfig.odataToken,\r\n oDataTokenType: oDataConfig.oDataTokenType,\r\n applicationName: oDataConfig.applicationName,\r\n };\r\n this.odata = odata;\r\n }\r\n\r\n /**\r\n * Get the stock images using the OData\r\n *\r\n * @param {Object} options - options for getting\r\n * @param {Number} options.top - top\r\n * @param {Number} options.skip - skip\r\n * @param {Object} options.customQueries - key value pair for the additional queries.\r\n *\r\n * @returns {Promise} - Promise of getting the images\r\n */\r\n getStockImages(options) {\r\n const defaultOptions = {\r\n top: 20,\r\n skip: 0,\r\n customQueries: {},\r\n };\r\n\r\n const optionsWithDefault = _.defaults(options, defaultOptions);\r\n\r\n const url = `${this.path}/Customers(${this.cid})/Accounts(${this.aid})/${this.controller}`;\r\n\r\n const query = _.extend({\r\n $top: optionsWithDefault.top,\r\n $skip: optionsWithDefault.skip,\r\n }, optionsWithDefault.customQueries);\r\n\r\n return this.odata.get(url, _.extend({ data: query }, this.oDataConfig));\r\n }\r\n\r\n /**\r\n * Save the stock image using the OData\r\n *\r\n * @param {Object} options - options for saving\r\n * @param {string} options.stockImageId - the id of the stock image to save\r\n * @param {string} options.stockImageVendorId - the id of the stock vendor\r\n * @returns {Promise} - Promise of saving the images\r\n */\r\n saveStockImage({ stockImageId, stockImageVendorId }) {\r\n const url = `${this.path}/Customers(${this.cid})/Accounts(${this.aid})/${this.controller}`;\r\n\r\n return this.odata.post(\r\n url,\r\n _.extend({\r\n data: {\r\n Id: stockImageId.toString(),\r\n StockImageVendor: stockImageVendorId,\r\n },\r\n }, this.oDataConfig)\r\n );\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport {\r\n getCashbackInheritOptions,\r\n getParentLevelCashbackPercent,\r\n isCashbackPercentValid,\r\n getCashbackPercentValidationError,\r\n getRealCashbackPercentValue,\r\n} from '@bingads-webui-campaign/personalized-offer-shared';\r\n\r\n// Valid Bid Adjustment limits: Decrease by 90% to Increase by 900%\r\nconst bidAjdLimits = {\r\n getMaxMinByType: (criterionType) => {\r\n const max = 900;\r\n let min = -90;\r\n\r\n if (criterionType === 'Device') {\r\n min = -100;\r\n }\r\n\r\n return {\r\n max,\r\n min,\r\n };\r\n },\r\n};\r\n\r\nconst getBidAdjustmentOptions = () => {\r\n const i18n = DependencyResolver.get('component/i18n/loader!campaignui/feature/audience-campaign');\r\n\r\n return {\r\n percentage: 0,\r\n availableOptions: [\r\n { key: 'inc', text: i18n.getString('Audience_Campaign_Settings_BidAdjustment_Increase') },\r\n { key: 'dec', text: i18n.getString('Audience_Campaign_Settings_BidAdjustment_Decrease') },\r\n ],\r\n selectedOption: 'inc',\r\n };\r\n};\r\n\r\n/**\r\n * Function to compute bid adjustment\r\n * @param {string} rawBidPercentage Bid percentage input\r\n * @param {string} bidAdjOptionText Bid adjustment option input\r\n *\r\n * @returns {int} Computed Bid adjustment value\r\n */\r\nconst computeBidAdjustment = (rawBidPercentage, bidAdjOptionText) => {\r\n const percentage = Number(rawBidPercentage);\r\n\r\n const bidAdjustmentOptions = getBidAdjustmentOptions();\r\n const bidAdjOption = _.find(\r\n bidAdjustmentOptions.availableOptions,\r\n option => option.text === bidAdjOptionText\r\n );\r\n\r\n const bidAdjOptionKey = _.result(bidAdjOption, 'key');\r\n\r\n return bidAdjOptionKey === 'dec' ? -percentage : percentage;\r\n};\r\n\r\n/**\r\n * Function to validate bid adjustment\r\n * @param {string} val Bid percentage input\r\n * @param {string} criterionType - type of the criterion\r\n * @param {boolean} isAudienceCampaign - is audience campaign or not\r\n *\r\n * @returns {bool} is valid\r\n */\r\nconst isBidAdjustmentValid = (val, criterionType) => {\r\n const { max, min } = bidAjdLimits.getMaxMinByType(criterionType);\r\n\r\n return (val < 0 && val >= min) ||\r\n (val >= 0 && val <= max);\r\n};\r\n\r\n/**\r\n * Function to get bid adjustment validation error\r\n * @param {string} v Bid percentage input\r\n * @param {string} criterionType - type of the criterion\r\n * @param {boolean} isEnableCustomMessage - is custom message enabled or not\r\n *\r\n * @returns {string} validation error\r\n */\r\nconst getValidationError = (v, criterionType, isEnableCustomMessage) => {\r\n const val = Number(v);\r\n const i18n = DependencyResolver.get('component/i18n/loader!campaignui/feature/audience-campaign');\r\n const { max, min } = bidAjdLimits.getMaxMinByType(criterionType);\r\n let validationError = '';\r\n\r\n if (_.isNaN(val)) {\r\n validationError = i18n.getString('Audience_Campaign_Settings_Bid_Invalid');\r\n } else if (val < 0) {\r\n if (val === -100 && isEnableCustomMessage && criterionType === 'Age') {\r\n validationError = i18n.getString('Audience_Campaign_Settings_Bid_Validation_Decrease_100_Setting', { min: 0, max: Math.abs(min) });\r\n } else {\r\n validationError = i18n.getString('Audience_Campaign_Settings_Bid_Validation', { min: 0, max: Math.abs(min) });\r\n }\r\n } else {\r\n validationError = i18n.getString('Audience_Campaign_Settings_Bid_Validation', { min: 0, max });\r\n }\r\n\r\n return validationError;\r\n};\r\n\r\nexport {\r\n getBidAdjustmentOptions,\r\n computeBidAdjustment,\r\n isBidAdjustmentValid,\r\n isCashbackPercentValid,\r\n getValidationError,\r\n getCashbackPercentValidationError,\r\n getRealCashbackPercentValue,\r\n getCashbackInheritOptions,\r\n getParentLevelCashbackPercent,\r\n};\r\n","import { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport $ from 'jquery';\r\nimport { CashbackPercentControlView } from '@bingads-webui-campaign/cashback-percent-control-view';\r\nimport _ from 'underscore';\r\nimport {\r\n ageSettingOptions,\r\n genderSettingOptions,\r\n deviceSettingOptions,\r\n companyTargetItemTemplate\r\n} from '@bingads-webui-campaign/audience-campaign-shared';\r\nimport { getBidAdjustmentOptions } from './bid-adjustment-utils';\r\nimport targetExcludeTemplate from './target-exclude.pug';\r\nimport bidAdjustmentTemplate from './bid-adjustment.pug';\r\n\r\nexport class GridConfigGenerator {\r\n constructor(options = {}) {\r\n this.data = options.data;\r\n this.criterionType = options.criterionType;\r\n this.readonly = options.readonly;\r\n this.showExclusion = options.showExclusion;\r\n this.activityLogger = options.activityLogger;\r\n this.bingadsGridColumn = DependencyResolver.get('component/bingads-grid/shared/column');\r\n this.i18n = DependencyResolver.get('component/i18n/loader!campaignui/feature/audience-campaign');\r\n this.decimal = DependencyResolver.get('component/humanize/decimal');\r\n\r\n const permissionConfig = DependencyResolver.get('component/config/index');\r\n const permissions = permissionConfig.get('Permissions');\r\n\r\n this.supportCashbackSettings = options.supportCashbackSettings &&\r\n !permissions.IsPersonalizedOffersV3Enabled;\r\n this.viewContext = options.viewContext;\r\n this.onCashbackPercentChange = options.onCashbackPercentChange || _.noop;\r\n this.$gridRoot = options.$gridRoot;\r\n this.isMSANBoostEnabled = permissions.IsAmplifyEnabled;\r\n this.isHideBidAdjustmentForBoostEnabled = permissions.dynamic && permissions.dynamic.HideBidAdjustmentForBoost;\r\n }\r\n\r\n get advancedTargetExcludedColumn() {\r\n return this.bingadsGridColumn({\r\n name: 'TargetExclude',\r\n property: item => item,\r\n title: this.showExclusion ? this.i18n.getString('Audience_Campaign_Target_Setting_Company_Grid_Column_Target') : '',\r\n template: (locals) => {\r\n const criterion = locals.value;\r\n const isExcluded = this.isCriterionExcluded(criterion);\r\n\r\n return targetExcludeTemplate({\r\n isIncluded: !isExcluded,\r\n isExcluded,\r\n i18n: this.i18n,\r\n });\r\n },\r\n });\r\n }\r\n\r\n get audienceTargetColumn() {\r\n return this.bingadsGridColumn({\r\n i18n: this.i18n,\r\n name: 'Target',\r\n property: 'Criterion',\r\n title: 'Audience_Campaign_Target_Setting_Audience_Title',\r\n template: locals => locals.value.AudienceName,\r\n });\r\n }\r\n\r\n get cashbackPercentColumn() {\r\n return this.bingadsGridColumn({\r\n i18n: this.i18n,\r\n name: 'CashbackPercent',\r\n property: item => item,\r\n title: 'Campaign_Maximum_Cashback_Offer',\r\n bodyClasses: ['cashback-percent-cell-wrap'],\r\n template: (locals) => {\r\n const criterion = locals.value;\r\n\r\n if (this.isCriterionExcluded(locals.value)) {\r\n return '-';\r\n }\r\n\r\n const { CashbackPercent } = criterion.Criterion;\r\n\r\n const cashbackPercentControlView = new CashbackPercentControlView({\r\n viewContext: this.viewContext,\r\n i18n: this.i18n,\r\n decimal: this.decimal,\r\n CashbackPercent,\r\n isParentLevel: this.readonly,\r\n });\r\n\r\n setTimeout(() => {\r\n // eslint-disable-next-line no-underscore-dangle\r\n const key = locals.value.Id;\r\n const row = this.$gridRoot.find(`tr[data-key='${key}']`);\r\n const root = $(row).find('.cashback-percent-cell-wrap');\r\n root.empty().append(cashbackPercentControlView.render().$el);\r\n cashbackPercentControlView.on('change', (validated, val) => {\r\n this.onCashbackPercentChange(validated, val, row);\r\n });\r\n });\r\n\r\n return '';\r\n },\r\n });\r\n }\r\n\r\n get advancedBidAdjustmentColumn() {\r\n return this.bingadsGridColumn({\r\n i18n: this.i18n,\r\n name: 'BidAdjustment',\r\n property: item => item,\r\n title: 'Audience_Campaign_Settings_BidAdjustment',\r\n template: (locals) => {\r\n const criterion = locals.value;\r\n\r\n if (this.isCriterionExcluded(locals.value)) {\r\n return '-';\r\n }\r\n\r\n const bidAdjustmentOptions = getBidAdjustmentOptions();\r\n\r\n let bidValue = 0;\r\n\r\n // For Audience Criterions\r\n if (criterion.Criterion.BidMultiplier != null) {\r\n bidValue = criterion.Criterion.BidMultiplier;\r\n }\r\n\r\n // For ones that are generated\r\n if (criterion.Criterion.BidAdjustment != null) {\r\n bidValue = criterion.Criterion.BidAdjustment;\r\n }\r\n\r\n bidAdjustmentOptions.percentage = Math.abs(bidValue);\r\n\r\n // negtive or -0\r\n if ((bidValue < 0) || (1 / bidValue === -Infinity)) {\r\n bidAdjustmentOptions.selectedOption = 'dec';\r\n }\r\n\r\n return bidAdjustmentTemplate({\r\n size: 5, // input control size\r\n percentage: bidAdjustmentOptions.percentage,\r\n availableOptions: bidAdjustmentOptions.availableOptions,\r\n selectedOption: bidAdjustmentOptions.selectedOption,\r\n readonly: this.readonly,\r\n i18n: this.i18n,\r\n });\r\n },\r\n });\r\n }\r\n\r\n isCriterionExcluded(criterion) {\r\n let isExcluded = false;\r\n\r\n if (criterion.Status && criterion.Status === 'Excluded') {\r\n isExcluded = true;\r\n }\r\n\r\n if (criterion.SelectionStatus && criterion.SelectionStatus === 'Excluded') {\r\n isExcluded = true;\r\n }\r\n\r\n // Linked in target knows the excluded state by the type.\r\n if (criterion.CriterionType && criterion.CriterionType.indexOf('Negative') >= 0) {\r\n isExcluded = true;\r\n }\r\n\r\n return isExcluded;\r\n }\r\n\r\n getTargetColumnByCriterionType() {\r\n switch (this.criterionType) {\r\n case 'Audience':\r\n return this.audienceTargetColumn;\r\n case 'Age':\r\n case 'Gender':\r\n case 'Device':\r\n return this.getAdvancedTargetColumn(this.criterionType);\r\n case 'Location':\r\n case 'NegativeLocation':\r\n case 'Radius':\r\n return this.locationTargetColumn;\r\n case 'CompanyName':\r\n case 'NegativeCompanyName':\r\n return this.companyTargetColumn;\r\n case 'JobFunction':\r\n case 'NegativeJobFunction':\r\n return this.jobFunctionTargetColumn;\r\n case 'Industry':\r\n case 'NegativeIndustry':\r\n return this.industryTargetColumn;\r\n default:\r\n throw new Error('unsupported criterion type');\r\n }\r\n }\r\n\r\n getColumns() {\r\n return _.compact([\r\n this.advancedTargetExcludedColumn,\r\n this.getTargetColumnByCriterionType(),\r\n !(this.isMSANBoostEnabled && this.isHideBidAdjustmentForBoostEnabled) && this.advancedBidAdjustmentColumn,\r\n this.supportCashbackSettings && this.cashbackPercentColumn,\r\n ]);\r\n }\r\n\r\n getAdvancedTargetColumn(criterionType) {\r\n return this.bingadsGridColumn({\r\n i18n: this.i18n,\r\n name: 'Target',\r\n property: 'Criterion',\r\n title: `Audience_Campaign_Target_Setting_${criterionType}_Title`,\r\n template: (locals) => {\r\n if (criterionType === 'Age') {\r\n // When retrieved from MT, AgeRange field is there and we respect that first.\r\n const ageTarget =\r\n locals.value.AgeRange ? locals.value.AgeRange : locals.value.AgeCriterion.Target;\r\n const ageTargetLabel = ageSettingOptions.selections[ageTarget].labelKey;\r\n\r\n return `${this.i18n.getString(ageTargetLabel)}`;\r\n } else if (criterionType === 'Gender') {\r\n // When retrieved from MT, GenderType field is there and we respect that first.\r\n const genderTarget =\r\n locals.value.GenderType ? locals.value.GenderType : locals.value.GenderCriterion.Target;\r\n const genderTargetLabel = genderSettingOptions.selections[genderTarget].labelKey;\r\n\r\n return `${this.i18n.getString(genderTargetLabel)}`;\r\n } else if (criterionType === 'Device') {\r\n // When retrieved from MT, DeviceType field is there and we respect that first.\r\n const deviceTarget =\r\n locals.value.DeviceName ?\r\n locals.value.DeviceName : locals.value.DeviceCriterion.DeviceName;\r\n const deviceTargetLabel = deviceSettingOptions.selections[deviceTarget].labelKey;\r\n\r\n return `${this.i18n.getString(deviceTargetLabel)}`;\r\n }\r\n\r\n return '';\r\n },\r\n });\r\n }\r\n\r\n get locationTargetColumn() {\r\n return this.bingadsGridColumn({\r\n i18n: this.i18n,\r\n name: 'Target',\r\n property: 'Criterion',\r\n title: 'Audience_Campaign_Target_Setting_Location_Title',\r\n template: (locals) => {\r\n let locationTarget;\r\n if (locals.value.RadiusCriterion) {\r\n locationTarget = locals.value.RadiusCriterion.Name;\r\n } else if (locals.value.LocationCriterion) {\r\n locationTarget = locals.value.LocationCriterion.Name;\r\n } else if (locals.value.Name) {\r\n locationTarget = locals.value.Name;\r\n } else {\r\n if (this.activityLogger) {\r\n this.activityLogger.signal(`Criterion value: ${JSON.stringify(locals.value)}`, 'bid adjustment locationTargetColumn');\r\n }\r\n return null;\r\n }\r\n\r\n return locationTarget;\r\n },\r\n });\r\n }\r\n\r\n get companyTargetColumn() {\r\n return this.bingadsGridColumn({\r\n i18n: this.i18n,\r\n name: 'Target',\r\n property: 'Criterion',\r\n title: 'Audience_Campaign_Target_Setting_Company_Grid_Column_Companies',\r\n template: (locals) => {\r\n const criterion = locals.value.CompanyNameCriterion;\r\n const item = {\r\n name: criterion.Name,\r\n logoUrl: criterion.LogoUrl,\r\n industry: criterion.Industry,\r\n size: criterion.Size,\r\n };\r\n return companyTargetItemTemplate({ item, i18n: this.i18n });\r\n },\r\n });\r\n }\r\n\r\n get jobFunctionTargetColumn() {\r\n return this.bingadsGridColumn({\r\n i18n: this.i18n,\r\n name: 'Target',\r\n property: 'Criterion',\r\n title: 'Audience_Campaign_Target_Setting_Job_Function_Grid_Column_Job_Functions',\r\n template: (locals) => {\r\n const criterion = locals.value.JobFunctionCriterion;\r\n\r\n return criterion.Name;\r\n },\r\n });\r\n }\r\n\r\n get industryTargetColumn() {\r\n return this.bingadsGridColumn({\r\n i18n: this.i18n,\r\n name: 'Target',\r\n property: 'Criterion',\r\n title: 'Audience_Campaign_Target_Setting_Industry_Grid_Column_Industries',\r\n template: (locals) => {\r\n const criterion = locals.value.IndustryCriterion;\r\n\r\n return criterion.Name;\r\n },\r\n });\r\n }\r\n\r\n getConfig() {\r\n return {\r\n tableClasses: ['table', 'table--no-border', 'grid'],\r\n dataSource: {\r\n type: 'memory',\r\n data: this.data,\r\n primaryKey: 'Id',\r\n },\r\n columns: this.getColumns(),\r\n };\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport Promise from 'bluebird';\r\nimport _ from 'underscore';\r\nimport pgrid from 'projection-grid';\r\nimport { paginationPlugin } from '@bingads-webui/projection-grid-pagination';\r\nimport { a11yPlugin } from '@bingads-webui/projection-grid-a11y';\r\nimport { cloneDeep, get } from '@bingads-webui-universal/primitive-utilities';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport { ageOptions, genderOptions, deviceOptions } from '@bingads-webui-campaign/audience-campaign-shared';\r\nimport { GridConfigGenerator } from './grid-config-generator';\r\nimport {\r\n computeBidAdjustment,\r\n isBidAdjustmentValid,\r\n getValidationError,\r\n getRealCashbackPercentValue,\r\n} from './bid-adjustment-utils';\r\nimport template from './bid-adjustment-template.pug';\r\n\r\nconst criterionsWithPagination = [\r\n 'Location',\r\n 'NegativeLocation',\r\n 'Radius',\r\n 'CompanyName',\r\n 'Industry',\r\n 'JobFunction',\r\n 'Audience',\r\n];\r\n\r\nlet permissions = {};\r\n\r\nexport class BidAdjustment extends Backbone.View {\r\n initialize(options = {}) {\r\n this.decimal = DependencyResolver.get('component/humanize/decimal');\r\n this.i18n = DependencyResolver.get('component/i18n/loader!campaignui/feature/audience-campaign');\r\n this.targetConstants = DependencyResolver.get('campaignui/feature/base-targets/viewmodel/targetConstants');\r\n this.BaseTargetUpdateView = DependencyResolver.get('campaignui/feature/base-targets/view/baseUpdate');\r\n this.targetTypes = DependencyResolver.get('campaignui/feature/base-targets/viewmodel/targetTypes');\r\n this.currentLevelTargetInfo = options.currentLevelTargetInfo;\r\n this.parentLevelTargetInfo = options.parentLevelTargetInfo || {};\r\n this.viewContext = options.viewContext || {};\r\n this.isAudienceCampaign = _.has(options, 'isAudienceCampaign') ? options.isAudienceCampaign : true;\r\n this.readonly = !!options.readonly;\r\n this.showExclusion = _.has(options, 'showExclusion') ? options.showExclusion : true;\r\n this.activityLogger = options.activityLogger;\r\n this.campaignId = options.campaignId || '';\r\n this.adgroupId = options.adgroupId || '';\r\n this.level = options.level || '';\r\n this.scenario = options.scenario || '';\r\n this.supportCashbackSettings = options.supportCashbackSettings;\r\n this.isSearchDSAShoppingAdgroupLevel = options.isSearchDSAShoppingAdgroupLevel;\r\n // Set inital state to valid\r\n this.isValid = true;\r\n this.isBidAdjustmentValid = true;\r\n this.onChange = options.onChange;\r\n\r\n const permissionConfig = DependencyResolver.get('component/config/index');\r\n permissions = permissionConfig.get('Permissions');\r\n\r\n this.initializeWithTypes(options.criterionTypes);\r\n }\r\n\r\n initializeWithTypes(criterionTypes) {\r\n this.criterionTypes = criterionTypes;\r\n this.criterionType = _.first(criterionTypes);\r\n\r\n _.each(criterionTypes, (criterionType) => {\r\n this.listenTo(\r\n this.currentLevelTargetInfo,\r\n `${this.currentLevelTargetInfo.resourceName}${criterionType}Changed`,\r\n () => this.onCriterionChanged()\r\n );\r\n });\r\n\r\n this.shouldShowPagination = false;\r\n\r\n if (_.intersection(criterionTypes, criterionsWithPagination).length > 0) {\r\n this.shouldShowPagination = true;\r\n }\r\n }\r\n\r\n /**\r\n * Get current state of control\r\n *\r\n * @returns {Object} State current state\r\n */\r\n getState() {\r\n return {\r\n isValid: this.isBidAdjustmentValid &&\r\n (this.isCashbackPercentValid || !this.supportCashbackSettings),\r\n };\r\n }\r\n\r\n onCriterionChanged() {\r\n const currentCriterions = this.fetchCriterions();\r\n\r\n if (this.grid && this.grid.gridView) {\r\n this.grid.gridView.patch({\r\n dataSource: {\r\n data: currentCriterions,\r\n },\r\n });\r\n }\r\n }\r\n\r\n fetchSingleCriterionType(criterionType, targetInfo) {\r\n let criterions = cloneDeep(targetInfo.getAllByType(criterionType));\r\n\r\n const typeToOptions = {\r\n Age: ageOptions,\r\n Gender: genderOptions,\r\n Device: deviceOptions,\r\n };\r\n\r\n const typeToPath = {\r\n Age: 'Criterion.AgeCriterion.Target',\r\n Gender: 'Criterion.GenderCriterion.Target',\r\n Device: 'Criterion.DeviceCriterion.DeviceName',\r\n };\r\n\r\n if (!this.isAudienceCampaign && _.contains(_.keys(typeToOptions), criterionType)) {\r\n const orderedNames = _.keys(typeToOptions[criterionType]);\r\n\r\n let orderedCriterions = [];\r\n _.each(orderedNames, (name) => {\r\n orderedCriterions = orderedCriterions.concat(_.filter(criterions, criterion =>\r\n get(criterion, typeToPath[criterionType]) === name));\r\n });\r\n\r\n criterions = _.compact(orderedCriterions);\r\n }\r\n\r\n return criterions;\r\n }\r\n\r\n fetchCriterions(isCurrent = true) {\r\n if (this.criterionTypes) {\r\n let currentCriterions = [];\r\n\r\n _.each(this.criterionTypes, (criterionType) => {\r\n const criterions = this.fetchSingleCriterionType(\r\n criterionType,\r\n isCurrent ? this.currentLevelTargetInfo : this.parentLevelTargetInfo\r\n );\r\n currentCriterions = currentCriterions.concat(criterions);\r\n });\r\n\r\n return currentCriterions;\r\n }\r\n\r\n return [];\r\n }\r\n\r\n /**\r\n * Event handler for bid adjustment change\r\n * @private\r\n * @param {Object} e change event\r\n *\r\n * @returns {Promise} - Promise of handling bid adjustment change\r\n */\r\n handleBidAdjustmentChange(e) {\r\n const bidAdjustmentControl = this.grid.gridView.$(e.target).parent();\r\n\r\n const bidAdjPercentage = bidAdjustmentControl.children('input').val();\r\n const bidAdjOption = bidAdjustmentControl.children('select').val();\r\n\r\n bidAdjustmentControl.children('.error').empty();\r\n bidAdjustmentControl.children('.error').removeAttr('role');\r\n bidAdjustmentControl.children('.error').attr('aria-hidden', 'true');\r\n this.isBidAdjustmentValid = true;\r\n\r\n // Validate bid adjustment\r\n const bidAdj = computeBidAdjustment(bidAdjPercentage, bidAdjOption);\r\n if (!isBidAdjustmentValid(bidAdj, this.criterionType)) {\r\n bidAdjustmentControl.children('.error').attr('role', 'alert');\r\n bidAdjustmentControl.children('.error').removeAttr('aria-hidden');\r\n bidAdjustmentControl.children('.error').text(getValidationError(bidAdj, this.criterionType, (this.isSearchDSAShoppingAdgroupLevel || (this.isAudienceCampaign && this.level === 'adgroup'))));\r\n this.isBidAdjustmentValid = false;\r\n\r\n if (this.onChange) {\r\n this.onChange(this.isBidAdjustmentValid);\r\n }\r\n return Promise.resolve();\r\n }\r\n\r\n // Update grid item data with the BidAdjustment value\r\n const rowData = this.grid.gridView.itemOfElement(e.target);\r\n if (!rowData) {\r\n return Promise.resolve(false);\r\n }\r\n if (rowData.Criterion.Type === 'Audience') {\r\n rowData.Criterion.BidMultiplier = bidAdj;\r\n } else {\r\n rowData.Criterion.BidAdjustment = bidAdj;\r\n }\r\n\r\n if (this.activityLogger) {\r\n this.activityLogger.signal(`bid adjustment change: ${this.criterionType}`, 'bid adjustment');\r\n }\r\n\r\n return this.currentLevelTargetInfo.updateAsync(rowData);\r\n }\r\n\r\n /**\r\n * Currently the implemenation of bid adj. column is really ridiculous\r\n * if the input number is validated, the control will be completely unmounted\r\n * then re-created again which is caused by calling\r\n * this.currentLevelTargetInfo.updateAsync(rowData).\r\n * To avoid this behavior for cashback percent column, I have to implement\r\n * a different validation by checking the error spans and try not to trigger\r\n * update event.\r\n */\r\n get isCashbackPercentValid() {\r\n const $cashbackPercentErrors = this.$el.find('.bid-adjustment-grid td[data-Column=CashbackPercent] .error');\r\n return _.every($cashbackPercentErrors, (__, i) => {\r\n const $err = $cashbackPercentErrors.eq(i);\r\n return $err.text() === '';\r\n });\r\n }\r\n\r\n handleCashbackPercentChange(validated, cashbackPercent, row) {\r\n const rowData = this.grid.gridView.itemOfElement(row);\r\n if (validated) {\r\n if (!rowData) {\r\n return;\r\n }\r\n rowData.Criterion.CashbackPercent =\r\n getRealCashbackPercentValue(cashbackPercent, this.decimal);\r\n\r\n if (this.activityLogger) {\r\n this.activityLogger.signal(`cashback percent change: ${this.criterionType}`, 'cashback percent');\r\n }\r\n\r\n this.currentLevelTargetInfo.updateAsync(rowData, true);\r\n }\r\n }\r\n\r\n /**\r\n * Renders the view\r\n *\r\n * @returns {View} returns the view itself\r\n */\r\n render() {\r\n this.$el.html(template(this));\r\n\r\n this.initializeAndRenderGrid();\r\n\r\n return this;\r\n }\r\n\r\n getDeviceTypeOptions(campaignBids = {}, adgroupBids = {}) {\r\n const deviceKeys = this.targetConstants.rowKeys.Device.concat(['Computers']);\r\n\r\n if (permissions.IsOriginalDeviceTargetingEnabled) {\r\n _.each(deviceKeys, (device) => {\r\n _.each(this.targetConstants.osNames[device], (os) => {\r\n deviceKeys.push(`${device}${os}`);\r\n });\r\n });\r\n }\r\n\r\n const deviceTypeOptions = {};\r\n\r\n _.each(deviceKeys, (device) => {\r\n deviceTypeOptions[`DeviceType${device}CampaignBidAdjustment`] = campaignBids[`Device${device}Bid`] || 0;\r\n deviceTypeOptions[`DeviceType${device}CampaignBidId`] = campaignBids[`Device${device}BidId`] || '';\r\n deviceTypeOptions[`DeviceType${device}AdgroupBidAdjustment`] = adgroupBids[`Device${device}Bid`] || 0;\r\n deviceTypeOptions[`DeviceType${device}AdgroupBidId`] = adgroupBids[`Device${device}BidId`] || '';\r\n });\r\n return deviceTypeOptions;\r\n }\r\n\r\n extractBids(targets) {\r\n const bids = {};\r\n\r\n _.each(targets, (target) => {\r\n let prefix = `${target.Criterion.Type}${target.Criterion.DeviceCriterion[this.targetConstants.targetTypeToFilterProperty[target.Criterion.Type]]}`;\r\n\r\n if (target.Criterion.Type === 'Device' && target.Criterion.OSName) {\r\n prefix += target.Criterion.OSName;\r\n }\r\n const name = `${prefix}Bid`;\r\n const id = `${name}Id`;\r\n\r\n bids[name] = target.Criterion.BidAdjustment ? target.Criterion.BidAdjustment : 0;\r\n bids[id] = target.Id || '';\r\n });\r\n return bids;\r\n }\r\n\r\n /**\r\n * Initializes and renders the grid\r\n * @private\r\n *\r\n * @returns {undefined}\r\n */\r\n initializeAndRenderGrid() {\r\n const currentCriterions = this.fetchCriterions();\r\n\r\n // When opening both device os targeting\r\n // and linkedInTargeting pilots, there should be\r\n // both features showing up.\r\n if (this.criterionType === 'Device' &&\r\n permissions.IsOriginalDeviceTargetingEnabled\r\n ) {\r\n let campaignBids = {};\r\n let adgroupBids = {};\r\n let isParentView = false;\r\n if (this.level === 'campaign' || this.scenario === 'adgroup-create') {\r\n campaignBids = this.extractBids(currentCriterions);\r\n } else if (this.level === 'adgroup') {\r\n if (Object.keys(this.parentLevelTargetInfo).length !== 0) {\r\n const parentCriterions = this.fetchCriterions(false);\r\n campaignBids = this.extractBids(parentCriterions);\r\n } else {\r\n isParentView = true;\r\n }\r\n adgroupBids = this.extractBids(currentCriterions);\r\n }\r\n const deviceTypeOptions = this.getDeviceTypeOptions(campaignBids, adgroupBids);\r\n this.deviceTargetsUpdateView = new this.BaseTargetUpdateView(_.extend({\r\n targetType: this.targetTypes.OriginalDevice,\r\n campaignId: this.campaignId,\r\n adgroupId: this.adgroupId,\r\n level: this.level,\r\n scenario: this.scenario,\r\n activityLogger: this.activityLogger,\r\n showLevelToggle: false,\r\n isParentView,\r\n onChange: this.onChange,\r\n }, deviceTypeOptions));\r\n this.$('.bid-adjustment-grid').append(this.deviceTargetsUpdateView.render().el);\r\n } else {\r\n const configGenerator = new GridConfigGenerator({\r\n data: currentCriterions,\r\n criterionType: this.criterionType,\r\n readonly: this.readonly,\r\n showExclusion: this.showExclusion,\r\n activityLogger: this.activityLogger,\r\n supportCashbackSettings: this.supportCashbackSettings,\r\n viewContext: this.viewContext,\r\n onCashbackPercentChange: this.handleCashbackPercentChange.bind(this),\r\n $gridRoot: this.$('.bid-adjustment-grid'),\r\n });\r\n const config = configGenerator.getConfig();\r\n\r\n const gridFactory = pgrid.factory({ vnext: true });\r\n\r\n if (this.shouldShowPagination) {\r\n gridFactory\r\n .use(paginationPlugin)\r\n .use(a11yPlugin);\r\n _.extend(config, {\r\n plugins: {\r\n a11y: { i18n: this.i18n },\r\n pagination: {\r\n pageSizeText: this.i18n.getString('Grid_ShowRows'),\r\n pageNumberLabelText: this.i18n.getString('GridPage_Colon'),\r\n totalPageCountText: this.i18n.getString('Grid_PageOf'),\r\n },\r\n },\r\n });\r\n }\r\n\r\n this.grid = gridFactory\r\n .create(_.extend({}, config, {\r\n events: {\r\n load: (e) => {\r\n this.handleBidAdjustmentChange(e);\r\n this.handleCashbackPercentChange(e);\r\n },\r\n 'change .bid-adjustment-input': e => this.handleBidAdjustmentChange(e),\r\n 'change select.bid-adjustment-select': e => this.handleBidAdjustmentChange(e),\r\n // 'input .cashback-percent-input': e => this.handleCashbackPercentChange(e),\r\n // 'change select.cashback-option-select': e => this.handleCashbackOptionChange(e),\r\n },\r\n }));\r\n\r\n this.$('.bid-adjustment-grid').append(this.grid.gridView.render().el);\r\n }\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport _ from 'underscore';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport { getBidAdjustmentOptions, computeBidAdjustment, isBidAdjustmentValid, getValidationError } from './bid-adjustment-utils';\r\nimport template from './bid-adjustment.pug';\r\n\r\nexport class BidAdjustmentControlView extends Backbone.View {\r\n initialize(options = {}) {\r\n this.i18n = DependencyResolver.get('component/i18n/loader!campaignui/feature/audience-campaign');\r\n this.criterionType = options.criterionType;\r\n this.bidAdjustmentOptions = _.defaults(\r\n options.bidAdjustmentOptions || {},\r\n getBidAdjustmentOptions()\r\n );\r\n\r\n // Set inital state to valid\r\n this.isValid = true;\r\n }\r\n\r\n get events() {\r\n return {\r\n 'change input': e => this.handleBidAdjustmentChange(e),\r\n 'change select': e => this.handleBidAdjustmentChange(e),\r\n };\r\n }\r\n\r\n /**\r\n * Event handler for bid adjustment change\r\n * @private\r\n *\r\n * @returns {Promise} - Promise of handling bid adjustment change\r\n */\r\n handleBidAdjustmentChange() {\r\n this.$('.error').empty();\r\n\r\n this.isValid = true;\r\n\r\n // Validate bid adjustment\r\n const bidAdjValue = this.getBidAdjustmentValue();\r\n\r\n if (!isBidAdjustmentValid(bidAdjValue, this.criterionType)) {\r\n this.$('.error').text(getValidationError(bidAdjValue, this.criterionType));\r\n this.isValid = false;\r\n }\r\n }\r\n\r\n /**\r\n * Check if the control is in a valid state\r\n *\r\n * @returns {boolean} current state\r\n */\r\n validate() {\r\n return this.isValid;\r\n }\r\n\r\n getBidAdjustmentValue() {\r\n const bidAdjPercentage = this.$('input').val();\r\n const bidAdjOption = this.$('select').val();\r\n\r\n const bidAdjValue = computeBidAdjustment(bidAdjPercentage, bidAdjOption);\r\n\r\n return bidAdjValue;\r\n }\r\n\r\n /**\r\n * Renders the view\r\n *\r\n * @returns {View} returns the view itself\r\n */\r\n render() {\r\n this.$el.html(template(_.extend(this.bidAdjustmentOptions, { size: 5, i18n: this.i18n })));\r\n\r\n return this;\r\n }\r\n}\r\n","/* eslint-disable no-param-reassign */\r\nimport ko from 'knockout';\r\nimport _ from 'underscore';\r\nimport errorTmpl from './error-message.pug';\r\n\r\nexport default class ViewModel {\r\n constructor(campaignType = 'default', i18n, permissions) {\r\n this.bulkUpsertErrors = ko.observableArray([]);\r\n this.campaignType = campaignType;\r\n this.i18n = i18n;\r\n this.permissions = permissions;\r\n }\r\n\r\n handleErrors(response) {\r\n const errors = [];\r\n // TODO: do the error translations\r\n _.map(response.errors, (error) => {\r\n if (error.Error === 'ConversionGoalCriteriaNotMetForBiddingScheme' && (this.permissions.IsPersonalizedOffersV2Enabled || this.permissions.IsPersonalizedOffersV3Enabled)) {\r\n let err = null;\r\n let query = null;\r\n if (this.campaignType.toLowerCase() === 'default' || this.campaignType.toLowerCase() === 'search') {\r\n err = 'BidStrategySetting_Message_ActiveConversionGoalPresent_PersonalizedOffers';\r\n query = 'app54720';\r\n } else {\r\n err = 'BidStrategySetting_Message_ActiveConversionGoalPresentWithValidRevenueValue_PersonalizedOffers';\r\n query = 'app54721';\r\n }\r\n\r\n error.Error = errorTmpl({\r\n i18n: this.i18n,\r\n err,\r\n query,\r\n });\r\n }\r\n\r\n errors.push(error.Error);\r\n });\r\n this.bulkUpsertErrors(errors);\r\n }\r\n\r\n clearErrors() {\r\n this.bulkUpsertErrors([]);\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport _ from 'underscore';\r\nimport ko from 'knockout';\r\nimport { withUiBlock } from '@bingads-webui/uiblocker';\r\nimport { CashbackSettings } from '@bingads-webui-campaign/cashback-settings';\r\nimport BiddingStrategyView from '@bingads-webui-campaign-legacy/bidding-strategy/view/setting';\r\nimport { getBidStrategyByCampaignTypeWhenPersonalizedOffersEnabled, shouldSupportCashbackSettings, shouldPersonalizedOffersReadOnly, setupCommonCashbackObserver } from '@bingads-webui-campaign/personalized-offer-shared';\r\nimport ViewModel from './view-model';\r\nimport tmpl from './template.pug';\r\n\r\nexport class TopPanelCashbackSettings extends Backbone.View {\r\n initialize(options) {\r\n this.options = options;\r\n this.i18n = options.deps.i18n;\r\n this.original = {\r\n CashbackPercent: options.CashbackPercent,\r\n CashbackScope: options.CashbackScope,\r\n CashbackMonthlyBudget: options.CashbackMonthlyBudget,\r\n CouponsEnabled: options.CouponsEnabled,\r\n PersonalizedOffersEnabled: options.PersonalizedOffersEnabled,\r\n };\r\n this.item = this.options.item;\r\n this.view = this.options.view;\r\n this.permissions = this.options.deps.pageContext.Permissions;\r\n this.viewModel = new ViewModel(this.item.CampaignType, this.i18n, this.permissions);\r\n this.campaignName = this.options.campaignName;\r\n this.shouldShowBiddingStrategy =\r\n this.showBiddingStrategy(\r\n this.options.item.CampaignType.toLowerCase(),\r\n this.options.item.CampaignSubType\r\n );\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click .save': 'save',\r\n 'click .cancel': 'cancel',\r\n };\r\n }\r\n\r\n showBiddingStrategy(type, subType) {\r\n if (this.permissions.IsCostPerSaleEnabled) {\r\n return (type === 'shopping' && subType !== 'ShoppingSmartAds') || type === 'search' || type === 'default';\r\n }\r\n return false;\r\n }\r\n\r\n renderBiddingStrategyView() {\r\n if (!this.shouldShowBiddingStrategy) {\r\n return;\r\n }\r\n // Only standard shopping campaign could be editable\r\n // Do not need to consider the CoOpCampaign\r\n if (this.biddingStrategyView) {\r\n this.biddingStrategyView.remove();\r\n }\r\n\r\n this.$biddingStrategyView = this.$('.bidding-strategy-form');\r\n this.biddingStrategyView = new BiddingStrategyView({\r\n entityType: 'Campaign',\r\n biddingStrategyType: this.item.BiddingScheme.Type,\r\n bidStrategyName: this.item.BidStrategyName,\r\n maxCpc: this.item.BiddingScheme.MaxCpc ? this.item.BiddingScheme.MaxCpc.Amount : null,\r\n targetCpa: this.item.BiddingScheme.TargetCpa,\r\n targetRoas: this.item.BiddingScheme.TargetRoas,\r\n costPerSale: this.item.BiddingScheme.TargetCostPerSale,\r\n campaignType: this.item.CampaignType.toLowerCase(),\r\n isAfterSave: true,\r\n shouldSupportCashbackSettings: shouldSupportCashbackSettings(this.item, this.permissions),\r\n campaignSubType: (this.permissions.IsManualBiddingDeprecationEnabled || this.item.CampaignSubType === 'ShoppingSmartAds') ?\r\n this.item.CampaignSubType : undefined,\r\n el: this.$biddingStrategyView,\r\n });\r\n\r\n if (this.cashbackSettingsView) {\r\n this.cashbackSettingsView.viewModel.isReadOnly(shouldPersonalizedOffersReadOnly(\r\n true,\r\n this.biddingStrategyView\r\n ));\r\n }\r\n\r\n this.biddingStrategyView.render();\r\n }\r\n\r\n render() {\r\n this.$el.html(tmpl({\r\n i18n: this.i18n,\r\n campaignName: this.campaignName,\r\n }));\r\n\r\n this.renderBiddingStrategyView();\r\n\r\n if (this.cashbackSettingsView) {\r\n this.cashbackSettingsView.remove();\r\n }\r\n\r\n this.$cashbackSettingsView = this.$('.cashback-settings-form');\r\n this.cashbackSettingsView = new CashbackSettings({\r\n ...this.options,\r\n isCashbackScopeReadonly: this.item.CampaignType === 'Default',\r\n showCoupon: this.item.CampaignType === 'Shopping',\r\n isReadOnly: shouldPersonalizedOffersReadOnly(true, this.biddingStrategyView),\r\n el: this.$cashbackSettingsView,\r\n });\r\n\r\n setupCommonCashbackObserver(this);\r\n\r\n this.cashbackSettingsView.render();\r\n\r\n ko.applyBindings(this.viewModel, this.$('.bulk-upsert-errors')[0]);\r\n this.$cashbackSettingsView.focusin(() => {\r\n this.viewModel.clearErrors();\r\n });\r\n\r\n return this;\r\n }\r\n\r\n isDataChanged({\r\n CashbackScope, CashbackPercent, CashbackMonthlyBudget, CouponsEnabled,\r\n PersonalizedOffersEnabled,\r\n }) {\r\n return (CashbackScope !== this.original.CashbackScope ||\r\n CashbackPercent !== this.original.CashbackPercent ||\r\n CashbackMonthlyBudget !== this.original.CashbackMonthlyBudget ||\r\n CouponsEnabled !== this.original.CouponsEnabled ||\r\n PersonalizedOffersEnabled !== this.original.PersonalizedOffersEnabled);\r\n }\r\n\r\n save() {\r\n if (!this.cashbackSettingsView.validate()) {\r\n return;\r\n }\r\n\r\n if (this.biddingStrategyView && !this.biddingStrategyView.validate()) {\r\n return;\r\n }\r\n\r\n const data = this.cashbackSettingsView.getValues();\r\n const jsData = this.options.deps.jsdataCampaign;\r\n\r\n if (this.permissions.IsCostPerSaleEnabled && this.biddingStrategyView) {\r\n data.BiddingScheme = this.biddingStrategyView.getValues();\r\n } else if (this.permissions.IsPersonalizedOffersV2Enabled ||\r\n this.permissions.IsPersonalizedOffersV3Enabled) {\r\n const CampaignCashback = {\r\n CampaignCashback: {\r\n MonthlyBudget: data.CashbackMonthlyBudget,\r\n PersonalizedOffersEnabled: data.PersonalizedOffersEnabled,\r\n },\r\n };\r\n if (shouldSupportCashbackSettings(CampaignCashback, this.permissions)) {\r\n data.BiddingScheme = {\r\n Type: getBidStrategyByCampaignTypeWhenPersonalizedOffersEnabled({\r\n i18n: this.i18n,\r\n campaignType: this.item.CampaignType,\r\n }).targetBidStrategy,\r\n };\r\n } else if (this.item.CampaignType === 'Shopping' && !this.permissions.IsMaximizeConversionValueEnabled) {\r\n data.BiddingScheme = {\r\n Type: 'EnhancedCpc',\r\n };\r\n }\r\n }\r\n\r\n if (this.isDataChanged(data || {})) {\r\n const updated = _.defaults(data, _.pick(this.item, 'Id', 'Name'));\r\n\r\n jsData.Campaign\r\n .update(this.item.Id, updated, { adapter: 'bulk', cacheResponse: false })\r\n .finally(_.compose(withUiBlock(this.$el), withUiBlock(this.view.grid.gridView.$el)))\r\n .then(() => {\r\n this.trigger('close');\r\n // TODO: update only the changed line\r\n this.view.grid.gridView.refresh(true);\r\n })\r\n .catch((response) => {\r\n // handle the response errors\r\n this.viewModel.handleErrors(response);\r\n });\r\n } else {\r\n // the data is the same\r\n this.trigger('close');\r\n }\r\n }\r\n\r\n cancel() {\r\n this.trigger('cancel');\r\n }\r\n}\r\n","export const UpgradeUrlStringMap = {\r\n Ad_DestinationUrl: _TL_('Destination URL'),\r\n Ad_FinalUrl: _TL_('Final URL'),\r\n BulkEdit_UrlOptions_CustomParameters_AddAnother: _TL_('Add another'),\r\n BulkEdit_UrlOptions_CustomParameters_InputAriaLabel: _TL_('Custom parameters {{key}} number {{number}}'),\r\n BulkEdit_UrlOptions_CustomParameters_MatchCase: _TL_('Match case'),\r\n BulkEdit_UrlOptions_CustomParameters_RemoveLineNumber: _TL_('Remove custom parameters number {{number}}'),\r\n BulkEdit_UrlOptions_UpgradeWarning: _TL_('You are about to upgrade this entity to use Final URL. '),\r\n Cancel: _TL_('Cancel'),\r\n CustomParameters_Placeholder_Key: _TL_('name'),\r\n CustomParameters_Placeholder_Value: _TL_('value'),\r\n ErrorNumber_UniqueCustomParameterNames: _TL_('Custom parameter names must be unique.'),\r\n Error_Campaign_API_FinalUrlRequiredWhenUsingMobileFinalUrl: _TL_('In order to use a mobile URL a final URL must also be used.'),\r\n Error_Campaign_API_InvalidCharactersInKey: _TL_('The name of a custom parameter can only contain alphanumeric characters (e.g., 0-9 a-z A-Z).'),\r\n Error_Campaign_API_InvalidCharactersInValue: _TL_('Value contains invalid characters.'),\r\n Error_Campaign_API_InvalidTag: _TL_('Value contains invalid tag.'),\r\n Error_Campaign_API_InvalidUrlScheme: _TL_('The URL entered is invalid. A valid URL must start with http:// or https:// or {lpurl} or {unescapedlpurl}.'),\r\n Error_Campaign_API_KeyNullOrEmpty: _TL_('Custom parameter requires a name.'),\r\n FinalUrlSuffix_Example: _TL_('Example: param1=values1¶m2=value2'),\r\n FinalUrlSuffix_Label: _TL_('Final URL suffix'),\r\n FinalUrl_Label: _TL_('Final URL (recommended)'),\r\n Input_NoChange_PlaceHolder: _TL_(''),\r\n LandingPage_Label: _TL_('Landing page'),\r\n LearnMore: _TL_('Learn more'),\r\n MobileFinalUrl_Label: _TL_('Mobile URL'),\r\n Save: _TL_('Save'),\r\n TrackingTemplate_Example: _TL_('Example: http://www.trackingtool.com/tracking?url={lpurl}&type=1 '),\r\n TrackingTemplate_Label: _TL_('Tracking template'),\r\n UpgradedUrl_Placeholder_FinalUrlSuffix: _TL_('Enter a Final URL suffix'),\r\n UrlOptions_None: _TL_('None'),\r\n};\r\n","import _ from 'underscore';\r\nimport ko from 'knockout';\r\nimport * as url from '@bingads-webui/url-util';\r\n\r\nexport default class ViewModel {\r\n constructor({\r\n trackingTemplate,\r\n i18n,\r\n editMode,\r\n showUurlTestTool,\r\n }) {\r\n this.editMode = ko.observable(editMode);\r\n\r\n this.maxLength = 2048;\r\n\r\n this.trackingTemplate = ko.observable(trackingTemplate);\r\n\r\n this.inputClass = showUurlTestTool ? ['with-test-button form-control'] : ['full-width form-control'];\r\n\r\n this.validate = (newTrackingTemplate) => {\r\n let errorList = [];\r\n if (!url.hasScheme(newTrackingTemplate) &&\r\n !_.find(\r\n ['{lpurl}', '{unescapedlpurl}'],\r\n tag => newTrackingTemplate.indexOf(tag) === 0\r\n )) {\r\n errorList = _.union(errorList, [i18n.getString('Error_Campaign_API_InvalidUrlScheme')]);\r\n }\r\n\r\n return errorList;\r\n };\r\n\r\n this.errorMessages = ko.computed(() => {\r\n if (this.trackingTemplate()) {\r\n return this.validate(this.trackingTemplate());\r\n }\r\n return [];\r\n });\r\n\r\n this.showNone = ko.computed(() => !this.editMode() && !this.trackingTemplate());\r\n\r\n this.isValid = ko.computed(() => !this.errorMessages().length, this);\r\n }\r\n}\r\n","import { PureKnockoutView } from '@bingads-webui/knockout-view';\r\nimport tmpl from './template.pug';\r\nimport ViewModel from './viewmodel';\r\n\r\nexport class TrackingTemplateView extends PureKnockoutView {\r\n /**\r\n * Initilize tracking template view settings\r\n *\r\n * @param {Object} param - An object containing these default options for view:\r\n * @param {Object} param.i18n - the localization settings\r\n * @param {Object} param.i18n.getString - localization settings function\r\n * @param {boolean} param.editMode - whether the view is in edit mode, default true\r\n * @param {function} param.template - template for the view, by default using tmpl\r\n * @param {String} param.trackingTemplate - tracking template\r\n * @param {String[]} param.errorMessages - error messages to show\r\n * @returns {void} void\r\n */\r\n initialize({\r\n i18n,\r\n editMode = true,\r\n template = tmpl,\r\n trackingTemplate,\r\n showUurlTestTool = false,\r\n }) {\r\n this.options = {\r\n i18n,\r\n editMode,\r\n trackingTemplate,\r\n template,\r\n showUurlTestTool,\r\n };\r\n\r\n super.initialize(this.options);\r\n\r\n this.viewModel.trackingTemplate.subscribe(() => {\r\n this.trigger('trackingTemplate:updated', { isValid: this.isValid(), trackingTemplate: this.getTrackingTemplate() });\r\n }, this);\r\n }\r\n\r\n get template() {\r\n return () => this.options.template({ i18n: this.options.i18n });\r\n }\r\n\r\n get ViewModel() {\r\n return ViewModel;\r\n }\r\n\r\n /**\r\n * Set edit mode\r\n * @param {boolean} isEdit - whether to set to edit (false to be read mode)\r\n *\r\n * @returns {void} void\r\n */\r\n setEditMode(isEdit) {\r\n this.viewModel.editMode(isEdit);\r\n }\r\n\r\n /**\r\n * Set tracking template\r\n * @param {String} trackingTemplate - new values to set\r\n *\r\n * @returns {void} void\r\n */\r\n setTrackingTemplate(trackingTemplate) {\r\n this.viewModel.trackingTemplate(trackingTemplate);\r\n }\r\n\r\n /**\r\n * Get tracking template\r\n *\r\n * @returns {String} tracking template\r\n */\r\n getTrackingTemplate() {\r\n return (this.viewModel.trackingTemplate() || '').trim(); // handle the space\r\n }\r\n\r\n setErrors(errors) {\r\n this.viewModel.errorMessages(errors);\r\n }\r\n\r\n isValid() {\r\n return this.viewModel.isValid();\r\n }\r\n}\r\n\r\n","import ko from 'knockout';\r\n\r\nexport default class InlineEditViewModel {\r\n constructor({\r\n error = '',\r\n isValid = true,\r\n }) {\r\n this.error = ko.observable(error);\r\n\r\n this.isValid = ko.observable(isValid);\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { PureKnockoutView } from '@bingads-webui/knockout-view';\r\nimport { globalContext } from '@bingads-webui-campaign/injection-context';\r\nimport { TrackingTemplateView } from './view';\r\nimport template from '../shared/inline-edit/template.pug';\r\nimport ViewModel from '../shared/inline-edit/viewmodel';\r\n\r\n\r\n/**\r\n * save event - When save button clicked, it fires with the new custom parameters.\r\n * It carries a parameter with format of { trackingTemplate }\r\n * @event TrackingTemplateInlineEditView#save\r\n * @type {Object}\r\n */\r\n\r\n/**\r\n * close event - When cancel button clicked, it fires close event.\r\n *\r\n * @event TrackingTemplateInlineEditView#close\r\n * @type {void}\r\n */\r\n\r\n/**\r\n * TrackingTemplateInlineEditView\r\n * will disable save button when input invalid\r\n *\r\n * @fires TrackingTemplateInlineEditView#save\r\n * @fires TrackingTemplateInlineEditView#close\r\n */\r\nexport class TrackingTemplateInlineEditView extends PureKnockoutView {\r\n /**\r\n * Initilize tracking template view settings\r\n *\r\n * @param {Object} param - An object containing these default options for view:\r\n * @param {Object} param.i18n - the localization settings\r\n * @param {Object} param.i18n.getString - localization settings function\r\n * @param {String} param.trackingTemplate - tracking template\r\n * @returns {void} void\r\n */\r\n initialize({\r\n i18n,\r\n trackingTemplate,\r\n showUurlTestTool,\r\n isForVNext,\r\n deps = null,\r\n }) {\r\n super.initialize({ i18n, trackingTemplate });\r\n\r\n this.i18n = i18n;\r\n this.trackingTemplateView = new TrackingTemplateView({\r\n i18n,\r\n editMode: true,\r\n trackingTemplate,\r\n showUurlTestTool,\r\n });\r\n\r\n this.trackingTemplateView.on('trackingTemplate:updated', ({ isValid }) => {\r\n this.viewModel.isValid(isValid);\r\n });\r\n\r\n this.viewModel.isValid(this.trackingTemplateView.isValid());\r\n\r\n this.setChild('childView', this.trackingTemplateView);\r\n\r\n if (showUurlTestTool) {\r\n let UurlTestToolView;\r\n\r\n // TODO: refactor this part later\r\n try {\r\n UurlTestToolView = globalContext.require('component/upgraded-url/view/urlTestTool');\r\n } catch (e) {\r\n if (deps) {\r\n UurlTestToolView = deps.uurlTestToolView;\r\n } else {\r\n return;\r\n }\r\n }\r\n\r\n if (UurlTestToolView) {\r\n setTimeout(() => {\r\n const urlTestTool = new UurlTestToolView({\r\n urlTestToolStatusContainer: this.$('.uurl-test-info__container'),\r\n isForVNext,\r\n });\r\n\r\n this.$('.uurl-test-tool__container').empty().append(urlTestTool.render().el);\r\n urlTestTool.on('testUurl', (fn, originalView) => {\r\n this.trigger('testUurl', fn, originalView);\r\n });\r\n }, 50);\r\n }\r\n }\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click .btn-primary': 'save',\r\n 'click .btn-default.grid-popupeditor-cancel': 'cancel',\r\n };\r\n }\r\n\r\n get template() {\r\n return ({ model }) => template({ model, i18n: this.i18n });\r\n }\r\n\r\n get ViewModel() {\r\n return ViewModel;\r\n }\r\n\r\n /**\r\n * Fires save event after click save button\r\n *\r\n * @fires TrackingTemplateInlineEditView#save\r\n * @returns {void}\r\n */\r\n save() {\r\n this.trigger('save', { trackingTemplate: this.trackingTemplateView.getTrackingTemplate() });\r\n }\r\n\r\n /**\r\n * Fires close event after click cancel button\r\n *\r\n * @fires TrackingTemplateInlineEditView#close\r\n * @returns {void}\r\n */\r\n cancel() {\r\n this.trigger('close');\r\n }\r\n\r\n setErrors(errors) {\r\n if (errors && !_.isEmpty(errors) && _.isObject(errors)) {\r\n this.viewModel.error(errors[_.keys(errors)[0]]);\r\n } else {\r\n this.viewModel.error('');\r\n }\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport ko from 'knockout';\r\n\r\nexport default class ViewModel {\r\n constructor({\r\n finalUrlSuffix,\r\n i18n,\r\n editMode,\r\n showPlaceholder = false,\r\n }) {\r\n this.editMode = ko.observable(editMode);\r\n\r\n this.maxLength = 1024;\r\n\r\n this.finalUrlSuffix = ko.observable(finalUrlSuffix);\r\n\r\n this.validate = (newFinalUrlSuffix) => {\r\n if (this.externalErrors) {\r\n this.externalErrors([]);\r\n }\r\n let errorList = [];\r\n const invalidFirstChars = ['#', '?', '&'];\r\n const firstChar = _.first(newFinalUrlSuffix);\r\n\r\n if (_.contains(invalidFirstChars, firstChar) || /\\s|\\r|\\n/g.test(newFinalUrlSuffix)) {\r\n errorList = _.union(errorList, [i18n.getString('Error_Campaign_API_InvalidCharactersInValue')]);\r\n }\r\n\r\n // Parameters reserved for tracking template can not be used here.\r\n if (_.find(\r\n ['{lpurl}',\r\n '{lpurl+2}',\r\n '{lpurl+3}',\r\n '{unescapedlpurl}',\r\n '{ignore}',\r\n '{escapedlpurl}',\r\n '{escapedlpurl+2}',\r\n '{escapedlpurl+3}',\r\n '{ignore}',\r\n ],\r\n tag => newFinalUrlSuffix.indexOf(tag) === 0\r\n )) {\r\n errorList = _.union(errorList, [i18n.getString('Error_Campaign_API_InvalidTag')]);\r\n }\r\n\r\n return errorList;\r\n };\r\n\r\n this.errorMessages = ko.computed(() => {\r\n if (this.finalUrlSuffix()) {\r\n return this.validate(this.finalUrlSuffix());\r\n }\r\n return [];\r\n });\r\n\r\n this.externalErrors = ko.observableArray();\r\n\r\n this.showNone = ko.computed(() => !this.editMode() && !this.finalUrlSuffix());\r\n\r\n this.isValid = ko.computed(() => !this.errorMessages().length, this);\r\n\r\n this.placeholderText = showPlaceholder ? i18n.getString('UpgradedUrl_Placeholder_FinalUrlSuffix') : '';\r\n }\r\n}\r\n","import { PureKnockoutView } from '@bingads-webui/knockout-view';\r\nimport tmpl from './template.pug';\r\nimport ViewModel from './viewmodel';\r\n\r\nexport class FinalUrlSuffixView extends PureKnockoutView {\r\n /**\r\n * Initilize final url suffix view\r\n *\r\n * @param {Object} param - An object containing these default options for view:\r\n * @param {Object} param.i18n - the localization\r\n * @param {Object} param.i18n.getString - localization function\r\n * @param {boolean} param.editMode - whether the view is in edit mode, default true\r\n * @param {function} param.template - template for the view, by default using tmpl\r\n * @param {String} param.finalUrlSuffix - final url suffix\r\n * @param {String[]} param.errorMessages - error messages to show\r\n * @returns {void} void\r\n */\r\n initialize({\r\n i18n,\r\n editMode = true,\r\n template = tmpl,\r\n finalUrlSuffix,\r\n showPlaceholder = false,\r\n readOnly = false,\r\n }) {\r\n this.options = {\r\n i18n,\r\n editMode,\r\n finalUrlSuffix,\r\n template,\r\n showPlaceholder,\r\n readOnly,\r\n };\r\n\r\n super.initialize(this.options);\r\n\r\n this.viewModel.finalUrlSuffix.subscribe(() => {\r\n this.trigger('finalUrlSuffix:updated', { isValid: this.isValid(), finalUrlSuffix: this.getFinalUrlSuffix() });\r\n }, this);\r\n }\r\n\r\n get template() {\r\n return () => this.options.template({ i18n: this.options.i18n, readOnly: this.options.readOnly });\r\n }\r\n\r\n get ViewModel() {\r\n return ViewModel;\r\n }\r\n\r\n /**\r\n * Set edit mode\r\n * @param {boolean} isEdit - whether to set to edit (false to be read mode)\r\n *\r\n * @returns {void} void\r\n */\r\n setEditMode(isEdit) {\r\n this.viewModel.editMode(isEdit);\r\n }\r\n\r\n /**\r\n * Set final url suffix\r\n * @param {String} finalUrlSuffix - new values to set\r\n *\r\n * @returns {void} void\r\n */\r\n setFinalUrlSuffix(finalUrlSuffix) {\r\n this.viewModel.finalUrlSuffix(finalUrlSuffix);\r\n }\r\n\r\n /**\r\n * Get final url suffix\r\n *\r\n * @returns {String} final url suffix\r\n */\r\n getFinalUrlSuffix() {\r\n return (this.viewModel.finalUrlSuffix() || '').trim(); // handle the space\r\n }\r\n\r\n setErrors(errors) {\r\n this.viewModel.externalErrors(errors);\r\n }\r\n\r\n isValid() {\r\n return this.viewModel.isValid();\r\n }\r\n}\r\n\r\n","import _ from 'underscore';\r\nimport { PureKnockoutView } from '@bingads-webui/knockout-view';\r\nimport { FinalUrlSuffixView } from './view';\r\nimport template from '../shared/inline-edit/template.pug';\r\nimport ViewModel from '../shared/inline-edit/viewmodel';\r\n\r\n/**\r\n * save event - When save button clicked, it fires with the new final url suffix.\r\n * It carries a parameter with format of { finalUrlSuffix }\r\n * @event FinalUrlSuffixInlineEditView#save\r\n * @type {Object}\r\n */\r\n\r\n/**\r\n * close event - When cancel button clicked, it fires close event.\r\n *\r\n * @event FinalUrlSuffixInlineEditView#close\r\n * @type {void}\r\n */\r\n\r\n/**\r\n * FinalUrlSuffixInlineEditView\r\n * will disable save button when input invalid\r\n *\r\n * @fires FinalUrlSuffixInlineEditView#save\r\n * @fires FinalUrlSuffixInlineEditView#close\r\n */\r\nexport class FinalUrlSuffixInlineEditView extends PureKnockoutView {\r\n /**\r\n * Initilize final url suffix\r\n *\r\n * @param {Object} param - An object containing these default options for view:\r\n * @param {Object} param.i18n - the localization settings\r\n * @param {Object} param.i18n.getString - localization settings function\r\n * @param {String} param.finalUrlSuffix - final url suffix\r\n * @returns {void} void\r\n */\r\n initialize({\r\n i18n,\r\n finalUrlSuffix,\r\n }) {\r\n super.initialize({ i18n, finalUrlSuffix });\r\n this.i18n = i18n;\r\n this.finalUrlSuffixView = new FinalUrlSuffixView({\r\n i18n,\r\n editMode: true,\r\n finalUrlSuffix,\r\n });\r\n\r\n this.finalUrlSuffixView.on('finalUrlSuffix:updated', ({ isValid }) => {\r\n this.viewModel.isValid(isValid);\r\n });\r\n\r\n this.viewModel.isValid(this.finalUrlSuffixView.isValid());\r\n\r\n this.setChild('childView', this.finalUrlSuffixView);\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click .btn-primary': 'save',\r\n 'click .btn-default': 'cancel',\r\n };\r\n }\r\n\r\n get template() {\r\n return ({ model }) => template({ model, i18n: this.i18n });\r\n }\r\n\r\n get ViewModel() {\r\n return ViewModel;\r\n }\r\n\r\n /**\r\n * Fires save event after click save button\r\n *\r\n * @fires FinalUrlSuffixInlineEditView#save\r\n * @returns {void}\r\n */\r\n save() {\r\n this.trigger('save', { finalUrlSuffix: this.finalUrlSuffixView.getFinalUrlSuffix() });\r\n }\r\n\r\n /**\r\n * Fires close event after click cancel button\r\n *\r\n * @fires FinalUrlSuffixInlineEditView#close\r\n * @returns {void}\r\n */\r\n cancel() {\r\n this.trigger('close');\r\n }\r\n\r\n setErrors(errors) {\r\n if (errors && !_.isEmpty(errors) && _.isObject(errors)) {\r\n this.viewModel.error(errors[_.keys(errors)[0]]);\r\n } else {\r\n this.viewModel.error('');\r\n }\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport ko from 'knockout';\r\nimport $ from 'jquery';\r\n\r\nclass Parameter {\r\n constructor({ Key, Value, i18n }) {\r\n this.key = ko.observable(Key);\r\n this.val = ko.observable(Value);\r\n this.isValid = ko.observable(true);\r\n this.errorMessages = ko.computed(() => {\r\n const invalidChars = ['#', '/', ' '];\r\n const errors = [];\r\n const key = this.key();\r\n const value = this.val();\r\n\r\n if (value && !key) {\r\n errors.push(i18n.getString('Error_Campaign_API_KeyNullOrEmpty'));\r\n }\r\n if (_.some(invalidChars, c => _.contains(key, c))) {\r\n errors.push(i18n.getString('Error_Campaign_API_InvalidCharactersInKey'));\r\n }\r\n if (/\\s/.test(value)) { // Validate value against white spaces\r\n errors.push(i18n.getString('Error_Campaign_API_InvalidCharactersInValue'));\r\n }\r\n this.isValid(!errors.length);\r\n return errors;\r\n });\r\n }\r\n}\r\n\r\nexport default class CustomParams {\r\n constructor({\r\n customParameters = [],\r\n bulkEditMode,\r\n editMode,\r\n bulkEditShowAddLabel,\r\n bulkEditShowMatchCase,\r\n i18n,\r\n permissions,\r\n entityType,\r\n forceUseIncreasedCount,\r\n readOnly,\r\n }) {\r\n const params = customParameters;\r\n\r\n const paramsInitialLength = 1;\r\n while (params.length < paramsInitialLength) {\r\n params.push({\r\n Key: undefined,\r\n Value: undefined,\r\n });\r\n }\r\n\r\n this.bulkEditMode = bulkEditMode;\r\n\r\n this.editMode = ko.observable(editMode);\r\n\r\n this.isDisabled = ko.observable(false || readOnly);\r\n\r\n this.bulkEditShowAddLabel = ko.observable(bulkEditShowAddLabel);\r\n\r\n this.bulkEditShowMatchCase = ko.observable(bulkEditShowMatchCase);\r\n\r\n this.bulkEditMatchCaseSelected = ko.observable(false);\r\n\r\n let useIncreasedCount = !!forceUseIncreasedCount;\r\n\r\n if (!useIncreasedCount) {\r\n // Temporary check for MT staged release. Will remove after feature GA.\r\n const entityTypeLower = !entityType ? '' : entityType.toLowerCase();\r\n\r\n if (entityTypeLower === 'phase1entity' || entityTypeLower === 'campaign' || entityTypeLower === 'adgroup' || entityTypeLower === 'keyword' ||\r\n entityTypeLower === 'ad' || entityTypeLower === 'audience' || entityTypeLower === 'autotarget' || entityTypeLower === 'productgroup') {\r\n useIncreasedCount = true;\r\n } else {\r\n useIncreasedCount = permissions.IsCustomParameterCountIncreasePhase3Enabled;\r\n }\r\n }\r\n\r\n this.maxParameterCount = useIncreasedCount ? 8 : 3;\r\n this.valueMaxLength = ko.observable(useIncreasedCount ? 250 : 200);\r\n\r\n this.addCustomParamEntry = () => {\r\n this.parameters.push(new Parameter({\r\n Key: undefined,\r\n Value: undefined,\r\n i18n,\r\n }));\r\n $('.custom-param__key-field').last().focus();\r\n };\r\n\r\n this.removeCustomParamEntry = (index) => {\r\n this.parameters.splice(index, 1);\r\n };\r\n\r\n this.getInputAriaLabel = (index, isKey = true) => {\r\n const key = isKey ? i18n.getString('CustomParameters_Placeholder_Key') : i18n.getString('CustomParameters_Placeholder_Value');\r\n\r\n return (i18n.getString('BulkEdit_UrlOptions_CustomParameters_InputAriaLabel') || '').replace('{{key}}', key).replace('{{number}}', index + 1);\r\n };\r\n\r\n this.getRemoveButtonAriaLabel = index => (i18n.getString('BulkEdit_UrlOptions_CustomParameters_RemoveLineNumber') || '').replace('{{number}}', index + 1);\r\n\r\n this.parameters = ko.observableArray(_.map(params, p => new Parameter(_.extend({ i18n }, p))));\r\n\r\n this.showAddLable = ko.computed(() =>\r\n this.editMode() &&\r\n this.bulkEditShowAddLabel() &&\r\n this.parameters().length < this.maxParameterCount);\r\n\r\n this.errorMessages = ko.computed(() => {\r\n if (this.parametersError) {\r\n this.parametersError([]);\r\n }\r\n let keys = _.compact(_.invoke(this.parameters(), 'key'));\r\n keys = _.map(keys, key => key.toLowerCase());\r\n return _.unique(keys).length !== keys.length ?\r\n [i18n.getString('ErrorNumber_UniqueCustomParameterNames')] :\r\n '';\r\n });\r\n\r\n this.parameterArray = ko.computed(() => _.map(this.parameters(), param => ({\r\n Key: param.key(),\r\n Value: param.val(),\r\n })));\r\n\r\n this.parametersError = ko.observableArray();\r\n\r\n this.isValid = ko.computed(() => {\r\n if (this.parametersError) {\r\n this.parametersError([]);\r\n }\r\n return !this.errorMessages().length &&\r\n _.find(this.parameters(), p => p.errorMessages().length) === undefined;\r\n });\r\n\r\n this.showNone = ko.computed(() => !this.editMode() &&\r\n !_.find(this.parameters(), p => p.key() || p.val()));\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { PureKnockoutView } from '@bingads-webui/knockout-view';\r\nimport tmplBulkEdit from './template.pug';\r\nimport ViewModel from './viewmodel';\r\n\r\n/**\r\n * CustomParametersView\r\n * Trigger event customParameters:updated when user input update\r\n */\r\nexport class CustomParametersView extends PureKnockoutView {\r\n /**\r\n * Initilize custom prameters view settings\r\n *\r\n * @param {Object} param - An object containing these default options for view:\r\n * @param {Object} param.i18n - the localization settings\r\n * @param {Object} param.i18n.getString - localization settings function\r\n * @param {boolean} param.editMode - whether the view is in edit mode, default true\r\n * @param {boolean} param.bulkEditMode - whether in bulk edit mode, default false\r\n * @param {boolean} param.bulkEditShowAddLabel - whether show add label,\r\n * only valid in bulk edit mode\r\n * @param {boolean} param.bulkEditShowMatchCase - whether show match case option,\r\n * only valid in bulk edit mode\r\n * @param {String[]} param.errorMessages - error messages to show\r\n * @param {Object[]} param.customParameters - initial custom params,\r\n * in the format of {Key, Value}\r\n * @param {boolean} param.forceUseIncreasedCount - if `true`, will disregard the pilot flags and\r\n * use the increased number of custom parameters. Otherwise, will follow the current\r\n * pilot+entityType logic to determine the enablement of the increased count.\r\n * @returns {void} void\r\n */\r\n initialize({\r\n i18n,\r\n editMode = true,\r\n bulkEditMode = false,\r\n bulkEditShowAddLabel = true,\r\n bulkEditShowMatchCase = false,\r\n errorMessages,\r\n customParameters = [],\r\n permissions,\r\n entityType,\r\n forceUseIncreasedCount,\r\n withRealTimeUpdates = false,\r\n readOnly = false,\r\n }) {\r\n this.options = {\r\n i18n,\r\n editMode,\r\n bulkEditMode,\r\n bulkEditShowAddLabel,\r\n bulkEditShowMatchCase,\r\n customParameters,\r\n template: tmplBulkEdit,\r\n errorMessages,\r\n permissions,\r\n entityType,\r\n forceUseIncreasedCount,\r\n readOnly,\r\n };\r\n\r\n super.initialize(this.options);\r\n\r\n // trigger customParameters:updated when user input update\r\n // isValid is computed based on customerParameters\r\n this.viewModel.isValid.subscribe(() => {\r\n this.trigger('customParameters:updated', { isValid: this.isValid(), customParameters: this.getValues() });\r\n }, this);\r\n\r\n if (withRealTimeUpdates) {\r\n this.viewModel.parameterArray.subscribe((val) => {\r\n const newVal = _.filter(val, item => !_.isEmpty(item.Key) || !_.isEmpty(item.Value));\r\n\r\n this.trigger('change:customParameters', { isValid: this.isValid(), customParameters: newVal });\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Go to add replace mode, only meaningful in bulk edit mode\r\n * It will hide 'match case' option, and show 'add another' link\r\n *\r\n * @returns {void} void\r\n */\r\n goToAddReplaceMode() {\r\n // those two only used in bulk edit mode\r\n this.viewModel.bulkEditShowAddLabel(true);\r\n this.viewModel.bulkEditShowMatchCase(false);\r\n }\r\n\r\n /**\r\n * Go to add remove mode, only meaningful in bulk edit mode\r\n * It will show 'match case' option, and hide 'add another' link\r\n * It will also only show the first parameter\r\n *\r\n * @returns {void} void\r\n */\r\n goToRemoveMode() {\r\n this.viewModel.bulkEditShowAddLabel(false);\r\n this.viewModel.bulkEditShowMatchCase(true);\r\n if (this.options.bulkEditMode) {\r\n this.viewModel.parameters(this.viewModel.parameters.slice(0, 1));\r\n }\r\n }\r\n\r\n get ViewModel() {\r\n return ViewModel;\r\n }\r\n\r\n get template() {\r\n return () => this.options.template({\r\n i18n: this.options.i18n,\r\n bulkEditMode: this.options.bulkEditMode,\r\n });\r\n }\r\n\r\n /**\r\n * Set edit mode\r\n * @param {boolean} isEdit - whether to set to edit (false to be read mode)\r\n *\r\n * @returns {void} void\r\n */\r\n setEditMode(isEdit) {\r\n this.viewModel.editMode(isEdit);\r\n }\r\n\r\n /**\r\n * set Disabled value\r\n * @param {boolean} disabled - whether to set to disabled (false to be editable mode)\r\n *\r\n * @returns {void} void\r\n */\r\n setDisabled(disabled) {\r\n this.viewModel.isDisabled(disabled);\r\n }\r\n\r\n isValid() {\r\n return this.viewModel.isValid();\r\n }\r\n\r\n /**\r\n * Get custom parameters values\r\n * @param {boolean} separatedKeyValueProperties - whether to seperate key value properties\r\n * when true, return result as format of [{Key:name, Value: value}]\r\n * when false, else return it as [{name:value}] format.\r\n * For bulk edit mode, it will return them as {params, matchCase};\r\n *\r\n * @returns {Object} parameters value\r\n */\r\n getValues(separatedKeyValueProperties) {\r\n const list = [];\r\n _.each(this.viewModel.parameters(), (p) => {\r\n const key = p.key();\r\n\r\n if (key) {\r\n const item = {};\r\n let val = p.val();\r\n\r\n if (val === undefined) {\r\n val = '';\r\n }\r\n if (separatedKeyValueProperties) {\r\n item.Key = key;\r\n item.Value = val;\r\n } else {\r\n item[key] = val;\r\n }\r\n list.push(item);\r\n }\r\n });\r\n\r\n if (this.options.bulkEditMode) {\r\n return {\r\n params: list,\r\n matchCase: this.viewModel.bulkEditMatchCaseSelected(),\r\n };\r\n }\r\n return list;\r\n }\r\n}\r\n\r\n","import _ from 'underscore';\r\nimport { PureKnockoutView } from '@bingads-webui/knockout-view';\r\nimport { CustomParametersView } from './view';\r\nimport template from '../shared/inline-edit/template.pug';\r\nimport ViewModel from '../shared/inline-edit/viewmodel';\r\n\r\n/**\r\n * save event - When save button clicked, it fires with the new custom parameters.\r\n * It carries a parameter in the format of [{Key, Value}]\r\n * @event CustomParameterInlineEditView#save\r\n * @type {Array}\r\n */\r\n\r\n/**\r\n * close event - When cancel button clicked, it fires close event.\r\n *\r\n * @event CustomParameterInlineEditView#close\r\n * @type {void}\r\n */\r\n\r\n/**\r\n * CustomParameterInlineEditView\r\n *\r\n *\r\n * @fires CustomParameterInlineEditView#save\r\n * @fires CustomParameterInlineEditView#close\r\n */\r\nexport class CustomParameterInlineEditView extends PureKnockoutView {\r\n /**\r\n * Initilize view settings\r\n *\r\n * @param {Object} param - An object containing these default options for view:\r\n * @param {Object} param.i18n - the localization settings\r\n * @param {Object} param.i18n.getString - localization settings function\r\n * @param {Object[]} param.customParameters - initial custom params,\r\n * in the format of {Key, Value}\r\n * @returns {void} void\r\n */\r\n initialize({\r\n i18n,\r\n customParameters,\r\n permissions,\r\n entityType,\r\n }) {\r\n super.initialize({ i18n, customParameters });\r\n\r\n this.i18n = i18n;\r\n this.customPramsView = new CustomParametersView({\r\n i18n,\r\n editMode: true,\r\n customParameters,\r\n permissions,\r\n entityType,\r\n });\r\n\r\n this.customPramsView.on('customParameters:updated', ({ isValid }) => {\r\n this.viewModel.isValid(isValid);\r\n });\r\n\r\n this.viewModel.isValid(this.customPramsView.isValid());\r\n\r\n this.setChild('childView', this.customPramsView);\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click .btn-primary': 'save',\r\n 'click .btn-default': 'cancel',\r\n };\r\n }\r\n\r\n get template() {\r\n return ({ model }) => template({ model, i18n: this.i18n });\r\n }\r\n\r\n get ViewModel() {\r\n return ViewModel;\r\n }\r\n\r\n /**\r\n * Fires save event after click save button\r\n *\r\n * @fires CustomParameterInlineEditView#save\r\n * @returns {void}\r\n */\r\n save() {\r\n this.trigger('save', { customParams: this.customPramsView.getValues(true) });\r\n }\r\n\r\n /**\r\n * Fires close event after click cancel button\r\n *\r\n * @fires CustomParameterInlineEditView#close\r\n * @returns {void}\r\n */\r\n cancel() {\r\n this.trigger('close');\r\n }\r\n\r\n setErrors(errors) {\r\n if (errors && !_.isEmpty(errors) && _.isObject(errors)) {\r\n this.viewModel.error(errors[_.keys(errors)[0]]);\r\n } else {\r\n this.viewModel.error('');\r\n }\r\n }\r\n}\r\n","import ko from 'knockout';\r\n\r\nexport class ViewModel {\r\n constructor(options) {\r\n this.isFinalUrl = ko.observable(options.isFinal);\r\n\r\n this.isFinalUrl.Editing = ko.computed({\r\n read: () => this.isFinalUrl().toString(),\r\n write: newValue => this.isFinalUrl(newValue === 'true'),\r\n }, this);\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport ko from 'knockout';\r\nimport _ from 'underscore';\r\n\r\nimport finalUrlTemplate from './final-url-template.pug';\r\nimport { ViewModel } from './final-url-viewmodel';\r\n\r\nexport class FinalUrlView extends Backbone.View {\r\n initialize(options = {}) {\r\n this.options = options;\r\n _.defaults(this.options, {\r\n template: finalUrlTemplate,\r\n isFinal: true,\r\n });\r\n this.ko_model = new ViewModel(this.options);\r\n\r\n this.ko_model.isFinalUrl.subscribe((newValue) => {\r\n if (newValue === true) {\r\n this.trigger('finalUrlSelected');\r\n } else {\r\n this.trigger('destinationUrlSelected');\r\n }\r\n });\r\n }\r\n\r\n render() {\r\n this.$el.html(finalUrlTemplate({\r\n i18n: this.options.i18n,\r\n }));\r\n\r\n ko.applyBindings(this.ko_model, this.el);\r\n return this;\r\n }\r\n\r\n getValues() {\r\n return {\r\n isFinal: this.ko_model.isFinalUrl(),\r\n };\r\n }\r\n}\r\n","import ko from 'knockout';\r\nimport _ from 'underscore';\r\n\r\nconst urlRegex = new RegExp('^(http|https)(://)(.+)', 'i');\r\n\r\nexport class ViewModel {\r\n constructor(options) {\r\n this.maxFullUrlLength = options.maxFullUrlLength || 2048;\r\n this.protocols = [{\r\n Value: 'https',\r\n Text: 'https://',\r\n }, {\r\n Value: 'http',\r\n Text: 'http://',\r\n }];\r\n\r\n // MT strips off the protocol from the destination URLs\r\n // adding a hack for now to add the protocol back to the url\r\n if (options.url && options.url.indexOf('http') !== 0) {\r\n options.url = `https://${options.url}`; // eslint-disable-line no-param-reassign\r\n }\r\n\r\n this.errorContainer = ko.observable('');\r\n this.errorMessage = ko.observable('');\r\n this.showErrors = ko.observable(false);\r\n\r\n this.protocol = ko.observable();\r\n this.urlWithoutProtocol = ko.observable();\r\n this.fullUrl = ko.computed({\r\n read: () => {\r\n // if no actual url is entered, then empty string should return\r\n if (!this.urlWithoutProtocol() || _.isEmpty(this.urlWithoutProtocol().trim())) {\r\n return null;\r\n }\r\n\r\n // strip off the protocol from the beginning of\r\n // the url (if any) and update the protocol select\r\n const regexResult = urlRegex.exec(this.urlWithoutProtocol().trim());\r\n if (regexResult) {\r\n this.protocol(regexResult[1]);\r\n this.urlWithoutProtocol(regexResult[3]);\r\n }\r\n\r\n const value = `${this.protocol()}://${this.urlWithoutProtocol().trim()}`;\r\n return value;\r\n },\r\n write: (value) => {\r\n // if the input doesn't start with the protocol, it is not valid and we show blank instead.\r\n const regexResult = urlRegex.exec(value);\r\n this.protocol(regexResult ? regexResult[1] : 'https');\r\n this.urlWithoutProtocol(regexResult ? regexResult[3] : '');\r\n },\r\n }, this);\r\n\r\n this.errorContainer(options.errorContainer);\r\n this.fullUrl(options.url);\r\n\r\n this.isDisabled = ko.observable(false);\r\n\r\n this.maxLength = ko.computed(() => (\r\n this.maxFullUrlLength - this.protocol().length - '://'.length\r\n ), this);\r\n\r\n this.hasErrors = ko.observable(false);\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport ko from 'knockout';\r\nimport _ from 'underscore';\r\n\r\nimport { ViewModel } from './url-input-viewmodel';\r\nimport urlInputTemplate from './url-input.pug';\r\n\r\nexport class UrlEditorView extends Backbone.View {\r\n initialize(options) {\r\n this.options = options || {};\r\n\r\n _.defaults(this.options, {\r\n template: urlInputTemplate,\r\n urlPlaceholder: '',\r\n errorContainer: '',\r\n });\r\n\r\n this.ko_model = new ViewModel(this.options);\r\n\r\n this.ko_model.fullUrl.subscribe((value) => {\r\n this.trigger('urlChanged', value);\r\n }, this);\r\n }\r\n\r\n render() {\r\n this.$el.html(this.options.template({\r\n urlPlaceholder: this.options.urlPlaceholder,\r\n ariaLabelledby: this.options.ariaLabelledby,\r\n }));\r\n\r\n ko.applyBindings(this.ko_model, this.el);\r\n return this;\r\n }\r\n\r\n remove() {\r\n ko.cleanNode(this.el);\r\n super.remove();\r\n return this;\r\n }\r\n\r\n getFullUrl() {\r\n return this.ko_model.fullUrl();\r\n }\r\n\r\n setFullUrl(url) {\r\n return this.ko_model.fullUrl(url);\r\n }\r\n\r\n enable() {\r\n this.ko_model.isDisabled(false);\r\n }\r\n\r\n disable() {\r\n this.ko_model.isDisabled(true);\r\n }\r\n}\r\n","import ko from 'knockout';\r\n\r\nexport class ViewModel {\r\n constructor(options) {\r\n this.mobileUrlVisible = ko.observable(options.isFinal && !options.isMobilePreferred);\r\n this.showTitles = ko.observable(options.showTitles);\r\n this.errorMessages = ko.observableArray();\r\n this.landingPageUrlErrorMessages = ko.observableArray();\r\n this.showUpgradeWarning = ko.observable(false);\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport ko from 'knockout';\r\nimport _ from 'underscore';\r\n\r\nimport { FinalUrlView } from './final-url-view';\r\nimport { UrlEditorView } from './url-input/url-input-view';\r\nimport { ViewModel } from './upgraded-url-viewmodel';\r\nimport template from './upgraded-url.pug';\r\n\r\nexport class UpgradedUrlView extends Backbone.View {\r\n initialize(options = {}) {\r\n this.options = options;\r\n this.i18n = options.i18n;\r\n\r\n _.defaults(this.options, {\r\n template,\r\n isFinal: true,\r\n smallContainer: true,\r\n showTitles: true,\r\n campaignFlow: false,\r\n });\r\n\r\n this.showDestinationUrl = !this.options.disableKeywordDestinationUrl || !this.options.isFinal;\r\n this.ko_model = new ViewModel(this.options);\r\n }\r\n\r\n updateOnDevicePreference() {\r\n this.ko_model.mobileUrlVisible(true);\r\n }\r\n\r\n getValues() {\r\n const isFinal = !this.showDestinationUrl || this.finalUrl.getValues().isFinal;\r\n\r\n return {\r\n url: this.urlEditor.getFullUrl(),\r\n mobileFinalUrl: isFinal ?\r\n this.mobileUrl.ko_model.fullUrl() : null,\r\n isFinal,\r\n };\r\n }\r\n\r\n finalUrlSelected() {\r\n this.updateOnDevicePreference();\r\n this.urlEditor.enable();\r\n if (!this.options.isFinal) {\r\n this.ko_model.showUpgradeWarning(true);\r\n }\r\n\r\n this.isValid();\r\n }\r\n\r\n destinationUrlSelected() {\r\n this.ko_model.mobileUrlVisible(false);\r\n this.ko_model.showUpgradeWarning(false);\r\n if (this.options.disableKeywordDestinationUrl) {\r\n this.urlEditor.setFullUrl(this.options.url);\r\n this.urlEditor.disable();\r\n }\r\n this.isValid();\r\n }\r\n\r\n render() {\r\n this.$el.html(this.options.template({\r\n i18n: this.i18n,\r\n showDestinationUrl: this.showDestinationUrl,\r\n }));\r\n\r\n ko.applyBindings(this.ko_model, this.el);\r\n\r\n if (this.showDestinationUrl) {\r\n this.finalUrl = new FinalUrlView(_.extend({}, this.options, {\r\n el: this.$('.final-url'),\r\n }));\r\n\r\n this.finalUrl.on('finalUrlSelected', this.finalUrlSelected.bind(this));\r\n this.finalUrl.on('destinationUrlSelected', this.destinationUrlSelected.bind(this));\r\n\r\n this.finalUrl.render();\r\n }\r\n\r\n const $url = this.$('.url');\r\n\r\n this.urlEditor = new UrlEditorView({\r\n url: this.options.url,\r\n el: $url,\r\n });\r\n this.urlEditor.on('urlChanged', () => {\r\n this.trigger('finalUrlChanged');\r\n }, this);\r\n this.urlEditor.render();\r\n\r\n if (this.showDestinationUrl && this.options.disableKeywordDestinationUrl) {\r\n this.urlEditor.disable();\r\n }\r\n\r\n this.mobileUrl = new UrlEditorView({\r\n url: this.options.finalMobileUrl,\r\n el: this.$('.mobile-url'),\r\n });\r\n\r\n this.mobileUrl.on('urlChanged', () => {\r\n this.trigger('mobileUrlChanged');\r\n }, this);\r\n this.mobileUrl.render();\r\n\r\n this.$('.url input.url-field').attr('name', 'FinalUrls');\r\n this.$('.mobile-url input.url-field').attr('name', 'MobileFinalUrls');\r\n\r\n this.on('finalUrlChanged', this.isValid);\r\n this.on('mobileUrlChanged', this.isValid);\r\n\r\n return this;\r\n }\r\n\r\n isValid() {\r\n const values = this.getValues();\r\n const errors = [];\r\n const landingPageUrlErrorMessages = [];\r\n\r\n if (values.isFinal && values.mobileFinalUrl && !values.url) {\r\n errors.push(this.i18n.getString('Error_Campaign_API_FinalUrlRequiredWhenUsingMobileFinalUrl'));\r\n }\r\n\r\n this.ko_model.errorMessages(errors);\r\n this.ko_model.landingPageUrlErrorMessages(landingPageUrlErrorMessages);\r\n const errorMessageNotExists = !errors.length && !landingPageUrlErrorMessages.length;\r\n\r\n this.trigger('upgradedUrl:updated', { isValid: errorMessageNotExists });\r\n\r\n return errorMessageNotExists;\r\n }\r\n\r\n remove() {\r\n this.urlEditor.remove();\r\n if (this.finalUrl) {\r\n this.finalUrl.remove();\r\n }\r\n this.mobileUrl.remove();\r\n\r\n super.remove();\r\n }\r\n}\r\n","import _ from 'underscore';\r\n\r\nimport { DeterministicWrapperView } from '@bingads-webui/deterministic-wrapper-view';\r\nimport { PureKnockoutView } from '@bingads-webui/knockout-view';\r\n\r\nimport template from '../shared/inline-edit/template.pug';\r\nimport { UpgradedUrlView } from './upgraded-url-view';\r\nimport ViewModel from '../shared/inline-edit/viewmodel';\r\n\r\nclass SingleViewWrapper extends DeterministicWrapperView {\r\n initialize(options) {\r\n this.view = options.view;\r\n this.listenTo(this.view, 'all', this.trigger);\r\n this.rendered = true;\r\n }\r\n}\r\n\r\nexport class UpgradedUrlInlineEditView extends PureKnockoutView {\r\n initialize({ i18n, upgradedUrls, permissions }) {\r\n super.initialize({ i18n, upgradedUrls });\r\n this.i18n = i18n;\r\n const disableKeywordDestinationUrl = permissions ?\r\n permissions.IsKeywordDestinationURLDisabled : false;\r\n\r\n this.upgradedUrlView = new UpgradedUrlView({\r\n url: upgradedUrls.url,\r\n finalMobileUrl: upgradedUrls.mobileFinalUrl,\r\n isFinal: upgradedUrls.isFinal,\r\n showTitles: true,\r\n i18n,\r\n disableKeywordDestinationUrl,\r\n });\r\n\r\n this.upgradedUrlView.on('upgradedUrl:updated', ({ isValid }) => {\r\n this.viewModel.isValid(isValid);\r\n });\r\n\r\n this.setChild('childView', new SingleViewWrapper({\r\n view: this.upgradedUrlView.render(),\r\n }));\r\n\r\n // do not show errors before user interaction.\r\n this.viewModel.isValid(this.upgradedUrlView.isValid());\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click .btn-primary': 'save',\r\n 'click .btn-default': 'cancel',\r\n };\r\n }\r\n\r\n get template() {\r\n return ({ model }) => template({ model, i18n: this.i18n, customClass: 'upgraded-url-inline-editor' });\r\n }\r\n\r\n get ViewModel() {\r\n return ViewModel;\r\n }\r\n\r\n save() {\r\n this.trigger('save', { upgradedUrls: this.upgradedUrlView.getValues() });\r\n }\r\n\r\n cancel() {\r\n this.trigger('close');\r\n }\r\n\r\n setErrors(errors) {\r\n if (errors && !_.isEmpty(errors) && _.isObject(errors)) {\r\n this.viewModel.error(errors[_.keys(errors)[0]]);\r\n } else {\r\n this.viewModel.error('');\r\n }\r\n }\r\n}\r\n","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (closeLabel, contents) {pug_html = pug_html + \"\\u003Cdiv\" + (\" class=\\\"popup__close clickable\\\"\"+\" role=\\\"button\\\"\"+pug.attr(\"aria-label\", closeLabel, true, true)+\" tabindex=\\\"0\\\"\") + \"\\u003E\\u003Cspan class=\\\"glyphicon glyphicon-remove\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"popup__contents\\\"\\u003E\" + (null == (pug_interp = contents) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\";}.call(this,\"closeLabel\" in locals_for_with?locals_for_with.closeLabel:typeof closeLabel!==\"undefined\"?closeLabel:undefined,\"contents\" in locals_for_with?locals_for_with.contents:typeof contents!==\"undefined\"?contents:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (dragging, val) {pug_html = pug_html + (null == (pug_interp = val) ? \"\" : pug_interp) + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"grabber\",{dragging: dragging}], [false,true]), false, true)) + \"\\u003E\\u003Cdiv class=\\\"grabberBar\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"dragging\" in locals_for_with?locals_for_with.dragging:typeof dragging!==\"undefined\"?dragging:undefined,\"val\" in locals_for_with?locals_for_with.val:typeof val!==\"undefined\"?val:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function ($html, ariaLabel, classes, gridEditIconTitle, text) {pug_html = pug_html + \"\\u003Cdiv class=\\\"grid-editable-cell-container\\\"\\u003E\" + (null == (pug_interp = $html) ? \"\" : pug_interp) + (pug.escape(null == (pug_interp = text) ? \"\" : pug_interp)) + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"grid-edit-icon\",classes], [false,true]), false, true)+pug.attr(\"title\", gridEditIconTitle, true, true)+\" role=\\\"button\\\" tabindex=\\\"0\\\"\"+pug.attr(\"aria-label\", ariaLabel, true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"$html\" in locals_for_with?locals_for_with.$html:typeof $html!==\"undefined\"?$html:undefined,\"ariaLabel\" in locals_for_with?locals_for_with.ariaLabel:typeof ariaLabel!==\"undefined\"?ariaLabel:undefined,\"classes\" in locals_for_with?locals_for_with.classes:typeof classes!==\"undefined\"?classes:undefined,\"gridEditIconTitle\" in locals_for_with?locals_for_with.gridEditIconTitle:typeof gridEditIconTitle!==\"undefined\"?gridEditIconTitle:undefined,\"text\" in locals_for_with?locals_for_with.text:typeof text!==\"undefined\"?text:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (val) {pug_html = pug_html + (null == (pug_interp = val) ? \"\" : pug_interp) + \"\\u003Cdiv class=\\\"dragger\\\"\\u003E\\u003Cdiv class=\\\"dragger-bar\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"val\" in locals_for_with?locals_for_with.val:typeof val!==\"undefined\"?val:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (childStyle, parentStyle) {pug_html = pug_html + \"\\u003Cdiv\" + (\" class=\\\"bar-parent\\\"\"+pug.attr(\"style\", pug.style(parentStyle), true, true)) + \"\\u003E\\u003Cdiv\" + (\" class=\\\"bar-child\\\"\"+pug.attr(\"style\", pug.style(childStyle), true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"childStyle\" in locals_for_with?locals_for_with.childStyle:typeof childStyle!==\"undefined\"?childStyle:undefined,\"parentStyle\" in locals_for_with?locals_for_with.parentStyle:typeof parentStyle!==\"undefined\"?parentStyle:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (ItemPreviewI18nKeys, OccasionI18nKeys, data, getPromotionDetailTypeForModel, getPromotionTypeForModel, i18n) {var promotionType = getPromotionTypeForModel(data);\nvar promotionTypeI18nKey;\nvar promotionTypeI18nData;\nswitch(promotionType) {\n case 'UptoMonetaryDiscount':\n promotionTypeI18nKey = ItemPreviewI18nKeys['Up to {{monetaryDiscount}} off'];\n promotionTypeI18nData = { monetaryDiscount: i18n.formatCurrency(data.MoneyAmountOff, data.CurrencyCode) };\n break;\n case 'MonetaryDiscount':\n promotionTypeI18nKey = ItemPreviewI18nKeys['{{monetaryDiscount}} off'];\n promotionTypeI18nData = { monetaryDiscount: i18n.formatCurrency(data.MoneyAmountOff, data.CurrencyCode) };\n break;\n case 'UptoPercentDiscount':\n promotionTypeI18nKey = ItemPreviewI18nKeys['Up to {{percentDiscount}} off'];\n promotionTypeI18nData = { percentDiscount: i18n.formatPercent(data.PercentOff / 100) };\n break;\n case 'PercentDiscount':\n promotionTypeI18nKey = ItemPreviewI18nKeys['{{percentDiscount}} off'];\n promotionTypeI18nData = { percentDiscount: i18n.formatPercent(data.PercentOff / 100) };\n break;\n}\nvar promotionTypeFormatted = i18n.getString(promotionTypeI18nKey, promotionTypeI18nData);\n\nvar promotionDetail = getPromotionDetailTypeForModel(data);\nvar promotionDetailI18nKey = '';\nvar promotionDetailI18nData;\nvar promotionDetailFormatted = '';\nvar hasPromotionDetail = promotionDetail !== 'None';\nif (hasPromotionDetail) {\n switch (promotionDetail) {\n case 'OnOrdersOver':\n promotionDetailI18nKey = ItemPreviewI18nKeys['On orders over {{amount}}'];\n promotionDetailI18nData = { amount: i18n.formatCurrency(data.OrdersOverAmount, data.CurrencyCode) };\n break;\n case 'PromotionCode':\n promotionDetailI18nKey = ItemPreviewI18nKeys['Code {{promotionCode}}'];\n promotionDetailI18nData = { promotionCode: data.PromotionCode };\n break;\n }\n promotionDetailFormatted = i18n.getString(promotionDetailI18nKey, promotionDetailI18nData);\n}\n\nvar dateRangeI18nKey = '';\nvar dateRangeI18nData;\nvar startDateFormatted = '';\nvar endDateFormatted = '';\nvar DATE_FORMAT_MM_DD = 'MM/dd';\nfunction formatISODateString(isoDatetimeString) {\n const dateToUse = i18n.parseDate(\n isoDatetimeString.substring(0, 10),\n {\n raw: 'yyyy-MM-dd',\n timeZone: null,\n }\n );\n\n return i18n.formatDate(dateToUse, { skeleton: \"MMMd\", timeZone: null });\n}\n\nvar dateRangeFormatted = '';\nvar hasDateRange = data.PromotionStartDate || data.PromotionEndDate;\nif (hasDateRange) {\n if (data.PromotionStartDate) {\n startDateFormatted = formatISODateString(data.PromotionStartDate);\n }\n if (data.PromotionEndDate) {\n endDateFormatted = formatISODateString(data.PromotionEndDate);\n }\n if (startDateFormatted && endDateFormatted) {\n if (startDateFormatted !== endDateFormatted) {\n dateRangeI18nKey = ItemPreviewI18nKeys['Valid {{startDate}} - {{endDate}}'];\n dateRangeI18nData = { startDate: startDateFormatted, endDate: endDateFormatted };\n } else {\n dateRangeI18nKey = ItemPreviewI18nKeys['Valid {{date}}'];\n dateRangeI18nData = { date: startDateFormatted };\n }\n } else if (startDateFormatted) {\n dateRangeI18nKey = ItemPreviewI18nKeys['Starts {{startDate}}'];\n dateRangeI18nData = { startDate: startDateFormatted };\n } else if (endDateFormatted) {\n dateRangeI18nKey = ItemPreviewI18nKeys['Ends {{endDate}}'];\n dateRangeI18nData = { endDate: endDateFormatted };\n }\n dateRangeFormatted = i18n.getString(dateRangeI18nKey, dateRangeI18nData);\n}\n\nvar hasOccasion = data.Occasion !== 'None';\nvar hasSecondLine = hasPromotionDetail || hasDateRange;\n\npug_html = pug_html + \"\\u003Cdiv class=\\\"itemTemplate-text\\\"\\u003E\";\nif (hasOccasion) {\npug_html = pug_html + (pug.escape(null == (pug_interp = i18n.getString(OccasionI18nKeys[data.Occasion])) ? \"\" : pug_interp)) + \":\\n\";\n}\npug_html = pug_html + (pug.escape(null == (pug_interp = promotionTypeFormatted) ? \"\" : pug_interp)) + \" \" + (pug.escape(null == (pug_interp = data.PromotionItem) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\nif (hasSecondLine) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"itemTemplate-text\\\"\\u003E\";\nif (hasPromotionDetail) {\npug_html = pug_html + (pug.escape(null == (pug_interp = promotionDetailFormatted) ? \"\" : pug_interp));\nif (hasDateRange) {\npug_html = pug_html + \"\\n·\\n\";\n}\n}\nif (hasDateRange) {\npug_html = pug_html + (pug.escape(null == (pug_interp = dateRangeFormatted) ? \"\" : pug_interp));\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\n}}.call(this,\"ItemPreviewI18nKeys\" in locals_for_with?locals_for_with.ItemPreviewI18nKeys:typeof ItemPreviewI18nKeys!==\"undefined\"?ItemPreviewI18nKeys:undefined,\"OccasionI18nKeys\" in locals_for_with?locals_for_with.OccasionI18nKeys:typeof OccasionI18nKeys!==\"undefined\"?OccasionI18nKeys:undefined,\"data\" in locals_for_with?locals_for_with.data:typeof data!==\"undefined\"?data:undefined,\"getPromotionDetailTypeForModel\" in locals_for_with?locals_for_with.getPromotionDetailTypeForModel:typeof getPromotionDetailTypeForModel!==\"undefined\"?getPromotionDetailTypeForModel:undefined,\"getPromotionTypeForModel\" in locals_for_with?locals_for_with.getPromotionTypeForModel:typeof getPromotionTypeForModel!==\"undefined\"?getPromotionTypeForModel:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n, value) {pug_mixins[\"helpLink\"] = pug_interp = function(topic, displayText, ariaLabelContext){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Ca\" + (\" class=\\\"HelpTopic\\\"\"+pug.attr(\"query\", 'help:' + topic, true, true)+\" href=\\\"javascript:void(0);\\\"\"+pug.attr(\"aria-label\", (ariaLabelContext || ' ') + ' ' + displayText, true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = displayText) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\";\n};\npug_mixins[\"scoreMap\"] = pug_interp = function(score, i18n){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\nswitch (score){\ncase 0 :\npug_html = pug_html + (pug.escape(null == (pug_interp = i18n.getString('QualityScore_NA')) ? \"\" : pug_interp));\n break;\ncase 1:\npug_html = pug_html + \"\\u003Cdiv class=\\\"qs-Poor\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('QualityScore_Poor')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\n break;\ncase 2:\npug_html = pug_html + \"\\u003Cdiv class=\\\"qs-Ok\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('QualityScore_Ok')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\n break;\ncase 3:\npug_html = pug_html + \"\\u003Cdiv class=\\\"qs-Good\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('QualityScore_Good')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\n break;\ndefault:\npug_html = pug_html + (pug.escape(null == (pug_interp = '') ? \"\" : pug_interp));\n break;\n}\n};\npug_html = pug_html + \"\\u003Ctable class=\\\"qs-Values\\\" cellpadding=\\\"2\\\" cellspacing=\\\"0\\\" border=\\\"0\\\"\\u003E\\u003Ctr\\u003E\\u003Ctd\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('QualityScoreFlyOut_KeywordRelevance')) ? \"\" : pug_interp)) + \"\\u003C\\u002Ftd\\u003E\\u003Ctd class=\\\"leftPadFour\\\"\\u003E\";\npug_mixins[\"scoreMap\"](value.QualityScore.KeywordRelevance, i18n);\npug_html = pug_html + \"\\u003C\\u002Ftd\\u003E\\u003C\\u002Ftr\\u003E\\u003Ctr\\u003E\\u003Ctd\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('QualityScoreFlyOut_LandingPageRelevance')) ? \"\" : pug_interp)) + \"\\u003C\\u002Ftd\\u003E\\u003Ctd class=\\\"leftPadFour\\\"\\u003E\";\npug_mixins[\"scoreMap\"](value.QualityScore.LandingPageRelevance, i18n);\npug_html = pug_html + \"\\u003C\\u002Ftd\\u003E\\u003C\\u002Ftr\\u003E\\u003Ctr\\u003E\\u003Ctd\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('QualityScoreFlyOut_LandingPageQuality')) ? \"\" : pug_interp)) + \"\\u003C\\u002Ftd\\u003E\\u003Ctd class=\\\"leftPadFour\\\"\\u003E\";\npug_mixins[\"scoreMap\"](value.QualityScore.LandingPageQuality, i18n);\npug_html = pug_html + \"\\u003C\\u002Ftd\\u003E\\u003C\\u002Ftr\\u003E\\u003C\\u002Ftable\\u003E\";\npug_mixins[\"helpLink\"]('127yek', i18n.getString('QualityScoreFlyOut_HelpLink'), i18n.getString('QualityScoreFlyOut_HelpText'));}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"value\" in locals_for_with?locals_for_with.value:typeof value!==\"undefined\"?value:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n, value) {pug_html = pug_html + \"\\u003Cdiv class=\\\"quality-score-popup-title\\\"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('QualityScoreFlyOut_TotalScoreHeading')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = ' ') ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = value.QualityScore.OverallQualityScore) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = ' ') ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('QualityScoreFlyOut_TotalScore')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"value\" in locals_for_with?locals_for_with.value:typeof value!==\"undefined\"?value:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n) {pug_html = pug_html + \"\\u003Cdiv class=\\\"audience-meter\\\"\\u003E\\u003Cdiv\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_ReachControl_EstimatedImpressions')) ? \"\" : pug_interp)) + \"\\u003Cstrong class=\\\"impr\\\"\\u003E\\u003C\\u002Fstrong\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"meter-container\\\"\\u003E\\u003Cdiv class=\\\"arrow\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"meter\\\"\\u003E\\u003Cdiv class=\\\"specific-meter\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"broad-meter\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"audience-specific-label\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_ReachControl_Specific')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"audience-broad-label\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_ReachControl_Broad')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n) {pug_html = pug_html + \"\\u003Cdiv id=\\\"reach-control-sentinel\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"reach-estimate-control\\\"\\u003E\\u003Cdiv class=\\\"panel\\\"\\u003E\\u003Cdiv class=\\\"panel-body\\\"\\u003E\\u003Cdiv class=\\\"audience-meter-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"estimate-note\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_ReachControl_Note')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"reach-warning alert alert-warning\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (descriptionFields, headlineFields, i18n, longHeadlineFields) {pug_mixins[\"popupHelp\"] = pug_interp = function(popupId, ariaLabelContext, arialLabelText){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Ca\" + (\" class=\\\"helpbutton\\\"\"+\" type=\\\"helppopup\\\" style=\\\"z-index: 1\\\"\"+pug.attr(\"topic\", popupId, true, true)+pug.attr(\"data-help\", true, true, true)+\" onclick=\\\"PopupController.PopupJsClick(this)\\\" href=\\\"javascript:void(0);\\\"\"+pug.attr(\"aria-label\", (arialLabelText || 'Learn more') + ' ' + (ariaLabelContext || ''), true, true)) + \"\\u003E\\u003C\\u002Fa\\u003E\";\n};\n\n\n\n\n\n\n\n\n\npug_html = pug_html + \"\\u003Cdiv class=\\\"ad-creation-content\\\"\\u003E\\u003Cdiv class=\\\"row\\\"\\u003E\\u003Cdiv class=\\\"ad-properties-section\\\"\\u003E\\u003Cdiv class=\\\"short-headlines form-group\\\"\\u003E\\u003Clabel id=\\\"responsiveAdShortHeadlineLabel\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Ad_Short_Headline_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\";\npug_mixins[\"popupHelp\"]('pop_BA_CampaignCreate_AudAds_ShortHeadline', '', i18n.getString('Click to learn more about {{item}}', { item: i18n.getString('Audience_Campaign_Ad_Short_Headline_Label') }));\n// iterate headlineFields\n;(function(){\n var $$obj = headlineFields;\n if ('number' == typeof $$obj.length) {\n for (var index = 0, $$l = $$obj.length; index < $$l; index++) {\n var field = $$obj[index];\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"short-headline\",\"short-headline-form-\" + index], [false,true]), false, true)+\" style=\\\"position:relative;\\\"\"+pug.attr(\"data-bind\", 'visible: ' + index + ' < ' + 'showHeadlineCount' + '()', true, true)) + \"\\u003E\\u003Cspan\" + (pug.attr(\"class\", pug.classes([\"iconba\",\"iconba-Lightbulb\",field + '-AIGeneratedAsset'], [false,false,true]), false, true)+pug.attr(\"aria-label\", i18n.getString('Ad_Strength_RSA_AI_Generated_Asset'), true, true)+\" tabindex=\\\"0\\\" style=\\\"position:absolute;left:-20px;top:7px;color:#0078D4;font-size:16px;display:none;\\\"\") + \"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cdiv class=\\\"short-headline-form\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (\" class=\\\"headline-delete iconba iconba-Delete\\\"\"+pug.attr(\"data-id\", index, true, true)+\" tabindex=\\\"0\\\" data-bind=\\\"visible: showHeadlineCount() > 1\\\" style=\\\"position:absolute;right:-20px;top:10px;cursor:pointer;\\\"\") + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"remaining-chars-hint-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"error hidden\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n }\n } else {\n var $$l = 0;\n for (var index in $$obj) {\n $$l++;\n var field = $$obj[index];\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"short-headline\",\"short-headline-form-\" + index], [false,true]), false, true)+\" style=\\\"position:relative;\\\"\"+pug.attr(\"data-bind\", 'visible: ' + index + ' < ' + 'showHeadlineCount' + '()', true, true)) + \"\\u003E\\u003Cspan\" + (pug.attr(\"class\", pug.classes([\"iconba\",\"iconba-Lightbulb\",field + '-AIGeneratedAsset'], [false,false,true]), false, true)+pug.attr(\"aria-label\", i18n.getString('Ad_Strength_RSA_AI_Generated_Asset'), true, true)+\" tabindex=\\\"0\\\" style=\\\"position:absolute;left:-20px;top:7px;color:#0078D4;font-size:16px;display:none;\\\"\") + \"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cdiv class=\\\"short-headline-form\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (\" class=\\\"headline-delete iconba iconba-Delete\\\"\"+pug.attr(\"data-id\", index, true, true)+\" tabindex=\\\"0\\\" data-bind=\\\"visible: showHeadlineCount() > 1\\\" style=\\\"position:absolute;right:-20px;top:10px;cursor:pointer;\\\"\") + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"remaining-chars-hint-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"error hidden\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n }\n }\n}).call(this);\n\npug_html = pug_html + \"\\u003Ca class=\\\"ad-mma-add-headline clickable\\\" style=\\\"border:none;\\\" data-bind=\\\"css: { disabled: showHeadlineCount() >= maxHeadlines }, attr: { "aria-disabled": showHeadlineCount() >= maxHeadlines ? "true" : "false", tabindex: showHeadlineCount() >= maxHeadlines ? "-1" : "0" }\\\"\\u003E\\u003Cspan class=\\\"glyphicon glyphicon-plus\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Ad_AddHeadline')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fa\\u003E\\u003Cdiv class=\\\"form-group\\\" data-bind=\\\"visible: headlinesErrorMessage\\\"\\u003E\\u003Cdiv class=\\\"col-sm-4\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-8\\\"\\u003E\\u003Cdiv class=\\\"error\\\" data-bind=\\\"text: headlinesErrorMessage\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"long-headlines form-group\\\"\\u003E\\u003Clabel id=\\\"responsiveAdLongHeadlineLabel\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Ad_Long_Headline_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\";\npug_mixins[\"popupHelp\"]('pop_BA_CampaignCreate_AudAds_LongHeadline', '', i18n.getString('Click to learn more about {{item}}', { item: i18n.getString('Audience_Campaign_Ad_Long_Headline_Label') }));\n// iterate longHeadlineFields\n;(function(){\n var $$obj = longHeadlineFields;\n if ('number' == typeof $$obj.length) {\n for (var index = 0, $$l = $$obj.length; index < $$l; index++) {\n var field = $$obj[index];\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"long-headline\",\"long-headline-form-\" + index], [false,true]), false, true)+\" style=\\\"position:relative;\\\"\"+pug.attr(\"data-bind\", 'visible: ' + index + ' < ' + 'showLongHeadlineCount' + '()', true, true)) + \"\\u003E\\u003Cspan\" + (pug.attr(\"class\", pug.classes([\"iconba\",\"iconba-Lightbulb\",field + '-AIGeneratedAsset'], [false,false,true]), false, true)+pug.attr(\"aria-label\", i18n.getString('Ad_Strength_RSA_AI_Generated_Asset'), true, true)+\" tabindex=\\\"0\\\" style=\\\"position:absolute;left:-20px;top:7px;color:#0078D4;font-size:16px;display:none;\\\"\") + \"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cdiv class=\\\"long-headline-form\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (\" class=\\\"long-headline-delete iconba iconba-Delete\\\"\"+pug.attr(\"data-id\", index, true, true)+\" tabindex=\\\"0\\\" data-bind=\\\"visible: showLongHeadlineCount() > 1\\\" style=\\\"position:absolute;right:-20px;top:10px;cursor:pointer;\\\"\") + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"remaining-chars-hint-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"error hidden\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n }\n } else {\n var $$l = 0;\n for (var index in $$obj) {\n $$l++;\n var field = $$obj[index];\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"long-headline\",\"long-headline-form-\" + index], [false,true]), false, true)+\" style=\\\"position:relative;\\\"\"+pug.attr(\"data-bind\", 'visible: ' + index + ' < ' + 'showLongHeadlineCount' + '()', true, true)) + \"\\u003E\\u003Cspan\" + (pug.attr(\"class\", pug.classes([\"iconba\",\"iconba-Lightbulb\",field + '-AIGeneratedAsset'], [false,false,true]), false, true)+pug.attr(\"aria-label\", i18n.getString('Ad_Strength_RSA_AI_Generated_Asset'), true, true)+\" tabindex=\\\"0\\\" style=\\\"position:absolute;left:-20px;top:7px;color:#0078D4;font-size:16px;display:none;\\\"\") + \"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cdiv class=\\\"long-headline-form\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (\" class=\\\"long-headline-delete iconba iconba-Delete\\\"\"+pug.attr(\"data-id\", index, true, true)+\" tabindex=\\\"0\\\" data-bind=\\\"visible: showLongHeadlineCount() > 1\\\" style=\\\"position:absolute;right:-20px;top:10px;cursor:pointer;\\\"\") + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"remaining-chars-hint-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"error hidden\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n }\n }\n}).call(this);\n\npug_html = pug_html + \"\\u003Ca class=\\\"ad-mma-add-long-headline clickable\\\" style=\\\"border:none;\\\" data-bind=\\\"css: { disabled: showLongHeadlineCount() >= maxLongHeadlines }, attr: { "aria-disabled": showLongHeadlineCount() >= maxLongHeadlines ? "true" : "false", tabindex: showLongHeadlineCount() >= maxLongHeadlines ? "-1" : "0" }\\\"\\u003E\\u003Cspan class=\\\"glyphicon glyphicon-plus\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Ad_AddLongHeadline')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fa\\u003E\\u003Cdiv class=\\\"form-group\\\" data-bind=\\\"visible: longHeadlinesErrorMessage\\\"\\u003E\\u003Cdiv class=\\\"col-sm-4\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-8\\\"\\u003E\\u003Cdiv class=\\\"error\\\" data-bind=\\\"text: longHeadlinesErrorMessage\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"descriptions form-group\\\"\\u003E\\u003Clabel id=\\\"responsiveAdDescriptionLabel\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Ad_Description_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\";\npug_mixins[\"popupHelp\"]('pop_BA_CampaignCreate_AudAds_AdText', '', i18n.getString('Click to learn more about {{item}}', { item: i18n.getString('Audience_Campaign_Ad_Description_Label') }));\n// iterate descriptionFields\n;(function(){\n var $$obj = descriptionFields;\n if ('number' == typeof $$obj.length) {\n for (var index = 0, $$l = $$obj.length; index < $$l; index++) {\n var field = $$obj[index];\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"description\",\"description-form-\" + index], [false,true]), false, true)+\" style=\\\"position:relative;\\\"\"+pug.attr(\"data-bind\", 'visible: ' + index + ' < ' + 'showDescriptionCount' + '()', true, true)) + \"\\u003E\\u003Cspan\" + (pug.attr(\"class\", pug.classes([\"iconba\",\"iconba-Lightbulb\",field + '-AIGeneratedAsset'], [false,false,true]), false, true)+pug.attr(\"aria-label\", i18n.getString('Ad_Strength_RSA_AI_Generated_Asset'), true, true)+\" tabindex=\\\"0\\\" style=\\\"position:absolute;left:-20px;top:7px;color:#0078D4;font-size:16px;display:none;\\\"\") + \"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cdiv class=\\\"description-form\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (\" class=\\\"description-delete iconba iconba-Delete\\\"\"+pug.attr(\"data-id\", index, true, true)+\" tabindex=\\\"0\\\" data-bind=\\\"visible: showDescriptionCount() > 1\\\" style=\\\"position:absolute;right:-20px;top:10px;cursor:pointer;\\\"\") + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"remaining-chars-hint-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"error hidden\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n }\n } else {\n var $$l = 0;\n for (var index in $$obj) {\n $$l++;\n var field = $$obj[index];\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"description\",\"description-form-\" + index], [false,true]), false, true)+\" style=\\\"position:relative;\\\"\"+pug.attr(\"data-bind\", 'visible: ' + index + ' < ' + 'showDescriptionCount' + '()', true, true)) + \"\\u003E\\u003Cspan\" + (pug.attr(\"class\", pug.classes([\"iconba\",\"iconba-Lightbulb\",field + '-AIGeneratedAsset'], [false,false,true]), false, true)+pug.attr(\"aria-label\", i18n.getString('Ad_Strength_RSA_AI_Generated_Asset'), true, true)+\" tabindex=\\\"0\\\" style=\\\"position:absolute;left:-20px;top:7px;color:#0078D4;font-size:16px;display:none;\\\"\") + \"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cdiv class=\\\"description-form\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (\" class=\\\"description-delete iconba iconba-Delete\\\"\"+pug.attr(\"data-id\", index, true, true)+\" tabindex=\\\"0\\\" data-bind=\\\"visible: showDescriptionCount() > 1\\\" style=\\\"position:absolute;right:-20px;top:10px;cursor:pointer;\\\"\") + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"remaining-chars-hint-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"error hidden\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n }\n }\n}).call(this);\n\npug_html = pug_html + \"\\u003Ca class=\\\"ad-mma-add-description clickable\\\" style=\\\"border:none;\\\" data-bind=\\\"css: { disabled: showDescriptionCount() >= maxDescriptions }, attr: { "aria-disabled": showDescriptionCount() >= maxDescriptions ? "true" : "false", tabindex: showDescriptionCount() >= maxDescriptions ? "-1" : "0" }\\\"\\u003E\\u003Cspan class=\\\"glyphicon glyphicon-plus\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Ad_AddDescription')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fa\\u003E\\u003Cdiv class=\\\"form-group\\\" data-bind=\\\"visible: descriptionsErrorMessage\\\"\\u003E\\u003Cdiv class=\\\"col-sm-4\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-8\\\"\\u003E\\u003Cdiv class=\\\"error\\\" data-bind=\\\"text: descriptionsErrorMessage\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"descriptionFields\" in locals_for_with?locals_for_with.descriptionFields:typeof descriptionFields!==\"undefined\"?descriptionFields:undefined,\"headlineFields\" in locals_for_with?locals_for_with.headlineFields:typeof headlineFields!==\"undefined\"?headlineFields:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"longHeadlineFields\" in locals_for_with?locals_for_with.longHeadlineFields:typeof longHeadlineFields!==\"undefined\"?longHeadlineFields:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"panel-footer\\\" data-bind=\\\"visible: showErrors\\\"\\u003E\\u003Cdiv class=\\\"error\\\" data-bind=\\\"html: errorCountString\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Ca class=\\\"errorCountLink\\\" data-bind=\\\"html: errorCountLinkText, href:"javascript:void(0)"\\\"\\u003E\\u003C\\u002Fa\\u003E\\u003Cbr\\u003E\\u003Cdiv class=\\\"previewTable grid\\\" data-bind=\\\"visible: showErrorGrid\\\"\\u003E\\u003Ctable\\u003E\\u003Cthead\\u003E\\u003Ctr class=\\\"grid-header-row\\\" data-bind=\\\"foreach: errorsGrids\\\"\\u003E\\u003Cth class=\\\"grid-header-cell grid-disabledsort\\\"\\u003E\\u003Cdiv class=\\\"grid-header-textcontainer\\\"\\u003E\\u003Ca class=\\\"grid-header-text\\\" data-bind=\\\"text: $data\\\"\\u003E\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fth\\u003E\\u003C\\u002Ftr\\u003E\\u003Ctbody data-bind=\\\"foreach: inlineErrors\\\"\\u003E\\u003Ctr class=\\\"grid-row\\\"\\u003E\\u003Ctd class=\\\"grid-cell\\\"\\u003E\\u003Cdiv class=\\\"grid-content-container\\\" data-bind=\\\"text: $data.name\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Ftd\\u003E\\u003Ctd class=\\\"grid-cell\\\"\\u003E\\u003Cdiv class=\\\"grid-content-container\\\" data-bind=\\\"text: $data.error\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Ftd\\u003E\\u003C\\u002Ftr\\u003E\\u003C\\u002Ftbody\\u003E\\u003C\\u002Fthead\\u003E\\u003C\\u002Ftable\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (adStatusOptions, automatedCTAEnable, descriptionFields, headlineFields, i18n, isBoostAnchorsEnabled, isBoostCTAAriaTextEnabled, isBoostCustomCTAEnabled, isBoostScenario, isBulkEditMMA, isMMAAutomatedCTAOptInEnabled, isMMAEnabled, isMSANLogoAndCTAForMMAEnabled, isMoveFinalUrlTop, isMultiMediaAdsPhase2Enabled, isMultimediaAd, longHeadlineFields, selectedOption) {pug_mixins[\"popupHelp\"] = pug_interp = function(popupId, ariaLabelContext, arialLabelText){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Ca\" + (\" class=\\\"helpbutton\\\"\"+\" type=\\\"helppopup\\\" style=\\\"z-index: 1\\\"\"+pug.attr(\"topic\", popupId, true, true)+pug.attr(\"data-help\", true, true, true)+\" onclick=\\\"PopupController.PopupJsClick(this)\\\" href=\\\"javascript:void(0);\\\"\"+pug.attr(\"aria-label\", (arialLabelText || 'Learn more') + ' ' + (ariaLabelContext || ''), true, true)) + \"\\u003E\\u003C\\u002Fa\\u003E\";\n};\npug_mixins[\"helpLink\"] = pug_interp = function(topic, displayText, ariaLabelContext, fBindQuery){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\nif (fBindQuery) {\npug_html = pug_html + \"\\u003Ca\" + (\" class=\\\"HelpTopic\\\"\"+\" href=\\\"javascript:void(0);\\\"\"+pug.attr(\"data-bind\", 'attr: { \"query\": \"help:\" + ' + topic + '}', true, true)+pug.attr(\"aria-label\", (ariaLabelContext || '') + ' ' + displayText, true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = displayText) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Ca\" + (\" class=\\\"HelpTopic\\\"\"+pug.attr(\"query\", 'help:' + topic, true, true)+\" href=\\\"javascript:void(0);\\\"\"+pug.attr(\"aria-label\", (ariaLabelContext || ' ') + ' ' + displayText, true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = displayText) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\";\n}\n};\npug_html = pug_html + \"\\u003Cdiv class=\\\"ad-creation-content\\\"\\u003E\\u003Cdiv class=\\\"row\\\"\\u003E\\u003Cdiv class=\\\"ad-properties-section\\\"\\u003E\\u003Cdiv class=\\\"image-manager-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"image-required-error error\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\nif (isBulkEditMMA) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"image-experience\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"business-name form-group\\\"\\u003E\\u003Clabel id=\\\"responsiveAdBusinessNameLabel\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Ad_Business_Name_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\";\npug_mixins[\"popupHelp\"]('pop_BA_CampaignCreate_AudAds_BusinessName', '', i18n.getString('Click to learn more about {{item}}', { item: i18n.getString('Audience_Campaign_Ad_Business_Name_Label') }));\npug_html = pug_html + \"\\u003Cdiv class=\\\"business-name-form\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"remaining-chars-hint-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"error hidden\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group\\\" data-bind=\\\"visible: businessNameErrorMessage\\\"\\u003E\\u003Cdiv class=\\\"col-sm-4\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-8\\\"\\u003E\\u003Cdiv class=\\\"error\\\" data-bind=\\\"text: businessNameErrorMessage\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"call-to-action form-group\\\"\\u003E\\u003Cdiv class=\\\"row\\\"\\u003E\\u003Clabel class=\\\"control-label accordion cta-options__title\\\"\\u003E\\u003Ca class=\\\"expand-cta-options\\\" href=\\\"javascript:void(0);\\\" data-bind=\\\"attr: {"aria-expanded": isCTAExpanded() ? "true" : "false"}\\\"\\u003E\\u003Cspan class=\\\"spritedimagealign\\\" data-bind=\\\"css: isCTAExpanded() ? "expandedImage" : "expanderImage"\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Ad_Call_To_Action_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fa\\u003E\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-control-static\\\"\\u003E\";\nif (isMMAAutomatedCTAOptInEnabled) {\npug_html = pug_html + \"\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Ad_Call_To_Action_New_Description_1_bulk_edit')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cb\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Ad_Call_To_Action_New_Description_2_disabled')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fb\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Ad_Call_To_Action_New_Description_3_disabled')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cb\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Ad_Call_To_Action_New_Description_4_disabled')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fb\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Ad_Call_To_Action_New_Description_5_disabled')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\npug_mixins[\"helpLink\"]('app54810', i18n.getString('LearnMore'));\n}\nelse {\npug_html = pug_html + \"\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Ad_Call_To_Action_Description')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\n}\npug_html = pug_html + (\"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"call-to-action-section\\\" data-bind=\\\"visible: isCTAExpanded\\\"\\u003E\\u003Cdiv class=\\\"form-group col-sm-4\\\"\\u003E\\u003Clabel class=\\\"control-label cta-options__language-label\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Ad_Language_Label')) ? \"\" : pug_interp)));\npug_mixins[\"popupHelp\"]('pop_BA_MMA_ActionLanguage', i18n.getString('Audience_Campaign_Ad_Language_Label'), i18n);\npug_html = pug_html + (\"\\u003C\\u002Flabel\\u003E\\u003Cdiv class=\\\"action-language\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group\\\" data-bind=\\\"visible: actionLanguageErrorMessage\\\"\\u003E\\u003Cdiv class=\\\"col-sm-4\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-8\\\"\\u003E\\u003Cdiv class=\\\"action-language-error error\\\" data-bind=\\\"text: actionLanguageErrorMessage\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group col-sm-4\\\"\\u003E\\u003Clabel class=\\\"control-label cta-options__action-text-label\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Ad_Action_Text_Label')) ? \"\" : pug_interp)));\npug_mixins[\"popupHelp\"]('pop_BA_AdExtensions_ActionText', i18n.getString('Audience_Campaign_Ad_Action_Text_Label'), i18n);\npug_html = pug_html + \"\\u003C\\u002Flabel\\u003E\\u003Cdiv class=\\\"action-text\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group\\\" data-bind=\\\"visible: actionTextErrorMessage\\\"\\u003E\\u003Cdiv class=\\\"col-sm-4\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-8\\\"\\u003E\\u003Cdiv class=\\\"action-text-error error\\\" data-bind=\\\"text: actionTextErrorMessage\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Chr\\u003E\\u003Cdiv class=\\\"form-group col-sm-4\\\"\\u003E\\u003Clabel id=\\\"responsiveAdStatusLabel\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Ad_Ad_Status_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003Cselect class=\\\"option-select form-control\\\"\\u003E\";\n// iterate adStatusOptions\n;(function(){\n var $$obj = adStatusOptions;\n if ('number' == typeof $$obj.length) {\n for (var pug_index0 = 0, $$l = $$obj.length; pug_index0 < $$l; pug_index0++) {\n var item = $$obj[pug_index0];\npug_html = pug_html + \"\\u003Coption\" + (pug.attr(\"value\", item.value, true, true)+pug.attr(\"selected\", item.value === selectedOption, true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = item.text) ? \"\" : pug_interp)) + \"\\u003C\\u002Foption\\u003E\";\n }\n } else {\n var $$l = 0;\n for (var pug_index0 in $$obj) {\n $$l++;\n var item = $$obj[pug_index0];\npug_html = pug_html + \"\\u003Coption\" + (pug.attr(\"value\", item.value, true, true)+pug.attr(\"selected\", item.value === selectedOption, true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = item.text) ? \"\" : pug_interp)) + \"\\u003C\\u002Foption\\u003E\";\n }\n }\n}).call(this);\n\npug_html = pug_html + \"\\u003C\\u002Fselect\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"panel-body\\\" data-bind=\\\"visible: showProgress\\\" role=\\\"alert\\\"\\u003E\";\nvar link = '' + i18n.getString('BulkEdit_GoToBulkEditsPage') + ''\npug_html = pug_html + (\"\\u003Cdiv data-bind=\\\"html: statusText\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"bulk-edit-progress-bar\\\"\\u003E\\u003Cdiv class=\\\"progress\\\"\\u003E\\u003Cdiv class=\\\"progress-bar\\\" data-bind=\\\"style:{width: completePercentage}, attr:{"aria-valuenow": completePercentage}\\\" role=\\\"progressbar\\\" aria-valuemin=\\\"0%\\\" aria-valuemax=\\\"100%\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"bulkeditlink\\\"\\u003E\" + (null == (pug_interp = i18n.getString('BulkEdit_RunInBackground_Description').replace('{0}', link)) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\\u003Cbutton class=\\\"btn btn-default\\\" id=\\\"runInBackground\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BulkEdit_RunInBackground')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fbutton\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\" + (null == (pug_interp = require(\"./inlineErrors.pug\").call(this, locals)) ? \"\" : pug_interp));\n}\nelse {\nif (isMoveFinalUrlTop) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"final-url form-group\\\"\\u003E\\u003Clabel id=\\\"responsiveAdFinalUrlLabel\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Ad_Final_URL_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\";\npug_mixins[\"popupHelp\"]('pop_BA_CampaignCreate_AudAds_FinalURL', '', i18n.getString('Click to learn more about {{item}}', { item: i18n.getString('Audience_Campaign_Ad_Final_URL_Label') }));\npug_html = pug_html + \"\\u003Cdiv class=\\\"error hidden\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"get-recommend-ad\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"image-suggestion-carousel\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nif (isMMAEnabled) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"image-experience\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"short-headlines form-group\\\"\\u003E\\u003Clabel id=\\\"responsiveAdShortHeadlineLabel\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Ad_Short_Headline_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\";\npug_mixins[\"popupHelp\"]('pop_BA_CampaignCreate_AudAds_ShortHeadline', '', i18n.getString('Click to learn more about {{item}}', { item: i18n.getString('Audience_Campaign_Ad_Short_Headline_Label') }));\n// iterate headlineFields\n;(function(){\n var $$obj = headlineFields;\n if ('number' == typeof $$obj.length) {\n for (var index = 0, $$l = $$obj.length; index < $$l; index++) {\n var _ = $$obj[index];\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"short-headline\",\"short-headline-form-\" + index], [false,true]), false, true)+\" style=\\\"position:relative;\\\"\"+pug.attr(\"data-bind\", 'visible: ' + index + ' < ' + 'showHeadlineCount' + '()', true, true)) + \"\\u003E\\u003Cdiv class=\\\"short-headline-form\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (\" class=\\\"headline-delete iconba iconba-Delete\\\"\"+pug.attr(\"data-id\", index, true, true)+\" tabindex=\\\"0\\\" data-bind=\\\"visible: showHeadlineCount() > 1\\\" style=\\\"position:absolute;right:-20px;top:10px;cursor:pointer;\\\"\") + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"remaining-chars-hint-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"error hidden\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n }\n } else {\n var $$l = 0;\n for (var index in $$obj) {\n $$l++;\n var _ = $$obj[index];\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"short-headline\",\"short-headline-form-\" + index], [false,true]), false, true)+\" style=\\\"position:relative;\\\"\"+pug.attr(\"data-bind\", 'visible: ' + index + ' < ' + 'showHeadlineCount' + '()', true, true)) + \"\\u003E\\u003Cdiv class=\\\"short-headline-form\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (\" class=\\\"headline-delete iconba iconba-Delete\\\"\"+pug.attr(\"data-id\", index, true, true)+\" tabindex=\\\"0\\\" data-bind=\\\"visible: showHeadlineCount() > 1\\\" style=\\\"position:absolute;right:-20px;top:10px;cursor:pointer;\\\"\") + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"remaining-chars-hint-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"error hidden\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n }\n }\n}).call(this);\n\npug_html = pug_html + \"\\u003Ca class=\\\"ad-mma-add-headline clickable\\\" style=\\\"border:none;\\\" data-bind=\\\"css: { disabled: showHeadlineCount() >= maxHeadlines }, attr: { "aria-disabled": showHeadlineCount() >= maxHeadlines ? "true" : "false", tabindex: showHeadlineCount() >= maxHeadlines ? "-1" : "0" }\\\"\\u003E\\u003Cspan class=\\\"glyphicon glyphicon-plus\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Ad_AddHeadline')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fa\\u003E\\u003Cdiv class=\\\"form-group\\\" data-bind=\\\"visible: headlinesErrorMessage\\\"\\u003E\\u003Cdiv class=\\\"col-sm-4\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-8\\\"\\u003E\\u003Cdiv class=\\\"error\\\" data-bind=\\\"text: headlinesErrorMessage\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"long-headlines form-group\\\"\\u003E\\u003Clabel id=\\\"responsiveAdLongHeadlineLabel\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Ad_Long_Headline_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\";\npug_mixins[\"popupHelp\"]('pop_BA_CampaignCreate_AudAds_LongHeadline', '', i18n.getString('Click to learn more about {{item}}', { item: i18n.getString('Audience_Campaign_Ad_Long_Headline_Label') }));\n// iterate longHeadlineFields\n;(function(){\n var $$obj = longHeadlineFields;\n if ('number' == typeof $$obj.length) {\n for (var index = 0, $$l = $$obj.length; index < $$l; index++) {\n var _ = $$obj[index];\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"long-headline\",\"long-headline-form-\" + index], [false,true]), false, true)+\" style=\\\"position:relative;\\\"\"+pug.attr(\"data-bind\", 'visible: ' + index + ' < ' + 'showLongHeadlineCount' + '()', true, true)) + \"\\u003E\\u003Cdiv class=\\\"long-headline-form\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (\" class=\\\"long-headline-delete iconba iconba-Delete\\\"\"+pug.attr(\"data-id\", index, true, true)+\" tabindex=\\\"0\\\" data-bind=\\\"visible: showLongHeadlineCount() > 1\\\" style=\\\"position:absolute;right:-20px;top:10px;cursor:pointer;\\\"\") + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"remaining-chars-hint-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"error hidden\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n }\n } else {\n var $$l = 0;\n for (var index in $$obj) {\n $$l++;\n var _ = $$obj[index];\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"long-headline\",\"long-headline-form-\" + index], [false,true]), false, true)+\" style=\\\"position:relative;\\\"\"+pug.attr(\"data-bind\", 'visible: ' + index + ' < ' + 'showLongHeadlineCount' + '()', true, true)) + \"\\u003E\\u003Cdiv class=\\\"long-headline-form\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (\" class=\\\"long-headline-delete iconba iconba-Delete\\\"\"+pug.attr(\"data-id\", index, true, true)+\" tabindex=\\\"0\\\" data-bind=\\\"visible: showLongHeadlineCount() > 1\\\" style=\\\"position:absolute;right:-20px;top:10px;cursor:pointer;\\\"\") + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"remaining-chars-hint-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"error hidden\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n }\n }\n}).call(this);\n\npug_html = pug_html + \"\\u003Ca class=\\\"ad-mma-add-long-headline clickable\\\" style=\\\"border:none;\\\" data-bind=\\\"css: { disabled: showLongHeadlineCount() >= maxLongHeadlines }, attr: { "aria-disabled": showLongHeadlineCount() >= maxLongHeadlines ? "true" : "false", tabindex: showLongHeadlineCount() >= maxLongHeadlines ? "-1" : "0" }\\\"\\u003E\\u003Cspan class=\\\"glyphicon glyphicon-plus\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Ad_AddLongHeadline')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fa\\u003E\\u003Cdiv class=\\\"form-group\\\" data-bind=\\\"visible: longHeadlinesErrorMessage\\\"\\u003E\\u003Cdiv class=\\\"col-sm-4\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-8\\\"\\u003E\\u003Cdiv class=\\\"error\\\" data-bind=\\\"text: longHeadlinesErrorMessage\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"descriptions form-group\\\"\\u003E\\u003Clabel id=\\\"responsiveAdDescriptionLabel\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Ad_Description_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\";\npug_mixins[\"popupHelp\"]('pop_BA_CampaignCreate_AudAds_AdText', '', i18n.getString('Click to learn more about {{item}}', { item: i18n.getString('Audience_Campaign_Ad_Description_Label') }));\n// iterate descriptionFields\n;(function(){\n var $$obj = descriptionFields;\n if ('number' == typeof $$obj.length) {\n for (var index = 0, $$l = $$obj.length; index < $$l; index++) {\n var _ = $$obj[index];\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"description\",\"description-form-\" + index], [false,true]), false, true)+\" style=\\\"position:relative;\\\"\"+pug.attr(\"data-bind\", 'visible: ' + index + ' < ' + 'showDescriptionCount' + '()', true, true)) + \"\\u003E\\u003Cdiv class=\\\"description-form\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (\" class=\\\"description-delete iconba iconba-Delete\\\"\"+pug.attr(\"data-id\", index, true, true)+\" tabindex=\\\"0\\\" data-bind=\\\"visible: showDescriptionCount() > 1\\\" style=\\\"position:absolute;right:-20px;top:10px;cursor:pointer;\\\"\") + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"remaining-chars-hint-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"error hidden\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n }\n } else {\n var $$l = 0;\n for (var index in $$obj) {\n $$l++;\n var _ = $$obj[index];\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"description\",\"description-form-\" + index], [false,true]), false, true)+\" style=\\\"position:relative;\\\"\"+pug.attr(\"data-bind\", 'visible: ' + index + ' < ' + 'showDescriptionCount' + '()', true, true)) + \"\\u003E\\u003Cdiv class=\\\"description-form\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (\" class=\\\"description-delete iconba iconba-Delete\\\"\"+pug.attr(\"data-id\", index, true, true)+\" tabindex=\\\"0\\\" data-bind=\\\"visible: showDescriptionCount() > 1\\\" style=\\\"position:absolute;right:-20px;top:10px;cursor:pointer;\\\"\") + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"remaining-chars-hint-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"error hidden\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n }\n }\n}).call(this);\n\npug_html = pug_html + \"\\u003Ca class=\\\"ad-mma-add-description clickable\\\" style=\\\"border:none;\\\" data-bind=\\\"css: { disabled: showDescriptionCount() >= maxDescriptions }, attr: { "aria-disabled": showDescriptionCount() >= maxDescriptions ? "true" : "false", tabindex: showDescriptionCount() >= maxDescriptions ? "-1" : "0" }\\\"\\u003E\\u003Cspan class=\\\"glyphicon glyphicon-plus\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Ad_AddDescription')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fa\\u003E\\u003Cdiv class=\\\"form-group\\\" data-bind=\\\"visible: descriptionsErrorMessage\\\"\\u003E\\u003Cdiv class=\\\"col-sm-4\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-8\\\"\\u003E\\u003Cdiv class=\\\"error\\\" data-bind=\\\"text: descriptionsErrorMessage\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"hotspot-panel\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cdiv class=\\\"short-headline form-group\\\"\\u003E\\u003Clabel id=\\\"responsiveAdShortHeadlineLabel\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Ad_Short_Headline_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\";\npug_mixins[\"popupHelp\"]('pop_BA_CampaignCreate_AudAds_ShortHeadline', '', i18n.getString('Click to learn more about {{item}}', { item: i18n.getString('Audience_Campaign_Ad_Short_Headline_Label') }));\npug_html = pug_html + \"\\u003Cdiv class=\\\"short-headline-form\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"remaining-chars-hint-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"error hidden\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group\\\" data-bind=\\\"visible: headlinesErrorMessage\\\"\\u003E\\u003Cdiv class=\\\"col-sm-4\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-8\\\"\\u003E\\u003Cdiv class=\\\"error\\\" data-bind=\\\"text: headlinesErrorMessage\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"long-headline form-group\\\"\\u003E\\u003Clabel id=\\\"responsiveAdLongHeadlineLabel\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Ad_Long_Headline_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\";\npug_mixins[\"popupHelp\"]('pop_BA_CampaignCreate_AudAds_LongHeadline', '', i18n.getString('Click to learn more about {{item}}', { item: i18n.getString('Audience_Campaign_Ad_Long_Headline_Label') }));\npug_html = pug_html + \"\\u003Cdiv class=\\\"long-headline-form\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"remaining-chars-hint-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"error hidden\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group\\\" data-bind=\\\"visible: longHeadlinesErrorMessage\\\"\\u003E\\u003Cdiv class=\\\"col-sm-4\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-8\\\"\\u003E\\u003Cdiv class=\\\"error\\\" data-bind=\\\"text: longHeadlinesErrorMessage\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"description form-group\\\"\\u003E\\u003Clabel id=\\\"responsiveAdDescriptionLabel\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Ad_Description_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\";\npug_mixins[\"popupHelp\"]('pop_BA_CampaignCreate_AudAds_AdText', '', i18n.getString('Click to learn more about {{item}}', { item: i18n.getString('Audience_Campaign_Ad_Description_Label') }));\npug_html = pug_html + \"\\u003Cdiv class=\\\"description-form\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"remaining-chars-hint-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"error hidden\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group\\\" data-bind=\\\"visible: descriptionsErrorMessage\\\"\\u003E\\u003Cdiv class=\\\"col-sm-4\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-8\\\"\\u003E\\u003Cdiv class=\\\"error\\\" data-bind=\\\"text: descriptionsErrorMessage\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003Cdiv class=\\\"business-name form-group\\\"\\u003E\\u003Clabel id=\\\"responsiveAdBusinessNameLabel\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Ad_Business_Name_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\";\npug_mixins[\"popupHelp\"]('pop_BA_CampaignCreate_AudAds_BusinessName', '', i18n.getString('Click to learn more about {{item}}', { item: i18n.getString('Audience_Campaign_Ad_Business_Name_Label') }));\npug_html = pug_html + \"\\u003Cdiv class=\\\"business-name-form\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"remaining-chars-hint-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"error hidden\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group\\\" data-bind=\\\"visible: businessNameErrorMessage\\\"\\u003E\\u003Cdiv class=\\\"col-sm-4\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-8\\\"\\u003E\\u003Cdiv class=\\\"error\\\" data-bind=\\\"text: businessNameErrorMessage\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\nif (!isMoveFinalUrlTop) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"final-url form-group\\\"\\u003E\\u003Clabel id=\\\"responsiveAdFinalUrlLabel\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Ad_Final_URL_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\";\npug_mixins[\"popupHelp\"]('pop_BA_CampaignCreate_AudAds_FinalURL', '', i18n.getString('Click to learn more about {{item}}', { item: i18n.getString('Audience_Campaign_Ad_Final_URL_Label') }));\npug_html = pug_html + \"\\u003Cdiv class=\\\"error hidden\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003Cdiv class=\\\"mobile-url form-group\\\"\\u003E\\u003Clabel id=\\\"responsiveAdMobileUrlLabel\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Ad_Mobile_URL_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\";\npug_mixins[\"popupHelp\"]('pop_BA_CampaignCreate_AudAds_MobileURL', '', i18n.getString('Click to learn more about {{item}}', { item: i18n.getString('Audience_Campaign_Ad_Mobile_URL_Label') }));\npug_html = pug_html + \"\\u003Cdiv class=\\\"error hidden\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\nif (isMultiMediaAdsPhase2Enabled || isBoostScenario || isMSANLogoAndCTAForMMAEnabled) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"call-to-action form-group\\\"\\u003E\\u003Cdiv class=\\\"row\\\"\\u003E\\u003Clabel class=\\\"control-label accordion cta-options__title\\\"\\u003E\\u003Ca class=\\\"expand-cta-options\\\" href=\\\"javascript:void(0);\\\" data-bind=\\\"attr: {"aria-expanded": isCTAExpanded() ? "true" : "false"}\\\"\\u003E\\u003Cspan class=\\\"spritedimagealign\\\" data-bind=\\\"css: isCTAExpanded() ? "expandedImage" : "expanderImage"\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Ad_Call_To_Action_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fa\\u003E\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\";\nif (isMMAAutomatedCTAOptInEnabled) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"form-control-static\\\"\\u003E\";\nif (automatedCTAEnable) {\npug_html = pug_html + \"\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Ad_Call_To_Action_New_Description_1_enabled')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cb\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Ad_Call_To_Action_New_Description_2_enabled')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fb\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Ad_Call_To_Action_New_Description_3_enabled')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Ad_Call_To_Action_New_Description_1_disabled')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cb\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Ad_Call_To_Action_New_Description_2_disabled')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fb\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Ad_Call_To_Action_New_Description_3_disabled')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cb\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Ad_Call_To_Action_New_Description_4_disabled')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fb\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Ad_Call_To_Action_New_Description_5_disabled')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\n}\npug_mixins[\"helpLink\"]('app54810', i18n.getString('LearnMore'));\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\n}\nelse\nif (isMSANLogoAndCTAForMMAEnabled) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"form-control-static\\\"\\u003E\\u003Cspan\\u003E\" + (null == (pug_interp = i18n.getString('Audience_Campaign_MMA_CTA_Description').replace(/{{bold}}/g, '').replace(/{{\\/bold}}/g, '')) ? \"\" : pug_interp) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse\nif (isMultimediaAd) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"form-control-static\\\"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Ad_Call_To_Action_Description')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + (\"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"call-to-action-section\\\" data-bind=\\\"visible: isCTAExpanded\\\"\\u003E\\u003Cdiv class=\\\"form-group col-sm-4\\\"\\u003E\\u003Clabel class=\\\"control-label cta-options__language-label\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Ad_Language_Label')) ? \"\" : pug_interp)));\npug_mixins[\"popupHelp\"]('pop_BA_MMA_ActionLanguage', i18n.getString('Audience_Campaign_Ad_Language_Label'), i18n);\npug_html = pug_html + \"\\u003C\\u002Flabel\\u003E\\u003Cdiv class=\\\"action-language\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group\\\" data-bind=\\\"visible: actionLanguageErrorMessage\\\"\\u003E\\u003Cdiv class=\\\"col-sm-4\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-8\\\"\\u003E\\u003Cdiv class=\\\"action-language-error error\\\" data-bind=\\\"text: actionLanguageErrorMessage\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group col-sm-4\\\"\\u003E\";\nif (isMSANLogoAndCTAForMMAEnabled) {\npug_html = pug_html + (\"\\u003Clabel class=\\\"control-label cta-options__action-text-label\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Ad_Action_Text_Label')) ? \"\" : pug_interp)));\npug_mixins[\"popupHelp\"]('pop_BA_AudAds_CTA_Text', i18n.getString('Audience_Campaign_Ad_Action_Text_Label'), i18n);\npug_html = pug_html + \"\\u003C\\u002Flabel\\u003E\";\n}\nelse {\npug_html = pug_html + (\"\\u003Clabel class=\\\"control-label cta-options__action-text-label\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Ad_Action_Text_Label')) ? \"\" : pug_interp)));\npug_mixins[\"popupHelp\"]('pop_BA_AdExtensions_ActionText', i18n.getString('Audience_Campaign_Ad_Action_Text_Label'), i18n);\npug_html = pug_html + \"\\u003C\\u002Flabel\\u003E\";\n}\npug_html = pug_html + \"\\u003Cdiv class=\\\"action-text\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group\\\" data-bind=\\\"visible: actionTextErrorMessage\\\"\\u003E\\u003Cdiv class=\\\"col-sm-4\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-8\\\"\\u003E\\u003Cdiv class=\\\"action-text-error error\\\" data-bind=\\\"text: actionTextErrorMessage\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\nif (isBoostCustomCTAEnabled) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"call-to-action-text\\\" data-bind=\\\"visible: ActionType() === "CustomText"\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nif (isBoostCTAAriaTextEnabled) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"call-to-action-aria-text\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\n}\nif (isBoostAnchorsEnabled) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"boost-anchors form-group\\\"\\u003E\\u003Cdiv class=\\\"row\\\"\\u003E\\u003Clabel class=\\\"control-label accordion boost-anchor__title\\\"\\u003E\\u003Ca class=\\\"expand-boost-anchors-options\\\" href=\\\"javascript:void(0);\\\" data-bind=\\\"attr: {"aria-expanded": isBoostAnchorsExpanded() ? "true" : "false"}\\\"\\u003E\\u003Cspan class=\\\"spritedimagealign\\\" data-bind=\\\"css: isBoostAnchorsExpanded() ? "expandedImage" : "expanderImage"\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Ad_Boost_Anchors_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fa\\u003E\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"boost-anchors-section\\\" data-bind=\\\"visible: isBoostAnchorsExpanded\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + (\"\\u003Cdiv class=\\\"website-image-opt-in\\\" data-bind=\\\"visible: showWebsiteImageOptIn\\\"\\u003E\\u003Clabel class=\\\"website-image-section-label\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('SharedLibrary_UrlOptions_CrawlImgLandPage')) ? \"\" : pug_interp)));\npug_mixins[\"popupHelp\"]('pop_BA_AcctLevelOptions_AutoRetrieve', i18n.getString('SharedLibrary_UrlOptions_CrawlImgLandPage'), i18n);\npug_html = pug_html + \"\\u003C\\u002Flabel\\u003E\\u003Cspan class=\\\"website-image-checkbox-label\\\" for=\\\"website-image-opt-in-checkbox\\\"\\u003E\\u003Cinput id=\\\"website-image-opt-in-checkbox\\\" type=\\\"checkbox\\\" data-bind=\\\"checked: hasWebsiteImageOptIn\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('SharedLibrary_UrlOptions_Include_CrawlImgLandPageDescription')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cdiv class=\\\"error\\\" data-bind=\\\"visible: !hasWebsiteImageOptIn()\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('AdCreator_WebsiteImage_OptIn_Error')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"audience-ads-policy-container\\\"\\u003E\\u003Cdiv class=\\\"alert alert-info\\\"\\u003E\\u003Cdiv class=\\\"alert-image\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"alert-info-inline\\\"\\u003E\";\nvar link = '' + i18n.getString('SharedLibrary_UrlOptions_CrawlImgLandPage_AlertMessage_Link') + ''\npug_html = pug_html + (null == (pug_interp = i18n.getString('SharedLibrary_UrlOptions_CrawlImgLandPage_AlertMessage').replace('{0}', link)) ? \"\" : pug_interp) + \"\\u003Cspan\\u003E \\u003C\\u002Fspan\\u003E\";\npug_mixins[\"helpLink\"]('app54714', i18n.getString('LearnMore'));\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"advanced-url-options\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv data-bind=\\\"visible: urlOptionErrorMessage\\\"\\u003E\\u003Cdiv class=\\\"col-sm-4\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-8\\\"\\u003E\\u003Cdiv class=\\\"error\\\" data-bind=\\\"text: urlOptionErrorMessage\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"impression-tracking-urls\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"third-party-measurements\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"generic-errors\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"adStatusOptions\" in locals_for_with?locals_for_with.adStatusOptions:typeof adStatusOptions!==\"undefined\"?adStatusOptions:undefined,\"automatedCTAEnable\" in locals_for_with?locals_for_with.automatedCTAEnable:typeof automatedCTAEnable!==\"undefined\"?automatedCTAEnable:undefined,\"descriptionFields\" in locals_for_with?locals_for_with.descriptionFields:typeof descriptionFields!==\"undefined\"?descriptionFields:undefined,\"headlineFields\" in locals_for_with?locals_for_with.headlineFields:typeof headlineFields!==\"undefined\"?headlineFields:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"isBoostAnchorsEnabled\" in locals_for_with?locals_for_with.isBoostAnchorsEnabled:typeof isBoostAnchorsEnabled!==\"undefined\"?isBoostAnchorsEnabled:undefined,\"isBoostCTAAriaTextEnabled\" in locals_for_with?locals_for_with.isBoostCTAAriaTextEnabled:typeof isBoostCTAAriaTextEnabled!==\"undefined\"?isBoostCTAAriaTextEnabled:undefined,\"isBoostCustomCTAEnabled\" in locals_for_with?locals_for_with.isBoostCustomCTAEnabled:typeof isBoostCustomCTAEnabled!==\"undefined\"?isBoostCustomCTAEnabled:undefined,\"isBoostScenario\" in locals_for_with?locals_for_with.isBoostScenario:typeof isBoostScenario!==\"undefined\"?isBoostScenario:undefined,\"isBulkEditMMA\" in locals_for_with?locals_for_with.isBulkEditMMA:typeof isBulkEditMMA!==\"undefined\"?isBulkEditMMA:undefined,\"isMMAAutomatedCTAOptInEnabled\" in locals_for_with?locals_for_with.isMMAAutomatedCTAOptInEnabled:typeof isMMAAutomatedCTAOptInEnabled!==\"undefined\"?isMMAAutomatedCTAOptInEnabled:undefined,\"isMMAEnabled\" in locals_for_with?locals_for_with.isMMAEnabled:typeof isMMAEnabled!==\"undefined\"?isMMAEnabled:undefined,\"isMSANLogoAndCTAForMMAEnabled\" in locals_for_with?locals_for_with.isMSANLogoAndCTAForMMAEnabled:typeof isMSANLogoAndCTAForMMAEnabled!==\"undefined\"?isMSANLogoAndCTAForMMAEnabled:undefined,\"isMoveFinalUrlTop\" in locals_for_with?locals_for_with.isMoveFinalUrlTop:typeof isMoveFinalUrlTop!==\"undefined\"?isMoveFinalUrlTop:undefined,\"isMultiMediaAdsPhase2Enabled\" in locals_for_with?locals_for_with.isMultiMediaAdsPhase2Enabled:typeof isMultiMediaAdsPhase2Enabled!==\"undefined\"?isMultiMediaAdsPhase2Enabled:undefined,\"isMultimediaAd\" in locals_for_with?locals_for_with.isMultimediaAd:typeof isMultimediaAd!==\"undefined\"?isMultimediaAd:undefined,\"longHeadlineFields\" in locals_for_with?locals_for_with.longHeadlineFields:typeof longHeadlineFields!==\"undefined\"?longHeadlineFields:undefined,\"selectedOption\" in locals_for_with?locals_for_with.selectedOption:typeof selectedOption!==\"undefined\"?selectedOption:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n, isAdCreatorEnabled, isGridDisplay, isMultimediaAd, isVideo) {pug_html = pug_html + \"\\u003Cdiv class=\\\"crud-audience-ad\\\"\\u003E\";\nif (!isMultimediaAd) {\nif (isAdCreatorEnabled) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"text-audience-ad\\\"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = (isGridDisplay ? i18n.getString(isVideo ? 'Audience_Campaign_Crud_Video_Ad_Edit_Description' : 'Audience_Campaign_Crud_Ad_Edit_Description') : i18n.getString(isVideo ? 'Audience_Campaign_Crud_Video_Ad_Description' : 'Audience_Campaign_Crud_Ad_Description')) + ' ') ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = (isGridDisplay ? i18n.getString(isVideo ? 'Audience_Campaign_Crud_Video_Ad_Edit_Description' : 'Audience_Campaign_Crud_Ad_Edit_Description') : i18n.getString(isVideo ? 'Audience_Campaign_Crud_Video_Ad_Description' : 'Audience_Campaign_Crud_Ad_Description')) + ' ') ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\n}\n}\npug_html = pug_html + \"\\u003Cdiv class=\\\"react-image-experience\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"created-ad-list-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"error-no-created-ad\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"isAdCreatorEnabled\" in locals_for_with?locals_for_with.isAdCreatorEnabled:typeof isAdCreatorEnabled!==\"undefined\"?isAdCreatorEnabled:undefined,\"isGridDisplay\" in locals_for_with?locals_for_with.isGridDisplay:typeof isGridDisplay!==\"undefined\"?isGridDisplay:undefined,\"isMultimediaAd\" in locals_for_with?locals_for_with.isMultimediaAd:typeof isMultimediaAd!==\"undefined\"?isMultimediaAd:undefined,\"isVideo\" in locals_for_with?locals_for_with.isVideo:typeof isVideo!==\"undefined\"?isVideo:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (Id, Value, ValueSetAtLevel, editorialStatus, editorialStatusText, i18n, showInheritIcon) {pug_html = pug_html + \"\\u003Cdiv class=\\\"rsa-ad-customizer-attibute-column\\\"\\u003E\\u003Cdiv class=\\\"rsa-ad-customizer-attribute-container\\\"\\u003E\";\nif (showInheritIcon) {\npug_html = pug_html + \"\\u003Cspan class=\\\"iconba iconba-TreeLevelArrow\\\" role=\\\"img\\\" aria-hidden=\\\"true\\\"\\u003E\\u003C\\u002Fspan\\u003E\";\n}\npug_html = pug_html + \"\\u003Cspan class=\\\"attribute-value\\\"\\u003E\" + (pug.escape(null == (pug_interp = Value) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\";\nvar appealble= editorialStatus === 'ApprovedLimited' || editorialStatus === 'Rejected';\nif (appealble) {\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"delivery-info\",`${appealble ? 'trigger-popup' : ''}`], [false,true]), false, true)+pug.attr(\"data-status\", editorialStatus, true, true)+pug.attr(\"data-valuelevel\", ValueSetAtLevel, true, true)) + \"\\u003E\";\nif (editorialStatus === 'Rejected') {\npug_html = pug_html + \"\\u003Cspan\" + (\" class=\\\"editorial-status status-icon iconba iconba-ErrorBadge\\\"\"+pug.attr(\"title\", i18n.getString('DeliveryStatusIcon_Tooltip_Error'), true, true)+pug.attr(\"aria-label\", i18n.getString('DeliveryStatusIcon_Tooltip_Error'), true, true)+\" tabindex=\\\"0\\\" role=\\\"button\\\"\") + \"\\u003E\\u003C\\u002Fspan\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cspan\" + (\" class=\\\"editorial-status status-icon iconba iconba-Warning\\\"\"+pug.attr(\"title\", i18n.getString('DeliveryStatusIcon_Tooltip_Warning'), true, true)+pug.attr(\"aria-label\", i18n.getString('DeliveryStatusIcon_Tooltip_Warning'), true, true)+\" tabindex=\\\"0\\\" role=\\\"button\\\"\") + \"\\u003E\\u003C\\u002Fspan\\u003E\";\n}\npug_html = pug_html + \"\\u003Cspan\" + (\" class=\\\"status-column editorial-status clickable editorial_delivery_status_with_inline_appeals\\\"\"+pug.attr(\"data-entityId\", Id, true, true)+\" title=\\\"\\\"\"+pug.attr(\"id\", `reasonImage#${Id}`, true, true)+\" tabindex=\\\"0\\\" role=\\\"button\\\"\") + \"\\u003E\" + (pug.escape(null == (pug_interp = editorialStatusText) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cspan class=\\\"status-column editorial-status\\\"\\u003E\" + (pug.escape(null == (pug_interp = editorialStatusText) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";}.call(this,\"Id\" in locals_for_with?locals_for_with.Id:typeof Id!==\"undefined\"?Id:undefined,\"Value\" in locals_for_with?locals_for_with.Value:typeof Value!==\"undefined\"?Value:undefined,\"ValueSetAtLevel\" in locals_for_with?locals_for_with.ValueSetAtLevel:typeof ValueSetAtLevel!==\"undefined\"?ValueSetAtLevel:undefined,\"editorialStatus\" in locals_for_with?locals_for_with.editorialStatus:typeof editorialStatus!==\"undefined\"?editorialStatus:undefined,\"editorialStatusText\" in locals_for_with?locals_for_with.editorialStatusText:typeof editorialStatusText!==\"undefined\"?editorialStatusText:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"showInheritIcon\" in locals_for_with?locals_for_with.showInheritIcon:typeof showInheritIcon!==\"undefined\"?showInheritIcon:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"form-horizontal\\\"\\u003E\\u003Cdiv class=\\\"bid-adjustment-grid\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (availableOptions, i18n, percentage, readonly, selectedOption, size) {pug_html = pug_html + \"\\u003Cdiv class=\\\"form-inline bid-adjustment-cell\\\"\\u003E\\u003Cselect\" + (\" class=\\\"bid-adjustment-select form-control\\\"\"+pug.attr(\"disabled\", readonly, true, true)+pug.attr(\"aria-label\", i18n.getString('BidAdjustment_Options'), true, true)) + \"\\u003E\";\n// iterate availableOptions\n;(function(){\n var $$obj = availableOptions;\n if ('number' == typeof $$obj.length) {\n for (var pug_index0 = 0, $$l = $$obj.length; pug_index0 < $$l; pug_index0++) {\n var item = $$obj[pug_index0];\npug_html = pug_html + \"\\u003Coption\" + (pug.attr(\"value\", item.text, true, true)+pug.attr(\"selected\", item.key === selectedOption, true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = item.text) ? \"\" : pug_interp)) + \"\\u003C\\u002Foption\\u003E\";\n }\n } else {\n var $$l = 0;\n for (var pug_index0 in $$obj) {\n $$l++;\n var item = $$obj[pug_index0];\npug_html = pug_html + \"\\u003Coption\" + (pug.attr(\"value\", item.text, true, true)+pug.attr(\"selected\", item.key === selectedOption, true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = item.text) ? \"\" : pug_interp)) + \"\\u003C\\u002Foption\\u003E\";\n }\n }\n}).call(this);\n\npug_html = pug_html + \"\\u003C\\u002Fselect\\u003E\\u003Cinput\" + (\" class=\\\"inline-input bid-adjustment-input form-control\\\"\"+\" type=\\\"text\\\"\"+pug.attr(\"aria-label\", i18n.getString('BidAdjustment_BidMultiplier'), true, true)+pug.attr(\"size\", size, true, true)+pug.attr(\"maxlength\", size, true, true)+pug.attr(\"value\", percentage, true, true)+pug.attr(\"disabled\", readonly, true, true)) + \"\\u003E\\u003Cspan\\u003E%\\u003C\\u002Fspan\\u003E\\u003Cdiv class=\\\"error\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"availableOptions\" in locals_for_with?locals_for_with.availableOptions:typeof availableOptions!==\"undefined\"?availableOptions:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"percentage\" in locals_for_with?locals_for_with.percentage:typeof percentage!==\"undefined\"?percentage:undefined,\"readonly\" in locals_for_with?locals_for_with.readonly:typeof readonly!==\"undefined\"?readonly:undefined,\"selectedOption\" in locals_for_with?locals_for_with.selectedOption:typeof selectedOption!==\"undefined\"?selectedOption:undefined,\"size\" in locals_for_with?locals_for_with.size:typeof size!==\"undefined\"?size:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n, isExcluded, isIncluded) {if ((isExcluded)) {\npug_html = pug_html + \"\\u003Cspan class=\\\"statusExcluded_icon\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"targeting-status\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Target_Setting_Excluded_Status')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\n}\nelse\nif ((isIncluded)) {\npug_html = pug_html + \"\\u003Cspan class=\\\"statusEnabled_icon\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"targeting-status\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Target_Setting_Included_Status')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\n}}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"isExcluded\" in locals_for_with?locals_for_with.isExcluded:typeof isExcluded!==\"undefined\"?isExcluded:undefined,\"isIncluded\" in locals_for_with?locals_for_with.isIncluded:typeof isIncluded!==\"undefined\"?isIncluded:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (err, i18n, query) {pug_html = pug_html + \"\\u003Cdiv class=\\\"cashback-settings-error\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString(err)) ? \"\" : pug_interp)) + \"\\u003Ca\" + (\" class=\\\"HelpTopic\\\"\"+pug.attr(\"query\", query, true, true)+\" href=\\\"javascript: void 0;\\\"\"+pug.attr(\"aria-label\", i18n.getString(err) + ' ' + i18n.getString('LearnMore'), true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('LearnMore')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"err\" in locals_for_with?locals_for_with.err:typeof err!==\"undefined\"?err:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"query\" in locals_for_with?locals_for_with.query:typeof query!==\"undefined\"?query:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (campaignName, i18n) {pug_html = pug_html + \"\\u003Cdiv class=\\\"top-panel-cashback-settings panel\\\"\\u003E\\u003Cdiv class=\\\"panel-heading\\\" role=\\\"heading\\\"\\u003E\\u003Cdiv class=\\\"panel-title\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Top_Panel_Cashback_Settings_Title')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Clabel\\u003E\" + (pug.escape(null == (pug_interp = 'Campaign') ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003Cdiv\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = campaignName) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group bidding-strategy-form\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group cashback-settings-form\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"error bulk-upsert-errors\\\"\\u003E\\u003Cul class=\\\"bulk-upsert-error\\\" data-bind=\\\"visible: bulkUpsertErrors().length > 0, foreach: bulkUpsertErrors, attr: {"aria-hidden": bulkUpsertErrors().length == 0}\\\" role=\\\"alert\\\"\\u003E\\u003Cli data-bind=\\\"html: $data\\\"\\u003E\\u003C\\u002Fli\\u003E\\u003C\\u002Ful\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"panel-footer\\\"\\u003E\\u003Cbutton class=\\\"save btn btn-primary inline-edit-save\\\" type=\\\"button\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Save')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fbutton\\u003E\\u003Cbutton class=\\\"cancel btn btn-default inline-edit-cancel\\\" type=\\\"button\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Cancel')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fbutton\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"campaignName\" in locals_for_with?locals_for_with.campaignName:typeof campaignName!==\"undefined\"?campaignName:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (bulkEditMode, i18n) {pug_html = pug_html + \"\\u003Cdiv class=\\\"custom-params-template\\\"\\u003E\\u003Cdiv data-bind=\\\"visible: showNone()\\\"\\u003E\\u003Cspan class=\\\"control-label\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('UrlOptions_None')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Ctable class=\\\"full-width\\\" data-bind=\\\"visible: editMode()\\\" role=\\\"presentation\\\"\\u003E\\u003Ctbody data-bind=\\\"foreach: parameters\\\"\\u003E\\u003Ctr class=\\\"custom-param-entry\\\"\\u003E\\u003Ctd data-bind=\\\"css: {'custom-param__bulk-first-row': $parent.parameters().length < 2 && $index() === 0}\\\"\\u003E\\u003Cdiv class=\\\"flex-row-fixed custom-param__key-container\\\"\\u003E\\u003Clabel class=\\\"control-label\\\"\\u003E\" + (pug.escape(null == (pug_interp = '{ _') ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\";\nvar keyPlaceHolder = bulkEditMode ? i18n.getString('Input_NoChange_PlaceHolder') : i18n.getString('CustomParameters_Placeholder_Key');\npug_html = pug_html + \"\\u003Cinput\" + (\" class=\\\"form-control custom-param__key-field\\\"\"+\" type=\\\"text\\\" data-bind=\\\"disable: $root.isDisabled, value: key, attr: {'aria-label': $root.getInputAriaLabel($index())}\\\"\"+pug.attr(\"placeholder\", keyPlaceHolder, true, true)+\" maxlength=\\\"16\\\"\") + \"\\u003E\\u003Clabel class=\\\"control-label\\\"\\u003E\" + (pug.escape(null == (pug_interp = '} =') ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cspan class=\\\"flex-row-dynamic\\\"\\u003E\";\nvar valuePlaceHolder = bulkEditMode ? i18n.getString('Input_NoChange_PlaceHolder') : i18n.getString('CustomParameters_Placeholder_Value')\npug_html = pug_html + \"\\u003Cinput\" + (\" class=\\\"form-control custom-param__value-field\\\"\"+\" type=\\\"text\\\" data-bind=\\\"disable: $root.isDisabled, value: val, attr: { maxlength: $root.valueMaxLength, 'aria-label': $root.getInputAriaLabel($index(), false)}\\\"\"+pug.attr(\"placeholder\", valuePlaceHolder, true, true)) + \"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Ftd\\u003E\\u003Ctd data-bind=\\\"style: { visibility: $root.bulkEditShowAddLabel() && $index() !== 0 ? "visible" : "hidden" }\\\"\\u003E\\u003C!-- ko if: $root.isDisabled--\\u003E\\u003Cdiv class=\\\"iconba iconba-Cancel control-label closeimage custom-param__close-button disabled\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C!-- \\u002Fko--\\u003E\\u003C!-- ko ifnot: $root.isDisabled--\\u003E\\u003Cdiv class=\\\"iconba iconba-Cancel control-label closeimage clickable custom-param__close-button\\\" data-bind=\\\"click: function(data, event) { event.stopPropagation(); $root.removeCustomParamEntry($index())}, attr: {'aria-label': $root.getRemoveButtonAriaLabel($index())}\\\" tabindex=\\\"0\\\" role=\\\"button\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C!-- \\u002Fko--\\u003E\\u003C\\u002Ftd\\u003E\\u003C\\u002Ftr\\u003E\\u003Ctr\\u003E\\u003Ctd\\u003E\\u003Cdiv class=\\\"font-error\\\"\\u003E\\u003Cul data-bind=\\\"foreach:errorMessages\\\"\\u003E\\u003Cli\\u003E\\u003Cspan data-bind=\\\"text: $data\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fli\\u003E\\u003C\\u002Ful\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Ftd\\u003E\\u003C\\u002Ftr\\u003E\\u003C\\u002Ftbody\\u003E\\u003C\\u002Ftable\\u003E\";\nvar addAnother = i18n.getString('BulkEdit_UrlOptions_CustomParameters_AddAnother')\npug_html = pug_html + \"\\u003C!-- ko if: $root.isDisabled--\\u003E\\u003Cspan class=\\\"add-another-link inactive\\\" data-bind=\\\"visible: showAddLable\\\"\\u003E\" + (pug.escape(null == (pug_interp = addAnother) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C!-- \\u002Fko--\\u003E\\u003C!-- ko ifnot: $root.isDisabled--\\u003E\\u003Ca class=\\\"add-another-link\\\" data-bind=\\\"visible: showAddLable, click: addCustomParamEntry\\\" href=\\\"javascript:void(0)\\\" role=\\\"button\\\"\\u003E\" + (pug.escape(null == (pug_interp = addAnother) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C!-- \\u002Fko--\\u003E\\u003Cdiv class=\\\"checkbox\\\" data-bind=\\\"visible: $root.bulkEditShowMatchCase()\\\"\\u003E\\u003Clabel\\u003E\\u003Cinput name=\\\"match-case-checkbox\\\" type=\\\"checkbox\\\" data-bind=\\\"disable: $root.isDisabled, checked: bulkEditMatchCaseSelected\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BulkEdit_UrlOptions_CustomParameters_MatchCase')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv data-bind=\\\"visible: !editMode(), foreach:parameters\\\"\\u003E\\u003Cdiv class=\\\"row\\\" data-bind=\\\"visible:$data.key\\\"\\u003E\\u003Cdiv class=\\\"form-inline col-sm-12\\\"\\u003E\\u003Cspan class=\\\"control-label\\\"\\u003E\" + (pug.escape(null == (pug_interp = '{_') ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"control-label\\\" data-bind=\\\"text:$data.key()\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"control-label\\\"\\u003E\" + (pug.escape(null == (pug_interp = '} = ') ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"control-label\\\" data-bind=\\\"text:$data.val()\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"font-error\\\" data-bind=\\\"visible: errorMessages().length > 0 || parametersError().length > 0\\\"\\u003E\\u003Cul data-bind=\\\"visible: errorMessages().length > 0, foreach:errorMessages\\\" role=\\\"alert\\\"\\u003E\\u003Cli\\u003E\\u003Cspan class=\\\"is-error\\\" data-bind=\\\"text: $data\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fli\\u003E\\u003C\\u002Ful\\u003E\\u003Cul data-bind=\\\"parametersError().length > 0, foreach:parametersError\\\" role=\\\"alert\\\"\\u003E\\u003Cli\\u003E\\u003Cspan class=\\\"is-error\\\" data-bind=\\\"text: $data.message\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fli\\u003E\\u003C\\u002Ful\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"bulkEditMode\" in locals_for_with?locals_for_with.bulkEditMode:typeof bulkEditMode!==\"undefined\"?bulkEditMode:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n, readOnly) {pug_html = pug_html + \"\\u003C!-- ko if: editMode()--\\u003E\\u003Cinput\" + (\" class=\\\"form-control full-width\\\"\"+\" type=\\\"text\\\" name=\\\"FinalUrlSuffix\\\" data-bind=\\\"value: finalUrlSuffix, attr: {maxlength: maxLength, "aria-invalid": errorMessages().length > 0, "placeholder": placeholderText}\\\"\"+pug.attr(\"aria-label\", i18n.getString('FinalUrlSuffix_Label'), true, true)+\" aria-describedby=\\\"FinalUrlSuffixErrors FinalUrlSuffixExample\\\"\"+pug.attr(\"disabled\", readOnly, true, true)) + \"\\u003E\\u003Cdiv class=\\\"charactersRemaining\\\"\\u003E\\u003Cspan id=\\\"FinalUrlSuffixExample\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('FinalUrlSuffix_Example')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"font-error\\\"\\u003E\\u003Cul id=\\\"FinalUrlSuffixErrors\\\" data-bind=\\\"foreach:errorMessages\\\" role=\\\"alert\\\"\\u003E\\u003Cli\\u003E\\u003Cspan class=\\\"is-error\\\" data-bind=\\\"html: $data\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fli\\u003E\\u003C\\u002Ful\\u003E\\u003Cul id=\\\"FinalUrlSuffixExternalErrors\\\" data-bind=\\\"foreach:externalErrors\\\" role=\\\"alert\\\"\\u003E\\u003Cli\\u003E\\u003Cspan class=\\\"is-error\\\" data-bind=\\\"html: $data\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fli\\u003E\\u003C\\u002Ful\\u003E\\u003C\\u002Fdiv\\u003E\\u003C!-- \\u002Fko--\\u003E\\u003Cspan class=\\\"control-label\\\" data-bind=\\\"visible: !editMode(), text: finalUrlSuffix\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cdiv data-bind=\\\"visible: showNone()\\\"\\u003E\\u003Cspan class=\\\"control-label\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('UrlOptions_None')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"readOnly\" in locals_for_with?locals_for_with.readOnly:typeof readOnly!==\"undefined\"?readOnly:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (customClass, i18n) {pug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([(customClass || '')], [true]), false, true)) + \"\\u003E\\u003Cdiv data-ref=\\\"childView\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cinput\" + (\" class=\\\"grid-edit-menu grid-popupeditor-save btn btn-primary\\\"\"+\" type=\\\"button\\\"\"+pug.attr(\"value\", i18n.getString('Save'), true, true)+\" data-bind=\\\"enable: isValid\\\"\") + \"\\u003E\\u003Cinput\" + (\" class=\\\"grid-popupeditor-cancel btn btn-default grid-edit-menu\\\"\"+\" type=\\\"button\\\"\"+pug.attr(\"value\", i18n.getString('Cancel'), true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cul class=\\\"grid-error-list\\\" data-bind=\\\"visible: error().length > 0\\\"\\u003E\\u003Cdiv class=\\\"grid-error spritedimage\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cspan class=\\\"error\\\" data-bind=\\\"html: error\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Ful\\u003E\";}.call(this,\"customClass\" in locals_for_with?locals_for_with.customClass:typeof customClass!==\"undefined\"?customClass:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n) {pug_html = pug_html + \"\\u003C!-- ko if: editMode()--\\u003E\\u003Cinput\" + (\" class=\\\"form-control\\\"\"+\" type=\\\"text\\\" name=\\\"TrackingTemplate\\\" data-bind=\\\"value: trackingTemplate, attr: {class: inputClass, maxlength: maxLength, "aria-invalid": errorMessages().length > 0}\\\"\"+pug.attr(\"aria-label\", i18n.getString('TrackingTemplate_Label'), true, true)+\" aria-describedby=\\\"TrackingTemplateErrors TrackingTemplateExample\\\"\") + \"\\u003E\\u003Cdiv class=\\\"uurl-test-tool__container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"charactersRemaining\\\"\\u003E\\u003Cspan id=\\\"TrackingTemplateExample\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('TrackingTemplate_Example')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"font-error\\\"\\u003E\\u003Cul id=\\\"TrackingTemplateErrors\\\" data-bind=\\\"foreach:errorMessages\\\" role=\\\"alert\\\"\\u003E\\u003Cli\\u003E\\u003Cspan class=\\\"is-error\\\" data-bind=\\\"html: $data\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fli\\u003E\\u003C\\u002Ful\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"uurl-test-info__container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C!-- \\u002Fko--\\u003E\\u003Cspan class=\\\"control-label\\\" data-bind=\\\"visible: !editMode(), text: trackingTemplate\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cdiv data-bind=\\\"visible: showNone()\\\"\\u003E\\u003Cspan class=\\\"control-label\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('UrlOptions_None')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n) {pug_html = pug_html + \"\\u003Cdiv class=\\\"radio\\\"\\u003E\\u003Clabel\\u003E\\u003Cinput class=\\\"radio-final-url\\\" type=\\\"radio\\\" name=\\\"isFinalUrl\\\" value=\\\"true\\\" data-bind=\\\"checked:isFinalUrl.Editing\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('FinalUrl_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"radio\\\"\\u003E\\u003Clabel\\u003E\\u003Cinput class=\\\"radio-destination-url\\\" type=\\\"radio\\\" name=\\\"isFinalUrl\\\" value=\\\"false\\\" data-bind=\\\"checked:isFinalUrl.Editing\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Ad_DestinationUrl')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n, showDestinationUrl) {pug_mixins[\"popupHelp\"] = pug_interp = function(popupId, arialLabelText, i18n){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Ca\" + (\" class=\\\"helpbutton\\\"\"+\" type=\\\"helppopup\\\"\"+pug.attr(\"topic\", popupId, true, true)+pug.attr(\"data-help\", true, true, true)+\" onclick=\\\"PopupController.PopupJsClick(this)\\\" href=\\\"javascript:void(0);\\\"\"+pug.attr(\"aria-label\", i18n.getString('LearnMore') + ': ' + arialLabelText, true, true)) + \"\\u003E\\u003C\\u002Fa\\u003E\";\n};\npug_html = pug_html + \"\\u003Cdiv class=\\\"fieldRowAd\\\"\\u003E\\u003C!--final url form-group--\\u003E\";\nif (showDestinationUrl) {\npug_html = pug_html + (\"\\u003Cdiv class=\\\"with-destination-url-container\\\"\\u003E\\u003Clabel class=\\\"col-sm-4 control-label\\\" data-bind=\\\"visible: showTitles()\\\" style=\\\"margin-top:0px;\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('LandingPage_Label')) ? \"\" : pug_interp)));\npug_mixins[\"popupHelp\"]('pop_BA_NewCampaignCreate_Ad_LandingPage', i18n.getString('LandingPage_Label'), i18n);\npug_html = pug_html + \"\\u003C\\u002Flabel\\u003E\\u003Cdiv class=\\\"fieldItemAd\\\" data-bind=\\\"css: {'col-sm-8': showTitles(), 'col-sm-12': !showTitles()}\\\"\\u003E\\u003Cdiv class=\\\"final-url\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + (\"\\u003Cdiv\\u003E\\u003Clabel class=\\\"col-sm-4 control-label\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Ad_FinalUrl')) ? \"\" : pug_interp)));\npug_mixins[\"popupHelp\"]('pop_BA_NewAdCreate_FinalURL', i18n.getString('Ad_FinalUrl'), i18n);\npug_html = pug_html + \"\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + (\"\\u003C!--url form-group--\\u003E\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003C!--offset by 4 because the url does not have title--\\u003E\\u003Cdiv class=\\\"fieldItemAd\\\" data-bind=\\\"css: {'col-sm-offset-4': showTitles()}\\\"\\u003E\\u003Cdiv class=\\\"url\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C!--ko if: showUpgradeWarning--\\u003E\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Cdiv class=\\\"div\\\" data-bind=\\\"css: {'col-sm-offset-4': showTitles()}\\\"\\u003E\\u003Cdiv class=\\\"alert alert-warning\\\"\\u003E\\u003Cdiv class=\\\"alert-image\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BulkEdit_UrlOptions_UpgradeWarning')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Ca class=\\\"HelpTopic\\\" query=\\\"help:app51230\\\" href=\\\"javascript:void(0);\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('LearnMore')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C!-- \\u002Fko--\\u003E\\u003Cdiv class=\\\"form-group\\\" data-bind=\\\"visible: landingPageUrlErrorMessages().length > 0\\\"\\u003E\\u003Cdiv class=\\\"div\\\" data-bind=\\\"css: {'col-sm-offset-4': showTitles()}\\\"\\u003E\\u003Cdiv class=\\\"font-error container-fluid\\\"\\u003E\\u003Cul data-bind=\\\"foreach:landingPageUrlErrorMessages\\\"\\u003E\\u003Cli\\u003E\\u003Cspan class=\\\"is-error\\\" data-bind=\\\"text: $data\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fli\\u003E\\u003C\\u002Ful\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C!--mobile url form-group--\\u003E\\u003Cdiv class=\\\"form-group\\\" data-bind=\\\"visible: mobileUrlVisible\\\"\\u003E\\u003Cdiv\\u003E\\u003Clabel class=\\\"col-sm-4 control-label\\\" data-bind=\\\"visible: showTitles()\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('MobileFinalUrl_Label')) ? \"\" : pug_interp)));\npug_mixins[\"popupHelp\"]('pop_BA_NewCampaignCreate_Ad_MobileURL', i18n.getString('MobileFinalUrl_Label'), i18n);\npug_html = pug_html + \"\\u003C\\u002Flabel\\u003E\\u003Cdiv class=\\\"fieldItemAd\\\" data-bind=\\\"css: {'col-sm-offset-4': showTitles()}\\\"\\u003E\\u003Cdiv class=\\\"mobile-url\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group\\\" data-bind=\\\"visible: mobileUrlVisible() && errorMessages().length > 0\\\"\\u003E\\u003Cdiv class=\\\"div\\\" data-bind=\\\"css: {'col-sm-offset-4': showTitles()}\\\"\\u003E\\u003Cdiv class=\\\"font-error container-fluid\\\"\\u003E\\u003Cul data-bind=\\\"foreach:errorMessages\\\"\\u003E\\u003Cli\\u003E\\u003Cspan class=\\\"is-error\\\" data-bind=\\\"text: $data\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fli\\u003E\\u003C\\u002Ful\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"showDestinationUrl\" in locals_for_with?locals_for_with.showDestinationUrl:typeof showDestinationUrl!==\"undefined\"?showDestinationUrl:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (ariaLabelledby, urlPlaceholder) {pug_html = pug_html + \"\\u003Cselect\" + (\" class=\\\"form-control flex-row-fixed url-protocol\\\"\"+\" id=\\\"protocolOptions\\\" data-bind=\\\"options: protocols, optionsText: "Text", optionsValue: "Value", value: protocol, disable: isDisabled\\\"\"+pug.attr(\"aria-labelledby\", ariaLabelledby, true, true)) + \"\\u003E\\u003C\\u002Fselect\\u003E\\u003Cinput\" + (\" class=\\\"form-control url-field\\\"\"+pug.attr(\"placeholder\", urlPlaceholder, true, true)+\" type=\\\"text\\\" data-bind=\\\"value: urlWithoutProtocol, valueUpdate: "input", attr: { maxlength: maxLength, "aria-describedby": errorContainer, "aria-invalid": errorMessage().length > 0 }, disable: isDisabled, css: {error: hasErrors}\\\"\"+pug.attr(\"aria-labelledby\", ariaLabelledby, true, true)) + \"\\u003E\\u003C!--ko if: errorMessage().length \\u003E 0--\\u003E\\u003Cdiv class=\\\"error is-error\\\" data-bind=\\\"html: errorMessage\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C!-- \\u002Fko--\\u003E\";}.call(this,\"ariaLabelledby\" in locals_for_with?locals_for_with.ariaLabelledby:typeof ariaLabelledby!==\"undefined\"?ariaLabelledby:undefined,\"urlPlaceholder\" in locals_for_with?locals_for_with.urlPlaceholder:typeof urlPlaceholder!==\"undefined\"?urlPlaceholder:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"container-fluid\\\"\\u003E\" + (null == (pug_interp = require(\"./url-input-core.pug\").call(this, locals)) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\";;return pug_html;};\nmodule.exports = template;","import { IAdRecommendResponse } from './types';\r\n\r\nconst recomendCache: {[key: string]: IAdRecommendResponse} = {};\r\n\r\nexport function getRecommendCacheByUrl(url: string) {\r\n return recomendCache[url];\r\n}\r\n\r\nexport function setRecommendCache(url: string, response: IAdRecommendResponse) {\r\n recomendCache[url] = response;\r\n}\r\n","import _ from 'underscore';\r\nimport { getCenterCroppedSettings } from '@bingads-webui-campaign/image-experience-utils';\r\nimport { IImageExperienceImage, getMultiImages, IMTAsset } from '@bingads-webui-campaign-react/responsive-ad-editor-utils';\r\nimport { IRecommendAd, ResponsiveAdForPreview } from '../ad-recommend';\r\n\r\nexport function imageAssetcenterCrop(asset: IMTAsset) {\r\n const {\r\n SourceHeight,\r\n SourceWidth,\r\n SourceX,\r\n SourceY,\r\n } = getCenterCroppedSettings({\r\n SourceHeight: asset.CropHeight,\r\n SourceWidth: asset.CropWidth,\r\n SourceX: 0,\r\n SourceY: 0,\r\n }, 1.91);\r\n\r\n return {\r\n ...asset,\r\n CropX: SourceX,\r\n CropY: SourceY,\r\n CropWidth: SourceWidth,\r\n CropHeight: SourceHeight,\r\n };\r\n}\r\n\r\nexport function convertRecommendAssetToImageExperience(ad: IRecommendAd, isMMAV2Enabled: boolean = false)\r\n: IImageExperienceImage[][] {\r\n const imageToUrlMap = {};\r\n\r\n try {\r\n ad.Images.forEach((image) => {\r\n image.Asset.Id = !!image.Asset.Id ? image.Asset.Id : image.Asset.ImageUrl; // eslint-disable-line\r\n image.Asset.IdString = image.Asset.ImageUrl; // eslint-disable-line no-param-reassign\r\n image.Asset.SubType = isMMAV2Enabled ? 'OriginalImage' : 'LandscapeImageMedia'; // eslint-disable-line no-param-reassign\r\n\r\n imageToUrlMap[image.Asset.Id] = {\r\n url: image.Asset.ImageUrl,\r\n height: image.Asset.CropHeight,\r\n width: image.Asset.CropWidth,\r\n isRecommendedImage: true,\r\n };\r\n\r\n image.Asset = imageAssetcenterCrop(image.Asset); // eslint-disable-line no-param-reassign\r\n });\r\n\r\n return getMultiImages(\r\n ad.Images.map(image => image.Asset),\r\n imageToUrlMap,\r\n {\r\n isAdCreatorEnabled: false,\r\n isMMAV2Enabled,\r\n }\r\n );\r\n } catch (error) {\r\n console.error(error);\r\n return [];\r\n }\r\n}\r\n\r\n// imageListIndex: choose which ratio to display for preview\r\nexport function convertAdUnitsToImageExperiences(\r\n adUnits: IRecommendAd[],\r\n { imageListIndex }: { imageListIndex: number },\r\n isMMAV2Enabled: boolean = false\r\n): IImageExperienceImage[] {\r\n const result: IImageExperienceImage[] = [];\r\n // deep clone ads\r\n const recommendAds: IRecommendAd[] = JSON.parse(JSON.stringify(adUnits));\r\n for (let i = 0; i < recommendAds.length; i += 1) {\r\n const ad = recommendAds[i];\r\n const item = convertRecommendAssetToImageExperience(ad, isMMAV2Enabled);\r\n\r\n if (item.length !== 0) {\r\n // display the ImageMedia178X100 image of each recommend ad\r\n result.push(item[0][imageListIndex]);\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport function convertAdunitsToImageList(adUnits: IRecommendAd[]): ResponsiveAdForPreview[] {\r\n const result: ResponsiveAdForPreview[] = [];\r\n // deep clone ads\r\n const recommendAds: IRecommendAd[] = JSON.parse(JSON.stringify(adUnits));\r\n for (let i = 0; i < recommendAds.length; i += 1) {\r\n const ad = recommendAds[i];\r\n const item = convertRecommendAssetToImageExperience(ad);\r\n\r\n result.push({\r\n images: item,\r\n shortHeadline: ad.Headline || _.get(ad.Headlines, ['0', 'Asset', 'Text']) as any,\r\n longHeadline: ad.LongHeadline || _.get(ad.LongHeadlines, ['0', 'Asset', 'Text']) as any,\r\n description: ad.Text || _.get(ad.Descriptions, ['0', 'Asset', 'Text']) as any,\r\n businessName: ad.BusinessName,\r\n url: _.first(ad.FinalUrls) as string,\r\n });\r\n }\r\n\r\n return result;\r\n}\r\n"],"names":["getDimensions","element","$element","$","width","outerWidth","height","outerHeight","testFit","containerDimensions","elementDimentions","position","verticalFit","Math","max","min","top","horizontalFit","left","areaFit","FixedPositionLocation","Object","freeze","buttomLeft","topRight","topLeft","buttomRight","right","bottom","PositionAttribute","fixed","absolute","getFixedPosition","positionOptions","container","anchor","popupDimensions","anchorBoundingRect","positionAttribute","offset","_getDimensions2","getBoundingRectOffset","_getDimensions","getBoundingRectPosition","location","getFittingPosition","positions","threshold","fittingPosition","_","PositioningMethod","fit","LabelsPopup","_Backbone$View","_classCallCheck","_callSuper","arguments","_inherits","_createClass","key","value","role","get","_this","e","onClose","this","options","events","$el","addClass","classes","join","append","controlTemplate","contents","template","closeLabel","i18n","getString","setPosition","positioningMethod","positioningOptions","positionAttr","delegateEvents","combinedEvents","_this2","css","visibility","getPositioningMethod","stopPropagation","trigger","Backbone","currentPopup","popupInstance","dismiss","result","clickToDismiss","target","closest","length","removePopup","remove","window","off","show","Promise","resolveCallback","render","FocusLockInstanceView","focusLockInstanceDecorator","onExit","getAnchor","undefined","eventHandlers","on","close","managed","el","focus","Popup","_ref","popup","_this3","wrappedPopup","bind","getRouteforScope","scope","adGroupId","campaignId","getEditableFilter","preferenceService","featureName","FilterStorageFactory","create","filterEntityOptions","entitySchema","name","getAuctionInsightEditableFilter","enableBSCAuctionInsights","storageArr","FEATURE_NAME_GENERAL_INSIGHTS","push","FEATURE_NAME_GENERAL_INSIGHTS_SHOPPING","navigateToCompetitionTab","pluginConfig","item","selectedItems","legacyRouter","permissions","isForVNext","pageName","IsBAACompetitionBSCAuctionInsightsEnabled","entityType","AdGroup","Campaign","$contains","filterObject","Name","Text","CampaignName","CampaignId","Id","AdGroupName","AdGroupId","JSON","stringify","query","filter","id","storage","save","writeAuctionInsightEditableFilter","_defineProperty","CampaignType","CAMPAIGN_TYPES","Shopping","saveGeneralInsightsPreferences","selectShoppingCampaignType","clean","cleanAuctionInsightEditableFilter","route","getRoute","navigateToRoute","campaign_id","adgroup_id","navigateToLegacyAuctionInsights","state","selectedIds","set","getNavigate","shouldNavigateToCompetitionTab","onClickSelected","gridView","crossPageSelectAll","crossPageSelectNotAllowedI18nKey","alert","isAllSelected","confirm","navigate","auctionInsightPlugin","definePlugin","config","toolbar","plugins","auctionInsight","menuId","toolbarEditor","gridToolbarGroup","toolbarWithItem","items","Error","type","text","onClick","getDropdownMenuItems","size","campaignType","getCampaignTypeGlobalFilter","Default","All","update","iconLeftGlyphName","button","menu","iconRight","supportedEntities","divider","getMenuItemConfig","isFallbackEnabled","siteMapId","getRulesMenu","entity","switchTo","selectInfo","shouldBeDisabled","metadata","header","body","switchMenuOrder","Ad","Keyword","getMetadata","ret","disabled","subMenu","en","subItems","_ref2","automatedRulesPlugin","pagination","automatedRulesView","actionStateKey","_$result","entityName","i18nGlobal","router","instrumentation","stateMgr","preferenceSvc","appCfg","bidRange","budgetRange","alertCenter","accountCurrencyCode","accountTimeZone","currentUserId","odata","directive","walkMe","walkMeLink","walkThrus","_$result$isForVNext","newI18n","CampaignAdgroupSelectorEdmView","PredicateListReact","currentEntity","filterService","getSelectionInfo","info","allPages","selectedRowCount","selectedRowIds","parseInt","totalCountRows","map","x","renderRuleAuthoringView","actionId","selectedInfo","split","selectedTemplateId","selectedTemplateEntityLevel","action","model","RuleAuthoringModel","Entity","ruleViewModel","scopeInfo","RuleAuthoringView","grid","pgridPlugins","koModel","bidBudgetRange","listenTo","updateSelectedEntityCount","addWalkme","find","renderView","gridContainer","editorContainer","gridToolbar","overrideWith","html","hide","hideAllToolbars","once","showAllToolbars","IsReadOnlyUser","selectedMenu","entityLevel","concat","createRule","trace","unset","silent","biddingStrategyType","getMenuItems","_ref4","changeBiddingStrategy","_ref3","IsManualBiddingDeprecationEnabled","IsCampaignTargetROASBidStrategyEnabled","IsNewCampaignTargetROASBidStrategyEnabled","IsMaximizeConversionValueEnabled","IsTargetImpressionShareEnabled","getCampaignItems","getAdGroupItems","getKeywordItems","bidStrategy","_config$plugins$bidSt","ChangeBiddingStrategyView","ChangeBiddingStrategyModel","_config$plugins$bidSt2","bidStrategyView","getGridSelectionCount","viewModel","totalRowsTotalPageCount","selectedKeys","removeView","selectedEntityCount","count","getItems","dataSource","updateToolbar","projectionGridBulkEdit","defineGridPlugin","inlineError","bulkEditView","status","ChangeStatusView","ChangeStatusModel","DeleteConfirmation","_options$frontItems","frontItems","campaignUpgradeItem","gridDecorationCallback","_options$showDelete","showDelete","_options$showEnable","showEnable","_options$showExclude","showExclude","_options$showPause","showPause","_options$showSeparate","showSeparateExclude","_options$isForVNext","_options$bulkEditUrl","bulkEditUrl","_options$customClickH","customClickHandler","_options$qualtricsSur","qualtricsSurveyCallback","_options$importNotifi","importNotificationCallback","_options$importBudget","importBudgetBidNotificationCallback","_options$disableDesel","disableDeselectAll","defaultBulkEditViewConfig","onOperationSuccess","deselectAll","hideToolBar","editorviewHiden","getGridToolbar","overflow","attr","noneSelectedAndAlert","changeStatus","act","Deleted","currentPageAllRowsSelected","Paused","statusModel","Actions","Value","selectionInfo","App","response","rowId","data","Status","EnumPaused","campaignItem","campaignItemList","updateStatus","afterStatusChange","isSkipEntityCache","isExcludeNonAudience","generateClickableItem","iconLeft","createView","_ref$noSelectionRequi","noSelectionRequired","hotkeys","viewConfig","_objectSpread","newValue","newBudget","newBidStrategy","dataContextManager","updateContext","refresh","getIconClasses","cls","excludeItem","Excluded","menuItems","Active","splice","lastIndexOf","isValid","subItem","allPagesSelected","curSelectedItems","CampaignSubType","repos","_ref2$noSelectionRequ","openUpgradeDialog","generateClickableCampaignUpgradeItem","frontMenuItems","isReadOnlyUser","isAccountInactive","localPreferenceService","findByNameAtUserLevel","localStorage","getItem","Data","parse","setAtUserLevel","setItem","PLUGIN_NAME","campaignGridColumnResizePlugin","settings","plugin","getColumnResizeProjectionFactory","pipeContentProjections","getPGridColumnResizePlugin","gridName","preferenceSrv","preferenceKey","debouncedSaveToPreference","cache","manuallySetLastColumnWidth","isSaveEnabled","doubleClickingBehavior","ColumnDoubleClickingBehavior","resizeToMinWidth","saveToStore","columns","widthState","forEach","c","col","version","loadFromStore","_ref2$Data","mslcw","loadedColumns","stateColumns","columnGroup","leafColumns","renderGrabber","cell","isDraggingCurCol","headerTemplate","val","dragging","_toConsumableArray","editablePlugin","saveModel","isEditIconLocalized","editable","handler","iconClasses","memo","$td","keyOfElement","_chainData","slice","i","primaryKey","toString","enableEdit","uiNextVirtualOffset","newPosition","prompt","event","fields","schema","hasLabels","parentContainerSelector","updatedModel","viewEditor","updateHandler","editorConfig","generatedConfig","then","bodyRows","_state$bodyRows","apply","row","rowIndex","cells","colIndex","editTemplate","$html","ariaLabel","columnName","title","gridEditIconTitle","defaults","extendColumns","extendFunc","column","getStyleAttr","isUndefined","style","extendWidthAttr","headAttributes","extend","bodyAttributes","footAttributes","getPoPWidth","widthMap","PopSubColWidth","ComparedWidth","ChangeWidth","ChangePercentageWidth","projectionGridFlexColumnResize","$cell","cellWidth","cellMaxWidth","cellMinWidth","prev","_config$plugins$proje","isDown","saveColumnWidth","$headers","reduce","toArray","$header","getColumnWidth","columnWithWidth","pick","v","patch","onMouseDown","isNaN","clientX","onMouseDbClick","resizeProjection","headRows","headRow","headRowCells","columnIndex","document","addEventListener","delta","dist","res","columnWidthMap","chain","columnWidth","columnWithStyle","pastePlugin","filterState","_config$plugins$paste","paste","CopyPaste","perfMarker","pasteView","restoreToolbar","win","mac","sharedClassName","projectionGridPopupPlugin","projectionGridPopup","getPopover","closePopover","popupEvents","option","content","className","selector","itemWithKey","$target","popover","placement","$popover","ev","tagName","toLowerCase","getMouseenterHandler","outerSelector","relatedTarget","parents","projectionGridPopupProjection","projectionGridScopeNavigator","targetCid","targetAid","customParams","pathname","skipScopeNavigation","preventDefaultNavigation","_scope$values","values","cid","aid","uid","href","uri","Uri","normalizeProtocol","protocol","preventDefault","customQueries","queryString","scopeNavigatorProjection","scrollbarWidth","InstallTrigger","overlapClass","ScrollbarView","freezingSelector","otherSelector","scrollbarParentSelector","calculateOtherHorizontalOffset","parentStyle","childStyle","addEvent","projectionGridScrollbarPlugin","_pluginConfig$pageCon","pageContainer","_pluginConfig$tableSe","tableSelector","_pluginConfig$rowSele","rowSelector","_pluginConfig$cellSel","cellSelector","_pluginConfig$freezin","freezingGroupSelector","_pluginConfig$freezin2","_pluginConfig$otherGr","otherGroupSelector","_pluginConfig$otherSe","_pluginConfig$scrollb","scrollbarContainerSelector","_pluginConfig$scrollb2","_pluginConfig$scrollb3","scrollbarChildSelector","_pluginConfig$scrollE","scrollElementSelector","_pluginConfig$shellSe","shellSelector","getBarParent","scrollOtherGroupToLeft","scrollLeft","setOverlapClass","isOverLap","removeClass","$window","prevOffsetWillEditing","prevOffset","calculateParentWidth","$freezing","calculateChildWidth","setHorizontalOffset","transition","transform","calculateShowOrHide","$barParent","$row","eq","opacity","calculateScrollbarPosition","$other","$barContainer","windowHeight","barContainerTopOffset","calculateFocusElementOffset","delay","offsetDelta","childElement","parentElement","cRect","getBoundingClientRect","pRect","horizontalScrollHandler","isMouseInside","isShowScrollbar","shiftKey","originalEvent","deltaY","abs","deltaX","cWidth","pWidth","scrollbarView","prependFootRows","view","lazyAddScrollRowEvent","debounce","otherGroupElements","each","scrollEvent","focusElements","querySelector","addHorizontalScrollEvent","lazycalculateScrollbarPosition","scroll","parent","lazyResizeCalculate","has","ResizeObserver","observe","ResizeObserverPollyFill","OccasionI18nKeys","None","_TL_","BackToSchool","BlackFriday","BoxingDay","Carnival","ChineseNewYear","Christmas","CyberMonday","Diwali","Easter","EidAlAdha","EidAlFitr","EndOfSeason","Epiphany","FallSale","FathersDay","Halloween","Hanukkah","Holi","IndependenceDay","LaborDay","MothersDay","NationalDay","Navratri","NewYears","ParentsDay","Passover","Ramadan","RoshHashanah","SinglesDay","Songkran","SpringSale","StNicholasDay","SummerSale","ValentinesDay","WinterSale","WomensDay","YearEndGift","OccasionSelect","onChange","selected","_useState","useState","_useState2","_slicedToArray","selectedOccasion","setSelectedOccasion","_jsxs","React","children","_jsx","Select","occasion","Alert","message","level","icon","dismissible","defaultProps","CURRENCY_STRINGS","ALL","AED","ARS","AUD","BAM","BRL","CAD","CHF","CLP","CNY","COP","DKK","EUR","GBP","HKD","IDR","ILS","INR","ISK","JPY","MKD","MXN","MYR","NGN","NZD","PEN","PHP","PLN","RSD","SAR","SEK","SGD","THB","TRY","TWD","USD","VEF","VND","ZAR","CurrencySelect","currencies","currency","outMemo","pairs","pickCurrencies","globalizationModelSetup","culture","getLocale","CURRENCIES","selectedCurrency","setSelectedCurrency","language","promotionTypesMap","discountModifierMap","getPromotionTypeForModel","MoneyAmountOff","DiscountModifier","PercentOff","isMonetary","promotionType","isUpTo","cleanPromotionTypeData","promotionTypes","PromotionTypeSelect","selectedPromotionType","setSelectedPromotionType","SubSchema","cloneDeep","properties","PromotionAdExtension","Schema","required","PromotionType","legacyI18n","promotionTypeSelectClassName","inputContainerClass","inputClass","inputExtraClass","_useState3","_useState4","setPromotionType","_useState5","_useState6","setData","_useState7","_useState8","setSchema","classnames","newPromotionType","currentData","mergedData","ValidationGroup","validationProps","onValidate","_ref5","newData","InputWithExtra","containerClass","field","extra","CurrencyCode","FIELDS_COLUMN_WIDTH_PX","SCHEDULING_EXTRA_COLUMN_WIDTH_PX","genericFieldLabel","display","justifyContent","textAlign","alignItems","marginBottom","genericEditorField","promotionDetailTypesMap","getPromotionDetailTypeForModel","PromotionCode","OrdersOverAmount","isPromotionCode","promotionDetailType","isOnOrdersOver","cleanPromotionDetailTypeData","promotionDetailTypes","PromotionDetailSelect","selectedPromotionDetailType","setSelectedPromotionDetailType","PromotionDetail","promotionDetailTypeSelectClassName","setPromotionDetailType","newPromotionDetailType","dateMethodOptions","raw","StartAndEndDate","updateValidation","startDateClassName","endDateClassName","startAndEndDateSeparator","PromotionStartDate","startDate","setStartDate","PromotionEndDate","endDate","setEndDate","isPromotionStartDateInvalid","setIsPromotionStartDateInvalid","isPromotionEndDateInvalid","setIsPromotionEndDateInvalid","validate","useCallback","startDateObject","parseDate","substr","endDateObject","messages","useEffect","errorMessages","onStartTimeChange","onEndTimeChange","onStartTimeError","onEndTimeError","usedStartTime","usedEndTime","KendoStringDatePicker","onError","prevProps","nextProps","StartAndEndDateWithValidation","withError","withCustomValidation","isCurrencyRequired","withValidation","OccasionSelectPure","GenericAdapter","LanguageSelect","LanguageSelectPure","CurrencySelectPure","whitelistedSchemaPropertyKeys","cleanModel","rawModel","stage1","customParameters","UrlCustomParameters","Key","PromotionExtensionEditor","extension","adExtI18n","repository","onCreated","onUpdated","onCancel","LegacySchedulingView","deps","SchedulingView","isEditing","scenario","useMemo","createScenarioAndActivity","scenarioName","activityName","isBlocking","setIsBlocking","setIsValid","formErrors","setFormErrors","localLegacyI18n","buildLegacyI18n","ValidationStringMap","UpgradeUrlStringMap","buildSchedulingView","IsDomesticSimplifiedChineseEnabled","initialData","Language","Occasion","FinalMobileUrls","FinalUrls","FinalAppUrls","urlOptionsExpandedInitially","TrackingUrlTemplate","FinalUrlSuffix","_useState9","_useState10","prevData","setPrevData","_useState11","_useState12","dirtyFieldsMap","setDirtyFieldsMap","_useState13","_useState14","isFinalUrlSuffixValid","setIsFinalUrlSuffixValid","_useState15","_useState16","isCustomParametersValid","setIsCustomParametersValid","_useState17","_useState18","isScheduleValid","setIsScheduleValid","hasNoChanges","prop","resetIsDirty","registerDataChange","isCurrencyVisible","newIsValid","onDataChange","onCustomParametersChange","onFinalUrlSuffixChange","onScheduleChange","Scheduling","onSaveClicked","saveActivity","createActivity","start","newModel","stop","errors","newFormErrors","getODataErrors","BadResponseError","error","stringifyUnexpectedError","finally","IsFinalURLSuffixPhase4Enabled","UiBlocker","blocking","loadingText","ErrorsContext","Provider","outerGridWithOneColumn","editorFieldsColumn","outerGridFlexibleGridRow1","fieldsGrid","fieldsGridFlexibleGridRow1","editorFieldLabel","Label","htmlFor","HelpIcon","topic","fieldsGridFlexibleGridRow2","editorField","occasionSelect","fieldsGridFlexibleGridRow3","editorFieldNoMargin","languageAndCurrencyGrid","languageAndCurrencyGridFlexibleGridRow1","languageAndCurrencyGridFlexibleGridRow2","currencyFieldLabel","currencyEditorField","fieldsGridFlexibleGridRow4","fieldsGridFlexibleGridRow5","startAndEndDateContainer","startAndEndDatePicker","fieldsGridFlexibleGridRow6","fieldsGridFlexibleGridRow7","Input","fieldsGridFlexibleGridRow8","fieldsGridFlexibleGridRow9","Errors","and","or","propertySuffixIs","propertyIs","UrlEditorForArray","containerClassName","urlContainer","selectClassName","urlProtocolSelect","fieldsGridFlexibleGridRow10","fieldsGridFlexibleGridRow11","fieldsGridFlexibleGridRow12","fieldsGridFlexibleGridRow13","promotionTypeAndDetailSelect","typeInputContainer","typeInput","typeInputExtraExtra","fieldsGridFlexibleGridRow14","fieldsGridFlexibleGridRow15","Panel","defaultExpanded","collapsiblePanel","Heading","Title","toggle","fieldsGridFlexibleGridRow16","Collapse","Body","fieldsGridFlexibleGridRow17","fieldsGridFlexibleGridRow18","TrackingTemplate","fieldsGridFlexibleGridRow19","fieldsGridFlexibleGridRow20","fieldsGridFlexibleGridRow21","fieldsGridFlexibleGridRow22","CustomParameters","fieldsGridFlexibleGridRow23","schedulingPanel","isSchedulingError","fieldsGridFlexibleGridRow24","unmappedError","fieldsGridFlexibleGridRow25","notices","fieldsGridFlexibleGridRow26","editorButtonGroup","Button","btnStyle","bsStyle","startScenario","startActivity","logMessage","endActivity","asLoggingStart","instrumentationSettings","ACTIVITYNAME","SCENARIONAME","StyledPromotionExtensionEditor","withThemeFromProps","withDefaultStyles","components","theme","palette","outerGrid","flexibleGrid","gridTemplateColumns","flexibleGridRows","flexibleGridColumn","previewColumn","paddingRight","flexGrow","padding","alignSelf","marginTop","marginLeft","marginRight","border","borderBottom","fontSize","color","themePrimary","themeDarker","textTecoration","backgroundColor","fontWeight","transformOrigin","legacySchedulingPanelStyles","flexibleGridColumnSpan","ItemPreviewI18nKeys","m","getPromotionDataFormatConfig","arg0","universalItemTemplate","rawItemTemplate","AudienceMeter","DependencyResolver","meterProps","calcBroadPos","calcSpecificPos","unitValueMap","unit","Thousand","Million","Billion","ReachEstimateControl","permissionConfig","debouncedUpdateEstimateFunc","hasAudience","updateEstimateInternal","audienceMeter","postAudienceEstimation","postPrivacyCheck","lastEstimateData","isPanelSticky","isSticky","viewContext","customModifyTarget","modifyTarget","customThreshold","customRootMargin","rootMargin","updateEstimatesOnMeter","stickPanel","targetsData","hasAudienceRemarketingList","IntersectionObserver","observer","entries","intersectionRatio","boundingClientRect","intersectionRect","y","root","IsAmplifyEnabled","catch","errMsg","_this4","context","urlBase","CurrentCustomerId","CurrentAccount","audienceEstimationUrl","privacyCheckUrl","host","path","request","customHeader","post","estimateData","privacyData","updatePanel","withUiBlock","reqStatus","isReachTooSpecific","privacyCheckResult","hideEstimate","validateReach","hideWarning","showWarning","EstImpression","SuggestedBid","estImprVal","estImprUnit","Unit","estImprUnitVal","estImprText","estImpr","IsImpressionTooSpecific","moveToSpecific","moveAlongBroad","calcMeterValue","erroMessage","isTooSpecific","success","IsKPIEstimateForAudienceFeedBasedEnabled","log","_superPropGet","disconnect","ageTargetMap","EighteenToTwentyFive","TwentyFiveToThirtyFive","ThirtyFiveToFifty","FiftyToSixtyFive","SixtyFiveAndAbove","Unknown","EstimateRequestFactory","currentLevelTargetInfo","parentLevelTargetInfo","bidStrategyPermissionBind","BidStrategy","ManualCpc","EnhancedCpc","ManualCpv","IsKPIEstimateForCPVEnabled","ManualCpm","IsKPIEstimateForCPMEnabled","campaignSubTypesSupported","CampaignSubTypeMapping","AudienceStatic","AudienceVideoAds","FeedBasedCampaginSubTypes","campaignSubType","feedInfo","useOptimizedTargeting","createWithTargetSettings","targetSettings","addAgeTargets","addGenderTargets","addLocationTargets","addRadiusTargets","addCompanyTargets","addIndustryTargets","addJobFunctionTargets","addAudienceTargets","CampaignBiddingStrategy","subType","includes","Feed","StoreId","FeedId","AutoTargeting","criterions","getAllByType","targets","Includes","Excludes","CriterionType","translatedAgeTarget","Criterion","AgeCriterion","Target","Age","GenderCriterion","Gender","targetInfoToUse","parentLevelTogglesByType","Location","includedCriterions","excludedCriterions","locationCriterion","LocationCriterion","LocationId","excludedLocationCriterion","radiusCriterions","radiusTargets","radiusCriterion","RadiusCriterion","Radius","CenterLongitude","Longitude","CenterLatitude","Latitude","RadiusTargets","addInclusions","arr","CompanyNameCriterion","Company","JobFunctionCriterion","JobFunction","IndustryCriterion","Industry","AudienceId","Audience","getData","p$data","resource","mergeI18n","parentI18n","assign","console","warn","formatUrl","url","pageContext","replace","BingAdsWebApiUri","CurrentCustomer","AdStrengthSuggestionRepository","assetType","isAutoComplete","currentFinalUrl","requestBody","adType","maxCount","autoCompleteFieldIndex","adFields","business","Website","headlineCount","maxHeadlineSuggestions","descriptionCount","maxDescriptionSuggestions","caller","contentType","headers","authorization","Token","stringifySync","resolve","rawData","Suggestions","suggestion","AssetType","Headlines","headline","Asset","Descriptions","description","err","responseJSON","Code","reject","headlineFields","MMAAssetConfigs","MAX_HEADLINES","longHeadlineFields","MAX_LONGHEADLINES","descriptionFields","MAX_DESCRIPTIONS","ResponsiveAdScenarios","AdEditFields","Headline","LongHeadline","Description","BusinessName","assetSuggestionType","singleAssetSuggestionType","AdStrengthSuggestionPicker","_React$Component","targetOffset","containerOffset","assetSectionHeight","hrHeight","$panel","IsMultiMediaAdsPhase2Enabled","hrStyle","getComputedStyle","borderTopWidth","borderBottomWidth","inputText","_this$props","props","pickerContainer","activityLogger","targetSelector","signal","ReactDOM","_this$props2","itemsToDisplay","input","getDisplayPosition","containerStyle","zIndex","pickerTitle","startsWith","contentView","index","addAssetSuggestion","AdStrengthSuggestionController","containerSelector","cachedAutoCompleteSuggestions","cachedCreationSuggestions","cachedBusiness","autoCompleteSuggestions","creationSuggestions","businessNameSuggestions","hidePicker","clickedAway","keydown","existingPickerContainer","containerExists","finalUrl","suggestions","filterSuggestion","Permissions","registerGlobalEvents","targetSuggestions","suggestionContent","showHeadlineCount","showLongHeadlineCount","showDescriptionCount","toJSON","nonEmptyHeadlineCount","autoFillHeadlineCount","headlineSuggestions","j","targetField","targetSuggestion","nonEmptyLongHeadlineCount","autoFillLongHeadlineCount","longHeadlineSuggestions","nonEmptyDescriptionCount","autoFillDescriptionCount","descriptionSuggestions","viewField","_ref6","appendTo","isValidUrl","isAutoCompleteSuggestionCached","fetchAdStrengthSuggestion","_ref7","renderPicker","_ref8","_this5","creationFetchPromise","isCreationSuggestionCached","_ref9","currentSuggestions","isAudienceCampaign","IsResponsiveAdRecommendationMSANEnabled","IsAudienceCampaignMultiMediaAdsEnabled","autoFillSuggestionsMultipleField","autoFillSuggestionsSingleField","IsMMAAutoFillEnabled","businessFetchPromise","isBusinessCached","fetchBusinessInfo","_ref10","responseText","controller","attachAdStrengthSuggestionHelpers","attachedFunc","selectionStart","selectionEnd","getAdStrengthSuggestion","ads","Images","PinnedField","EditorialStatus","AssociationType","UiDisplayStatus","PerformanceLabel","RecommendationId","TracingId","SubType","IdString","CropX","CropY","CropHeight","CropWidth","ImageUrl","PerformanceMetrics","LongHeadlines","AdRecommendRepository","baseURL","FinalURL","Locale","serverContextStore","e2eTestEnvironment","oDataToken","RecommendAdList","setUpAdWithRecommendAd","errorCodes","i18nErrors","loaded","setLoaded","creating","setCreating","setAds","imageExperiences","setImageExperiences","async","onEdit","ad","currentTarget","isAdEditShown","shouldSaveAdFromRecommend","onApply","resultFromCache","getRecommendAds","imageListIndex","fetchRecommendation","setClarityTag","AdRecommendationMSANList","Stack","horizontal","tokens","childrenGap","aspectRatio","imagePreviewHeight","aspectRatios","Image191x100","image","additionalSetting","previewTexts","longHeadline","shortHeadline","businessName","DefaultButton","String","errorCode","adPreviewConfig","placementSetName","placementTypes","MSAN","MSEdgeSingleCarousel","adPreviewConfigMMAV2","MSANV2","MSNCarousel","RecommandAdPreviewCarousel","isMMAV2Enabled","imageList","activeIndex","setActiveIndex","onUpdateImageExperienceImageList","multiImagePlacementSets","placementSets","finalImageList","curPlacementList","placementList","finalPlacementList","images","rest","onRenderPlacement","AdPlacementComponent","idx","placementData","RecommendAdCarousel","constructor","super","selectedIndex","errorMessage","toggleOpen","setState","PrimaryButton","RecommendButton","startToLoad","cleanData","isOpen","isRecommendAdinEditor","Path1","shouldOverrideAdInEditor","AdRecommendPrefill","attributes","componentDidMount","spinnerStyles","label","verticalFill","horizontalAlign","Spinner","styles","small","labelPosition","callback","AdRecommendationMSANModal","Modal","scrollableContentClassName","onDismiss","CallToActionText","forwardRef","defaultValue","ref","textFieldRef","setErrorMessage","maxLength","ResponsiveAd","useImperativeHandle","current","trim","isString","placeholder","componentRef","alwaysShowError","CallToAction","AdEdit","isUpdate","isAdNotEmpty","isSaved","campaignSettings","isEmpty","showSaveButton","isGridDisplay","logScenario","isSimplifyAudienceCreation","isAdRecommendationMSANEnabled","recommendButtonReactComponent","hotspotReactComponent","boostAnchorsReactComponent","callToActionTextComponent","callToActionAriaTextComponent","edm","jsdata","isVideo","isMobileUrlEnabled","isImpressionTrackingUrlsEnabled","currentCampaign","biddingSchemeType","getBiddingSchemeType","isThirdPartyMeasurementEnabled","isMOATEnabled","ImpressionTrackingUrlsMaxCount","IsUpToSixImpressionTrackingUrlsEnabled","isMSANLogoAndCTAForMMAEnabled","isMultimediaAd","isBulkEditMMA","isMultiMediaAdsPhase2Enabled","isMMAAutomatedCTAOptInEnabled","IsMMAAutomatedCTAOptInEnabled","callToActionSetting","setting","automatedCTAEnable","AutomatedCallToActionOptOut","isAudienceCampaignMultiMediaAdsEnabled","isBoostScenario","isBoostCTAAriaTextEnabled","IsBoostCTAAriaTextEnabled","isBoostAnchorsEnabled","IsBoostAnchorEnabled","isBoostCustomCTAEnabled","IsBoostCustomCTAEnabled","isMMAAdCustomizersEnabled","IsMMACountdownInsertionEnabled","IsMMAKeywordInsertionEnabled","IsMMALocationInsertionEnabled","IsMMAAdCustomizerInsertionEnabled","IsBoostCTAPhase2Enabled","isMSANBoostEnabled","responsiveAdScenario","isMMAEnabled","isMoveFinalUrlTop","genericErr","AudienceCampaignErrorsView","initHeadlines","initLongHeadlines","initDescriptions","preferencesService","websiteImageOptInPreferenceName","hasWebsiteImageOptedInObservable","parsedTextMaxLengthExtension","onUpdateHotspots","hotspots","boostAnchorData","BoostAnchors","callToActionText","callToActionAriaText","CallToActionAriaText","adStatusOptions","showProgress","ko","statusText","successCount","errorCount","totalCount","adStatus","completePercentage","total","completed","floor","maxInlineErrorCount","showErrors","showErrorGrid","errorCountString","initInlineErrors","inlineErrors","read","write","getJobResults","done","errorObject","errorKey","EntityKey","errorCountLinkText","errorsGrids","isImproveMMA","isRecommendation","currentOptInPref","shouldCTANotExpand","maxHeadlines","DEFAULT_HEADLINES","headlinesErrorMessage","maxLongHeadlines","DEFAULT_LONGHEADLINES","longHeadlinesErrorMessage","maxDescriptions","DEFAULT_DESCRIPTIONS","MAX_HEADLINE_SUGGESTIONS","ResponsiveAdConfigs","MAX_DESCRIPTION_SUGGESTIONS","descriptionsErrorMessage","businessNameErrorMessage","isCTAExpanded","isBoostAnchorsExpanded","CallToActionLanguage","actionLanguageErrorMessage","ActionType","actionTextErrorMessage","urlOptionErrorMessage","Number","currentAdGroup","showWebsiteImageOptIn","hasWebsiteImageOptIn","OptIn","initializeAdModel","initializeAdContent","initializeAdError","subscribe","newOptInState","dynamic","MMACopilot","Headline0","LongHeadline0","Description0","enum","SchemaModel","backboneSchema","verifiedTrackingSettings","getVerifiedTrackingSettingsRead","AdStatus","enableAdStrengthFields","property","attachAdCustomizersHelpers","updateAction","countdownI18nDummy","edmCampaign","jsDataCampaign","evaluateAdCustomizers","elem","showError","_this6","InputControl","ariaLabelledby","overrideEvents","firstHeadline","getEvaluateAdCustomizers","updateObject","updatedElement","click","updateAIGenAssetContextualAttributeStatus","RemainingCharsHint","maxSize","firstLongHeadline","firstDescription","ActionLanguageAdapter","actionLanguageAdapter","observable","selectedOption","ActionTypeAdapter","actionTypeAdapter","getState","shortHeaderRemainingCharsHint","longHeaderRemainingCharsHint","descriptionRemainingCharsHint","businessNameRemainingCharsHint","reactComponentRef","UrlEditor","finalUrlEditor","inputProtocol","ariaId","mobileUrlEditor","ImpressionTrackingUrlsUrlOptions","ImpressionTrackingUrlOptions","initialImpressionTrackingUrls","maxImpressionTrackingUrlsCount","isIASSectionVisible","impressionTrackingUrls","removeErrors","ThirdPartyMeasurementView","ThirdPartyMeasurementBackboneView","initialThirdPartyMeasurement","thirdPartyMeasurement","renderWithInput","setError","onUrlChanged","getAdStrengthSuggestionForURL","attachAdStrengthSuggestionHelperForURL","MobileFinalUrls","UrlOptions","advancedURLOptions","placeholderEnabled","trackingTemplate","finalUrlSuffix","showUurlTestTool","fn","originalView","testUurl","isInline","uurlLevels","params","customerId","userId","accountId","entityId","apiInLog","expand","adPropertiesToControlMap","_this7","prefix","ko_model","fullUrl","blur","dataset","shiftOneIndex","nextField","_this8","getAIGenAssetContextualAttributeStatus","_this9","editorHeadlineDescriptionOnlyTemplate","callToAction","enableAIGenAssetContextualAttribute","enableAdStrengthSuggestionHelpers","updateHint","HotspotPanel","enableHotSpotPlacement","IsBoostHotSpotPlacementEnabled","defaultSelectedKey","MAX_BUSINESS_NAME","MIN_HEADLINES","min_count","MIN_LONGHEADLINES","MIN_DESCRIPTIONS","Property","ErrorNumber","ifCatch","indexOf","Array","ImpressionTrackingUrl","setErrors","genericErrorMessage","getTrackingTemplate","getUrlCustomParameters","getFinalUrlSuffix","verifiedTrackingSettingsAttachment","getVerifiedTrackingSettingWrite","HotSpots","deleteUndefinedParameters","_this10","optionalParameters","p","_this11","self","IsAlgoGeneratedAsset","attachAIGenAssetContextualAttribute","improveMMAOption","aiGeneratedAssetContainer","VerifiedTrackingData","AccountSettingRepository","getVideosAndThumbnailsFromMTAssets","videos","thumbnailRecord","mTAssetArrays","asset","CustomThumbnailAsset","getAllImagesInfoFromMTAssets","imageToUrlMap","constants","videoTypesWithOrder","videoType","thumbnail","video","customThumbnailAsset","imageProps","getImageProps","ImageExperienceImage","Type","newVideoFromMTObject","newVideoFromGridObject","videoList","getTextSuggestionAdoption","textSuggestions","saveAdParams","suggestionMatch","testValue","keys","textSuggestionAdoption","suggestionMatchForField","isSuggestionAdopted","some","getStyle","imagePlaceholder","objectFit","portraitWithImage","borderRadius","getImageData","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_context","next","abrupt","_x","BoostImage","oDataConfig","onSavePortraitImage","associatedImages","dateFormat","timeZone","serverContext","isImageEditDisplayed","setIsImageEditDisplayed","setImage","useDefaultStyles","_useImagePicker","useImagePicker","displayImagePicker","setDisplayImagePicker","selectedMediaPanelSource","setSelectedMediaPanelSource","mediaRepository","MediaRepository","onNewImageSelected","imagePlacements","newImage","_useAssetLibraryImage","useAssetLibraryImagePicker","isPortraitImage","imagePickerError","setImagePickerError","clearImagePickerError","uploadImage","processUploadedImage","minSize","addImageByUrl","getStockImages","onSelectStockImage","onImageSelected","onImagesSelected","socialMediaDataSource","customMediaSourceConfig","_useWebsiteSuggestion","useWebsiteSuggestion","adContext","advertiserCustomerId","logActivity","adCreatorScenario","scenarioValue","suggestionState","suggestionPoller","_suggestionState$sugg","portraitImage","portraitSubtypes","imgObjMT","portraitImageExperienceImage","src","OriginalUrl","Width","Height","associationType","disableEdit","isIncluded","isLogo","isRecommendedImage","source","SourceType","cropSettings","SourceX","SourceY","SourceHeight","SourceWidth","paddingBottom","alt","AddImageCrudAdComponent","setIsOpen","newOpen","maxUploadNum","imageExperienceProps","imageOption","imageOptionKeys","Portrait","managedViewSelectionState","updateManagedViewSelectionState","stockImageConfig","socialImageConfig","assetLibraryConfig","onImageAddError","imageType","MediaEditorPanel","imagePlacement","aspectRatioConfig","aspectRatiosForBoostPortrait","minCropSize","baseImage","Src","disabledPivotItemKeys","PivotItemKey","Effect","customizedDefaultSelectedPivotItemKey","Crop","initialState","savedAdsList","imageErrorMessages","videoErrorMessages","genericErrorMessages","currentAd","draftUnsaved","isStockPhotoEnabled","videoUploading","currentSelectedImageId","currentSelectedLogoId","cropImage","blockCarousel","hasWebsiteImageOptedIn","enableAutoRotate","hasManualCroppedLogo","hasManualCroppedImage","hasUsedViewAllPlacements","isRecommendAd","mmaBulkConversionStatus","isBulkEditMMAUnSaved","mapSuggestionResponseToState","SuggestionStatus","EmptyURL","CrudAudienceAdReact","onAdFieldUpdated","updatedObj","isFinalUrlImageRetrievalEnabled","isAdCreatorEnabled","newUrl","newState","validURL","control","adEditRef","test","FetchInProgress","InvalidURL","onFinalUrlChanged","onUpdateFinalUrlPrefix","newPrefix","updateFinalUrlPrefix","onUpdateFinalUrl","finalUrlControl","updateFinalUrl","finalURLChange","cancel","inProgress","minimumSize","getMinimumSizeForImage","getLandingPageSuggestions","landingPageUrl","enableOfflinePollingDelay","minimumResolution","onImageListUpdated","currentSelectedId","isMultimediaAdinMSANEnabled","newImageList","flatten","img","uniq","sortBy","curImageList","newImages","imageTypesWithOrder","selectedId","findImageSetById","getLogoList","getImageListWithoutLogo","getDefaultCurrentSelectedLogoId","getDefaultCurrentSelectedImageId","list","shouldEnableOptIn","imageSources","WebsiteCarousel","AdRecommendation","isOptedIn","onVideoListUpdated","isCreate","initialVideos","isVideoUpdated","onSaveThumbnailAsDraft","onVideoUploadStatusUpdate","onImagePreviewRequested","imagePreviewCarouselRef","setPreviewIndexByType","onVideoPreviewRequested","videoPreviewCarouselRef","imageId","onImageEditCancelled","onCropImage","imageObj","onAddAspectRatio","_this$state","imageListWithoutLogo","previewImages","newPreviewImages","targetedRatioIdx","targetedRatio","clone","setIncluded","croppedImages","getAutoCroppedImages","originalImageToCrop","sort","a","b","setImageSetById","onRemoveAspectRatio","_this$state2","onAdSaved","savedAd","imageToGenerateThumbnail","formattedSavedAd","ThumbnailForAdList","savedAdsListWithoutDuplicate","savedAdItem","originalUrl","onEditAd","adId","extraExpand","responsiveAdRepository","getAdAsync","Videos","initializeImagesModelInternal","onRemoveAd","removeAdAsync","updatedSavedAdsList","onCreateAd","pilotCheckLogInfo","clear","onSaveRecommendAd","saveAdAsync","recommendSave","_callee2","_ref5$isAdEditShown","uploadedImageIds","_context2","uploadRecommendImage","recommendAssetIdImageUrlMap","sent","getMultiImagesFromMTAssetsAsync","ImageExperiences","t0","finish","getLogo","logos","imageArr","getFirstElement","logo","getPreviewTexts","defaultPreviewFields","baseImageId","newImageSet","imageSetIdx","placements","BaseId","isPlaceholderMMA","isOnlyOneIncludedImage","ratio","landscapeImage","IsIncluded","willInit","IsVideoAdEditorEnabled","isBoostPortraitImageEnabled","IsBoostPortraitImageEnabled","isBoost200x100ImageEnabled","IsBoost200x100ImageEnabled","isBoostNewAspectRatioSupportEnabled","IsBoostNewAspectRatioSupportEnabled","isNativeAd","isAudienceImageUpscale","IsMSANLogoAndCTAForMMAEnabled","isLogoEnabled","getImageTypesWithOrder","saveMMABulkConversion","progressCb","cancelAdAsync","IsVideoAdsForCampaignEnabled","_this$props3","logInfo","isMMAInMSAN","isMMASearch","isEdit","logWithMetadata","adPreviewPerfMarker","createChild","UiUnsupportedRatios","ImageList","desc","actionText","ActionText","glyph","Glyph","Placement","odataRootUrl","odataPath","odataToken","isImageFittingEnabled","LegacyResponsiveAd","queryParameters","entitySet","currentAccount","Campaigns","bypassCache","CampaignSettings","instrumentationScenarios","MSANImage","MMA","MMAConversion","default","SuggestionPoller","cmpId","jobCompleteCallback","onPollingSuggestionCompleted","logger","getAdCreatorInstrumentation","websiteSuggestionActivity","imageOData","ImageOData","enableAdPreviewLibrary","openTime","Date","fetchAndFillVideosAsync","fetchAndFillImagesAsync","DEFAULT_MAX_IMAGE","ThemeProvider","ComponentSettings","core","ThemeFluent","ImageSuggestionCarousel","isLoading","carousel","isError","messageInfo","onSelectImage","imageSource","suggestionId","websiteSuggestionCarouselActivity","addImageCallback","Image","MessageBarType","ind","onSelectSeeAll","openAddImageCallback","isSubdomainScraping","ServerError","FetchSucceed","videoObj","formatToSave","thumbnails","setMTImageModel","originalData","mtModel","flattenedIncludedImageAssetList","getFlattenedImageAssetList","updateAssetsIdsAsync","updates","originalThumbnailAsset","overrideInfo","copyThumbnailLookToNewImage","bingSrc","_this$state3","firstPlacementOfFirstImage","firstLogo","preferenceFlags","MMAInMSANWebsiteImageOptIn","MMAWebsiteImageOptIn","msanAspectRatioAssociations","getAspectRatios","_this$props4","AdditionalData","batchAction","PasteAs","EditCopy","filters","projection","isSelectAll","finalParams","getParams","Selection","QueryString","_this$props5","adProp","finalAd","setUnSupportedRatios","fetchImagesPromise","getImagesFromMTAssetsAsync","imageIds","api","getAssetCount","assets","MMAParams","imageDetails","isManualEdited","imagesCount","headlinesCount","LongHeadlinesCount","descriptionsCount","_ref10$recommendSave","savePlaceholderMMA","errorMsgs","initialParams","isDataValid","saveAdLog","saveAdLogForTextRecommendation","getProcessedDataAsync","shouldUpdateAccountSettingForAllowCrawlImages","AllowCrawlImagesFromLandingPage","_ref11","omitDeletedParameters","enableAdCreatorMetrics","saveAdActivity","_ref$imageList","_ref$state","baseAdIdMessage","adIdMessage","effects","getListOfEffectSettings","effect","logSaveAdInfoForMetrics","recommendData","getRecommendCacheByUrl","adData","setResponseErrors","newErrors","bulkApiErrorNumberToErrorMessageMapping","HelpPopup","_ref13","bulkParams","getBulkEditParams","bulkEditChange","progressCB","completeCB","SuccessRowCount","TotalRowCount","ErrorRowCount","bulkEditMMAFailed","failedCB","errorMes","MMAImageList","getMmaAspectRatios","ratioCounts","imageArray","minimumRequirements","isMeetingMinimumRequirement","isMMAV2Format","noLandscapeImageIncluded","every","noOriginalImageIncluded","ImageExperience","customThumbnailRecord","isAudienceAd","genericImage","finalUrlProtocol","setAddNewImageCallback","setOpenAddImageCallback","onManualCropLogo","onManualCropImage","enableUnifiedAdPreview","isAudienceMMAWithLogoAndCTA","showCopilotOptionForImage","IsBackgroundSceneEnabled","assetLibraryEventHandler","onUploadImage","imgId","supportImageUpscale","MessageBar","messageBarType","warning","isMultiline","BackboneViewWrapper","View","biddingScheme","getOptInPreferenceFlag","eventsToActions","_this12","willRender","_this$props6","_this$state4","getUnifiedAdPreviewConfig","PreviewCarouselComponent","UnifiedPreviewCarousel","PreviewCarousel","MMAMSANPreviewCarouselComponent","UnifiedMMAMSANPreviewCarousel","MMAPreviewCarousel","imagePreview","getImagesForPreview","totalImageListCount","onUsedViewAllPlacements","renderMMABulkConversionHeader","SavedAdList","isEditable","onCreateAnotherAd","renderAdEdit","renderImageExperience","Row","Col","sm","VideoPreviewCarousel","rel","renderMMABulkConversionActionButtons","cancelMMABulkConversion","isUnSaved","willFetchFile","willFetchData","DelayedCopilotSearchMMAEditor","CopilotSearchMMAEditor","DelayedBulkMMAConvertEditor","BulkMMAConvertEditor","DelayedPlaceholderMMAEditor","PlaceholderMMAEditor","CrudAudienceAdReactWithContext","scopeValue","CoreEditor","MMARefactor","Suspense","fallback","ServerContext","I18nContext","InstrumentationContext","PreferenceContext","ScopeContext","PermissionsContext","Scenario","Activity","editorRef","ResponsiveAdRepository","campaignDomain","$withKey","AdGroups","Ads","$expand","adWithIds","destroy","adapter","parentId","escapeParams","cacheResponse","DisplayUrl","ids","updateMany","showImageOptedIn","processImageListViewModelToModel","responseData","ResponsiveAdEditor","_AudienceStepBase","renderMarker","wizardElement","getI18n","i18nInstance","realI18n","createAds","recommendationTargetAccountId","TargetAccountId","noCreatedAdErr","crudReactComponent","isOpenCreatePanel","isLastStep","lastStep","applyActivity","isSwapStepsEnabled","IsAudienceCampaignSwapAdsBudgetAndBidsEnabled","audienceCampaignType","IsMMAV2Enabled","imageExperienceView","imagePath","AdvertiserCustomerID","GenericImage","onRenderedInDOM","actions","htmlAttributes","class","enabled","method","displayText","unshift","saveToClient","hasCreatedAd","mes","DeliveryStatusType","imageUrl","AudienceStepBase","StyledMMABulkConversionView","hasRSAorExTA","bulkEditMMAConversionAd","_this$props$scope","getCombinedFilter","getMMAEditorStyles","minWidth","margin","borderStyle","borderColor","borderWidth","flexWrap","flexFlow","paddingTop","adEditorShell","mmaAdImagePreviewCarousel","rightStyles","gap","maxWidth","leftStyles","headerStackStyles","imageExperienceStyle","textAssetStyle","businessNameStyle","getAdvancedSettingsStyles","textDecoration","AdvancedSettings","mobileFinalUrls","trackingUrlTemplate","urlCustomParameters","triggerTestUurl","useContext","DynamicPermissions","_useCollapseState","useCollapseState","_useCollapseState2","allAdvancedSettingsSections","advancedSettingsExpandedSections","setAdvancedSettingsExpandedSections","allAdvancedSettingsExpand","collapseExpander","setActiveKeys","advancedSettingsSectionExpanded","setAdvancedSettingsSectionExpanded","onAdvancedSettingsSectionToggle","expanded","_Fragment","ValidatedBootstrapPanel","onToggle","actuationProps","classNames","BootstrapPanel","allPanelItems","checkItems","skipItemsTypeCheck","activeKeys","MobileUrlSection","URLOptionsSection","token","advancedSettingsStyles","mergeStyles","CopilotSearchMMAEditorContainerInternal","onReset","showAllValidationErrors","showUnmappedFormErrors","errorMapperWithI18n","errorMapper","finalUrls","firstUrl","first","finalUrlForRecommendation","FinalUrlForRecommendation","headlines","longHeadlines","descriptions","cta","ctaText","setCTAText","_useEvaluatedAssests","evaluatedHeadLine","setEvaluatedHeadLine","evaluatedLongHeadLine","setEvaluatedLongHeadLine","evaluatedDescription","setEvaluatedDescription","evaluatedText","useEvaluatedAssests","imageData","previewData","allAdSettingsSections","adSettingsExpandedSections","setAdSettingsExpandedSections","imageListLength","isArray","noop","addNewDescriptionCallback","setAddNewDescriptionCallback","addNewShortHeadlinesCallback","setAddNewShortHeadlinesCallback","addNewLongHeadlinesCallback","setAddNewLongHeadlinesCallback","finalUrlForCopilotRecommendations","setFinalUrlForCopilotRecommendations","imagesContainerRef","useRef","logosContainerRef","imageExperiencePortalContainerState","setImageExperiencePortalContainerState","previewImageId","cropImageObj","previewImagesSharedState","setPreviewImagesSharedState","imageExperienceAddNewImageCallback","setImageExperienceAddNewImageCallback","newCTACallback","setNewCTACallback","allAssetsExpand","_useCopilot","useCopilot","currentCTA","assetGroupId","feature","copilotBanner","updateFinalUrlForCopilot","updateFinalUrlCallback","newFinalUrls","onCallActionLanguageChange","setAutomatedCTAEnable","useAutomatedCTA","initializeAdCustomizer","showAdCustomizers","IsRSAIffPopupEnabledFromDeps","useInitAdCustomizer","ActuationGroup","isActive","AttentionBeaconGroup","FormErrorGroup","formErrorProps","AssetGroup","CopilotRepositoryProvider","locale","recommendationType","enableLogoAndCTA","CopilotCTALogoGeneration","UnmappedFormErrors","mapper","ValidatedFinalUrlWithRecommendationsSection","onFinalURLFocusOut","onFinalURLEnterKeyUp","ImageListPortalContainerWithCarouselSection","containerRef","containerState","imageLimit","LogoListPortalContainerSection","HeadlineAssetCollectionSection","LongHeadlineAssetCollectionSection","isOptional","DescriptionAssetCollectionSection","ValidatedBusinessNameWithRecommendationSection","ValidatedLegacyCallToActionWithLanguageSection","isDisplayPlusMMA","SearchMMAAdPreview","ValidatedImageExperienceWrapper","imagesContaineRef","logosContaineRef","isBoostPortraitEnabled","updatePortalContainerState","initialValue","isAd","wizardPerfMarker","isCombinedMsanAndMmaAspectRatios","customMaxImageCount","UAPLPMaxIntegration","AdPreviewLibrarySearchMMA","CopilotSearchMMAEditorContainer","withScope","emptyRecommendationData","ImageAssets","Headline1","Headline2","Description1","emptyData","CopilotSearchMMAEditorInternal","onChanged","externalErrors","convertFromAdModel","setIsDataValid","setBlocking","saveFailed","setSaveFailed","_useContext2","RecommendationContext","setRecommendationContext","adgroupId","_useAppliedLog","_useContext","recommendationContext","logAppliedSuggestion","assetData","logCopilotRecommendations","assetGroup","useAppliedLog","ActivityContext","clearAllErrors","clearAll","dataPatch","processViewModelDataForSaving","processImageAndSaveSearchAdAsync","resErrors","mapBulkUpsertErrors","processImageAndSaveToClientAsync","themes","imageAssets","withBannerService","withRecommendationContext","searchMMAConfig","AdTypeEnum","placementConfig","EPT","msanMMAConfig","Outlook","Web","Mobile","msanMMAV2Config","basicBoostPlacementTypes","Boost","WindowsSpotlight","DiscoverCard","StartMenu","ActionCenter","Banner","Prong1Prong2Feed","Coachmark","msanMMABoostConfigBasic","msanMMABoostConfigNew","HeroImageCarousel200x100","msanMMABoostConfigAll","NewBoost","defaultConfig","getBulkMMAEditorStyles","ImageExperienceWithSuggestionPollerForBulk","setUrl","activityContext","ScenarioContext","hasErrorInUrl","validateAdUrl","customizedGetMinimumSizeForImage","websiteImagesState","BulkMMAConvertEditorHeader","BulkMMAConvertEditorContainer","displayUrl","ImageListPortalContainerSection","isBulk","AdStatusSection","BulkMMAConvertEditorFooter","showSave","onSave","noTranslateModel","noTranslate","BulkMMAConvertProgress","onHide","completeCount","messageTemplate","ariaValuenow","ariaValuemin","ariaValuemax","ReactTemplate","BulkMMAConvertError","setShowErrorGrid","onToggleErrorGrid","BulkMMAConvertEditorInternal","setUnSaved","setShowProgress","bulkSuccessCount","setBulkSuccessCount","bulkErrorCount","setBulkErrorCount","_useState19","_useState20","bulkTotalCount","setBulkTotalCount","_useState21","_useState22","bulkInlineErrors","setBulkInlineErrors","_useState23","_useState24","bulkFailed","setBulkFailed","_useState25","_useState26","showBulkPartialError","setShowBulkPartialError","_useState27","_useState28","setGenericErrorMessages","onProgess","onHideProgress","selectionParams","filterOptions","odataOptions","jobResponse","jobId","statusFilter","skip","take","urlTmpls","accountInUrl","filterSuffix","errorsFromResponse","firstImageId","imagesForPreview","bulkUpsertAdSettingsEntityErrorMap","getBulkUploadEntityType","_ref$bulkUpsertEntity","bulkUpsertEntityErrorMap","_ref$errorProcessor","errorProcessor","identity","getBulkApiErrors","errorType","mappedErrorType","isHtmlMessage","DangerousHtmlMessage","code","getTextAssetRecommendationsStyles","textAssetRecommendationsContent","lineHeight","textAssetRecommendationsPanel","useInlineCopilotUIStyles","makeStyles","paddingLeft","summary","TextAssetRecommendationsWithThemesPanel","collection","availableRecommendations","maxCollectionSize","topicKey","topicAriaLabel","disabledSuggestionTooltip","reportDisplayedRecommendations","DKIThemeName","activeTheme","setActiveTheme","fieldValues","recommendations","itemText","pluck","contains","deriveSuggestedItems","allSuggestedItems","setAllSuggestedItems","suggestedItems","setSuggestedItems","selectedItemsCount","emptyFieldsCount","negate","remaningItemsCount","isFunction","onSwitchTheme","onSuggestedItemToggle","itemIndex","isSelected","onSaveClick","onCancelClick","onRenderHeader","HelpButton","onRenderFooterContent","Item","align","closeButtonAriaLabel","onOuterClick","isFooterAtBottom","PanelType","medium","focusTrapZoneProps","disableFirstFocus","FluentProvider","webLightTheme","CopilotTab","active","onActiveChange","CopilotTabItem","tabKey","SuggestedItemsMultiSelect","disableAllUnselectedSuggestions","MAX_INLINE_RECOMMENDATIONS_PER_PAGE","keyIsEmpty","InlineRecommendations","singleAssetValidationPropsField","inlineRecommendationsHelpTopicKey","inlineRecommendationsHelpTopicAriaLabel","inlineRecommendationsTitle","inlineRecommendationsDisabledItemTooltip","applyRecommendation","applyRecommendations","enableDKI","flattenedAvailableRecommendations","compact","_useCircularBufferVie","pageSize","page","setPage","currentIndex","setCurrentIndex","newPage","useCircularBufferView","flattenedAvailableDKIRecommendations","flattenedAvailableNoDKIRecommendations","_useCircularBufferVie2","availableInlineRecommendations","canMoveNext","moveNext","firstAvailableKey","findKey","prevAvailbleKeyWasDefined","setPrevAvailbleKeyWasDefined","shouldForceCloseCollapse","setShouldForceCloseCollapse","firstAvailableKeyIsDefined","onAddSuggestedItem","onAddAllSuggestedItems","isSuggestionsPanelOpen","setIsSuggestionsPanelOpen","onMoreSuggestionsButtonClick","onCancelAddingMultipleRecommendations","onAddMultipleRecommendations","Separator","SuggestionSectionCollapse","RecommendationsSectionIcon","iconAltText","suggestedSectionTitle","showSuggestionsSectionShimmer","showMoreSuggestionsInlineButton","onMoreSuggestionsInlineButtonClick","showAddAllSuggestionsButton","addAllSuggestionsButtonText","showMoreSuggestionsButton","moreSuggestionsButtonText","disableAllSuggestions","useStyleFluent2","forceClose","allRecommendations","DKIThemeDefaultName","rsaCollectionConfig","validationPropsField","minCollectionSize","getTextAssetCollectionConfig","collectionName","unlocalizedArgs","getEmptyRecommendationsContext","SuggestionsTracker","trackingData","suggestionsReport","allTextSuggestions","returned","RecommendationContextProvider","tracking","copilotTracking","CopilotSuggestionsTracker","updateRecommendationContext","currentContext","reportRecommendations","recommendationsReport","add","WrappedComponent","HoC","displayName","getDisplayName","hoistNonReactStatics","useCopilotRecommendations","editMode","activity","logRecommendationsAPIError","useLogRecommendationsApiError","logTrace","AdsCopilot","isRegionRestricted","setIsRegionRestricted","isCopilotRegionRestricted","postAssetEventLog","usePostAssetEvent","shouldLog","channel","AssetChannel","WEB_UI","AssetEventFeature","RSA","AssetScenario","EDIT_WORK_FLOW","CREATE_WORK_FLOW","resetRecommendations","newFinalUrl","recommendationFieldMap","assetCountMap","TextAssetCollectionWithRecommendations","withInlineRecommendations","updateSuggestionMeasurement","setApplyTextAssetCallback","currentCollection","currentCollectionAsset","currentCollectionAssetText","viewedCopilotSuggestions","setViewedCopilotSuggestions","_recommendationContex","logCopilotSuggestions","suggestionIds","suggestionsToLog","getUntrackedViewedSuggestionIds","EventName","POST_ASSET_EVENT_NAME","EventValue","TEXT","SuggestionIds","RecordType","AssetEventRecordType","VIEWED","trackViewedSuggestionIds","recommendationsField","collectionRecommendations","availableCollectionRecommendations","CopilotDKIRecommendation","DKItheme","recommendation","flattenedCollectionRecommendations","recommendationsMap","SuggestionId","object","getSuggestionIds","displayedRecommendations","displayedRecommendationsIds","applySuggestionIds","newAssets","collectionData","isAbleToAddSuggestion","RSANewCopilotUI","addAllAssetSuggestion","texts","newViewedCopilotSuggestions","HeadlineAssetCollection","setApplyHeadlinesCallback","headlineConfig","DescriptionAssetCollection","setApplyDescriptionsCallback","getCollectionAsset","getAvailableRecommendations","formatToLLMSuggestion","llmSuggestions","Perspectives","SuggestionLanguage","SummaryReason","currentCollectionHeadlines","currentCollectionDescriptions","_llmSuggestions$Sugge","Perspective","Reason","SrcId","PitchingPoint","Order","SuggestionState","StrengthScore","Poor","Average","Good","Excellent","ViewSuggestionType","getStrengthScore","strength","AdStrengthScore","_ref$isForVNext","score","chart","plotBackgroundColor","plotBorderWidth","plotShadow","colors","credits","plotOptions","pie","allowPointSelect","dataLabels","endAngle","startAngle","series","animation","innerSize","showInLegend","states","hover","inactive","verticalAlign","tooltip","HighchartReactWrapper","getAssets","availableAssets","pinPosition","getTextAsset","AdStrengthRepository","$call","currentCustomer","Accounts","findAll","appState","applySuggestionMeasurement","TIPS_CATEGORIES","numItems","viewHeadlineSuggestionTipCategoryItems","category","targetContainer","expandingIcon","detailContainer","expendingContainer","isDetailSuggestionVisible","is","manageVisiblity","num","itemsWithSubtitle","renderContainer","viewHeadlineSuggestionTips","categoryItems","tabIndex","onKeyPress","textContent","suggestionToAdd","hideAdStrengthSuggestionContainer","viewInlineSuggestion","suggestionContanerClassName","noSuggestionContainerClassName","combinedClickViewIdeas","clickViewIdeas","suggestionContainers","noSuggestionContainers","warningIconClassName","warningIconStyle","noFinalUrl","renderNoSuggestion","ErrorCode","RSAV2AssetsSuggestions","allSuggestions","viewSuggestionIds","returnSuggestionIds","suggestionAssetType","suggestionClassName","addSymbolClassName","idClassName","contentClassName","isViewSuggestionApplied","viewSuggestionMeasurement","returnSuggestionMeasurement","noAvailableNewAssetContentClassName","noAvailableNewAssetContainerClassName","noAvailableNewAsset","updateAdStrengthSuggestion","renderSuggestionContent","noSuggestion","renderUpdateSuggestion","hiddenSuggestionCount","viewModelShowCount","availableNewAsset","lastChild","noAvailableNewAssetContainer","noAvailableNewAssetContent","noAvailableNewAssetContentContainer","combinedViewSuggestionIds","combinedApplySuggestionIds","combinedReturnSuggestionIds","AdStrengthView","subscriptions","fetchData","lazyFetchData","inlineSuggestionsEnabled","rateLimit","headlineConatiner","descriptionConatiner","suggestionType","currentActionContainer","renewAdStrengthSuggestion","subscription","dispose","fetchAdStrength","parseAdStrengthActionItems","Strength","ActionItems","headlinePins","descriptionPins","actionItem","pinCount","generateSuggestion","sortedSuggestions","sortSuggestions","ResponsiveSearchAdStrengthView","_DeterministicView","viewRef","DeterministicView","AIGenAssetContextualAttribute","isAIGeneratedAsset","existingContextualAttributeContainer","contextualAttributeContainer","InlineEditor","_React$useState","isUsingInheritedValue","_React$useState2","selectedKey","setSelectedKey","_React$useState3","dataType","customedValue","_React$useState4","setCustomedValue","choiceGroup","selectors","wordBreak","textField","fieldGroup","inheritedValueName","inheritedValueLevel","labelId","onRenderField","optionPops","inheritedValue","ChoiceGroup","attributeName","TextField","AdCustomizerAttributeInlineEditor","valueLevel","currentLevel","_ref$i18n","formattedValue","decimalNumber","fromLocalToFloat","RSAAdCustomizerAttributeColumn","_CampaignuiBaseColumn","columnConfig","Datatype","gridType","dataTypeI18nKey","sortable","bodyClasses","rawName","RSAAdCustomizerAttribute","findAttribute","RSAAdCustomizerAttributes","AdCustomizerAttributeInlineEditorView","ValueSetAtLevel","InheritedValue","InheritedValueSetAtLevel","inlineEditSave","additionalPayload","AdCustomizerAttributeValue","editorView","editorViewCallbackAfterUpdate","CampaignCacheManager","invalidate","groupClass","GridCustomizedPopupEditor","cellPosition","renderBelow","attribute","schemaI18n","SchemaI18n","showInheritIcon","editorialStatus","editorialStatusText","CampaignuiBaseColumn","odataURLMap","Account","getEditorialReasonsTemplate","deliveryStatus","commonI18n","ajaxOptions","attributeId","odataURL","EntityIds","getAppealRejections","reasons","Reasons","editorialRejection","getFwdLinkId","errI18n","locationI18n","ENTITY","CUSTOMIZERFEED","reasonTemplates","getEditorialTemplates","getStyles","budgetContainer","neutralPrimary","minHeight","background","outline","LegacySharedBudget","budget","validationDailyMinBudget","hideBudgetMinRecommendation","noApplyBudgetFromSharedLibrary","readOnly","viewListener","budgetFactory","SharedBudgetView","newFactory","BudgetView","showBudgetMinRecommend","minimumBudget","Amount","withRealTimeUpdates","hideDailyBudgetOptions","currencySymbol","getCurrencySymbol","PageContext","AccountCurrencyCode","showInitialUiBlocker","showNoSharedBudgetLink","stopListening","ValidatedLegacySharedBudget","restProps","_objectWithoutProperties","_excluded","Budget","getBudgetTitleDetails","currencyCode","amount","formatCurrency","neutralLight","neutralLighter","neutralQuaternaryAlt","neutralSecondary","neutralSecondaryAlt","neutralTertiary","themeDark","themeDarkAlt","white","floatButtonStyle","floatButton","paginationStyle","_ref$iconFontFamily","iconFontFamily","boxSizing","fontFamily","outlineOffset","primary","controlStyle","backgroundImage","boxShadow","addEditCommonStyle","_ref2$iconFontFamily","order","flex","cursor","float","backgroundSize","whiteSpace","textOverflow","gridColumnStart","gridColumnEnd","flexDirection","maxHeight","borderTop","getEditImageStyle","_ref3$iconFontFamily","editImageStyle","fontStyle","getCommonPreviewContainerStyles","editImageCommonStyle","previewPlacementContainerRoot","adPreviewCarousel133x100Container","getAddImageStyle","_objectSpread2","_ref4$iconFontFamily","addImageStyle","pointerEvents","overflowY","textIndent","getStockPhotoFilterStyle","_ref5$palette","themePalette","filterContainer","predicateValueEditorStyle","getCircleProgressStyle","circle","isSpaSpbCampaignType","toLocaleLowerCase","isSponsoredCampaignCashbackOptInAvailable","isMSStoreAdsGAWorkflow","isSponsoredCampaign","isCostPerSaleEnabled","isSponsoredPromotionsByBrandsEnabled","shouldUseNewMmcApi","isSpaViaNewMmcApiEnabled","getBiddingStrategyForSponsoredCampaign","_ref$isSponsoredCampa","isSponsoredCampaignCashbackEnabled","_ref$isMranEcpcEnable","isMranEcpcEnabled","_ref$isMranTroasEnabl","isMranTroasEnabled","_ref$isShowManualBidS","isShowManualBidStrategy","costPerSaleBidStrategy","types","costPerSale","manualBidStrategy","manual","enhancedCPCBidStrategy","enhancedCPC","targetRoasBidStrategy","targetRoas","mranOptions","targetBidStrategy","bidStrategyOptions","showBidStrategySection","forceReadOnly","overrideLegacyStoreWithNewMmcApiStoreData","newProductCollectionAccounts","store","IsCoOpStore","IsGlobalStore","IsPlaceHolder","LinkStoreId","LinkedStoreId","Selected","RetailerStoreId","RetailerStoreName","AdditionalValues","IsSPA","NetworkTypes","IsSPB","IsMicrosoftStore","ProductMatchCount","OfferMatchCount","overridenData","ProductCollectionAccounts","StockImageDataService","oDataTokenType","applicationName","optionsWithDefault","$top","$skip","stockImageId","stockImageVendorId","StockImageVendor","bidAjdLimits","criterionType","getBidAdjustmentOptions","percentage","availableOptions","computeBidAdjustment","rawBidPercentage","bidAdjOptionText","bidAdjustmentOptions","bidAdjOption","isBidAdjustmentValid","_bidAjdLimits$getMaxM","getValidationError","isEnableCustomMessage","_bidAjdLimits$getMaxM2","GridConfigGenerator","readonly","showExclusion","bingadsGridColumn","decimal","supportCashbackSettings","IsPersonalizedOffersV3Enabled","onCashbackPercentChange","$gridRoot","isHideBidAdjustmentForBoostEnabled","HideBidAdjustmentForBoost","locals","criterion","isExcluded","isCriterionExcluded","targetExcludeTemplate","AudienceName","CashbackPercent","cashbackPercentControlView","CashbackPercentControlView","isParentLevel","setTimeout","empty","validated","bidValue","BidMultiplier","BidAdjustment","Infinity","bidAdjustmentTemplate","SelectionStatus","audienceTargetColumn","getAdvancedTargetColumn","locationTargetColumn","companyTargetColumn","jobFunctionTargetColumn","industryTargetColumn","advancedTargetExcludedColumn","getTargetColumnByCriterionType","advancedBidAdjustmentColumn","cashbackPercentColumn","ageTarget","AgeRange","ageTargetLabel","ageSettingOptions","selections","labelKey","genderTarget","GenderType","genderTargetLabel","genderSettingOptions","deviceTarget","DeviceName","DeviceCriterion","deviceTargetLabel","deviceSettingOptions","locationTarget","logoUrl","LogoUrl","industry","Size","companyTargetItemTemplate","tableClasses","getColumns","criterionsWithPagination","targetConstants","BaseTargetUpdateView","targetTypes","isSearchDSAShoppingAdgroupLevel","initializeWithTypes","criterionTypes","resourceName","onCriterionChanged","shouldShowPagination","isCashbackPercentValid","currentCriterions","fetchCriterions","targetInfo","typeToOptions","ageOptions","genderOptions","Device","deviceOptions","typeToPath","orderedNames","orderedCriterions","isCurrent","fetchSingleCriterionType","bidAdjustmentControl","bidAdjPercentage","removeAttr","bidAdj","rowData","itemOfElement","updateAsync","$cashbackPercentErrors","__","cashbackPercent","getRealCashbackPercentValue","initializeAndRenderGrid","campaignBids","adgroupBids","deviceKeys","rowKeys","IsOriginalDeviceTargetingEnabled","device","osNames","os","deviceTypeOptions","bids","targetTypeToFilterProperty","OSName","isParentView","extractBids","parentCriterions","getDeviceTypeOptions","deviceTargetsUpdateView","targetType","OriginalDevice","showLevelToggle","handleCashbackPercentChange","getConfig","gridFactory","pgrid","vnext","use","paginationPlugin","a11yPlugin","a11y","pageSizeText","pageNumberLabelText","totalPageCountText","load","handleBidAdjustmentChange","BidAdjustmentControlView","bidAdjValue","getBidAdjustmentValue","ViewModel","bulkUpsertErrors","IsPersonalizedOffersV2Enabled","errorTmpl","TopPanelCashbackSettings","original","CashbackScope","CashbackMonthlyBudget","CouponsEnabled","PersonalizedOffersEnabled","campaignName","shouldShowBiddingStrategy","showBiddingStrategy","IsCostPerSaleEnabled","biddingStrategyView","$biddingStrategyView","BiddingStrategyView","BiddingScheme","bidStrategyName","BidStrategyName","maxCpc","MaxCpc","targetCpa","TargetCpa","TargetRoas","TargetCostPerSale","isAfterSave","shouldSupportCashbackSettings","cashbackSettingsView","isReadOnly","shouldPersonalizedOffersReadOnly","tmpl","renderBiddingStrategyView","$cashbackSettingsView","CashbackSettings","isCashbackScopeReadonly","showCoupon","setupCommonCashbackObserver","focusin","clearErrors","getValues","jsData","jsdataCampaign","CampaignCashback","MonthlyBudget","getBidStrategyByCampaignTypeWhenPersonalizedOffersEnabled","isDataChanged","updated","handleErrors","Ad_DestinationUrl","Ad_FinalUrl","BulkEdit_UrlOptions_CustomParameters_AddAnother","BulkEdit_UrlOptions_CustomParameters_InputAriaLabel","BulkEdit_UrlOptions_CustomParameters_MatchCase","BulkEdit_UrlOptions_CustomParameters_RemoveLineNumber","BulkEdit_UrlOptions_UpgradeWarning","Cancel","CustomParameters_Placeholder_Key","CustomParameters_Placeholder_Value","ErrorNumber_UniqueCustomParameterNames","Error_Campaign_API_FinalUrlRequiredWhenUsingMobileFinalUrl","Error_Campaign_API_InvalidCharactersInKey","Error_Campaign_API_InvalidCharactersInValue","Error_Campaign_API_InvalidTag","Error_Campaign_API_InvalidUrlScheme","Error_Campaign_API_KeyNullOrEmpty","FinalUrlSuffix_Example","FinalUrlSuffix_Label","FinalUrl_Label","Input_NoChange_PlaceHolder","LandingPage_Label","LearnMore","MobileFinalUrl_Label","Save","TrackingTemplate_Example","TrackingTemplate_Label","UpgradedUrl_Placeholder_FinalUrlSuffix","UrlOptions_None","newTrackingTemplate","errorList","tag","showNone","TrackingTemplateView","_PureKnockoutView","_ref$editMode","_ref$template","_ref$showUurlTestTool","PureKnockoutView","InlineEditViewModel","_ref$error","_ref$isValid","TrackingTemplateInlineEditView","_ref$deps","trackingTemplateView","setChild","UurlTestToolView","globalContext","require","uurlTestToolView","urlTestTool","urlTestToolStatusContainer","_ref$showPlaceholder","showPlaceholder","newFinalUrlSuffix","firstChar","placeholderText","FinalUrlSuffixView","_ref$readOnly","FinalUrlSuffixInlineEditView","finalUrlSuffixView","Parameter","CustomParams","_ref2$customParameter","bulkEditMode","bulkEditShowAddLabel","bulkEditShowMatchCase","forceUseIncreasedCount","isDisabled","bulkEditMatchCaseSelected","useIncreasedCount","entityTypeLower","IsCustomParameterCountIncreasePhase3Enabled","maxParameterCount","valueMaxLength","addCustomParamEntry","parameters","last","removeCustomParamEntry","getInputAriaLabel","getRemoveButtonAriaLabel","showAddLable","parametersError","parameterArray","param","CustomParametersView","_ref$bulkEditMode","_ref$bulkEditShowAddL","_ref$bulkEditShowMatc","_ref$customParameters","_ref$withRealTimeUpda","tmplBulkEdit","newVal","separatedKeyValueProperties","matchCase","CustomParameterInlineEditView","customPramsView","isFinalUrl","isFinal","Editing","FinalUrlView","finalUrlTemplate","urlRegex","RegExp","maxFullUrlLength","protocols","errorContainer","urlWithoutProtocol","regexResult","exec","hasErrors","UrlEditorView","urlInputTemplate","urlPlaceholder","mobileUrlVisible","isMobilePreferred","showTitles","landingPageUrlErrorMessages","showUpgradeWarning","UpgradedUrlView","smallContainer","campaignFlow","showDestinationUrl","disableKeywordDestinationUrl","urlEditor","getFullUrl","mobileFinalUrl","mobileUrl","updateOnDevicePreference","enable","setFullUrl","disable","finalUrlSelected","destinationUrlSelected","$url","finalMobileUrl","errorMessageNotExists","SingleViewWrapper","_DeterministicWrapper","rendered","DeterministicWrapperView","UpgradedUrlInlineEditView","upgradedUrls","IsKeywordDestinationURLDisabled","upgradedUrlView","customClass","pug","module","exports","pug_interp","pug_html","locals_for_with","call","escape","promotionTypeI18nKey","promotionTypeI18nData","monetaryDiscount","percentDiscount","formatPercent","promotionDetailI18nData","promotionTypeFormatted","promotionDetail","promotionDetailI18nKey","promotionDetailFormatted","hasPromotionDetail","promotionCode","dateRangeI18nData","dateRangeI18nKey","startDateFormatted","endDateFormatted","formatISODateString","isoDatetimeString","dateToUse","substring","formatDate","skeleton","dateRangeFormatted","hasDateRange","date","hasOccasion","hasSecondLine","PromotionItem","pug_mixins","ariaLabelContext","block","QualityScore","KeywordRelevance","LandingPageRelevance","LandingPageQuality","OverallQualityScore","popupId","arialLabelText","$$obj","$$l","fBindQuery","pug_index0","link","appealble","keyPlaceHolder","valuePlaceHolder","addAnother","recomendCache","setRecommendCache","convertRecommendAssetToImageExperience","imageAssetcenterCrop","convertAdUnitsToImageExperiences","adUnits","recommendAds","convertAdunitsToImageList"],"sourceRoot":""}