{"version":3,"file":"static/js/application.async.landing~96006a45.9396611f.chunk.js","mappings":"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","sources":["../../../node_modules/@bingads-webui-campaign/bulk-operation-base/src/bulk-edit-job-model.js","../../../node_modules/@bingads-webui-campaign/bulk-operation-base/src/grid-filter-serializer.js","../../../node_modules/@bingads-webui-campaign/bulk-operation-base/src/numberic-action-type.js","../../../node_modules/@bingads-webui-campaign/bulk-operation-base/src/preview/viewmodel.js","../../../node_modules/@bingads-webui-campaign/bulk-operation-base/src/preview/view.js","../../../node_modules/@bingads-webui-campaign/bulk-operation-base/src/preview/ad-preview-helper.js","../../../node_modules/@bingads-webui-campaign/bulk-operation-base/src/preview/format-preview-from-response.js","../../../node_modules/@bingads-webui-campaign/campaign-bulk-edit/src/audience-decoration.js","../../../node_modules/@bingads-webui-campaign/campaign-bulk-edit/src/plugin.js","../../../node_modules/@bingads-webui-campaign/campaigns-grid/demo/mock/dummy-js-data-resource.js","../../../node_modules/@bingads-webui-campaign/campaigns-grid/demo/mock/dummy-data-source.js","../../../node_modules/@bingads-webui-campaign/campaigns-grid/demo/mock/schema.js","../../../node_modules/@bingads-webui-campaign/campaigns-grid/index.js","../../../node_modules/@bingads-webui-campaign/campaigns-landscape-progress/src/view.js","../../../node_modules/@bingads-webui-campaign/campaigns-grid/src/bid-landscape/index.js","../../../node_modules/@bingads-webui-campaign/campaigns-grid/src/instrumentation-schema.js","../../../node_modules/@bingads-webui-campaign/campaigns-grid/src/new-pkg/tooltips/fluctuation-tooltip.js","../../../node_modules/@bingads-webui-campaign/campaigns-grid/src/new-pkg/tooltips/budget-center-help-tooltip.js","../../../node_modules/@bingads-webui-campaign/campaigns-grid/src/new-pkg/tooltips/conversion-status-popup.js","../../../node_modules/@bingads-webui-campaign/campaigns-grid/src/filter-entity-util.js","../../../node_modules/@bingads-webui-campaign/campaigns-grid/src/new-pkg/campaigns-grid.js","../../../node_modules/@bingads-webui-campaign/campaigns-grid/src/new-pkg/show-rejection-reasons.js","../../../node_modules/@bingads-webui-campaign/campaigns-grid/src/columns/attributes/campaign-id.js","../../../node_modules/@bingads-webui-campaign/campaigns-language/src/inline-editor-viewmodel.js","../../../node_modules/@bingads-webui-campaign/campaigns-language/src/inline-editor-view.js","../../../node_modules/@bingads-webui-campaign/campaigns-grid/src/columns/attributes/campaign-languages.js","../../../node_modules/@bingads-webui-campaign/campaigns-grid/src/columns/attributes/campaign-type.js","../../../node_modules/@bingads-webui-campaign/campaigns-grid/src/columns/attributes/campaign.js","../../../node_modules/@bingads-webui-campaign/campaigns-grid/src/campaign-status.js","../../../node_modules/@bingads-webui-campaign/campaigns-grid/src/columns/attributes/status-icon.js","../../../node_modules/@bingads-webui-campaign/campaigns-grid/src/columns/attributes/bid-strategy-target-cpa.js","../../../node_modules/@bingads-webui-campaign/campaigns-grid/src/columns/attributes/bid-strategy-target-roas.js","../../../node_modules/@bingads-webui-campaign/campaigns-grid/src/columns/attributes/bid-strategy-manual-cpi.js","../../../node_modules/@bingads-webui-campaign/campaigns-grid/src/columns/attributes/bid-strategy-manual-cpc.js","../../../node_modules/@bingads-webui-campaign/campaigns-grid/src/columns/inline-editable/date-save.js","../../../node_modules/@bingads-webui-campaign/campaigns-grid/src/columns/attributes/start-date.js","../../../node_modules/@bingads-webui-campaign/campaigns-grid/src/columns/attributes/end-date.js","../../../node_modules/@bingads-webui-campaign/campaigns-grid/src/columns/attributes/bid-strategy-target-impression-share.js","../../../node_modules/@bingads-webui-campaign/campaigns-grid/src/columns/attributes/optimization-score.js","../../../node_modules/@bingads-webui-campaign/campaigns-grid/src/columns/attributes/performance-insights.js","../../../node_modules/@bingads-webui-campaign/campaigns-grid/src/columns/index.js","../../../node_modules/@bingads-webui-campaign/campaigns-grid/src/new-pkg/plugin-config.js","../../../node_modules/@bingads-webui-campaign/campaigns-grid/src/new-pkg/grid-config.js","../../../node_modules/@bingads-webui-campaign/campaigns-grid/demo/mock/edm.js","../../../node_modules/@bingads-webui-campaign/campaigns-grid/src/new-pkg/plugins.js","../../../node_modules/@bingads-webui-campaign/campaigns-grid/src/new-pkg/campaigns-grid-factory.js","../../../node_modules/@bingads-webui-campaign/coupon-control-view/src/coupon-control-view.js","../../../node_modules/@bingads-webui-campaign/cashback-settings/src/view-model.js","../../../node_modules/@bingads-webui-campaign/cashback-settings/src/view.js","../../../node_modules/@bingads-webui-campaign/cpg-product-feed-grid/index.js","../../../node_modules/@bingads-webui-campaign/cpg-product-feed-grid/src/brand-grid/brand-grid.js","../../../node_modules/@bingads-webui-campaign/cpg-product-feed-grid/src/brand-grid/grid-columns.js","../../../node_modules/@bingads-webui-campaign/cpg-product-feed-grid/src/brand-grid/grid-config.js","../../../node_modules/@bingads-webui-campaign/cpg-product-feed-grid/src/brand-grid/grid-plugins-config.js","../../../node_modules/@bingads-webui-campaign/cpg-product-feed-grid/src/brand-grid-deps.js","../../../node_modules/@bingads-webui-campaign/cpg-product-feed-grid/src/brand-grid-factory.js","../../../node_modules/@bingads-webui-campaign/cpg-product-feed-grid/src/link-store-toolbar/viewmodel.js","../../../node_modules/@bingads-webui-campaign/cpg-product-feed-grid/src/link-store-toolbar/view.js","../../../node_modules/@bingads-webui-campaign/cpg-product-feed-grid/src/linked-store-grid/linked-store-grid.js","../../../node_modules/@bingads-webui-campaign/cpg-product-feed-grid/src/linked-store-grid/grid-columns.js","../../../node_modules/@bingads-webui-campaign/cpg-product-feed-grid/src/linked-store-grid/grid-config.js","../../../node_modules/@bingads-webui-campaign/cpg-product-feed-grid/src/linked-store-grid-deps.js","../../../node_modules/@bingads-webui-campaign/cpg-product-feed-grid/src/linked-store-grid-factory.js","../../../node_modules/@bingads-webui-campaign/cpg-product-feed-grid/src/linked-store-grid/grid-plugins-config.js","../../../node_modules/@bingads-webui-campaign/cpg-product-feed-grid/src/upload-feed-toolbar/view.js","../../../node_modules/@bingads-webui-campaign/cpg-product-feed-grid/src/shared/upload-feed-status.js","../../../node_modules/@bingads-webui-campaign/cpg-product-feed-grid/src/upload-progress-bar/view.js","../../../node_modules/@bingads-webui-campaign/cpg-product-feed-grid/src/product-feed-grid/product-feed-grid.js","../../../node_modules/@bingads-webui-campaign/cpg-product-feed-grid/src/product-feed-grid/grid-columns.js","../../../node_modules/@bingads-webui-campaign/cpg-product-feed-grid/src/product-feed-grid/grid-config.js","../../../node_modules/@bingads-webui-campaign/cpg-product-feed-grid/src/product-feed-grid/grid-plugins-config.js","../../../node_modules/@bingads-webui-campaign/cpg-product-feed-grid/src/product-feed-grid-deps.js","../../../node_modules/@bingads-webui-campaign/cpg-product-feed-grid/src/product-feed-grid-factory.js","../../../node_modules/@bingads-webui-campaign/cpg-product-feed-grid/src/shared/util.js","../../../node_modules/@bingads-webui-campaign/crud-audience-adgroup/src/OptTgt-toggle.tsx","../../../node_modules/@bingads-webui-campaign/crud-audience-adgroup/src/view.js","../../../node_modules/@bingads-webui-campaign/crud-audience-adgroup/src/advanced-settings/view.js","../../../node_modules/@bingads-webui-campaign/crud-audience-adgroup/src/crud-adgroup-basic/view.js","../../../node_modules/@bingads-webui-campaign/crud-audience-budget-bid/src/kpi-estimate-react.js","../../../node_modules/@bingads-webui-campaign/crud-audience-budget-bid/src/bid-strategy-react.js","../../../node_modules/@bingads-webui-campaign/crud-audience-budget-bid/src/view.js","../../../node_modules/@bingads-webui-campaign/crud-audience-campaign/src/alert-react.js","../../../node_modules/@bingads-webui-campaign/crud-audience-campaign/src/alert-react-style.js","../../../node_modules/@bingads-webui-campaign/crud-audience-campaign/src/view.js","../../../node_modules/@bingads-webui-campaign/crud-audience-campaign/src/shopping.js","../../../node_modules/@bingads-webui-campaign/date-inline-edit-prompt/src/date-inline-edit-view.js","../../../node_modules/@bingads-webui-campaign/date-inline-edit-prompt/src/date-inline-editable-column-prompt.js","../../../node_modules/@bingads-webui-campaign/date-range-utilities/src/util/date-range-preset.js","../../../node_modules/@bingads-webui-campaign/date-range-utilities/src/util/selection-date.js","../../../node_modules/@bingads-webui-campaign/date-range-utilities/src/util/get-state-date-range.js","../../../node_modules/@bingads-webui-campaign/date-range-utilities/src/util/comparison-date-range-option.js","../../../node_modules/@bingads-webui-campaign/date-range-utilities/src/util/get-state-compared-date-range.js","../../../node_modules/@bingads-webui-campaign/date-range-utilities/src/selection-date-range-to-state.js","../../../node_modules/@bingads-webui-campaign/date-range-utilities/src/state-date-range-to-selection.js","../../../node_modules/@bingads-webui-campaign/date-range-utilities/src/lock-down-selection-date-range.js","../../../node_modules/@bingads-webui-campaign/date-range-utilities/src/date-range-format.js","../../../node_modules/@bingads-webui-campaign/date-setting/src/legacy-date-setting.js","../../../node_modules/@bingads-webui-campaign/date-setting/src/utils.js","../../../node_modules/@bingads-webui-campaign/date-setting/src/validated-legacy-date-setting.js","../../../node_modules/@bingads-webui-campaign/email-notification-delivery-option-editor/src/spin.js","../../../node_modules/@bingads-webui-campaign/email-notification-delivery-option-editor/src/editor.js","../../../node_modules/@bingads-webui-campaign/experiment-budget-alert/src/view.js","../../../node_modules/@bingads-webui-campaign/experiment-shared/src/date-utils.js","../../../node_modules/@bingads-webui-campaign/fluent-page-view-constructor/src/card-view-constructor.js","../../../node_modules/@bingads-webui-campaign/fluent-page-view-constructor/src/performance-chart-card/preference.js","../../../node_modules/@bingads-webui-campaign/fluent-page-view-constructor/src/performance-chart-card/container.js","../../../node_modules/@bingads-webui-campaign/fluent-page-view-constructor/src/performance-chart-card/use-data.js","../../../node_modules/@bingads-webui-campaign/frequency-capping/src/index.js","../../../node_modules/@bingads-webui-campaign/grid-tooltip/src/callout-with-lock.js","../../../node_modules/@bingads-webui-campaign/grid-tooltip/src/index.js","../../../node_modules/@bingads-webui-campaign/bulk-operation-base/src/preview/template.pug","../../../node_modules/@bingads-webui-campaign/campaign-bulk-edit/src/audience-decoration.pug","../../../node_modules/@bingads-webui-campaign/campaigns-grid/src/columns/attributes/bid-strategy-target-cpa.pug","../../../node_modules/@bingads-webui-campaign/campaigns-grid/src/columns/attributes/bid-strategy-target-roas.pug","../../../node_modules/@bingads-webui-campaign/campaigns-grid/src/columns/attributes/budget.pug","../../../node_modules/@bingads-webui-campaign/campaigns-grid/src/columns/attributes/campaign-languages-template.pug","../../../node_modules/@bingads-webui-campaign/campaigns-grid/src/columns/attributes/campaign-type-template.pug","../../../node_modules/@bingads-webui-campaign/campaigns-grid/src/columns/attributes/campaign.pug","../../../node_modules/@bingads-webui-campaign/campaigns-grid/src/columns/attributes/optimization-score.pug","../../../node_modules/@bingads-webui-campaign/campaigns-grid/src/columns/attributes/performance-insights.pug","../../../node_modules/@bingads-webui-campaign/campaigns-landscape-progress/src/template.pug","../../../node_modules/@bingads-webui-campaign/campaigns-language/src/inline-editor-template.pug","../../../node_modules/@bingads-webui-campaign/cashback-settings/src/template.pug","../../../node_modules/@bingads-webui-campaign/coupon-control-view/src/coupon-control-view.pug","../../../node_modules/@bingads-webui-campaign/cpg-product-feed-grid/src/brand-grid/dropdown-column.pug","../../../node_modules/@bingads-webui-campaign/cpg-product-feed-grid/src/link-store-toolbar/template.pug","../../../node_modules/@bingads-webui-campaign/cpg-product-feed-grid/src/linked-store-grid/action-column.pug","../../../node_modules/@bingads-webui-campaign/cpg-product-feed-grid/src/linked-store-grid/status-column.pug","../../../node_modules/@bingads-webui-campaign/cpg-product-feed-grid/src/upload-feed-toolbar/template.pug","../../../node_modules/@bingads-webui-campaign/cpg-product-feed-grid/src/upload-progress-bar/template.pug","../../../node_modules/@bingads-webui-campaign/crud-audience-adgroup/src/advanced-settings/template.pug","../../../node_modules/@bingads-webui-campaign/crud-audience-adgroup/src/audience-target-selector-collapse.pug","../../../node_modules/@bingads-webui-campaign/crud-audience-adgroup/src/crud-adgroup-basic/template.pug","../../../node_modules/@bingads-webui-campaign/crud-audience-adgroup/src/template.pug","../../../node_modules/@bingads-webui-campaign/crud-audience-budget-bid/src/template.pug","../../../node_modules/@bingads-webui-campaign/crud-audience-campaign/src/template.pug","../../../node_modules/@bingads-webui-campaign/experiment-budget-alert/src/template.pug"],"sourcesContent":["import backbone from 'backbone';\r\nimport _ from 'underscore';\r\n\r\n/**\r\n * BulkEditJobModel, provides base model for bulk edit job\r\n * Can be used (extended for override purpose) for bulk actions like automated rules & bulk edit\r\n */\r\nexport class BulkEditJobModel extends backbone.Model {\r\n /**\r\n * Initialize model settings\r\n * @param {Object} param - An object containing these default options for model\r\n * @param {Object} param.odata - odata module\r\n * @param {string} param.odata.jq_ajax_adapter - the function for ajax action\r\n *\r\n * @returns {void} void\r\n */\r\n initialize({ odata }) {\r\n this.options = { odata };\r\n\r\n super.initialize(this.options);\r\n this.idAttribute = 'id';\r\n }\r\n\r\n /**\r\n * Default settings for the model\r\n *\r\n * @returns {void} void\r\n */\r\n defaults() {\r\n return {\r\n Id: null,\r\n Selection: '',\r\n TotalRowCount: 0,\r\n SuccessRowCount: 0,\r\n ErrorRowCount: 0,\r\n Status: '',\r\n CreationTime: '',\r\n ExecutionStartTime: '',\r\n CompletionTime: '',\r\n CreatedBy: '',\r\n Description: '',\r\n BulkEditResults: [],\r\n selectedEntityCount: 0,\r\n PreviewEntityIds: [],\r\n };\r\n }\r\n\r\n /**\r\n * parse response and convert it into model content\r\n * @param {Object} response - response object\r\n *\r\n * @returns {Object} prased object\r\n */\r\n parse(response) {\r\n if (response) {\r\n const result = _.pick(\r\n response,\r\n 'Selection',\r\n 'Description',\r\n 'TotalRowCount',\r\n 'SuccessRowCount',\r\n 'ErrorRowCount',\r\n 'Status',\r\n 'CreationTime',\r\n 'ExecutionStartTime',\r\n 'CompletionTime',\r\n 'CreatedBy',\r\n 'BulkEditResults'\r\n );\r\n\r\n result.Id = response.Id && response.Id.length > 0 ? response.Id : null;\r\n\r\n return result;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n /**\r\n * model sync settings, have different setting for different type of operation\r\n * @param {String} method - operation name\r\n * @param {String} model - model\r\n * @param {Object} options - addtional options\r\n *\r\n * @returns {void} void\r\n */\r\n sync(method, model, options) {\r\n const url = _.template(this.url)({\r\n jobId: this.get('Id'),\r\n });\r\n\r\n if (method === 'create') {\r\n options.type = 'Post'; // eslint-disable-line no-param-reassign\r\n options.data = JSON.stringify({ // eslint-disable-line no-param-reassign\r\n Entity: model.get('Entity'),\r\n BatchAction: model.get('BatchAction'),\r\n Selection: model.get('Selection'),\r\n Description: model.get('Description'),\r\n PreviewEntityIds: model.get('PreviewEntityIds'),\r\n });\r\n } else {\r\n options.type = 'Get'; // eslint-disable-line no-param-reassign\r\n }\r\n\r\n // TODO: apjia, track usage of jq_ajax_adapter and see whether we can repace it\r\n // with Assets/component/http/js/channel/core\r\n return this.options.odata.jq_ajax_adapter.call(this, url, options);\r\n }\r\n}\r\n","import _ from 'underscore';\r\n\r\n// only leave the top 100 string\r\nfunction capValue(value) {\r\n const maxLength = 100;\r\n if (!_.isString(value) || value.length < maxLength) {\r\n return value;\r\n }\r\n return value.substring(0, maxLength);\r\n}\r\n\r\n/**\r\n * Generate description string for filter\r\n * @param {Object} filter - filter\r\n * @param {Object[]} filter.FilterExpressions - required\r\n * should in format of [{SelectedColumn, SelectedOperator, Values}]\r\n * @param {Object[]} filter.idBased - optinal, true for the id based filter\r\n *\r\n * @returns {String} generated description string\r\n */\r\nexport function toDescription(filter) {\r\n if (!filter || !filter.FilterExpressions) {\r\n return null;\r\n }\r\n\r\n const expressions = filter.FilterExpressions;\r\n\r\n if (!_.isArray(expressions) || expressions.length === 0) {\r\n return null;\r\n }\r\n\r\n if (filter.idBased) {\r\n return JSON.stringify({ idsCount: expressions[0].Values.length });\r\n }\r\n\r\n const compact = _.map(\r\n expressions,\r\n expr => [expr.SelectedColumn, expr.SelectedOperator, _.map(expr.Values, capValue)]\r\n );\r\n\r\n return JSON.stringify(compact);\r\n}\r\n\r\n/**\r\n * Generate filter from description string\r\n * @param {String} description - the description string\r\n *\r\n * @returns {Object} generated filter\r\n */\r\nexport function fromDescription(description) {\r\n if (!description) {\r\n return null;\r\n }\r\n\r\n let compactFilter = JSON.parse(description);\r\n\r\n if (compactFilter.idsCount) {\r\n return {\r\n idBased: true,\r\n idsCount: compactFilter.idsCount,\r\n };\r\n }\r\n\r\n compactFilter = compactFilter && compactFilter.Filter ? compactFilter.Filter : compactFilter;\r\n const filter = _.map(\r\n compactFilter,\r\n _.bind(_.object, _, ['SelectedColumn', 'SelectedOperator', 'Values'])\r\n );\r\n\r\n return {\r\n FilterExpressions: filter,\r\n };\r\n}\r\n\r\n/**\r\n * Generate rule description string for filter\r\n * @param {Object} filter - filter\r\n * @param {Object[]} filter.FilterExpressions - required\r\n * should in format of [{SelectedColumn, SelectedOperator, Values}]\r\n * @param {Object[]} filter.idBased - optinal, true for the id based filter\r\n * @param {boolean} acrossAllPages - whether selection is across all pages\r\n * @param {integer} idsCount - count for id, required when filter.idBased is true\r\n *\r\n * @returns {String} generated rule description string\r\n */\r\nexport function toRuleDescription(filter, acrossAllPages, idsCount) {\r\n if (!filter || !filter.FilterExpressions ||\r\n !_.isArray(filter.FilterExpressions) ||\r\n filter.FilterExpressions.length === 0) {\r\n return null;\r\n }\r\n\r\n const expressions = filter.FilterExpressions;\r\n const result = {};\r\n\r\n if (filter.idBased) {\r\n result.idsCount = acrossAllPages ? idsCount : expressions[0].Values.length;\r\n }\r\n\r\n // in acrossallpages senario, the values for first expression is always empty\r\n // which is useless and may cause confusion in description, so we remove it\r\n const expressionsToMap = acrossAllPages ? _.without(expressions, expressions[0]) : expressions;\r\n const resultFilter = _.map(expressionsToMap, (expr) => {\r\n const mappedResult = [expr.SelectedColumn, expr.SelectedOperator, _.map(expr.Values, capValue)];\r\n\r\n if (!_.isEmpty(expr.SelectedNames)) {\r\n mappedResult.push(_.map(expr.SelectedNames, capValue));\r\n }\r\n\r\n return mappedResult;\r\n });\r\n\r\n result.Filter = resultFilter;\r\n return JSON.stringify(result);\r\n}\r\n\r\n/**\r\n * Generate filter from rule description string\r\n * @param {String} description - the rule description string\r\n *\r\n * @returns {Object} generated filter\r\n */\r\nexport function fromRuleDescription(description) {\r\n if (!description) {\r\n return null;\r\n }\r\n\r\n const compact = JSON.parse(description);\r\n const compactFilter = compact.Filter ? compact.Filter : compact;\r\n const FilterExpressions = _.map(compactFilter, (element) => {\r\n const mapped = {\r\n SelectedColumn: element[0],\r\n SelectedOperator: element[1],\r\n Values: element[2],\r\n };\r\n\r\n if (element[0] === 'Labels' && element.length > 3) {\r\n mapped.SelectedNames = element[3]; // eslint-disable-line\r\n }\r\n\r\n return mapped;\r\n });\r\n\r\n return compact.idsCount ?\r\n {\r\n idBased: true,\r\n idsCount: compact.idsCount,\r\n FilterExpressions,\r\n } :\r\n {\r\n FilterExpressions,\r\n };\r\n}\r\n\r\n/**\r\n * Generate legacy query string from filterExpressions\r\n * @param {Object[]} filterExpressions - the filter expressions\r\n *\r\n * @returns {String} filter expression part\r\n */\r\nexport function toLegacyQueryString(filterExpressions) {\r\n const expressionStrings = _.map(\r\n filterExpressions,\r\n (expression, index) => _.map(expression, (value, key) => {\r\n const template = `filter[${index}].${key}=`;\r\n\r\n return _.isArray(value) ?\r\n _.map(value, val => template + val).join('&') :\r\n template + value;\r\n }).join('&')\r\n );\r\n\r\n return expressionStrings.join('&');\r\n}\r\n\r\n","export const numericActionTypes = {\r\n changeByPercent: 'ChangeByPercent',\r\n changeByAmount: 'ChangeByAmount',\r\n setAmount: 'SetToAmount',\r\n};\r\n","import ko from 'knockout';\r\n\r\nexport default class ViewModel {\r\n constructor({\r\n results = [],\r\n columns = [],\r\n totalCount,\r\n i18n,\r\n }) {\r\n this.results = ko.observable([]);\r\n\r\n this.totalCount = ko.observable(0);\r\n\r\n this.columns = columns;\r\n\r\n this.currentPageChangeCount = ko.computed(() => this.results().length);\r\n\r\n this.changeText = ko.observable('');\r\n\r\n this.changeText = ko.computed(() => {\r\n if (this.totalCount() === 0) {\r\n return i18n.getString('BulkEdit_Preview_NoChange');\r\n } else if (this.currentPageChangeCount() > 0) {\r\n return i18n.getString('BulkEdit_Preview_SomeChanges').replace('{0}', this.totalCount());\r\n }\r\n\r\n return i18n.getString('BulkEdit_Preview_NoCurrentPageChange').replace('{0}', this.totalCount());\r\n });\r\n\r\n this.updateResult = (resultsToUse, totalResultCount) => {\r\n this.results(resultsToUse);\r\n this.totalCount(totalResultCount || resultsToUse.length);\r\n };\r\n\r\n this.updateResult(results, totalCount);\r\n }\r\n}\r\n","import { PureKnockoutView } from '@bingads-webui/knockout-view';\r\nimport template from './template.pug';\r\nimport ViewModel from './viewmodel';\r\n\r\n/**\r\n * Provide display for bulk edit preview result\r\n */\r\nexport class PreviewResultView extends PureKnockoutView {\r\n /**\r\n * Initialize view settings\r\n * @param {Object} param - An object containing these default options for model\r\n * @param {String[]} param.columns - localized headers\r\n * @param {Object[]} param.results - results to display, one per row\r\n * the format should be the result of any (similar) function from format-preview-from-response\r\n * @param {number} param.totalCount - total results count, by default to be results.length\r\n * @param {Object} param.i18n - localization functions\r\n *\r\n * @returns {void} void\r\n */\r\n initialize({\r\n columns,\r\n results = [],\r\n totalCount,\r\n i18n,\r\n }) {\r\n this.options = {\r\n results, columns, i18n, totalCount,\r\n };\r\n super.initialize(this.options);\r\n }\r\n\r\n get template() {\r\n return template;\r\n }\r\n\r\n get ViewModel() {\r\n return ViewModel;\r\n }\r\n\r\n /**\r\n * Update the preview results, view will be updated\r\n * @param {Object[]} results - new results\r\n * the format should be the result of any (similar) function from format-preview-from-response\r\n * @param {number} totalCount - total results count, by default to be results.length\r\n *\r\n * @returns {void} void\r\n */\r\n update(results, totalCount) {\r\n this.viewModel.updateResult(results, totalCount);\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { parseSync } from '@bingads-webui/safe-json';\r\nimport { getTitlePreview } from '@bingads-webui-campaign/summary-grid-helper';\r\nimport {\r\n responsiveAdPreviewTemplate,\r\n dynamicSearchAdPreviewTemplate\r\n} from '@bingads-webui-campaign/ad-previews';\r\n\r\nconst adTypes = {\r\n textAds: 'TextAd',\r\n expandedTextAds: 'ExpandedTextAd',\r\n appInstallAds: 'AppInstallAd',\r\n dynamicSearchAds: 'DynamicSearchAd',\r\n responsiveAds: 'ResponsiveAd',\r\n responsiveSearchAds: 'ResponsiveSearchAd',\r\n};\r\n\r\nconst getAdType = function (entityValues) {\r\n if (entityValues.AdTitle2) {\r\n return adTypes.expandedTextAds;\r\n } else if (entityValues.AdHeadline && entityValues.AdBusinessName) {\r\n return adTypes.responsiveAds;\r\n } else if (_.has(entityValues, 'AdHeadlines')) {\r\n return adTypes.responsiveSearchAds;\r\n } else if (\r\n _.has(entityValues, 'AdPath1') &&\r\n _.has(entityValues, 'AdPath2') &&\r\n !_.has(entityValues, 'AdTitle')\r\n ) {\r\n return adTypes.dynamicSearchAds;\r\n }\r\n return adTypes.textAds;\r\n};\r\n\r\nconst getGenericAdPreview = function (entityValues) {\r\n let previewValue = '';\r\n\r\n // if AdTitle is there, use it\r\n previewValue = entityValues.AdTitle;\r\n\r\n return previewValue;\r\n};\r\n\r\nconst getResponsiveSearchAdPreview = function (entityValues) {\r\n let previewValue = '';\r\n\r\n let values = parseSync(entityValues.AdHeadlines);\r\n if (!_.isEmpty(values)) {\r\n values = _.map(values, value => parseSync(value));\r\n\r\n previewValue = getTitlePreview(values);\r\n }\r\n\r\n return previewValue;\r\n};\r\n\r\nconst getResponsiveAdPreview = function (entityValues, i18n) {\r\n return responsiveAdPreviewTemplate({\r\n itemViewModel: {\r\n LandscapeImageMediaUrl: entityValues.OriginalImageMediaUrl || entityValues.LandscapeImageMediaUrl,\r\n Headline: entityValues.AdHeadline,\r\n LongHeadline: entityValues.AdLongHeadline,\r\n Text: entityValues.AdText,\r\n BusinessName: entityValues.AdBusinessName,\r\n convertedDisplayUrl: entityValues.AdDisplayUrl,\r\n },\r\n i18n,\r\n withContainer: true,\r\n });\r\n};\r\n\r\nconst getDynamicSearchAdPreview = function (entityValues, i18n) {\r\n return dynamicSearchAdPreviewTemplate({\r\n itemViewModel: {\r\n DisplayUrl: entityValues.AdDisplayUrl,\r\n Path1: entityValues.AdPath1,\r\n Path2: entityValues.AdPath2,\r\n Text: entityValues.AdText,\r\n },\r\n i18n,\r\n });\r\n};\r\n\r\nconst getAdEntityPreviewCell = function (entityValues, i18n) {\r\n const adType = getAdType(entityValues);\r\n\r\n switch (adType) {\r\n case adTypes.responsiveSearchAds:\r\n return { value: getResponsiveSearchAdPreview(entityValues), isHtml: false };\r\n\r\n case adTypes.responsiveAds:\r\n return { value: getResponsiveAdPreview(entityValues, i18n), isHtml: true };\r\n\r\n case adTypes.dynamicSearchAds:\r\n return { value: getDynamicSearchAdPreview(entityValues, i18n), isHtml: true };\r\n\r\n case adTypes.expandedTextAds:\r\n default:\r\n return { value: getGenericAdPreview(entityValues), isHtml: false };\r\n }\r\n};\r\n\r\nexport { getAdEntityPreviewCell };\r\n","import _ from 'underscore';\r\nimport { getAdEntityPreviewCell } from './ad-preview-helper';\r\n\r\n// format returned value into two decimal strings\r\nfunction formatValueToFixed(i18n, value) {\r\n return i18n.formatDecimalToFixed(parseFloat(value));\r\n}\r\n\r\nfunction formatEntityValue(item, entityKeys, defaultEntityValue) {\r\n const entity = _.find(item.EntityKey, it => entityKeys.indexOf(it.Key) >= 0);\r\n\r\n return { value: entity && entity.Value ? entity.Value : defaultEntityValue, isHtml: false };\r\n}\r\n\r\n/**\r\n * Format the status results of bulk edit response to formats used by PreviewResultView\r\n * @param {Object[]} rows - raw result rows from bulk edit result\r\n * @param {String[]} entityKeys - the entity keys, using it to find entityname from response\r\n * @param {Object} i18n - localization setting\r\n * @param {String} defaultEntityValue - default entity value, used when missing from result,\r\n * optional\r\n * @param {String} entity - entity type, ex) ad, adGroup\r\n *\r\n * @returns {Object} formated result, [{data: {value, isHtml}}]\r\n */\r\nexport function formatStatus(rows, entityKeys, i18n, defaultEntityValue, entity) {\r\n const result = [];\r\n if (rows && rows.length) {\r\n _.each(rows, (item) => {\r\n const data = [];\r\n\r\n if (entity === 'Ad') {\r\n const entityValues = {};\r\n _.each(item.EntityKey, (entityItem) => {\r\n entityValues[entityItem.Key] = entityItem.Value;\r\n });\r\n\r\n data.push(getAdEntityPreviewCell(entityValues, i18n));\r\n } else {\r\n data.push(formatEntityValue(item, entityKeys, defaultEntityValue));\r\n }\r\n\r\n if (item.Changes && item.Changes.length) {\r\n data.push({ value: i18n.getString(`EntityStatus_${item.Changes[0].OriginalValue}`), isHtml: false });\r\n data.push({ value: i18n.getString(`EntityStatus_${item.Changes[0].NewValue}`), isHtml: false });\r\n } else {\r\n data.push({ value: '', isHtml: false });\r\n data.push({ value: '', isHtml: false });\r\n }\r\n result.push({ data });\r\n });\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Format the bid/budget results of bulk edit response to formats used by PreviewResultView\r\n * @param {Object[]} rows - raw result rows from bulk edit result\r\n * @param {String[]} entityKeys - the entity keys, using it to find entityname from response\r\n * @param {Object} i18n - localization setting\r\n *\r\n * @returns {Object} formated result, [{data: {value, isHtml}}]\r\n */\r\nexport function formatBidBudget(rows, entityKeys, i18n) {\r\n const result = [];\r\n if (rows && rows.length) {\r\n _.each(rows, (value) => {\r\n const data = [formatEntityValue(value, entityKeys)];\r\n\r\n if (value.Changes && value.Changes.length) {\r\n // for changeBudget we can only have one element in value.Changes array\r\n data.push({\r\n value: formatValueToFixed(i18n, value.Changes[0].OriginalValue),\r\n isHtml: false,\r\n });\r\n data.push({\r\n value: formatValueToFixed(i18n, value.Changes[0].NewValue),\r\n isHtml: false,\r\n });\r\n } else {\r\n data.push({ value: '', isHtml: false });\r\n data.push({ value: '', isHtml: false });\r\n }\r\n result.push({ data });\r\n });\r\n }\r\n return result;\r\n}\r\n\r\n\r\n/**\r\n * Format the email results of bulk edit response to formats used by PreviewResultView\r\n * @param {Object[]} rows - raw result rows from bulk edit result\r\n * @param {String[]} entityKeys - the entity keys, using it to find entityname from response\r\n * @param {String} defaultEntityValue - default entity value, used when missing from result,\r\n * optional\r\n *\r\n * @returns {Object} formated result, [{data: {value, isHtml}}]\r\n */\r\nexport function formatEmail(rows, entityKeys, defaultEntityValue) {\r\n const result = [];\r\n if (rows && rows.length) {\r\n _.each(rows, (item) => {\r\n result.push({ data: [formatEntityValue(item, entityKeys, defaultEntityValue)] });\r\n });\r\n }\r\n return result;\r\n}\r\n","import _ from 'underscore';\r\nimport template from './audience-decoration.pug';\r\n\r\nfunction getEl(gridView) {\r\n const gridContainer = gridView.$el.closest('.bingadsgrid');\r\n\r\n return gridContainer.find('.editor__container');\r\n}\r\n\r\nexport const onSuccess = ({ i18n, isCustomInMarketEnabled, audiencesPath }) => {\r\n const audienceLink = `${i18n.getString('Remarketing_Tutorial_Step3_Desc_AudienceTabLink')}`;\r\n const info = isCustomInMarketEnabled ?\r\n i18n.getString('Audiences_AssociationSuccess_Message_CustomInMarket_Campaign').replace('{0}', audienceLink) :\r\n i18n.getString('Audiences_AssociationSuccess_Message_Campaign').replace('{0}', audienceLink);\r\n window.App.views.alertCenter.toastInfo(info);\r\n};\r\n\r\nexport function campaignAudienceAssociationDecoration(gridView, {\r\n i18n,\r\n isCustomInMarketEnabled,\r\n}) {\r\n _.defer(() => {\r\n const stateData = window.App.state.get('$data');\r\n\r\n if (stateData && stateData.fromAudienceLibrary) {\r\n // Show the message on top of the grid view\r\n getEl(gridView).html(template({\r\n fromAudienceLibrary: true,\r\n isCustomInMarketEnabled,\r\n i18n,\r\n })).show();\r\n }\r\n\r\n // Setup handler of association success\r\n window.App.on('campaignRemarketingAssociated', (/* isBSCAdGroupFiltered, not used */) => {\r\n // Show the return link to audience tab\r\n const container = getEl(gridView);\r\n\r\n container.html(template({\r\n campaignRemarketingAssociated: true,\r\n isCustomInMarketEnabled,\r\n i18n,\r\n })).show();\r\n\r\n container.find('.aud-tab-link').click(() => {\r\n window.App.navigate('customer/:customer_id/account/:account_id/audiences');\r\n });\r\n });\r\n });\r\n}\r\n","import _ from 'underscore';\r\nimport { CampaignType } from '@bingads-webui-campaign/campaign-ui-common';\r\nimport { projectionGridBulkEdit } from '@bingads-webui-campaign/projection-grid-bulk-edit';\r\nimport { campaignAudienceAssociationDecoration, onSuccess as onAudienceAssociationSuccess } from './audience-decoration';\r\n\r\n/**\r\n * @typedef { Object } campaignBulkEditOptions\r\n * @property { Object } status campaign status schema.\r\n * @property { Object } ChangeStatusView campaign change status view.\r\n * @property { Object } ChangeStatusModel campaign change status model.\r\n * @property { Object } ChangeBudgetView campaign change budget view.\r\n * @property { Object } ChangeBudgetModel campaign change budget model.\r\n * @property { Object } ChangeCashbackBudgetView campaign change cash budget view.\r\n * @property { Object } ChangeCashbackBudgetModel campaign change cash budget model.\r\n * @property { Object } ChangeCashbackPercentView campaign change cash percent view.\r\n * @property { Object } ChangeCashbackPercentModel campaign change cash percent model.\r\n * @property { Object } ChangeBidStrategyModel campaign change bid strategy model.\r\n * @property { Object } ChangeBidStrategyView campaign change bid strategy model.\r\n * @property { Object } BulkCampaignExclusionsView campaign bulk add exclusion view.\r\n * @property { Object } ChangeLanguageView campaign change language view.\r\n * @property { Object } ChangeLanguageModel campaign change language model.\r\n * @property { Object } AudienceAssociationView campaign association exclusion view.\r\n * @property { Object } AudienceAssociationModel campaign association exclusion model.\r\n * @property { Object } ChangeRsaAutoAssetsView campaign change RSA auto assets view.\r\n * @property { Object } ChangeRsaAutoAssetsModel campaign change RSA auto assets model.\r\n * @property { Object } CopyPaste campaign copy paste\r\n * @property { Object } config config.\r\n * @property { Object } i18n i18n.\r\n * @property { Object } scope scope.\r\n * @property { Object } isForVNext isForVNext.\r\n * @property { String } bulkEditUrl BulkEditUrl.\r\n * @property { Object } disableDeselectAll flag to disable deselect all after bulk edit success.\r\n */\r\n\r\n/**\r\n * campaignBulkEdit\r\n * @param { campaignBulkEditOptions } options campaign bulk edit options\r\n * @returns { Object } campaignBulkEditPlugin campaign bulk edit plugin\r\n */\r\nfunction campaignBulkEdit(options) {\r\n const {\r\n status,\r\n ChangeStatusView,\r\n ChangeStatusModel,\r\n ChangeBudgetView,\r\n ChangeBudgetModel,\r\n ChangeCashbackBudgetView,\r\n ChangeCashbackBudgetModel,\r\n ChangeCashbackPercentView,\r\n ChangeCashbackPercentModel,\r\n ChangeBidStrategyModel,\r\n ChangeBidStrategyView,\r\n ChangeLanguageView,\r\n ChangeLanguageModel,\r\n BulkCampaignExclusionsView,\r\n AudienceAssociationView,\r\n AudienceAssociationModel,\r\n ChangeRsaAutoAssetsView,\r\n ChangeRsaAutoAssetsModel,\r\n CopyPaste,\r\n config,\r\n filterService,\r\n i18n,\r\n i18nNewDesign,\r\n router,\r\n scope,\r\n isForVNext,\r\n bulkEditUrl,\r\n qualtricsSurveyCallback,\r\n importNotificationCallback,\r\n importBudgetBidNotificationCallback,\r\n disableDeselectAll = false,\r\n getCampaignTypeGlobalFilter,\r\n perfMarker,\r\n campaignUpgradeProps,\r\n } = options;\r\n\r\n function isFilterByPerformanceMaxCampaigns() {\r\n return getCampaignTypeGlobalFilter() === CampaignType.PerformanceMax;\r\n }\r\n\r\n function isFilterByAppAdsCampaigns() {\r\n return getCampaignTypeGlobalFilter() === CampaignType.App;\r\n }\r\n\r\n function isFilterByAllCampaigns() {\r\n return getCampaignTypeGlobalFilter() === CampaignType.All;\r\n }\r\n\r\n function isFilterBySearchCampaigns() {\r\n return getCampaignTypeGlobalFilter() === CampaignType.Default;\r\n }\r\n\r\n function isFilterByShoppingCampaigns() {\r\n return getCampaignTypeGlobalFilter() === CampaignType.Shopping;\r\n }\r\n\r\n function getChangeBudgetView({ viewConfig, selectedRowCount }) {\r\n return new ChangeBudgetView(_.defaults({\r\n model: new ChangeBudgetModel({\r\n selectedEntityCount: selectedRowCount,\r\n scope,\r\n budgetType: 'Daily',\r\n }),\r\n isForVNext,\r\n }, viewConfig));\r\n }\r\n\r\n function getChangeLifetimeBudgetView({ viewConfig, selectedRowCount }) {\r\n return new ChangeBudgetView(_.defaults({\r\n model: new ChangeBudgetModel({\r\n selectedEntityCount: selectedRowCount,\r\n scope,\r\n budgetType: 'LifetimeBudgetStandard',\r\n }),\r\n isForVNext,\r\n }, viewConfig));\r\n }\r\n\r\n function getChangeCashbackPercentView({ viewConfig, selectedRowCount }) {\r\n return new ChangeCashbackPercentView(_.defaults({\r\n model: new ChangeCashbackPercentModel({\r\n selectedEntityCount: selectedRowCount,\r\n scope,\r\n }),\r\n isForVNext,\r\n }, viewConfig));\r\n }\r\n\r\n function getChangeCashbackBudgetView({ viewConfig, selectedRowCount }) {\r\n return new ChangeCashbackBudgetView(_.defaults({\r\n model: new ChangeCashbackBudgetModel({\r\n selectedEntityCount: selectedRowCount,\r\n scope,\r\n }),\r\n isForVNext,\r\n }, viewConfig));\r\n }\r\n\r\n function getChangeBidStrategyView({ viewConfig, selectedRowCount }) {\r\n return new ChangeBidStrategyView(_.defaults({\r\n model: new ChangeBidStrategyModel({\r\n Entity: 'Campaign',\r\n selectedEntityCount: selectedRowCount,\r\n scope,\r\n }),\r\n isForVNext,\r\n entityType: 'Campaign',\r\n biddingStrategyType: 'EnhancedCpc',\r\n i18nNewDesign,\r\n getCampaignTypeGlobalFilter,\r\n }, viewConfig));\r\n }\r\n\r\n function getChangeLanguageView({ viewConfig, selectedRowCount }) {\r\n return new ChangeLanguageView(_.defaults({\r\n model: new ChangeLanguageModel({\r\n selectedEntityCount: selectedRowCount,\r\n scope,\r\n }),\r\n isForVNext,\r\n }, viewConfig));\r\n }\r\n\r\n function getaddExclusionsView({ viewConfig }) {\r\n if (viewConfig.grid.pgridPlugins.crossPageSelectAll.isAllSelected && !confirm(i18n.getString('CampaignSummaryPage_MultiplePageSelectionNotAllowed'))) {// eslint-disable-line\r\n return undefined;\r\n }\r\n\r\n const { gridView } = viewConfig.grid;\r\n const { inlineError } = viewConfig;\r\n\r\n return new BulkCampaignExclusionsView({\r\n gridView,\r\n inlineError,\r\n isForVNext,\r\n grid: viewConfig.grid,\r\n campaignType: getCampaignTypeGlobalFilter(),\r\n });\r\n }\r\n\r\n function getCampaignAudienceView({ viewConfig, selectedRowCount }) {\r\n const { IsCustomAudienceAllowed, IsInMarketAudienceAllowed } = config.get('Permissions');\r\n let audienceAssociationPerfMarker;\r\n if (perfMarker) {\r\n audienceAssociationPerfMarker = perfMarker.createChild('Association_With_Audiences');\r\n audienceAssociationPerfMarker.willInit();\r\n const { gridView } = viewConfig.grid;\r\n const listener = () => {\r\n audienceAssociationPerfMarker.done();\r\n gridView.off('didUpdate', listener);\r\n };\r\n gridView.on('didUpdate', listener);\r\n }\r\n return new AudienceAssociationView(_.defaults(\r\n {\r\n isForVNext,\r\n model: new AudienceAssociationModel({ selectedEntityCount: selectedRowCount }),\r\n router,\r\n perfMarker: audienceAssociationPerfMarker,\r\n newI18n: i18nNewDesign,\r\n },\r\n viewConfig,\r\n isForVNext ? {\r\n onSuccessCallback: () => onAudienceAssociationSuccess({\r\n i18n,\r\n isCustomInMarketEnabled: IsCustomAudienceAllowed || IsInMarketAudienceAllowed,\r\n audiencesPath: `${router.getRoutePathById('audiences')}${window.location.search}`,\r\n }),\r\n } : {}\r\n ));\r\n }\r\n\r\n function getChangeRsaAutoAssetsView({ viewConfig, selectedRowCount }) {\r\n return new ChangeRsaAutoAssetsView(_.defaults({\r\n model: new ChangeRsaAutoAssetsModel({\r\n selectedEntityCount: selectedRowCount,\r\n scope,\r\n }),\r\n }, viewConfig));\r\n }\r\n\r\n function onCopyClicked({ viewConfig }) {\r\n CopyPaste.copy('campaign', Object.assign({}, viewConfig.grid, { perfMarker }));\r\n }\r\n\r\n function onPasteClicked({ viewConfig }) {\r\n CopyPaste.paste(Object.assign({}, viewConfig.grid, { perfMarker }));\r\n }\r\n\r\n const permissions = config.get('Permissions');\r\n\r\n const items = [{\r\n text: permissions.dynamic.CampaignLifetimeBudget ? i18n.getString('Grid_ChangeDailyBudgets') : i18n.getString('Grid_ChangeBudgets'),\r\n classes: ['bulk-edit-change-budget'],\r\n createView: getChangeBudgetView,\r\n },\r\n permissions.dynamic.CampaignLifetimeBudget && {\r\n text: i18n.getString('Grid_ChangeLifetimeBudgets'),\r\n classes: ['bulk-edit-change-lifetime-budget'],\r\n createView: getChangeLifetimeBudgetView,\r\n },\r\n permissions.IsPersonalizedOffersEnabled &&\r\n !permissions.IsPersonalizedOffersV4Enabled &&\r\n !(permissions.IsPersonalizedOffersV2Enabled ||\r\n permissions.IsPersonalizedOffersV3Enabled) &&\r\n isForVNext ? {\r\n text: i18n.getString('Grid_ChangeCashbackBudgets'),\r\n classes: ['bulk-edit-change-cashback-budget'],\r\n createView: getChangeCashbackBudgetView,\r\n } : null,\r\n permissions.IsPersonalizedOffersEnabled &&\r\n !permissions.IsPersonalizedOffersV4Enabled &&\r\n isForVNext ? {\r\n text: i18n.getString('Grid_ChangeCashbackPercent'),\r\n classes: ['bulk-edit-change-cashback-percent'],\r\n createView: getChangeCashbackPercentView,\r\n } : null,\r\n isForVNext ? {\r\n text: i18n.getString('Grid_BidStrategy'),\r\n classes: ['bulk-edit-change-bid-strategy-type'],\r\n createView: getChangeBidStrategyView,\r\n isValid: () => !isFilterByAppAdsCampaigns(),\r\n } : null,\r\n {\r\n text: i18n.getString('EditCampaignLanguage'),\r\n classes: ['bulk-edit-campaign-language'],\r\n createView: getChangeLanguageView,\r\n },\r\n {\r\n text: i18n.getString('Grid_BulkChanges'),\r\n classes: ['bulk-edit-exclusions'],\r\n createView: getaddExclusionsView,\r\n },\r\n ];\r\n\r\n const decorationCallback = (gridView) => {\r\n const localData = {\r\n i18n,\r\n isCustomInMarketEnabled:\r\n permissions.IsCustomAudienceAllowed || permissions.IsInMarketAudienceAllowed,\r\n };\r\n\r\n campaignAudienceAssociationDecoration(gridView, localData);\r\n };\r\n\r\n items.push({\r\n text: permissions.IsCustomAudienceAllowed || permissions.IsInMarketAudienceAllowed ?\r\n i18n.getString('AudiencesAssociation_BulkEditAssociation_Audience_Title') : i18n.getString('AudiencesAssociation_BulkEditAssociation_Title'),\r\n classes: ['bulk-edit-campaign-audience'],\r\n createView: getCampaignAudienceView,\r\n isFallbackEnabled: false,\r\n isValid: () => !isFilterByPerformanceMaxCampaigns() && !isFilterByAppAdsCampaigns(),\r\n });\r\n\r\n const showUpgradeTool = scope && scope.location\r\n && scope.location.pathname === '/campaign/vnext/campaigns';\r\n\r\n const campaignUpgradeItem = showUpgradeTool ? {\r\n text: _.result(campaignUpgradeProps, 'toolbarDropdownText'),\r\n classes: ['pmax-campaign-upgrade'],\r\n repos: campaignUpgradeProps,\r\n isValid: () => isFilterByAllCampaigns() || isFilterByShoppingCampaigns(),\r\n } : {\r\n isValid: false,\r\n };\r\n\r\n let frontItems = [];\r\n if (permissions.IsCampaignAdGroupCopyPasteEnabled && CopyPaste) {\r\n if (isForVNext) {\r\n frontItems = [{\r\n text: i18n.getString('BulkEdit_CopyMenu'),\r\n classes: ['bulk-edit-campaigns-copy'],\r\n createView: onCopyClicked,\r\n hotkeys: {\r\n win: 'Ctrl-C',\r\n mac: '\\u2318C',\r\n },\r\n isValid: () => {\r\n if (isFilterByPerformanceMaxCampaigns()) {\r\n return _.get(permissions, ['dynamic', 'PmaxCopyPasteEnabled'], false);\r\n }\r\n if (isFilterByAppAdsCampaigns()) {\r\n return false;\r\n }\r\n return true;\r\n },\r\n }];\r\n } else {\r\n items.push(\r\n {\r\n text: i18n.getString('BulkEdit_CopyMenu'),\r\n classes: ['bulk-edit-campaigns-copy'],\r\n createView: onCopyClicked,\r\n },\r\n {\r\n text: i18n.getString('BulkEdit_PasteMenu'),\r\n classes: ['bulk-edit-campaigns-paste'],\r\n createView: onPasteClicked,\r\n noSelectionRequired: true,\r\n }\r\n );\r\n }\r\n }\r\n\r\n // Since the campaignBulkEdit is used in multi grids,\r\n // add extra View & Model check to avoid impacting other unneeded grids.\r\n if (ChangeRsaAutoAssetsView && ChangeRsaAutoAssetsModel) {\r\n items.push({\r\n text: i18n.getString('Grid_ChangeRsaAutoAssets'),\r\n classes: ['bulk-edit-rsa-auto-assets'],\r\n createView: getChangeRsaAutoAssetsView,\r\n isValid: () => isFilterByAllCampaigns() || isFilterBySearchCampaigns(),\r\n });\r\n }\r\n\r\n return projectionGridBulkEdit({\r\n status,\r\n ChangeStatusView,\r\n ChangeStatusModel,\r\n DeleteConfirmation: i18n.getString('Campaigns_DeleteConfirmation'),\r\n config,\r\n i18n,\r\n entityType: 'campaign',\r\n items: _.compact(items),\r\n frontItems,\r\n campaignUpgradeItem,\r\n filterService,\r\n scope,\r\n gridDecorationCallback: decorationCallback,\r\n isForVNext,\r\n bulkEditUrl,\r\n qualtricsSurveyCallback,\r\n importNotificationCallback,\r\n importBudgetBidNotificationCallback,\r\n disableDeselectAll,\r\n });\r\n}\r\n\r\nexport { campaignBulkEdit };\r\n","import _ from 'underscore';\r\nimport { DS } from 'js-data';\r\nimport Promise from 'bluebird';\r\nimport mockData from './dummy-data.json';\r\n\r\nconst store = new DS();\r\n\r\nclass CustomerAdapter {\r\n // All of the methods shown here must return a promise\r\n\r\n // \"definition\" is a resource defintion that would\r\n // be returned by DS#defineResource\r\n\r\n // \"options\" would be the options argument that\r\n // was passed into the DS method that is calling\r\n // the adapter method\r\n\r\n findAll(/* definition, params, options */) {\r\n const result = _.clone(mockData.value);\r\n\r\n result.raw = mockData;\r\n return Promise.resolve(result);\r\n }\r\n}\r\n\r\nstore.registerAdapter('Campaign', new CustomerAdapter(), { default: true });\r\n\r\nexport const campaign = store.defineResource({\r\n name: 'Campaign',\r\n idAttribute: 'Id',\r\n});\r\n","import { noop } from 'underscore';\r\nimport { campaign } from './dummy-js-data-resource';\r\nimport { mockSchema } from './schema';\r\n\r\nexport const dummyDataSource = {\r\n type: 'js-data',\r\n entity: campaign,\r\n primaryKey: 'Id',\r\n schema: mockSchema,\r\n options: {\r\n entitySet: {\r\n toJSON: noop,\r\n },\r\n },\r\n};\r\n","const PerformanceMetrics = {\r\n name: 'PerformanceMetrics',\r\n type: 'object',\r\n properties: {\r\n Impressions: {\r\n type: 'integer',\r\n nullable: true,\r\n },\r\n Clicks: {\r\n type: 'integer',\r\n nullable: true,\r\n },\r\n CTR: {\r\n type: 'number',\r\n nullable: true,\r\n },\r\n Conversions: {\r\n type: 'integer',\r\n nullable: true,\r\n },\r\n Spend: {\r\n type: 'number',\r\n nullable: true,\r\n },\r\n AverageCPC: {\r\n type: 'number',\r\n nullable: true,\r\n },\r\n AveragePosition: {\r\n type: 'number',\r\n nullable: true,\r\n },\r\n AverageCPM: {\r\n type: 'number',\r\n nullable: true,\r\n },\r\n CPA: {\r\n type: 'number',\r\n nullable: true,\r\n },\r\n WebsiteCoverage: {\r\n type: 'number',\r\n nullable: true,\r\n },\r\n AuctionWonPercent: {\r\n type: 'number',\r\n nullable: true,\r\n sovcolumn: true,\r\n isPercentValue: true,\r\n },\r\n AuctionLostToBudgetPercent: {\r\n type: 'number',\r\n nullable: true,\r\n sovcolumn: true,\r\n isPercentValue: true,\r\n },\r\n AuctionLostToRankPercent: {\r\n type: 'number',\r\n nullable: true,\r\n sovcolumn: true,\r\n isPercentValue: true,\r\n },\r\n AuctionLostToLandingPercent: {\r\n type: 'number',\r\n nullable: true,\r\n sovcolumn: true,\r\n isPercentValue: true,\r\n },\r\n AuctionLostToAdQualityPercent: {\r\n type: 'number',\r\n nullable: true,\r\n sovcolumn: true,\r\n isPercentValue: true,\r\n },\r\n AuctionLostToBidPercent: {\r\n type: 'number',\r\n nullable: true,\r\n sovcolumn: true,\r\n isPercentValue: true,\r\n },\r\n ClickSharePercent: {\r\n type: 'number',\r\n nullable: true,\r\n },\r\n RevenueOnAdSpend: {\r\n type: 'number',\r\n nullable: true,\r\n },\r\n AdvertiserReportedRevenue: {\r\n type: 'number',\r\n nullable: true,\r\n },\r\n ConversionRate: {\r\n type: 'number',\r\n nullable: true,\r\n },\r\n },\r\n};\r\n\r\nconst Labels = {\r\n type: 'array',\r\n items: {\r\n type: 'object',\r\n schema: {\r\n name: 'Label',\r\n type: 'object',\r\n key: 'Id',\r\n properties: {\r\n Id: {\r\n type: 'integer',\r\n key: true,\r\n nullable: true,\r\n },\r\n Name: {\r\n type: 'string',\r\n maxLength: 80,\r\n required: true,\r\n },\r\n Description: {\r\n type: 'string',\r\n maxLength: 200,\r\n },\r\n ColorCode: {\r\n type: 'integer',\r\n nullable: true,\r\n },\r\n AssociationCounts: {\r\n type: 'object',\r\n schema: {\r\n name: 'LabelAssociationCounts',\r\n type: 'object',\r\n properties: {\r\n CampaignCount: {\r\n type: 'integer',\r\n },\r\n AdGroupCount: {\r\n type: 'integer',\r\n },\r\n AdCount: {\r\n type: 'integer',\r\n },\r\n KeywordCount: {\r\n type: 'integer',\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n isRelatedEntity: true,\r\n filterable: true,\r\n};\r\n\r\nexport const mockSchema = {\r\n name: 'Campaign',\r\n type: 'object',\r\n key: 'Id',\r\n required: ['Name'],\r\n properties: {\r\n Id: {\r\n filterable: true,\r\n skipLocalization: true,\r\n type: 'integer',\r\n key: true,\r\n },\r\n Name: {\r\n type: 'string',\r\n filterable: true,\r\n },\r\n Status: {\r\n type: 'string',\r\n enum: ['Active', 'Deleted', 'Suspended', 'UserPaused', 'BudgetPaused', 'BudgetUserPaused'],\r\n filterable: true,\r\n },\r\n Budget: {\r\n filterable: ['Amount'],\r\n schema: {\r\n key: 'Id',\r\n name: 'Budget',\r\n properties: {\r\n Id: {\r\n type: 'integer',\r\n key: true,\r\n nullable: true,\r\n },\r\n Name: {\r\n type: 'string',\r\n filterable: true,\r\n },\r\n Amount: {\r\n type: 'number',\r\n },\r\n },\r\n },\r\n },\r\n CampaignType: {\r\n chooseType: 'checkbox',\r\n type: 'string',\r\n enum: ['Default', 'Shopping', 'Audience'],\r\n filterable: true,\r\n },\r\n Languages: {\r\n type: 'array',\r\n items: {\r\n type: 'string',\r\n },\r\n },\r\n DeliveryStatus: {\r\n chooseType: 'checkbox',\r\n type: 'string',\r\n enum: ['CreditCardExpired', 'IOExceeded', 'PaymentInformationMissing', 'InvalidFinancialStatusOther', 'MigrationPaused', 'CampaignDeleted', 'CampaignSuspended', 'CampaignBudgetPaused', 'DomainLanguageNotSupported', 'ShoppingCampaignStoreNotFound', 'ShoppingCampaignNoOffersPresent', 'AdGroupExpired', 'AdGroupDraft', 'AdGroupDeleted', 'CamAssetRejected', 'CamAssetDeleted', 'AdGroupTargetingTooNarrow', 'EditorialRejected', 'EditorialUnderAppeal', 'UrlInvalid', 'ApplicationNotFound', 'ApplicationDestinationUrlMismatch', 'PendingMetadataSync', 'EditorialPending', 'AssociationDeleted', 'CampaignUserPaused', 'AdGroupPrivacyPending', 'AdGroupUserPaused', 'AdUserPaused', 'KeywordMatchTypeAdGroupMediumCombinationInvalid', 'KeywordUserPaused', 'NegativeKeywordConflicts', 'PartialNegativeKeywordConflicts', 'AutoBiddingLimitedByNotEnoughConversions', 'EditorialApprovedLimited', 'LowSupply', 'LowQuality', 'BidBelowFirstPageBid', 'Incomplete', 'BudgetSuggestions', 'InlineOpportunity', 'GeoCodingIncomplete', 'ProductTargetUserPaused', 'AdExtensionNotPresent', 'AdExtensionDeleted', 'AdExtensionAssociationDeleted', 'StoreIdNotAssociated', 'AdGroupAudienceAssociationPaused', 'AdGroupAudienceAssociationExcluded', 'AdNotPresent', 'AdNotActive', 'ApplicationDestinationUrlValidationIncomplete', 'AdGroupCriterionExcluded', 'AdGroupCriterionPaused', 'Eligible'],\r\n filterable: true,\r\n },\r\n PerformanceMetrics: {\r\n type: 'object',\r\n schema: PerformanceMetrics,\r\n filterable: ['Impressions', 'Clicks', 'CTR', 'Spend', 'Conversions',\r\n 'AverageCPC', 'AverageCPM', 'AveragePosition', 'CPA', 'RevenueOnAdSpend',\r\n 'ConversionRate', 'AdvertiserReportedRevenue'],\r\n alias: {\r\n Spend: {\r\n legacy: 'TotalEffectiveCost',\r\n },\r\n },\r\n },\r\n Labels,\r\n PhonePerformanceMetrics: {\r\n type: 'object',\r\n $schema: {},\r\n },\r\n QualityScore: {\r\n type: 'object',\r\n $schema: {},\r\n },\r\n UpdatedOnLastImport: {\r\n type: 'boolean',\r\n },\r\n HasAuctionInsight: {\r\n type: 'boolean',\r\n filterable: true,\r\n },\r\n TrackingUrlTemplate: {\r\n type: 'string',\r\n },\r\n UrlCustomParameters: {\r\n type: 'array',\r\n items: {\r\n type: 'object',\r\n $schema: {},\r\n },\r\n },\r\n BiddingScheme: {\r\n type: 'object',\r\n $schema: {},\r\n },\r\n NativeBidAdjustment: {\r\n type: 'integer',\r\n nullable: true,\r\n },\r\n DisplayBiddingStrategyType: {\r\n type: 'string',\r\n enum: ['InheritFromParent', 'ManualCpc', 'MaxClicks', 'MaxConversions', 'TargetCpa', 'EnhancedCpc'],\r\n },\r\n DisplayBiddingStrategyMaxCpc: {\r\n type: 'number',\r\n nullable: true,\r\n },\r\n DisplayBiddingStrategyTargetCpa: {\r\n type: 'number',\r\n nullable: true,\r\n },\r\n DsaTargets: {\r\n type: 'array',\r\n items: {\r\n type: 'object',\r\n $schema: {},\r\n },\r\n },\r\n DomainCategorys: {\r\n type: 'array',\r\n items: {\r\n type: 'object',\r\n $schema: {},\r\n },\r\n },\r\n NegativeAdGroupDsaTargets: {\r\n type: 'array',\r\n items: {\r\n type: 'object',\r\n $schema: {},\r\n },\r\n },\r\n Categories: {\r\n type: 'array',\r\n items: {\r\n type: 'object',\r\n $schema: {},\r\n },\r\n },\r\n DsaSearchTerms: {\r\n type: 'array',\r\n items: {\r\n type: 'object',\r\n $schema: {},\r\n },\r\n },\r\n },\r\n};\r\n\r\nexport const mockLabelSchema = {\r\n name: 'Label',\r\n type: 'object',\r\n key: 'Id',\r\n properties: {\r\n Id: {\r\n type: 'integer',\r\n key: true,\r\n nullable: true,\r\n },\r\n Name: {\r\n type: 'string',\r\n maxLength: 80,\r\n required: true,\r\n },\r\n Description: {\r\n type: 'string',\r\n maxLength: 200,\r\n },\r\n ColorCode: {\r\n type: 'integer',\r\n nullable: true,\r\n },\r\n AssociationCounts: {\r\n type: 'object',\r\n $schema: {\r\n name: 'LabelAssociationCounts',\r\n type: 'object',\r\n properties: {\r\n CampaignCount: {\r\n type: 'integer',\r\n },\r\n AdGroupCount: {\r\n type: 'integer',\r\n },\r\n AdCount: {\r\n type: 'integer',\r\n },\r\n KeywordCount: {\r\n type: 'integer',\r\n },\r\n },\r\n },\r\n },\r\n },\r\n};\r\n","import { dummyDataSource } from './demo/mock/dummy-data-source';\r\nimport {\r\n applyError,\r\n campaignBidLandscapeTrack,\r\n formatRes,\r\n getParams,\r\n validateSearchBid,\r\n} from './src/bid-landscape';\r\n\r\nexport function getCampaignsGridFactory() {\r\n return () => import(/* webpackMode: 'eager' */ './src/new-pkg/campaigns-grid-factory'); // eslint-disable-line no-unused-vars\r\n}\r\n\r\nexport {\r\n applyError,\r\n campaignBidLandscapeTrack,\r\n dummyDataSource,\r\n formatRes,\r\n getParams,\r\n validateSearchBid,\r\n};\r\n","import Backbone from 'backbone';\r\nimport template from './template.pug';\r\n\r\nexport class ProgressView extends Backbone.View {\r\n initialize({\r\n scope,\r\n i18n,\r\n }) {\r\n this.i18n = i18n;\r\n this.scope = scope;\r\n }\r\n get events() {\r\n return {\r\n 'click .closebtn': 'close',\r\n };\r\n }\r\n close() {\r\n this.trigger('close');\r\n }\r\n render() {\r\n const { i18n, scope } = this;\r\n this.$el.html(template({\r\n i18n,\r\n scope,\r\n }));\r\n return this;\r\n }\r\n}\r\n","/* eslint-disable import/extensions */\r\n/* eslint-disable import/no-unresolved */\r\nimport $ from 'jquery';\r\nimport _ from 'underscore';\r\nimport { CampaignBidLandscape } from '@bingads-webui/bid-landscape';\r\nimport { AlertHelper } from '@bingads-webui-campaign/alert-helper';\r\nimport { showPopup } from '@bingads-webui/automatic-positioning-popover';\r\nimport { Dialog } from '@bingads-webui/dialog';\r\nimport { ProgressView } from '@bingads-webui-campaign/campaigns-landscape-progress';\r\nimport { withUiBlock } from '@bingads-webui/uiblocker';\r\nimport { generateGuid } from '@bingads-webui-universal/primitive-utilities';\r\nimport * as i18nErrors from '@bingads-webui-component-legacy/api-errors-campaign/index';\r\nimport appConfig from '@bingads-webui-component-legacy/config/index';\r\nimport jsdataCampaign from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport instrumentation from '@bingads-webui-campaign-legacy/instrumentation/index';\r\nimport odata from '@bingads-webui-component-legacy/http/channel/odata';\r\nimport { schema as instruSchema } from '../instrumentation-schema';\r\n\r\nconst i18n = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/feature/campaigns-tab/campaigns');\r\n\r\nlet dialog = {};\r\nlet dialogProgress = {};\r\nlet bulkEditChange = {};\r\n\r\nconst ACTION_TYPE = {\r\n CampaignWideBid: 'SetToAmount',\r\n BidScaling: 'ChangeByPercent',\r\n TROAS: 'TargetROAS',\r\n TCPA: 'TargetCPA',\r\n};\r\nconst currencyCode = appConfig.get('AccountCurrencyCode');\r\ninstrumentation.addScenario(instruSchema);\r\nconst senario = instrumentation.campaignLandscapeEditBid.create();\r\nconst activity = senario.campaignLandscapeEditBid.create();\r\nactivity.start();\r\n\r\nexport function campaignBidLandscapeTrack(options) {\r\n const {\r\n Id,\r\n scope,\r\n landscapeType,\r\n hash,\r\n callback,\r\n } = options;\r\n const { customerId: cid, accountId: aid } = scope;\r\n const url = `Customers(${cid})/Accounts(${aid})/Campaigns(${Id})/CampaignBidLandscape.Track`;\r\n return odata.post(\r\n url,\r\n {\r\n path: 'AdInsight/V2/',\r\n host: 'adinsight.odata.url',\r\n data: {\r\n Request: {\r\n Type: landscapeType,\r\n Hash: hash,\r\n },\r\n },\r\n }\r\n ).then(() => callback());\r\n}\r\n\r\nfunction showError(msg) {\r\n const alertHelper = new AlertHelper({ i18n });\r\n alertHelper.showError(msg);\r\n}\r\n\r\nexport function applyError(response) {\r\n let error;\r\n const unexpectedError = i18n.getString('ErrorNumber_-1');\r\n\r\n if (!response || !response.errors) {\r\n error = unexpectedError;\r\n } else {\r\n const errors = i18nErrors.getBulkApiErrors(response.errors, 'newadgroup')\r\n || i18nErrors.getBulkApiErrors(response.errors, 'newkeyword');\r\n\r\n if (!errors || !errors[0] || !errors[0].message) {\r\n error = unexpectedError;\r\n } else {\r\n error = errors[0].message;\r\n }\r\n }\r\n showError(error);\r\n}\r\n\r\nexport function validateSearchBid(newBidStr, campaignSelectMode) {\r\n const bidRange = appConfig.get('KeywordBidRange');\r\n let floorPrice = bidRange.FloorValue || 0.01;\r\n let ceilingPrice = bidRange.CeilingValue || 1000;\r\n\r\n if (campaignSelectMode === 'TCPA') {\r\n ceilingPrice *= 4;\r\n } else if (campaignSelectMode === 'TROAS') {\r\n floorPrice = 0.01;\r\n ceilingPrice = 1000;\r\n }\r\n\r\n let floorPriceStr = i18n.formatDecimalToFixed(campaignSelectMode === 'TROAS' ? floorPrice * 100 : floorPrice);\r\n let ceilingPriceStr = i18n.formatDecimalToFixed(campaignSelectMode === 'TROAS' ? ceilingPrice * 100 : ceilingPrice);\r\n if (campaignSelectMode === 'BidScaling') {\r\n ceilingPrice = 100000;\r\n floorPrice = -90;\r\n ceilingPriceStr = `${ceilingPrice}%`;\r\n floorPriceStr = `${floorPrice}%`;\r\n }\r\n\r\n if (newBidStr < floorPrice) {\r\n return i18n.getString('AdGroupSummary_SearchBidLessThanFloorPrice').replace('#0#', floorPriceStr);\r\n } else if (newBidStr > ceilingPrice) {\r\n return i18n.getString('AdGroupSummary_SearchBidMoreThanCeilingPrice').replace('#0#', ceilingPriceStr);\r\n }\r\n return '';\r\n}\r\n\r\nexport function getParams(options, entity) {\r\n const timeFormat = { raw: 'M/d/yyyy', timeZone: 'UTC' };\r\n const end = new Date();\r\n const start = new Date(Date.now() - (30 * 24 * 60 * 60 * 1000));\r\n const startDate = i18n.formatDate(start, timeFormat);\r\n const endDate = i18n.formatDate(end, timeFormat);\r\n const QueryString = options.actionType === 'ChangeByPercent' && entity === 'Keyword' ?\r\n `startdate=${startDate}&enddate=${endDate}&$filter=Bid/AmountSource eq Enum.BidAmountSource'UseFromOrderItem'`\r\n : `startdate=${startDate}&enddate=${endDate}`;\r\n const Property = entity === 'AdGroup' ? 'SearchBid' : 'Bid/Amount';\r\n const Value = entity === 'Keyword' && options.actionType === 'SetToAmount' ? null : options.newValue;\r\n const params = {\r\n Entity: entity,\r\n BatchAction: {\r\n Actions: [{\r\n '@odata.type': '#Model.NumericAction',\r\n Property,\r\n ActionType: options.actionType,\r\n Value,\r\n Limit: null,\r\n },\r\n ],\r\n },\r\n Selection: {\r\n QueryString,\r\n CampaignId: options.Id,\r\n AdGroupId: null,\r\n },\r\n Description: null,\r\n PreviewCompositeIds: [],\r\n };\r\n return params;\r\n}\r\n\r\nfunction bulkEdit(options) {\r\n const paramsAdGroup = getParams(options.params, 'AdGroup');\r\n const paramsKeyword = getParams(options.params, 'Keyword');\r\n bulkEditChange(_.defaults(\r\n {\r\n params: paramsAdGroup,\r\n completeCB: (res) => {\r\n options.progressCB(res);\r\n bulkEditChange(_.defaults(\r\n { params: paramsKeyword },\r\n _.pick(options, 'completeCB', 'progressCB', 'failedCB')\r\n ));\r\n },\r\n },\r\n _.pick(options, 'progressCB', 'failedCB')\r\n ));\r\n}\r\n\r\n// Going\r\nfunction defaultApply(campaign, campaignBidLandscapeView, scope, grid, noWidBidData, trackingId) {\r\n const {\r\n Id,\r\n } = campaign;\r\n const newValue = campaignBidLandscapeView.valueToApply();\r\n const landscapeType = campaignBidLandscapeView.campaignSelectMode();\r\n const hash = campaignBidLandscapeView.hash();\r\n const actionType = ACTION_TYPE[landscapeType];\r\n const additionalBuget = campaignBidLandscapeView.keepCurrentBudget() ?\r\n null : campaignBidLandscapeView.additionalBuget();\r\n const currentBudget = campaign.Budget.Amount;\r\n const startDate = campaignBidLandscapeView.viewModel.startDateString();\r\n const endDate = campaignBidLandscapeView.viewModel.endDateString();\r\n const isCustomBid = campaignBidLandscapeView.viewModel.currentSelectedId()\r\n === campaignBidLandscapeView.viewModel.landscapePointsLength();\r\n const selectedData = isCustomBid ? {} : campaignBidLandscapeView.viewModel.dataArray()[campaignBidLandscapeView.viewModel.currentSelectedId()];\r\n const curValue = landscapeType === 'TCPA' || landscapeType === 'TROAS' ? campaign.BiddingScheme[campaign.BiddingScheme.Type] : null;\r\n let campaignData = campaign;\r\n\r\n dialog.remove();\r\n if (landscapeType === 'TCPA' || landscapeType === 'TROAS') {\r\n const toUpdated = {\r\n BiddingScheme: { ...campaign.BiddingScheme },\r\n };\r\n toUpdated.BiddingScheme[toUpdated.BiddingScheme.Type] = newValue;\r\n jsdataCampaign.Campaign\r\n .update(campaign.Id, toUpdated, { adapter: 'bulk', cacheResponse: false })\r\n .finally(withUiBlock(grid.gridView.$el))\r\n .then(() => {\r\n grid.gridView.refresh(true);\r\n })\r\n .catch(response => applyError(response));\r\n } else {\r\n const progressView = new ProgressView({\r\n scope,\r\n i18n,\r\n });\r\n dialogProgress = new Dialog({\r\n backdrop: true,\r\n keyboard: true,\r\n showCloseButton: false,\r\n }).setContent(progressView);\r\n $(document.body).append(dialogProgress.el);\r\n dialogProgress.show();\r\n progressView.on('close', () => dialogProgress.remove());\r\n\r\n bulkEdit({\r\n params: {\r\n newValue,\r\n actionType,\r\n Id,\r\n },\r\n completeCB: () => {\r\n setTimeout(() => dialogProgress.remove(), 500);\r\n },\r\n failedCB: (res) => {\r\n applyError(res);\r\n dialogProgress.remove();\r\n },\r\n progressCB: () => { },\r\n });\r\n }\r\n\r\n campaignBidLandscapeTrack({\r\n Id,\r\n scope,\r\n landscapeType,\r\n hash,\r\n callback: () => {\r\n campaignData = _.defaults({ IsBidLandscapeAvailable: !noWidBidData }, campaignData);\r\n grid.gridView.trigger('didEdit', campaignData);\r\n },\r\n });\r\n if (additionalBuget) {\r\n if (campaign.Budget.Id) {\r\n const updated = _.defaults({\r\n Amount: additionalBuget,\r\n });\r\n jsdataCampaign.Budget.update(campaign.Budget.Id, updated, { adapter: 'bulk', cacheResponse: false })\r\n .then(() => {\r\n campaignData = _.defaults({ Budget: _.defaults(updated, campaign.Budget) }, campaignData);\r\n grid.gridView.trigger('didEdit', campaignData);\r\n })\r\n .catch((response) => {\r\n applyError(response, 'bulk');\r\n });\r\n } else {\r\n const updated = _.defaults({\r\n Budget: { Amount: additionalBuget },\r\n }, _.pick(campaign, 'Id'));\r\n jsdataCampaign.Campaign.update(campaign.Id, updated, { adapter: 'bulk', cacheResponse: false })\r\n .then(() => {\r\n campaignData = _.defaults(\r\n {\r\n Budget: _.defaults(updated.Budget, campaign.Budget),\r\n },\r\n campaignData\r\n );\r\n grid.gridView.trigger('didEdit', campaignData);\r\n })\r\n .catch((response) => {\r\n applyError(response, 'bulk');\r\n });\r\n }\r\n }\r\n activity.trace(`Apply Campaign bid landscape success for ${campaign.Id}: ${newValue}. Currency:${currencyCode}. LandscapeType: ${landscapeType}. IncreaseBudget: ${additionalBuget}. CurrentBudget: ${currentBudget}. DataDate: ${startDate}~${endDate}. TrackingId: ${trackingId}. IsCustomBid: ${isCustomBid}. CurValue: ${curValue}. EstImp: ${selectedData.impressions}. EstTopImp: ${selectedData.mlImpressions}. EstClick: ${selectedData.clicks}. EstSpend: ${selectedData.cost}. EstConv: ${selectedData.conversion}. EstConvValue: ${selectedData.conversionValue}. AdditionalBudgetNeeded: ${selectedData.additionalBugetNeeds}.`, 'campaignLandscapeEditBid');\r\n}\r\n\r\nexport function formatRes(data, Id) {\r\n const res = { Id, Nodata: true };\r\n data.value.forEach((val) => {\r\n if (val.BidLandscapePoints && val.BidLandscapePoints.length > 0) {\r\n res[val.CampaignBidLandscapeType] = val;\r\n res.Nodata = false;\r\n }\r\n });\r\n return res;\r\n}\r\n\r\nfunction onCallReturnedForBidLandscape({\r\n campaign, response, event, scope, container, isForVNext, grid, perfMarker,\r\n}) {\r\n const dataToShow = formatRes(response, campaign.Id);\r\n const noWidBidData = _.isUndefined(dataToShow.CampaignWideBid);\r\n const trackingId = generateGuid();\r\n const currentTargetValue = campaign.BiddingScheme[campaign.BiddingScheme.Type];\r\n const campaignBidLandscapeView = new CampaignBidLandscape({\r\n parentItem: {\r\n Id: campaign.Id,\r\n CurrentValue: campaign.Budget.Amount.toString(),\r\n CurrentTargetValue: currentTargetValue,\r\n EntityName: campaign.Name,\r\n CurrencyCode: currencyCode,\r\n },\r\n i18n,\r\n dataToShow,\r\n isForVNext,\r\n });\r\n\r\n campaignBidLandscapeView.on('cancel', () => {\r\n dialog.remove();\r\n });\r\n\r\n campaignBidLandscapeView.on('apply', () => {\r\n defaultApply(campaign, campaignBidLandscapeView, scope, grid, noWidBidData, trackingId);\r\n });\r\n\r\n campaignBidLandscapeView.on('update', ({ valueToApply }) => {\r\n const campaignSelectMode = campaignBidLandscapeView.campaignSelectMode();\r\n campaignBidLandscapeView.markInputValueInvalid(validateSearchBid(\r\n valueToApply,\r\n campaignSelectMode\r\n ));\r\n });\r\n\r\n campaignBidLandscapeView.once('selectModeChange rendered', () => {\r\n const showActivity = senario.FetchedCampaignBidLandscape.create();\r\n showActivity.start();\r\n const ariaData = {\r\n Id: campaign.Id,\r\n ActionName: 'ViewCampaignBidLandscape',\r\n UIData: {\r\n selectMode: campaignBidLandscapeView.campaignSelectMode(),\r\n bidList: campaignBidLandscapeView.viewModel.dataArray(),\r\n currencyCode,\r\n currentBudget: campaign.Budget.Amount,\r\n startDate: campaignBidLandscapeView.viewModel.startDateString(),\r\n endDate: campaignBidLandscapeView.viewModel.endDateString(),\r\n trackingId,\r\n },\r\n };\r\n showActivity.trace(ariaData, 'ViewCampaignBidLandscape');\r\n });\r\n\r\n campaignBidLandscapeView.render();\r\n if (campaignBidLandscapeView.hasData()) {\r\n dialog = new Dialog({\r\n backdrop: true,\r\n keyboard: true,\r\n showCloseButton: false,\r\n }).setContent(campaignBidLandscapeView).setState({\r\n }).render();\r\n $(dialog.el).addClass('fix-dialog-position');\r\n $(document.body).append(dialog.el);\r\n dialog.show();\r\n } else {\r\n showPopup({\r\n positioningMethod: 'fit',\r\n positioningOptions: {\r\n anchorPosition: {\r\n top: event.clientY,\r\n left: event.clientX,\r\n width: $(event.target).width(),\r\n height: $(event.target).height(),\r\n },\r\n },\r\n contentView: campaignBidLandscapeView,\r\n i18n,\r\n classes: ['bidlandscape-container'],\r\n container,\r\n anchor: $(event.target),\r\n });\r\n }\r\n\r\n if (perfMarker) {\r\n perfMarker.done();\r\n }\r\n}\r\n\r\nexport function openCampaignBidLandscape({\r\n event, scope, campaign, grid, container, isForVNext, bulkChange, perfMarker,\r\n}) {\r\n activity.trace(`Fetch Campaign bid landscape success for ${campaign.Id}`, 'campaignLandscapeEditBid');\r\n const uiBlocker = withUiBlock(grid.gridView.$el.parent());\r\n const { customerId: cid, accountId: aid } = scope;\r\n bulkEditChange = bulkChange;\r\n\r\n if (perfMarker) {\r\n perfMarker.willFetchData();\r\n }\r\n\r\n const url = `Customers(${cid})/Accounts(${aid})/Campaigns(${campaign.Id})/CampaignBidLandscape.GetDetails`;\r\n\r\n return odata.get(url, {\r\n path: 'AdInsight/V2/',\r\n host: 'adinsight.odata.url',\r\n })\r\n .then((response) => {\r\n if (perfMarker) {\r\n perfMarker.willRender();\r\n }\r\n\r\n onCallReturnedForBidLandscape({\r\n grid, campaign, response, event, scope, container, isForVNext, perfMarker,\r\n });\r\n uiBlocker();\r\n });\r\n}\r\n","export const schema = {\r\n scenario: [\r\n {\r\n name: 'campaignLandscapeEditBid',\r\n value: 'campaignLandscapeEditBid',\r\n setting: {},\r\n activity: [\r\n {\r\n name: 'campaignLandscapeEditBid',\r\n value: 'campaignLandscapeEditBid',\r\n },\r\n {\r\n name: 'FetchedCampaignBidLandscape',\r\n value: 'FetchedCampaignBidLandscape',\r\n },\r\n ],\r\n },\r\n ],\r\n};\r\n","import $ from 'jquery';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { insertPopoverContainer } from '@bingads-webui-campaign/fluctuation-common';\r\nimport { GridTooltip } from '@bingads-webui-campaign/grid-tooltip';\r\n\r\nexport const mccPerfFluxPopupContainerId = 'mcc-perf-fluctuation-placeholder';\r\n\r\nexport const dismissFlucCallout = () => {\r\n const calloutElement = document.getElementById(mccPerfFluxPopupContainerId);\r\n if (calloutElement) {\r\n ReactDOM.unmountComponentAtNode(calloutElement);\r\n }\r\n};\r\n\r\nexport const renderFluctuationInsightsTooltip = ({\r\n i18n, event, view,\r\n}) => {\r\n insertPopoverContainer(mccPerfFluxPopupContainerId);\r\n const tooltipProps = {\r\n parentView: view,\r\n popoverId: 'fluctuation-tooltip-id',\r\n target: event.currentTarget,\r\n show: true,\r\n onClose: dismissFlucCallout,\r\n onMouseLeave: dismissFlucCallout,\r\n closeButton: false,\r\n placement: 'top',\r\n content: ({i18n.getString('Fluctuation_Insights_Icon_Tooltip')}),\r\n };\r\n\r\n ReactDOM.render(\r\n ,\r\n document.getElementById(mccPerfFluxPopupContainerId)\r\n );\r\n};\r\n\r\nexport const hideFluctuationInsightsTooltip = ({ event, view }) => {\r\n if ($(event.relatedTarget).closest('#fluctuation-tooltip-id').length === 0) {\r\n view.trigger('closePopup');\r\n }\r\n};\r\n","import classnames from 'classnames';\r\nimport $ from 'jquery';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { insertPopoverContainer } from '@bingads-webui-campaign/fluctuation-common';\r\nimport { mergeStyleSets } from '@fluentui/react';\r\nimport { GridTooltip } from '@bingads-webui-campaign/grid-tooltip';\r\n\r\nexport const budgetCenterHelpContainerId = 'budget-center-help-tooltip';\r\n\r\nexport const dismissBudgetCenterHelpCallout = () => {\r\n const calloutElement = document.getElementById(budgetCenterHelpContainerId);\r\n if (calloutElement) {\r\n ReactDOM.unmountComponentAtNode(calloutElement);\r\n }\r\n};\r\n\r\nexport const renderBudgetCenterHelpTooltip = ({\r\n i18n, event, view, monthString, monthlyBudgetAmount, actionLink,\r\n}) => {\r\n const styles = mergeStyleSets({\r\n content: {\r\n marginBottom: '8px',\r\n },\r\n });\r\n const { right } = event.target.getBoundingClientRect();\r\n const calloutMaxWidth = 325; // this value is defined in global style\r\n const placement = right + calloutMaxWidth > window.innerWidth ? 'left' : 'right';\r\n\r\n insertPopoverContainer(budgetCenterHelpContainerId);\r\n const tooltipProps = {\r\n parentView: view,\r\n popoverId: 'budget-center-help-tooltip-id',\r\n target: event.currentTarget,\r\n show: true,\r\n onClose: dismissBudgetCenterHelpCallout,\r\n onMouseLeave: dismissBudgetCenterHelpCallout,\r\n closeButton: false,\r\n placement,\r\n focusLockContent: true,\r\n content: (\r\n <>\r\n
\r\n {i18n.getString('Campaign_BudgetCenter_BudgetChange', { monthString, budgetAmount: monthlyBudgetAmount })}\r\n
\r\n {i18n.getString('Campaign_BudgetCenter_ViewLink')}\r\n \r\n ),\r\n };\r\n\r\n ReactDOM.render(\r\n ,\r\n document.getElementById(budgetCenterHelpContainerId)\r\n );\r\n};\r\n\r\nexport const hideBudgetCenterHelpTooltip = ({ event, view }) => {\r\n if ($(event.relatedTarget).closest('#budget-center-help-tooltip-id').length === 0) {\r\n view.trigger('closePopup');\r\n }\r\n};\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport classnames from 'classnames';\r\nimport $ from 'jquery';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { insertPopoverContainer } from '@bingads-webui-campaign/fluctuation-common';\r\nimport { mergeStyleSets, DefaultButton, Text, Link } from '@fluentui/react';\r\nimport { CopilotToggleCustomEvent, LiveAgentQueue } from '@bingads-webui-react/msa-copilot-common';\r\nimport { GridTooltip } from '@bingads-webui-campaign/grid-tooltip';\r\n\r\n// TODO: replace this with util function from copilot-live-agent once build issue is resolved\r\n// Bug 9089477: [Copilot][CTA] Cloudbuild warning when importing copilot-live-agent\r\nconst isEnglishOnlyChatSupportedLocale = (locale) => {\r\n if (!locale) return false;\r\n\r\n const ENGLISH_ONLY_SUPPORTED_LOCALES = [\r\n 'bg-bg',\r\n 'cs-cz',\r\n 'el-gr',\r\n 'fi-fi',\r\n 'fil-ph',\r\n 'hi-in',\r\n 'hr-hr',\r\n 'hu-hu',\r\n 'ko-kr',\r\n 'lt-lt',\r\n 'ms-my',\r\n 'nb-no',\r\n 'pl-pl',\r\n 'ro-ro',\r\n 'ru-ru',\r\n 'th-th',\r\n 'tr-tr',\r\n 'uk-ua',\r\n 'zh-cn',\r\n 'zh-hk',\r\n 'zh-tw',\r\n ];\r\n\r\n const lowerLocale = locale.toLocaleLowerCase();\r\n return ENGLISH_ONLY_SUPPORTED_LOCALES.includes(lowerLocale);\r\n};\r\n\r\nexport const conversionDeliveryStatusContainerId = 'conversion-delivery-status-tooltip';\r\n\r\nexport const dismissConversionStatusCallout = () => {\r\n const calloutElement = document.getElementById(conversionDeliveryStatusContainerId);\r\n if (calloutElement) {\r\n ReactDOM.unmountComponentAtNode(calloutElement);\r\n }\r\n};\r\n\r\nexport const renderConversionDeliveryStatusTooltip = ({\r\n i18n, event, item, view, activity, isConnectWithExpertEnabled,\r\n}) => {\r\n const styles = mergeStyleSets({\r\n content: {\r\n marginBottom: '10px',\r\n marginTop: '10px',\r\n rowGap: '10px',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n },\r\n ctaButton: {\r\n marginTop: '10px',\r\n },\r\n ctaFooter: {\r\n display: 'block',\r\n marginTop: '16px',\r\n paddingTop: '4px',\r\n marginBottom: '-16px',\r\n borderTop: '1px solid #E9E9E9',\r\n color: '#838383',\r\n },\r\n });\r\n const { right } = event.target.getBoundingClientRect();\r\n const calloutMaxWidth = 325; // this value is defined in global style\r\n const placement = right + calloutMaxWidth > window.innerWidth ? 'left' : 'right';\r\n\r\n const noEligibleGoalText = {\r\n title: _TL_('Missing primary conversion goal'),\r\n description: _TL_('This campaign does not have a main conversion goal configured, which may result in missing conversion tracking. Please review your campaign settings to assign a main goal.'),\r\n learnMoreHref: 'https://help.ads.microsoft.com/#apex/ads/en/56689/2-500',\r\n learnMoreText: _TL_('Learn more about conversion goals.'),\r\n };\r\n\r\n const tagUnverifiedText = {\r\n title: _TL_('Unverified UET tag'),\r\n description: _TL_('One or more of your main conversion goals have an unverified tag, which resulted in receiving no events. This could lead to missing conversion data. Please ensure the UET tag is properly implemented.'),\r\n learnMoreHref: 'https://help.ads-int.microsoft.com/#apex/ads/en/56692/1/en-US/#ext:vnext_offlineconversions',\r\n learnMoreText: _TL_('Learn more about UET tracking.'),\r\n };\r\n\r\n const tagInactiveText = {\r\n title: _TL_('Inactive UET tag'),\r\n description: _TL_('The UET tag for this campaign\\'s main goal hasn\\'t recorded any events in the last 24 hours, which may result in incomplete conversion tracking. Please check your tag configuration to ensure it is tracking correctly.'),\r\n learnMoreHref: 'https://help.ads-int.microsoft.com/#apex/ads/en/56692/1/en-US/#ext:vnext_offlineconversions',\r\n learnMoreText: _TL_('Learn more about UET tracking.'),\r\n };\r\n\r\n const noRecentOfflineText = {\r\n title: _TL_('No offline conversions uploaded in last 7 days'),\r\n description: _TL_('Go to your offline goals to upload conversions that may be associated to this campaign.'),\r\n learnMoreHref: 'https://help.ads.microsoft.com/#apex/ads/en/56852/2',\r\n learnMoreText: _TL_('Learn more'),\r\n };\r\n\r\n const consentModeWarning = {\r\n title: _TL_('Action required: Ensure proper implementation of consent signals'),\r\n description: _TL_('To avoid any negative impact on conversion attribution and remarketing segments for users visiting your websites from the European Economic Area (EEA), the United Kingdom, and Switzerland, implement Consent Mode or the Transparency and Consent Framework (TCF) with your UET tags.'),\r\n learnMoreHref: 'https://help.ads.microsoft.com/apex/index/3/en/60119',\r\n learnMoreText: _TL_('Learn more'),\r\n };\r\n\r\n const textStrings = {\r\n NoEligibleGoal: noEligibleGoalText,\r\n TagUnverified: tagUnverifiedText,\r\n TagInactive: tagInactiveText,\r\n NoRecentOfflineConversion: noRecentOfflineText,\r\n ConsentModeWarning: consentModeWarning,\r\n };\r\n\r\n const goalStatus = item && item.GoalStatusDetails && item.GoalStatusDetails.length > 0 && item.GoalStatusDetails[0].GoalDeliveryStatus;\r\n\r\n const Id = item && item.Id;\r\n\r\n const text = textStrings[goalStatus];\r\n\r\n insertPopoverContainer(conversionDeliveryStatusContainerId);\r\n const tooltipProps = {\r\n parentView: view,\r\n popoverId: 'conversion-delivery-status-tooltip-id',\r\n target: event.currentTarget,\r\n show: true,\r\n onClose: dismissConversionStatusCallout,\r\n onMouseLeave: dismissConversionStatusCallout,\r\n closeButton: false,\r\n placement,\r\n focusLockContent: true,\r\n content: (\r\n <>\r\n
\r\n \r\n {i18n.getString(text.title)}\r\n \r\n \r\n {i18n.getString(text.description)}\r\n  \r\n {!isConnectWithExpertEnabled ? (\r\n {\r\n if (activity) {\r\n activity.trace(`[ConversionDeliveryStatusPopup] - LearnMore Link clicked - campaignId: ${Id}`);\r\n }\r\n window.open(text.learnMoreHref, '_blank');\r\n }}\r\n aria-label={i18n.getString(text.learnMoreText)}\r\n >\r\n {i18n.getString(text.learnMoreText)}\r\n \r\n ) : (\r\n <>\r\n
\r\n {\r\n if (activity) {\r\n activity.trace(`[ConversionDeliveryStatusPopup] - LearnMore Button clicked - campaignId: ${Id}`);\r\n }\r\n window.open(text.learnMoreHref, '_blank');\r\n }}\r\n >\r\n {i18n.getString(_TL_('Learn more'))}\r\n \r\n
\r\n
\r\n {\r\n if (activity) {\r\n activity.trace(`[ConversionDeliveryStatusPopup] - Connect with expert Button clicked - campaignId: ${Id}`);\r\n }\r\n const customEvent = new CopilotToggleCustomEvent({\r\n detail: {\r\n eventType: 'action',\r\n eventSource: 'conversionDeliveryStatusPopup',\r\n eventData: {\r\n ActionId: 'liveAgentSupport',\r\n liveAgentParameters: {\r\n queue: LiveAgentQueue.ShoppingAndUET,\r\n problemDescription: i18n.getString(\r\n _TL_('Campaign Id: {{campaignId}}, Campaign Name: {{campaignName}}, UET Status: {{uetStatus}}'),\r\n {\r\n campaignId: item.Id,\r\n campaignName: item.Name,\r\n uetStatus: i18n.getString(text.title),\r\n }\r\n ),\r\n },\r\n },\r\n },\r\n });\r\n document.dispatchEvent(customEvent);\r\n dismissConversionStatusCallout();\r\n }}\r\n >\r\n {i18n.getString(_TL_('Connect with an expert'))}\r\n \r\n {isEnglishOnlyChatSupportedLocale(i18n.getLocale()) && (\r\n \r\n {i18n.getString(_TL_('Support chat is in English only'))}\r\n \r\n )}\r\n
\r\n \r\n )}\r\n
\r\n
\r\n \r\n ),\r\n };\r\n\r\n ReactDOM.render(\r\n ,\r\n document.getElementById(conversionDeliveryStatusContainerId)\r\n );\r\n};\r\n\r\nexport const hideConversionDeliveryStatusTooltip = ({ event, view }) => {\r\n if ($(event.relatedTarget).closest('#conversion-delivery-status-tooltip').length === 0) {\r\n view.trigger('closePopup');\r\n }\r\n};\r\n","import { keyCode } from '@bingads-webui/keycode';\r\n\r\nfunction replaceAtom(atom, oldKey, newKey) {\r\n if (oldKey in atom) {\r\n const newAtom = {\r\n ...atom,\r\n [newKey]: atom[oldKey],\r\n };\r\n delete newAtom[oldKey];\r\n\r\n return newAtom;\r\n }\r\n return atom;\r\n}\r\n\r\nexport function replaceKeyOfFilterEntity(filterEntity, oldKey, newKey) {\r\n let finalQuery = { ...filterEntity.query };\r\n if (oldKey in finalQuery) {\r\n finalQuery = replaceAtom(finalQuery, oldKey, newKey);\r\n } else if ('$and' in finalQuery) {\r\n finalQuery.$and.forEach((value, index, array) => {\r\n // eslint-disable-next-line no-param-reassign\r\n array[index] = replaceAtom(value, oldKey, newKey);\r\n });\r\n }\r\n // eslint-disable-next-line no-param-reassign\r\n filterEntity.query = finalQuery;\r\n return filterEntity;\r\n}\r\n\r\nexport const filterEnterKeyDown = eventHandler => (event, ...args) => {\r\n if (event.keyCode === keyCode.Enter) {\r\n eventHandler(event, ...args);\r\n }\r\n};\r\n","/* eslint-disable import/extensions */\r\n/* eslint-disable import/no-unresolved */\r\nimport _ from 'underscore';\r\nimport $ from 'jquery';\r\nimport Backbone from 'backbone';\r\nimport URI from 'urijs';\r\nimport state from '@bingads-webui-component-legacy/state/index';\r\nimport { merge } from '@bingads-webui-universal/primitive-utilities';\r\nimport { DeterministicWrapperView } from '@bingads-webui/deterministic-wrapper-view';\r\nimport { showLabelsPopup, filterOnLabelClick, navigateToManagePage } from '@bingads-webui-campaign/labels';\r\nimport { validateOrder, updateGridQuery, appendScopeParameter, getTargetEntity, handleShowRejectionReasonEnter, handleShowRejectionReasonLeave } from '@bingads-webui-campaign/summary-grid-helper';\r\nimport { showQualityScoreDetail, BudgetSplitView } from '@bingads-webui-campaign/campaignui-common-columns';\r\nimport { getEditorialReasonsTemplate } from '@bingads-webui-campaign/rsa-ad-customizer-attribute-column';\r\nimport { getRequestPermission } from '@bingads-webui-campaign/linkedin-delivery-status-column';\r\nimport { GridCustomizedPopupEditor, getEditorPositionAsideAnchor } from '@bingads-webui-campaign/grid-customized-popup-editor';\r\nimport { pgridFactory } from '@bingads-webui-campaign/pgrid-factory';\r\nimport { PageReady } from '@bingads-webui/page-ready';\r\nimport { insertPopoverContainer } from '@bingads-webui-campaign/fluctuation-common';\r\nimport { TopPanelCashbackSettings } from '@bingads-webui-campaign/top-panel-cashback-settings';\r\nimport { handleSortChange } from '@bingads-webui-campaign-legacy/bingadsgrid/service/state-manager-helper';\r\nimport { CampaignDeliveryStatusPopupFactory } from '@bingads-webui-campaign-legacy/campaigns-tab-campaigns/grid/delivery-status/delivery-status-popup-factory';\r\nimport { bulkEditChange } from '@bingads-webui-campaign-legacy/bulk-edit/service/bulk-edit';\r\nimport appConfig from '@bingads-webui-component-legacy/config/index';\r\nimport CopyPaste from '@bingads-webui-static-legacy/bulk-edit/view/copyPaste';\r\nimport Hotkeys from '@bingads-webui-component-legacy/hotkeys/index';\r\nimport jsdataCampaign from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport decimal from '@bingads-webui-component-legacy/humanize/decimal';\r\nimport pageContext from '@bingads-webui-static-legacy/page-context';\r\nimport { withUiBlock } from '@bingads-webui/uiblocker';\r\nimport { notificationApi } from '@bingads-webui-react/notification-center';\r\nimport * as SharedBudgetModel from '@bingads-webui-campaign-legacy/shared-budget/model/shared-budget';\r\nimport * as i18nErrors from '@bingads-webui-component-legacy/api-errors-campaign/index';\r\nimport { fromLegacyTimeZone, toIANATimeZone } from '@bingads-webui-universal/time-zone-converter';\r\nimport ReactDOM from 'react-dom';\r\nimport React from 'react';\r\nimport { mergeStyleSets, DirectionalHint, Callout, Text } from '@fluentui/react';\r\nimport * as AppealAggregator from '@bingads-webui-campaign-legacy/editorial-appeal/aggregator';\r\nimport SharedRepository from '@bingads-webui-campaign-legacy/adextension-shared/service/repository';\r\nimport { DisclaimerAdExtension } from '@bingads-webui-campaign/campaign-ui-schemas';\r\nimport BingAdsWebUIComponentLegacyRouterIndex from '@bingads-webui-component-legacy/legacy-router/index';\r\nimport { keyVault } from '@bingads-webui-react/popup-manager';\r\nimport { PerformanceInsightsToolTipCard } from '@bingads-webui-campaign-react/performance-insights';\r\nimport { openCampaignBidLandscape } from '../bid-landscape/index';\r\nimport { renderFluctuationInsightsTooltip, mccPerfFluxPopupContainerId, hideFluctuationInsightsTooltip, dismissFlucCallout } from './tooltips/fluctuation-tooltip';\r\nimport { hideBudgetCenterHelpTooltip, renderBudgetCenterHelpTooltip } from './tooltips/budget-center-help-tooltip';\r\nimport { renderConversionDeliveryStatusTooltip } from './tooltips/conversion-status-popup';\r\nimport { filterEnterKeyDown } from '../filter-entity-util';\r\nimport { getReasonTemplates } from './show-rejection-reasons';\r\n\r\nconst { legacyRouter } = BingAdsWebUIComponentLegacyRouterIndex;\r\n\r\nconst i18n = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/feature/campaigns-tab/campaigns');\r\nconst commonI18n = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/feature/ads-tab/common');\r\nconst legacyGlobalI18n = window.globalLegacyI18n.get('$/i18n!legacy/global');\r\nconst locationTargeti18n = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/location-targets');\r\n\r\nconst permissions = appConfig.get('Permissions');\r\nconst {\r\n IsExperimentsOpenBetaEnabled,\r\n IsCampaignAdGroupCopyPasteEnabled,\r\n IsSmartShoppingCampaignEnabled,\r\n IsAccountLabelsEnabled,\r\n IsDeferredHoveringPopupEnabled,\r\n} = permissions;\r\nconst budgetLimit = ['CampaignBudgetPaused', 'BudgetSuggestions'];\r\nconst autobiddingLimitedStatus = ['AutoBiddingLimitedInventoryLimit', 'AutoBiddingLimitedMaxCPCRestriction', 'AutoBiddingLimitedBudgetRestriction', 'AutoBiddingLimitedUnAttainableTarget', 'AutoBiddingPortfolioBidStrategyTrainingStatus'];\r\nconst linkedInPermissionRequired = ['LinkedInCompanyPagePaidMediaRequired'];\r\nconst customTemplateDeliveryStatus = [...budgetLimit, ...autobiddingLimitedStatus, ...linkedInPermissionRequired];\r\nconst disclaimerEditorialStatus = ['DisclaimerInfoRejected', 'DisclaimerInfoApprovedLimited', 'DisclaimerInfoRejectedAppealRejected', 'DisclaimerInfoApprovedLimitedAppealRejected'];\r\nconst popupContentKey = _.uniqueId(`${keyVault.hoveringPopup}-`);\r\n\r\nexport class CampaignsGrid extends DeterministicWrapperView {\r\n // performance targets details page also use campaign grid\r\n // verify functionalility to avoid regression after modification\r\n viewFactory({\r\n router,\r\n scope,\r\n filterService,\r\n preferenceConfig,\r\n gridConfig,\r\n serverContext,\r\n instrumentation,\r\n isForVNext = false,\r\n getPlugins,\r\n getGridConfig,\r\n enableCopyPaste = true,\r\n pageName,\r\n preexecuteFlag = false,\r\n theme,\r\n azureUrlRewrite,\r\n perfMarker,\r\n preferenceService,\r\n newI18n,\r\n }) {\r\n this.gridRemoved = false;\r\n this.filterService = filterService;\r\n this.router = router;\r\n this.scope = scope;\r\n this.isForVNext = isForVNext;\r\n this.enableCopyPaste = enableCopyPaste;\r\n this.serverContext = serverContext;\r\n this.instrumentation = instrumentation;\r\n this.pageName = pageName;\r\n this.preexecuteFlag = preexecuteFlag;\r\n this.theme = theme;\r\n this.azureUrlRewrite = azureUrlRewrite;\r\n this.perfMarker = perfMarker;\r\n this.preferenceService = preferenceService;\r\n this.newI18n = newI18n;\r\n\r\n const internalConfig = getGridConfig(this);\r\n\r\n let config = merge(internalConfig, gridConfig);\r\n this.gridName = config.name;\r\n\r\n // check if the order by column is supported as sortable\r\n validateOrder(preferenceConfig, config.columns, this.gridName, permissions);\r\n\r\n config = merge(config, preferenceConfig);\r\n\r\n this.grid = pgridFactory({\r\n gridConfig: config,\r\n plugins: getPlugins(this),\r\n preferenceConfig,\r\n });\r\n\r\n this.disclaimerRepos = new SharedRepository({\r\n schema: DisclaimerAdExtension,\r\n afterChangeComitted: _.noop,\r\n });\r\n this.appealAggregator = null;\r\n\r\n this.rejectionPopupContainerSelector = '#rejectionContainer';\r\n this.popoverId = 'delivery-status-popup-callout';\r\n\r\n this.conversionActivity = this.instrumentation && this.instrumentation.createScenarioAndActivity({\r\n scenarioName: 'conversionDeliveryStatusPopup',\r\n activityName: 'showConversionDeliveryStatusWarning',\r\n });\r\n\r\n if (isForVNext) {\r\n this.filterService.on('filter-state-changed', () => {\r\n if (!this.gridRemoved) {\r\n const filter = this.filterService.getCombinedFilter();\r\n updateGridQuery(\r\n this.grid.gridView,\r\n filter,\r\n true\r\n );\r\n }\r\n });\r\n }\r\n\r\n if (!this.preexecuteFlag && IsCampaignAdGroupCopyPasteEnabled && this.enableCopyPaste) {\r\n const bulkEditGridOptions = {\r\n filterService: this.filterService,\r\n gridView: this.grid.gridView,\r\n pgridPlugins: this.grid,\r\n isForVNext: this.isForVNext,\r\n };\r\n\r\n Hotkeys.on('copy', CopyPaste.copy.bind(CopyPaste, 'campaign', bulkEditGridOptions));\r\n if (this.isForVNext) {\r\n Hotkeys.on('paste', this.grid.paste.onClick);\r\n } else {\r\n Hotkeys.on('paste', CopyPaste.paste.bind(CopyPaste, bulkEditGridOptions));\r\n }\r\n Hotkeys.setup();\r\n }\r\n\r\n this.grid.gridView.on('willUpdate', (changes) => {\r\n // only after rendering, we do the patch\r\n const { _isRendered } = this.grid.gridView;\r\n if (_isRendered) {\r\n handleSortChange(changes, this.grid.gridView, config.name);\r\n }\r\n });\r\n\r\n this.grid.gridView.once('didReload', () => {\r\n this.grid.gridView.once('didRedraw', () => {\r\n PageReady.pageIsReady(this.pageName);\r\n }, this);\r\n });\r\n\r\n this.grid.pagination.on('change:page-number', (pageNumber) => {\r\n this.setPageNumberToState(pageNumber);\r\n });\r\n\r\n const eventDispatcher = _.extend({}, Backbone.Events);\r\n\r\n this.listenTo(eventDispatcher, 'wunderbar.collapsed', this.onWunderbarChange);\r\n this.listenTo(eventDispatcher, 'wunderbar.expanded', this.onWunderbarChange);\r\n this.deliveryStatusPopupFactory = new CampaignDeliveryStatusPopupFactory({\r\n grid: this.grid,\r\n perfMarker,\r\n scope,\r\n instrumentation,\r\n });\r\n this.on('inlineEditCashbackSetting', this.inlineEditCashbackSetting, this);\r\n return this.grid.gridView;\r\n }\r\n\r\n renderTrunk() {\r\n if (this.isForVNext) {\r\n this.filterService.initializeCombinedFilterPromise.then(() => {\r\n if (!this.gridRemoved) {\r\n const filter = this.filterService.getCombinedFilter();\r\n updateGridQuery(\r\n this.grid.gridView,\r\n filter,\r\n true\r\n );\r\n }\r\n });\r\n }\r\n super.renderTrunk();\r\n }\r\n\r\n inlineEditCashbackSetting(item) {\r\n const {\r\n Percent,\r\n MonthlyBudget,\r\n Scope,\r\n CouponsEnabled,\r\n PersonalizedOffersEnabled,\r\n } = item.CampaignCashback || {};\r\n\r\n const inlineEdit = new TopPanelCashbackSettings({\r\n CashbackPercent: Percent,\r\n CashbackMonthlyBudget: MonthlyBudget,\r\n CashbackScope: Scope,\r\n CouponsEnabled,\r\n PersonalizedOffersEnabled,\r\n deps: {\r\n i18n,\r\n decimal,\r\n pageContext,\r\n jsdataCampaign,\r\n },\r\n view: this,\r\n item,\r\n campaignName: item.Name,\r\n }).render();\r\n this.showTopPanelCashbackSettingEditor(inlineEdit);\r\n }\r\n\r\n showTopPanelCashbackSettingEditor(view) {\r\n // use defer here to wait for the dropdown menu to hide first\r\n _.defer(() => {\r\n if (this.editorView) {\r\n this.editorView.remove();\r\n }\r\n this.editorView = view;\r\n\r\n this.grid.gridView.overrideWith(this.editorView);\r\n\r\n this.editorView.once('cancel close', (response) => {\r\n this.grid.gridView.overrideWith(null);\r\n this.editorView.remove();\r\n this.editorView = null;\r\n\r\n if (response) {\r\n this.grid.gridView.refresh(true);\r\n }\r\n });\r\n window.scrollTo(0, 0);\r\n });\r\n }\r\n\r\n get events() {\r\n const events = {\r\n 'click .quality-score-detail': 'showQualityScoreDetails',\r\n 'click .labels-cell-container #see-all': 'onLabelsRowClicked',\r\n 'click .labels-cell-item': (event) => {\r\n const targetEntity = getTargetEntity(event, this.grid.gridView);\r\n filterOnLabelClick(\r\n event,\r\n targetEntity.Labels,\r\n this.grid.gridView,\r\n this.filterService,\r\n IsAccountLabelsEnabled\r\n );\r\n },\r\n 'click .manage-labels-button': () => navigateToManagePage(this.router),\r\n 'click .budget-landscape-row': 'showBudgetLandscape',\r\n 'click .delivery_status_with_inline_opportunities': 'showInlineOpportunityPanel',\r\n 'click .experiment-budget-ellipsis': 'showExperimentBudgetPopup',\r\n 'click .grid-column-Budget .bidlandscape_icon.enabled': 'showBidLandscape',\r\n 'mouseover .grid-column-Budget .bidlandscape_icon.disabled': IsDeferredHoveringPopupEnabled ? _.partial(handleShowRejectionReasonEnter, this, this.showLandscapeDisabledHelpInfo) : 'showLandscapeDisabledHelpInfo',\r\n 'mouseout .grid-column-Budget .bidlandscape_icon.disabled': IsDeferredHoveringPopupEnabled ? _.partial(handleShowRejectionReasonLeave, this, this.hideRejectionReason) : 'hideRejectionReason',\r\n 'click .grid-column-biddingStrategyTargetCpa .bidlandscape_icon.enabled': 'showBidLandscape',\r\n 'mouseover .grid-column-biddingStrategyTargetCpa .bidlandscape_icon.disabled': IsDeferredHoveringPopupEnabled ? _.partial(handleShowRejectionReasonEnter, this, this.showLandscapeDisabledHelpInfo) : 'showLandscapeDisabledHelpInfo',\r\n 'mouseout .grid-column-biddingStrategyTargetCpa .bidlandscape_icon.disabled': IsDeferredHoveringPopupEnabled ? _.partial(handleShowRejectionReasonLeave, this, this.hideRejectionReason) : 'hideRejectionReason',\r\n 'click .grid-column-biddingStrategyTargetRoas .bidlandscape_icon.enabled': 'showBidLandscape',\r\n 'mouseover .grid-column-biddingStrategyTargetRoas .bidlandscape_icon.disabled': IsDeferredHoveringPopupEnabled ? _.partial(handleShowRejectionReasonEnter, this, this.showLandscapeDisabledHelpInfo) : 'showLandscapeDisabledHelpInfo',\r\n 'mouseout .grid-column-biddingStrategyTargetRoas .bidlandscape_icon.disabled': IsDeferredHoveringPopupEnabled ? _.partial(handleShowRejectionReasonLeave, this, this.hideRejectionReason) : 'hideRejectionReason',\r\n 'click .grid-column-Delivery .bidlandscape_icon.enabled': 'showBidLandscape', // TODO: Only show this if value = limited by auto-bidding-target\r\n 'mouseover .grid-column-Delivery .bidlandscape_icon.disabled': IsDeferredHoveringPopupEnabled ? _.partial(handleShowRejectionReasonEnter, this, this.showLandscapeDisabledHelpInfo) : 'showLandscapeDisabledHelpInfo',\r\n 'mouseout .grid-column-Delivery .bidlandscape_icon.disabled': IsDeferredHoveringPopupEnabled ? _.partial(handleShowRejectionReasonLeave, this, this.hideRejectionReason) : 'hideRejectionReason',\r\n 'click .performance-metrics-fluctuation .clickable': 'showFluctuationInsightsPopup',\r\n 'mouseenter .performance-metrics-fluctuation .clickable': 'showFluctuationInsightsTooltip',\r\n 'mouseleave .performance-metrics-fluctuation .clickable': event => hideFluctuationInsightsTooltip({ event, view: this.grid.gridView }),\r\n 'mouseenter .optimization_score_with_popover': 'showOptimizationScorePopover',\r\n 'mouseleave .grid-column-OptimizationScoreColumn': 'hideOptimizationScorePopover',\r\n 'mouseover .budgetCenterEntry': 'showBudgetCenterHelpInfo',\r\n 'mouseleave .budgetCenterEntry': event => hideBudgetCenterHelpTooltip({ event, view: this.grid.gridView }),\r\n 'keydown .budgetCenterEntry': filterEnterKeyDown(e => this.showBudgetCenterHelpInfo(e)),\r\n 'mouseover .conversion-warning-delivery-status': IsDeferredHoveringPopupEnabled ? _.partial(handleShowRejectionReasonEnter, this, this.showConversionDeliveryStatusWarning) : 'showConversionDeliveryStatusWarning',\r\n 'keydown .conversion-warning-delivery-status': filterEnterKeyDown(e => this.showConversionDeliveryStatusWarning(e)),\r\n };\r\n\r\n if (this.isForVNext) {\r\n events['mouseenter .delivery_status_with_reject_reasons'] = IsDeferredHoveringPopupEnabled ? _.partial(handleShowRejectionReasonEnter, this, this.showRejectionReason) : 'showRejectionReason';\r\n events['mouseleave .delivery_status_with_reject_reasons'] = IsDeferredHoveringPopupEnabled ? _.partial(handleShowRejectionReasonLeave, null, _.noop) : null;\r\n events['mouseleave .grid-column-Delivery'] = 'hideRejectionReason';\r\n events['click .delivery_status_with_reject_reasons'] = 'showRejectionReason';\r\n events['click .grid-column-Budget .bidlandscape_icon.disabled'] = 'showLandscapeDisabledHelpInfo';\r\n events['mouseover .budget-landscape-row'] = 'showRejectionReason';\r\n events['click .editorial_delivery_status_with_inline_appeals'] = 'showEditorialRejectionReason';\r\n events['mouseenter .editorial_delivery_status_with_inline_appeals'] = 'showEditorialRejectionReason';\r\n events['mouseenter .performance-insights-status'] = _.debounce(this.showPerformanceInsightsPopup, 100);\r\n events['mouseleave .performance-insights-status'] = 'hidePerformanceInsightsPopup';\r\n } else {\r\n events['click .delivery_status_with_reject_reasons'] = 'showRejectionReason';\r\n events['mouseover .budget-landscape-row'] = 'showBudgetLandscapeHelpInfo';\r\n }\r\n return events;\r\n }\r\n\r\n remove() {\r\n if (this.grid) {\r\n if (this.grid.toolbar && this.grid.toolbar.gridToolbarGroup) {\r\n this.grid.toolbar.gridToolbarGroup.remove();\r\n this.grid.toolbar = null;\r\n }\r\n }\r\n\r\n if (!this.preexecuteFlag && IsCampaignAdGroupCopyPasteEnabled && this.enableCopyPaste) {\r\n Hotkeys.reset();\r\n }\r\n\r\n dismissFlucCallout();\r\n\r\n this.gridRemoved = true;\r\n this.setPageNumberToState(0);\r\n super.remove();\r\n }\r\n\r\n setPageNumberToState(number) {\r\n state.set('pgridPageNumber', _.defaults({\r\n [this.gridName]: number,\r\n }, state.get('pgridPageNumber') || {}));\r\n }\r\n\r\n showOptimizationScorePopover(event) {\r\n const containerDOM = document.querySelector(this.rejectionPopupContainerSelector);\r\n const styles = mergeStyleSets({\r\n callout: {\r\n width: 320,\r\n padding: '20px 24px',\r\n fontSize: '12px',\r\n },\r\n title: { marginBottom: 12 },\r\n body: {},\r\n });\r\n ReactDOM.render(\r\n (\r\n \r\n \r\n {i18n.getString('Optimization_Score_Column_Warning_Title')}\r\n \r\n \r\n {i18n.getString('Optimization_Score_Column_Warning_Text')}\r\n \r\n \r\n ),\r\n containerDOM\r\n );\r\n\r\n this.optimizationScorePopoverShown = true;\r\n }\r\n\r\n showConversionDeliveryStatusWarning(event) {\r\n const item = getTargetEntity(event, this.grid.gridView);\r\n const { activity } = this.conversionActivity || {};\r\n\r\n if (activity) {\r\n activity.trace(`[ConversionDeliveryStatusPopup] Rendered - ${JSON.stringify({ campaignId: item.Id, goalDeliveryStatus: JSON.stringify(item.GoalStatusDetails) })}`);\r\n }\r\n\r\n\r\n renderConversionDeliveryStatusTooltip({\r\n i18n: this.newI18n,\r\n event,\r\n item,\r\n view: this.grid.gridView,\r\n activity,\r\n isConnectWithExpertEnabled: permissions.dynamic.AdsCopilotConversionTrackingLiveAgent,\r\n });\r\n\r\n this.conversionDeliveryStatusPopoverShown = true;\r\n }\r\n\r\n hideConversionDeliveryStatusWarning() {\r\n\r\n }\r\n\r\n hideOptimizationScorePopover() {\r\n if (this.optimizationScorePopoverShown) {\r\n ReactDOM.unmountComponentAtNode(document.querySelector(this.rejectionPopupContainerSelector));\r\n this.optimizationScorePopoverShown = false;\r\n }\r\n }\r\n\r\n showExperimentBudgetPopup(event) {\r\n const item = getTargetEntity(event, this.grid.gridView);\r\n const budgetSplitView = new BudgetSplitView({ item, i18n }).render();\r\n\r\n return new GridCustomizedPopupEditor({\r\n editorView: budgetSplitView,\r\n editorPositionFactory: getEditorPositionAsideAnchor($(event.target)),\r\n renderBelow: false,\r\n className: 'grid-popupeditor experiment-budget-popup',\r\n }).render();\r\n }\r\n\r\n showBidLandscape(event) {\r\n let bidLandscapePerfMarker;\r\n if (this.perfMarker) {\r\n bidLandscapePerfMarker = this.perfMarker.createChild('Campaign_Bid_Landscape');\r\n bidLandscapePerfMarker.willInit();\r\n }\r\n\r\n const targetEntity = getTargetEntity(event, this.grid.gridView);\r\n openCampaignBidLandscape({\r\n event,\r\n scope: this.scope,\r\n campaign: targetEntity,\r\n grid: this.grid,\r\n container: this.$el,\r\n isForVNext: this.isForVNext,\r\n bulkChange: bulkEditChange,\r\n perfMarker: bidLandscapePerfMarker,\r\n });\r\n }\r\n\r\n onLabelsRowClicked(event) {\r\n const targetEntity = getTargetEntity(event, this.grid.gridView);\r\n this.grid.gridView.trigger('willShowLabelsPopup');\r\n\r\n showLabelsPopup({\r\n labels: targetEntity.Labels,\r\n entityType: 'Campaign',\r\n entityName: targetEntity.Name,\r\n container: this.isForVNext ? $('.grid-and-disclaim-container') : this.$el,\r\n event,\r\n router: legacyRouter,\r\n i18n,\r\n grid: this.grid,\r\n filterService: this.filterService,\r\n isMCCLabelEnabled: IsAccountLabelsEnabled,\r\n });\r\n }\r\n\r\n showEditorialRejectionReason(event) {\r\n const key = this.grid.gridView.keyOfElement(event.target);\r\n const selectedItem = this.grid.gridView.itemWithKey(key);\r\n const editorialStatus = $(event.target).parent('.delivery-info').data('status');\r\n const attributeId = $(event.target).data('entityid');\r\n const valueLevel = $(event.target).parent('.delivery-info').data('valuelevel');\r\n const activity = this.instrumentation && this.instrumentation.editorial && this.instrumentation.editorial.create().toggleCountryList.create();\r\n\r\n import(/* webpackMode: 'eager' */'@bingads-webui-campaign/delivery-status-popup-factory').then(({ showRejectionReasons, registerCountryListEvent }) => {\r\n showRejectionReasons({\r\n event,\r\n i18n,\r\n deliveryStatusDetails: [editorialStatus],\r\n getCustomTemplate: _.partial(getEditorialReasonsTemplate, {\r\n event,\r\n ajaxOptions: {\r\n host: appConfig.get('odata.url'),\r\n path: appConfig.get('odata.multipart_path'),\r\n oDataToken: appConfig.get('odata.token'),\r\n params: {\r\n campaign_id: selectedItem.Id,\r\n account_id: appConfig.get('CurrentAccount').Id,\r\n customer_id: appConfig.get('CurrentCustomer').Id,\r\n },\r\n sessionId: appConfig.get('Omniture').SessionId,\r\n },\r\n instrumentation: this.instrumentation,\r\n i18n,\r\n attributeId,\r\n deliveryStatus: editorialStatus,\r\n valueLevel,\r\n permissions,\r\n commonI18n,\r\n }),\r\n useCustomTemplate: () => true,\r\n popoverId: this.popoverId,\r\n isForVNext: this.isForVNext,\r\n view: this.grid.gridView,\r\n afterRender: popup => registerCountryListEvent(popup.$el, activity, { entity: 'campaign customizer attribute', id: selectedItem.Id }),\r\n });\r\n });\r\n }\r\n RequestDisclaimerExceptionCallBack(adsGrid) {\r\n if (!this.appealAggregator) {\r\n const AppealAggregatorClass = AppealAggregator.default;\r\n this.appealAggregator = new AppealAggregatorClass({\r\n grid: adsGrid.grid,\r\n controller: 'Extension',\r\n submit: 'SubmitAppeal',\r\n menuToFollow: 'button-extension-create',\r\n permissions,\r\n instrumentation: adsGrid.instrumentation,\r\n requestExceptionFromPopup: true,\r\n });\r\n }\r\n this.appealAggregator.openBulkEditor(\r\n i18n.getString('InlineExtensionAppeal_RejectionTitle'),\r\n null,\r\n null,\r\n false,\r\n null,\r\n _.extend(this.scope.values, { type: 'disclaimer' })\r\n );\r\n return this.appealAggregator.bulkEditor;\r\n }\r\n\r\n RequestDisclaimerExceptionCallBackFromPopup(adsGrid, id) {\r\n if (adsGrid.isForVNext) {\r\n adsGrid.trigger('closeDeliveryStatusPopup');\r\n } else {\r\n $(adsGrid.rejectionPopupContainerSelector).hide();\r\n }\r\n\r\n adsGrid.grid.gridView.deselectAll();\r\n adsGrid.grid.gridView.selectRow(id);\r\n const appealView = adsGrid.RequestDisclaimerExceptionCallBack(adsGrid);\r\n\r\n adsGrid.grid.gridView.overrideWith(appealView.render());\r\n appealView.on('hide', () => {\r\n adsGrid.grid.gridView.overrideWith(null);\r\n appealView.remove();\r\n });\r\n }\r\n\r\n showRejectionReason(event) {\r\n const actionLinks = [];\r\n const entity = getTargetEntity(event, this.grid.gridView);\r\n if (this.isForVNext) {\r\n if (entity &&\r\n entity.DeliveryStatusDetails &&\r\n entity.DeliveryStatusDetails.includes('NoEligibleAdGroups')) {\r\n const url = this.router.getRoutePathById('adgroup-create');\r\n const uri = new URI(url);\r\n appendScopeParameter(uri, this.scope);\r\n uri.addQuery('campaignId', entity.Id);\r\n uri.addQuery('isOpenCreatePanel', true);\r\n actionLinks.NoEligibleAdGroups = uri.toString();\r\n }\r\n\r\n if (entity && entity.DeliveryStatusDetails &&\r\n entity.DeliveryStatusDetails.includes('ShoppingCampaignNoOffersPresent')) {\r\n // get merchant center url under account level\r\n const url = this.router.getRoutePathById('merchant-center');\r\n const uri = new URI(url);\r\n appendScopeParameter(uri, this.scope);\r\n actionLinks.ShoppingCampaignNoOffersPresent = uri.toString();\r\n }\r\n }\r\n\r\n import(/* webpackMode: 'eager' */'@bingads-webui-campaign/delivery-status-popup-factory').then(({ DeliveryStatusPopupFactory, registerCountryListEvent }) => {\r\n const view = new DeliveryStatusPopupFactory({ grid: this.grid, i18n });\r\n view.showRejectionPopup({\r\n event,\r\n actionLinks,\r\n containerSelector: this.rejectionPopupContainerSelector,\r\n IsExperimentsOpenBetaEnabled,\r\n isSmartShoppingCampaignEnabled: IsSmartShoppingCampaignEnabled,\r\n percentSymbol: this.serverContext.DecimalFormatter.percentSymbol,\r\n view: this,\r\n popoverId: this.popoverId,\r\n useCustomTemplate: deliveryStatus =>\r\n _.contains(customTemplateDeliveryStatus, deliveryStatus) || (permissions && permissions.dynamic.AdExtensionInlineAppeal && _.contains(disclaimerEditorialStatus, deliveryStatus)),\r\n getCustomTemplate: (deliveryStatus, index) => {\r\n if (_.contains(linkedInPermissionRequired, deliveryStatus)) {\r\n return getRequestPermission({\r\n i18n,\r\n deliveryStatus,\r\n });\r\n }\r\n if (_.contains(disclaimerEditorialStatus, deliveryStatus)) {\r\n return this.disclaimerRepos.association.findAll({\r\n where: {\r\n campaignId: entity.Id,\r\n },\r\n }).then(disclaimerData => getReasonTemplates({\r\n deliveryStatus,\r\n scope: this.scope.values,\r\n errI18n: i18nErrors,\r\n locationI18n: locationTargeti18n,\r\n i18n,\r\n commonI18n,\r\n permissions,\r\n entity,\r\n extension: disclaimerData && disclaimerData[0],\r\n }));\r\n }\r\n if (budgetLimit.indexOf(deliveryStatus) > -1) {\r\n return this.deliveryStatusPopupFactory.getBudgetLandscapeHelpInfoTemplate(event);\r\n }\r\n return this.deliveryStatusPopupFactory.getAutobiddingLimitedHelpInfoTemplate(deliveryStatus, index, event);\r\n },\r\n afterRender: (popupView) => {\r\n popupView.$('#requestLinkedInPermission').on('click', () => {\r\n this.grid.gridView.trigger('closeDeliveryStatusPopup');\r\n });\r\n popupView.$('#requestExceptionforExtension').on('click', _.partial(this.RequestDisclaimerExceptionCallBackFromPopup, this, entity.Id));\r\n registerCountryListEvent(popupView.$el);\r\n popupView.$('.budget-landscape-action-link').on('click', () => {\r\n // only the mouse over event contains campaign info\r\n // but only popupView could catch this click event\r\n // so we have to pass the mouse over event\r\n this.showBudgetLandscape(event);\r\n $(this.rejectionPopupContainerSelector).hide();\r\n });\r\n\r\n popupView.$('.autobidding-suggestion .apply').on('click', (clickEvent) => {\r\n // deliveryStatusList should only contain one element\r\n const deliveryStatusList = _.intersection(clickEvent.target.classList, autobiddingLimitedStatus);\r\n this.applyAutobiddingSuggestion(event, deliveryStatusList[0]);\r\n this.grid.gridView.trigger('closeDeliveryStatusPopup');\r\n clickEvent.stopPropagation();\r\n clickEvent.preventDefault();\r\n });\r\n },\r\n instrumentation: this.instrumentation,\r\n inContextRepairRecommedationType: 'campaign',\r\n });\r\n });\r\n }\r\n\r\n processErrors(response) {\r\n let errorMessage;\r\n const unexpectedError = i18n.getString('ErrorNumber_-1');\r\n if (response && response.errors) {\r\n const errors = i18nErrors.getBulkApiErrors(response.errors);\r\n if (!errors || !errors[0] || !errors[0].message) {\r\n errorMessage = unexpectedError;\r\n } else {\r\n errorMessage = errors[0].message;\r\n }\r\n }\r\n\r\n notificationApi.showWarning(errorMessage || unexpectedError);\r\n }\r\n\r\n applyAutobiddingSuggestionForMaxCPCRestriction(campaign, suggestedValue) {\r\n const toUpdated = {\r\n BiddingScheme: {\r\n ...campaign.BiddingScheme,\r\n MaxCpc: {\r\n Amount: suggestedValue,\r\n },\r\n },\r\n };\r\n\r\n jsdataCampaign.Campaign\r\n .update(campaign.Id, toUpdated, { adapter: 'bulk', cacheResponse: false })\r\n .finally(withUiBlock(this.grid.gridView.$el))\r\n .then(() => {\r\n notificationApi.showInfo(i18n.getString('Message_RecommendedValue_Applied'));\r\n this.grid.gridView.refresh(true);\r\n })\r\n .catch(response => this.processErrors(response));\r\n }\r\n // budget, shared budget\r\n applyAutobiddingSuggestionForBudgetRestriction(campaign, suggestedValue) {\r\n if (campaign && campaign.Budget) {\r\n if (campaign.Budget.Id) {\r\n // shared budget\r\n SharedBudgetModel.updateBudget({\r\n Id: campaign.Budget.Id,\r\n Amount: suggestedValue,\r\n })\r\n .finally(withUiBlock(this.grid.gridView.$el))\r\n .then(() => {\r\n notificationApi.showInfo(i18n.getString('Message_RecommendedValue_Applied'));\r\n this.grid.gridView.refresh(true);\r\n })\r\n .catch(response => this.processErrors(response));\r\n } else if (campaign.Budget.Amount) {\r\n const toUpdated = {\r\n Budget: _.extend({}, campaign.Budget, {\r\n Amount: suggestedValue,\r\n }),\r\n };\r\n jsdataCampaign.Campaign\r\n .update(campaign.Id, toUpdated, { adapter: 'bulk', cacheResponse: false })\r\n .finally(withUiBlock(this.grid.gridView.$el))\r\n .then(() => {\r\n notificationApi.showInfo(i18n.getString('Message_RecommendedValue_Applied'));\r\n this.grid.gridView.refresh(true);\r\n })\r\n .catch(response => this.processErrors(response));\r\n }\r\n }\r\n }\r\n // targetCPA, targetROAS, targetImpressionShare\r\n applyAutobiddingSuggestionForUnAttainableTarget(campaign, suggestedValue) {\r\n const toUpdated = {\r\n BiddingScheme: { ...campaign.BiddingScheme },\r\n };\r\n // shopping campaign - mcv+roas, mc+cpa\r\n if (toUpdated.BiddingScheme.Type === 'MaxConversionValue') {\r\n toUpdated.BiddingScheme.TargetRoas = suggestedValue;\r\n } else if (toUpdated.BiddingScheme.Type === 'MaxConversions') {\r\n toUpdated.BiddingScheme.TargetCpa = suggestedValue;\r\n } else {\r\n toUpdated.BiddingScheme[toUpdated.BiddingScheme.Type] = suggestedValue;\r\n }\r\n jsdataCampaign.Campaign\r\n .update(campaign.Id, toUpdated, { adapter: 'bulk', cacheResponse: false })\r\n .finally(withUiBlock(this.grid.gridView.$el))\r\n .then(() => {\r\n notificationApi.showInfo(i18n.getString('Message_RecommendedValue_Applied'));\r\n this.grid.gridView.refresh(true);\r\n })\r\n .catch(response => this.processErrors(response));\r\n }\r\n\r\n applyAutobiddingSuggestion(event, deliveryStatus) {\r\n const campaign = getTargetEntity(event, this.grid.gridView);\r\n const detail = _.filter(campaign.CampaignDeliveryStatusDetails, detailStatus => detailStatus.Status === deliveryStatus);\r\n const suggestedValue = detail[0] && detail[0].RecommendedValue;\r\n const activity = this.instrumentation && this.instrumentation.autobiddingLimitedStatus.create().applyDeliveryStatus.create();\r\n let currentValue = null;\r\n\r\n switch (deliveryStatus) {\r\n case 'AutoBiddingLimitedMaxCPCRestriction':\r\n currentValue = campaign.BiddingScheme.MaxCpc && campaign.BiddingScheme.MaxCpc.Amount;\r\n this.applyAutobiddingSuggestionForMaxCPCRestriction(campaign, suggestedValue);\r\n break;\r\n case 'AutoBiddingLimitedBudgetRestriction':\r\n currentValue = campaign.Budget.Amount;\r\n this.applyAutobiddingSuggestionForBudgetRestriction(campaign, suggestedValue);\r\n break;\r\n case 'AutoBiddingLimitedUnAttainableTarget':\r\n currentValue = campaign.BiddingScheme[campaign.BiddingScheme.Type];\r\n this.applyAutobiddingSuggestionForUnAttainableTarget(campaign, suggestedValue);\r\n break;\r\n default:\r\n break;\r\n }\r\n if (activity) {\r\n activity.trace(JSON.stringify({\r\n campaignId: campaign.Id,\r\n deliveryStatus,\r\n suggestedValue,\r\n currentValue,\r\n }));\r\n }\r\n }\r\n\r\n hideRejectionReason(e) {\r\n if ($(e.relatedTarget).closest(`#${this.popoverId}`).length === 0) {\r\n this.grid.gridView.trigger('closeDeliveryStatusPopup');\r\n }\r\n }\r\n\r\n showBudgetLandscape(event) {\r\n event.stopImmediatePropagation();\r\n // this.deliveryStatusPopupFactory.showBudgetLandscapePopup(event, this.isForVNext);\r\n\r\n const activity = this.instrumentation && this.instrumentation.editorial && this.instrumentation.editorial.create().toggleCountryList.create();\r\n this.deliveryStatusPopupFactory.showBudgetLandscapePopup(event, this.isForVNext, this.serverContext, activity, this.newI18n);\r\n }\r\n\r\n showInlineOpportunityPanel(event) {\r\n event.stopImmediatePropagation();\r\n this.deliveryStatusPopupFactory.showInlineOpportunityPanel(event, this.isForVNext);\r\n }\r\n\r\n showBudgetLandscapeHelpInfo(event) {\r\n event.stopImmediatePropagation();\r\n this.deliveryStatusPopupFactory.showBudgetLandscapeHelpInfo(event, this.isForVNext);\r\n }\r\n\r\n showQualityScoreDetails(event) {\r\n const targetEntity = getTargetEntity(event, this.grid.gridView);\r\n\r\n showQualityScoreDetail(event, targetEntity.QualityScore, 'qsContainer', legacyGlobalI18n); // qsContainer is the id from qsContainerTemplate\r\n }\r\n\r\n onWunderbarChange() {\r\n this.grid.gridView.monitorViewportChange(1500, 15);\r\n }\r\n\r\n showLandscapeDisabledHelpInfo(event) {\r\n this.showRejectionReason(_.extend({}, event, { bidlandscapeDisabled: true }));\r\n }\r\n\r\n forceCampaignsGridRefresh({ gridView }) {\r\n const invalidateGridData = jsdataCampaign.Campaign.destroyAll();\r\n invalidateGridData.then(() => {\r\n gridView.deselectAll();\r\n gridView.refresh(true);\r\n });\r\n }\r\n\r\n showFluctuationInsightsTooltip(event) {\r\n renderFluctuationInsightsTooltip({\r\n i18n,\r\n event,\r\n view: this.grid.gridView,\r\n });\r\n }\r\n\r\n showFluctuationInsightsPopup(event) {\r\n const { currentTarget } = event;\r\n event.stopPropagation();\r\n const targetEntity = getTargetEntity(event, this.grid.gridView);\r\n\r\n insertPopoverContainer(mccPerfFluxPopupContainerId);\r\n\r\n const dateRange = this.grid.dateFilter.getCurrentDateRange();\r\n\r\n import(/* webpackMode: 'eager' */'@bingads-webui-campaign-react/fluctuation-popup').then(({ createElementBasedFluctuationPopupFactory }) => {\r\n import(/* webpackMode: 'eager' */'@bingads-webui-campaign-react/common-styles').then(({ getFluctuationPopupStyle }) => {\r\n const { core } = this.theme;\r\n const { palette } = core;\r\n const getFluctuationPopupStyles = () => ({\r\n '@global': getFluctuationPopupStyle({ palette }),\r\n });\r\n createElementBasedFluctuationPopupFactory({\r\n perfMarker: this.perfMarker,\r\n triggerButton: currentTarget,\r\n onFlucDismiss: ({ isLastFluc }) => {\r\n if (isLastFluc) {\r\n this.forceCampaignsGridRefresh(this.grid);\r\n }\r\n },\r\n deps: {\r\n i18n,\r\n context: {\r\n ...this.serverContext,\r\n scope: this.scope,\r\n CurrentCampaign: {\r\n Id: targetEntity ? targetEntity.Id : '',\r\n },\r\n },\r\n instrumentation: this.instrumentation,\r\n azure: this.azureUrlRewrite,\r\n appConfig,\r\n },\r\n metrics: [{\r\n name: currentTarget.getAttribute('data-metric-name'),\r\n value: currentTarget.getAttribute('data-metric-value'),\r\n type: currentTarget.getAttribute('data-metric-type'),\r\n }],\r\n fromScenario: 'CampaignsGrid',\r\n isForVNext: this.isForVNext,\r\n canViewAllInsights: false,\r\n asyncLoadFluctuationConfig: {\r\n dateRange: {\r\n startDate: dateRange.start,\r\n endDate: dateRange.end,\r\n },\r\n fluctuationTypeIds: [currentTarget.getAttribute('data-metric-type')],\r\n },\r\n onDismiss: () => {\r\n if (currentTarget) {\r\n currentTarget.focus();\r\n }\r\n },\r\n getFluctuationPopupStyles,\r\n }, document.getElementById(mccPerfFluxPopupContainerId));\r\n });\r\n });\r\n }\r\n\r\n showBudgetCenterHelpInfo(event) {\r\n const timeZone = toIANATimeZone(fromLegacyTimeZone(_.get(this.serverContext, ['CurrentAccount', 'TimeZone'])));\r\n const monthString = i18n.formatDate(new Date(), { skeleton: 'MMMM', timeZone });\r\n\r\n const entity = getTargetEntity(event, this.grid.gridView);\r\n const url = this.router.getRoutePathById('budget-center');\r\n const uri = new URI(url);\r\n appendScopeParameter(uri, this.scope);\r\n uri.addQuery('campaignId', entity.Id);\r\n uri.addQuery('entrypoint', 'campaignsgrid');\r\n const actionLink = uri.toString();\r\n\r\n const monthlyBudgetAmount = i18n.formatCurrency(\r\n _.get(entity, ['Budget', 'MonthlyAmount']),\r\n _.get(this.serverContext, ['CurrentAccount', 'CurrencyCode'])\r\n );\r\n\r\n renderBudgetCenterHelpTooltip({\r\n i18n,\r\n event,\r\n view: this.grid.gridView,\r\n monthString,\r\n monthlyBudgetAmount,\r\n actionLink,\r\n });\r\n }\r\n\r\n renderPerformanceInsightsPopup({\r\n event, containerDOM, closePerformanceInsightsPopup,\r\n }) {\r\n ReactDOM.render(\r\n (),\r\n containerDOM\r\n );\r\n }\r\n\r\n closePerformanceInsightsPopup() {\r\n if (window.popupManager) {\r\n window.popupManager.releaseLock(popupContentKey);\r\n }\r\n ReactDOM.unmountComponentAtNode(document.querySelector(this.rejectionPopupContainerSelector));\r\n }\r\n\r\n showPerformanceInsightsPopup(event) {\r\n const containerDOM = document.querySelector(this.rejectionPopupContainerSelector);\r\n if (window.popupManager) {\r\n window.popupManager.forceAcquireLock(popupContentKey);\r\n }\r\n\r\n this.renderPerformanceInsightsPopup({\r\n event, containerDOM, closePerformanceInsightsPopup: this.closePerformanceInsightsPopup.bind(this),\r\n });\r\n }\r\n\r\n hidePerformanceInsightsPopup(e) {\r\n if ($(e.relatedTarget).closest('.performance-insights-callout').length === 0) {\r\n this.closePerformanceInsightsPopup();\r\n }\r\n }\r\n\r\n get className() { return 'campaign-tab-grid'; }\r\n}\r\n","/* eslint-disable no-bitwise */\r\n/* istanbul ignore file */\r\nimport _ from 'underscore';\r\nimport $ from 'jquery';\r\nimport Promise from 'bluebird';\r\nimport { http } from '@bingads-webui/http-util';\r\nimport { queryify } from '@bingads-webui/url-util';\r\nimport { getEditorialTemplates, ENTITY } from '@bingads-webui-campaign/delivery-status-popup-factory';\r\nimport * as editorialRejection from '@bingads-webui-component-legacy/api-errors-campaign/map/editorialRejectionFwdLinkId';\r\n\r\nexport function getReasonTemplates({\r\n deliveryStatus, scope, errI18n, locationI18n,\r\n i18n, commonI18n, permissions, entity, extension,\r\n}) {\r\n return new Promise((resolve) => {\r\n let url = '/campaign/AdExtensions.m/GetRejectionReasonData';\r\n const args = _.extend({\r\n aid: scope.aid,\r\n cid: scope.cid,\r\n cmpid: scope.campaignId,\r\n type: 'disclaimer',\r\n adExtensionId: extension.Id,\r\n campaignId: scope.campaignId || entity.Id,\r\n version: extension.Version,\r\n });\r\n url = queryify(url, args);\r\n return http.post({\r\n url,\r\n data: { __RequestVerificationToken: $('input[name=\"__RequestVerificationToken\"]').val() },\r\n contentType: 'application/x-www-form-urlencoded',\r\n }).then(({\r\n RejectionReasons,\r\n IsAppealable,\r\n }) => {\r\n const reasonTemplates = getEditorialTemplates({\r\n reasons: _.map(RejectionReasons, Reason => ({\r\n ReasonCode: Reason.ReasonCode,\r\n Location: Reason.Location,\r\n LanguageToCountries: [{\r\n PublisherCountries: Reason.RejectionCountries,\r\n }],\r\n })),\r\n editorialRejection,\r\n errI18n,\r\n i18n,\r\n locationI18n,\r\n commonI18n,\r\n entity: ENTITY.EXTENSION,\r\n deliveryStatus,\r\n permissions,\r\n isAppealable: IsAppealable,\r\n });\r\n resolve(reasonTemplates);\r\n });\r\n });\r\n}\r\n","import { CampaignuiBaseColumn } from '@bingads-webui-campaign/campaignui-base-column';\r\n\r\nexport class CampaignIdColumn extends CampaignuiBaseColumn {\r\n constructor({ i18n }) {\r\n super({\r\n name: 'CampaignId',\r\n property: 'Id',\r\n title: i18n.getString('ColumnName_CampaignID'),\r\n sortable: 'Id',\r\n type: 'number',\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 this.isValid = ko.observable(true);\r\n\r\n this.handleErrors = (errors) => {\r\n this.isValid(!_.isEmpty(errors));\r\n };\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport Backbone from 'backbone';\r\nimport ko from 'knockout';\r\nimport { MultiLanguageSelector } from '@bingads-webui-campaign/multi-language-selector';\r\n\r\nimport template from './inline-editor-template.pug';\r\nimport ViewModel from './inline-editor-viewmodel';\r\n\r\n/**\r\n* Provide inline editoring function for campaign language\r\n*\r\n*
It reads user selection, and trigger these events:\r\n*
save: with { SelectedLanguages } after user click save\r\n*
close: after user click cancel\r\n*\r\n*/\r\n\r\nexport class CampaignLanguageInlineEditor extends Backbone.View {\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.item - the campaign entity to be edit\r\n * to where to central the loading icon when update\r\n * @param {Object[]} param.languages - the languages set to choose from, default empty\r\n * @param {Object[]} param.i18n - the localization object which contains function getString\r\n *\r\n * @returns {void} void\r\n */\r\n initialize({\r\n item,\r\n languages = [],\r\n i18n = { getString: x => x },\r\n }) {\r\n this.item = item;\r\n this.languages = languages;\r\n this.i18n = i18n;\r\n this.viewModel = new ViewModel();\r\n this.viewModel.isValid(!_.isEmpty(this.item.Languages));\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click .grid-popupeditor-save': 'save',\r\n 'click .grid-popupeditor-cancel': 'cancel',\r\n };\r\n }\r\n\r\n render() {\r\n this.$el.html(template({ i18n: this.i18n }));\r\n ko.applyBindings(this.viewModel, this.el);\r\n\r\n this.languageSelector = new MultiLanguageSelector({\r\n inEditMode: true,\r\n languages: this.languages,\r\n i18n: this.i18n,\r\n selectedLanguages: this.item.Languages,\r\n });\r\n\r\n this.$('.campaign-language-editor').html(this.languageSelector.render().el);\r\n\r\n this.languageSelector.on('selectedLanguages:changed', () => {\r\n this.viewModel.isValid(!_.isEmpty(this.languageSelector.getSelectedLanguages()));\r\n });\r\n\r\n return this;\r\n }\r\n\r\n save() {\r\n this.trigger('save', { SelectedLanguages: this.languageSelector.getSelectedLanguages() });\r\n }\r\n\r\n cancel() {\r\n this.trigger('close');\r\n }\r\n}\r\n","/* eslint-disable import/extensions */\r\n/* eslint-disable import/no-unresolved */\r\nimport _ from 'underscore';\r\nimport { CampaignuiBaseColumn } from '@bingads-webui-campaign/campaignui-base-column';\r\nimport { GridCustomizedPopupEditor } from '@bingads-webui-campaign/grid-customized-popup-editor';\r\nimport { CampaignLanguageInlineEditor } from '@bingads-webui-campaign/campaigns-language';\r\nimport { inlineEditSave } from '@bingads-webui-campaign/summary-grid-helper';\r\nimport { AdGroup } from '@bingads-webui-campaign/campaign-ui-schemas';\r\nimport appConfig from '@bingads-webui-component-legacy/config/index';\r\nimport jsData from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport * as i18nErrors from '@bingads-webui-component-legacy/api-errors-campaign/index';\r\nimport template from './campaign-languages-template.pug';\r\n\r\nconst permissions = appConfig.get('Permissions');\r\n\r\nexport function getLanguageSetForSelector() {\r\n let languagesSet = _.without(_.clone(AdGroup.properties.Language.enum), 'None');\r\n const {\r\n IsSimplifiedChineseLanguageEnabledInMultipleLanguage,\r\n IsAdsGlobalizationPhase1Enabled,\r\n IsAdsGlobalizationPhase2Enabled,\r\n IsAdsGlobalizationPhase2JapanEnabled,\r\n IsAdsGlobalizationPhase6Enabled,\r\n IsDomesticSimplifiedChineseEnabled,\r\n IsAdsGlobalizationPhase9Enabled,\r\n IsAdsGlobalizationPhase9VIEnabled,\r\n } = permissions;\r\n\r\n if (!IsSimplifiedChineseLanguageEnabledInMultipleLanguage) {\r\n languagesSet = _.without(languagesSet, 'SimplifiedChinese');\r\n }\r\n\r\n if (!IsAdsGlobalizationPhase1Enabled) {\r\n languagesSet = _.without(languagesSet, 'Greek', 'Polish', 'Bulgarian', 'Croatian', 'Czech', 'Estonian', 'Hungarian', 'Latvian', 'Lithuanian', 'Maltese', 'Romanian', 'Slovak', 'Slovenian');\r\n }\r\n\r\n if (!IsAdsGlobalizationPhase2Enabled) {\r\n languagesSet = _.without(languagesSet, 'Turkish', 'Serbian', 'Bosnian', 'Albanian', 'Macedonian', 'Icelandic');\r\n }\r\n\r\n if (!IsAdsGlobalizationPhase6Enabled) {\r\n languagesSet = _.without(languagesSet, 'Hebrew', 'Arabic', 'Russian');\r\n }\r\n\r\n if (!IsAdsGlobalizationPhase2JapanEnabled) {\r\n languagesSet = _.without(languagesSet, 'Japanese');\r\n }\r\n\r\n if (!IsAdsGlobalizationPhase9Enabled) {\r\n languagesSet = _.without(languagesSet, 'Hindi', 'Malay', 'Thai', 'Indonesian', 'Tagalog');\r\n }\r\n\r\n if (!IsAdsGlobalizationPhase9VIEnabled) {\r\n languagesSet = _.without(languagesSet, 'Vietnamese');\r\n }\r\n\r\n if (IsDomesticSimplifiedChineseEnabled) {\r\n languagesSet = ['SimplifiedChinese'];\r\n }\r\n\r\n return languagesSet.sort();\r\n}\r\n\r\n\r\nexport class CampaignLanguagesColumn extends CampaignuiBaseColumn {\r\n constructor({ i18n, view, isForVNext }) {\r\n const title = i18n.getString('ColumnName_Languages');\r\n super({\r\n name: 'Languages',\r\n property: ['Languages', 'CampaignType'],\r\n title,\r\n editable: true,\r\n type: 'string',\r\n helpId: 'pop_BA_CampaignCreate_Settings_LanguageTargeting',\r\n enableEdit: item => item.CampaignType === 'Default',\r\n helpAriaLabel: i18n.getString('Click to learn more about {{item}}', { item: title }),\r\n });\r\n this.i18n = i18n;\r\n this.view = view;\r\n this.isForVNext = isForVNext;\r\n }\r\n\r\n onPrompt({ position, item, newPosition }) {\r\n const languageInlineEditorView = new CampaignLanguageInlineEditor({\r\n item,\r\n i18n: this.i18n,\r\n languages: getLanguageSetForSelector(),\r\n });\r\n\r\n languageInlineEditorView.on('save', ({ SelectedLanguages }) => {\r\n const updatedItem = _.defaults({\r\n Languages: SelectedLanguages,\r\n }, item);\r\n\r\n return inlineEditSave({\r\n id: item.Id,\r\n fieldName: 'Languages',\r\n updatedItem,\r\n }, {\r\n view: this.view,\r\n resource: jsData.Campaign,\r\n i18n: this.i18n,\r\n i18nErrors,\r\n editorView: languageInlineEditorView,\r\n editorViewCallbackAfterUpdate: () => {\r\n languageInlineEditorView.trigger('close');\r\n },\r\n customBlockerTarget: this.isForVNext ? '.campaigns-page' : null,\r\n });\r\n });\r\n const groupClass = `grid-group-${_.result(this.config, 'group', 'other')}`;\r\n const editorView = new GridCustomizedPopupEditor({\r\n editorView: languageInlineEditorView.render(),\r\n cellPosition: this.isForVNext ? newPosition : position,\r\n renderBelow: false,\r\n className: `grid-popupeditor ${groupClass}`,\r\n parentContainerSelector: this.isForVNext ? '.grid-and-disclaim-container' : null,\r\n });\r\n\r\n return editorView.render();\r\n }\r\n\r\n pickProperty(item) {\r\n return {\r\n Languages: item.Languages,\r\n };\r\n }\r\n\r\n template({ value }) {\r\n return template({\r\n Languages: value.Languages,\r\n i18n: this.i18n,\r\n });\r\n }\r\n}\r\n","import { CampaignuiBaseColumn } from '@bingads-webui-campaign/campaignui-base-column';\r\nimport template from './campaign-type-template.pug';\r\n\r\nexport class CampaignTypeColumn extends CampaignuiBaseColumn {\r\n constructor({ i18n, permissions }) {\r\n super({\r\n name: 'CampaignType',\r\n property: ['CampaignType', 'CampaignMigrationStatus'],\r\n title: i18n.getString('ColumnName_CampaignType'),\r\n sortable: 'CampaignType',\r\n type: 'string',\r\n });\r\n this.i18n = i18n;\r\n this.IsRenameHotelToLodgingEnabled = permissions && permissions.dynamic && permissions.dynamic.IsRenameHotelToLodgingEnabled;\r\n }\r\n\r\n pickProperty(item) {\r\n return {\r\n CampaignType: item.CampaignType,\r\n CampaignMigrationStatus: item.CampaignMigrationStatus,\r\n i18n: this.i18n,\r\n };\r\n }\r\n\r\n template({ value }) {\r\n if (this.IsRenameHotelToLodgingEnabled && value.CampaignType === 'Hotel') {\r\n // When enable IsRenameHotelToLodgingEnabled, show text as \"Lodging\"\r\n value.CampaignType = 'Lodging'; // eslint-disable-line no-param-reassign\r\n }\r\n return template({\r\n CampaignType: value.CampaignType,\r\n CampaignMigrationStatus: value.CampaignMigrationStatus,\r\n i18n: this.i18n,\r\n });\r\n }\r\n}\r\n","/* eslint-disable import/extensions */\r\n/* eslint-disable import/no-unresolved */\r\nimport $ from 'jquery';\r\nimport _ from 'underscore';\r\nimport { CampaignuiBaseColumn } from '@bingads-webui-campaign/campaignui-base-column';\r\nimport { InlineEditableColumnPrompt, inlineEditSave } from '@bingads-webui-campaign/summary-grid-helper';\r\nimport { Campaign } from '@bingads-webui-campaign/campaign-ui-schemas';\r\nimport appConfig from '@bingads-webui-component-legacy/config/index';\r\nimport jsData from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport * as i18nErrors from '@bingads-webui-component-legacy/api-errors-campaign/index';\r\nimport campaignTemplate from './campaign.pug';\r\n\r\nconst permissions = appConfig.get('Permissions');\r\n\r\nexport class CampaignColumn extends CampaignuiBaseColumn {\r\n constructor({\r\n i18n, scope, view,\r\n }) {\r\n super({\r\n name: 'Name',\r\n property: _.compact([\r\n 'Name',\r\n 'Id',\r\n 'Labels', // for labels menu\r\n permissions.IsBAACompetitionBSCAuctionInsightsEnabled && 'CampaignType',\r\n permissions.IsExperimentsEnabled && 'BaseCampaignName',\r\n permissions.IsSmartShoppingCampaignEnabled && 'CampaignSubType',\r\n ]),\r\n title: i18n.getString('ColumnName_Campaign'),\r\n sortable: 'Name',\r\n editable: true,\r\n type: 'string',\r\n bodyClasses: ['grid-column-Campaign'],\r\n group: 'freezing',\r\n });\r\n\r\n this.scope = scope;\r\n this.i18n = i18n;\r\n this.view = view;\r\n }\r\n\r\n pickProperty(item) {\r\n const { customerId: cid, accountId: aid } = this.scope;\r\n const {\r\n Name: name,\r\n Id: cmpid,\r\n $total,\r\n BaseCampaignName,\r\n } = item;\r\n const isSmartCampaign = item.CampaignType === 'Smart';\r\n const isPMaxCampaign = item.CampaignType === 'PerformanceMax';\r\n const isAppCampaign = item.CampaignType === 'App';\r\n\r\n let href = '';\r\n\r\n if (isSmartCampaign) {\r\n href = item.DeliveryStatus === 'CampaignInProgress' ?\r\n `/campaign/Smart?cid=${cid}#/CreateCampaign/${cmpid}` :\r\n `/campaign/Smart?cid=${cid}#/campaign/${cmpid}`;\r\n } else if (isPMaxCampaign || isAppCampaign) {\r\n href = `/campaign/vnext/overview?aid=${aid}&cid=${cid}&campaignId=${cmpid}`;\r\n } else {\r\n href = `/campaign/vnext/adgroups?aid=${aid}&cid=${cid}&campaignId=${cmpid}`;\r\n }\r\n\r\n let ariaLabel = this.i18n.getString('Click to scope to campaign {{campaignName}}', { campaignName: name });\r\n let className = '';\r\n\r\n if (BaseCampaignName) {\r\n ariaLabel = this.i18n.getString('Click to scope to experiment {{experimentName}}', { experimentName: name });\r\n className = 'experiment-name';\r\n }\r\n\r\n return {\r\n $total,\r\n name,\r\n href,\r\n Id: cmpid,\r\n skipScopeNavigation: isSmartCampaign,\r\n Status: item.DeliveryStatus,\r\n BaseCampaignName,\r\n isForVNext: true,\r\n ariaLabel,\r\n className,\r\n };\r\n }\r\n\r\n get template() { return campaignTemplate; }\r\n\r\n onPrompt({\r\n event, item, newPosition,\r\n }) {\r\n if ($(event.target).is('a')) {\r\n return undefined;\r\n }\r\n\r\n return InlineEditableColumnPrompt({\r\n position: newPosition,\r\n item,\r\n view: this.view,\r\n i18n: this.i18n,\r\n fieldName: 'Name',\r\n schema: Campaign,\r\n saveModel: (updated, editorView) => inlineEditSave(\r\n {\r\n id: item.Id,\r\n fieldName: 'Name',\r\n updatedItem: updated,\r\n },\r\n {\r\n view: this.view,\r\n resource: jsData.Campaign,\r\n i18n: this.i18n,\r\n i18nErrors,\r\n editorView,\r\n editorViewCallbackAfterUpdate: () => {\r\n editorView.trigger('save', updated);\r\n\r\n // Since the currently edited Campaign may also be the BaseCampaign of\r\n // other Experimental Campaigns in this grid, check and update.\r\n _.each(this.view.grid.gridView.itemArray, (rowItem) => {\r\n if (rowItem.BaseCampaignName === item.Name) {\r\n const updatedRowItem = _.defaults({\r\n BaseCampaignName: updated.Name,\r\n }, rowItem);\r\n\r\n this.view.grid.gridView.trigger('didEdit', updatedRowItem);\r\n }\r\n });\r\n\r\n // update wunderbar\r\n const response = [{\r\n Id: item.Id,\r\n Name: updated.Name,\r\n }];\r\n\r\n window.App.trigger('campaignUpdated', { data: response });\r\n },\r\n customBlockerTarget: '.campaigns-page',\r\n }\r\n ),\r\n });\r\n }\r\n}\r\n","export default {\r\n Active: 'Active',\r\n Deleted: 'Deleted',\r\n Paused: 'UserPaused',\r\n Suspended: 'Suspended',\r\n\r\n // used in wunderbar, needs to be migrated once workflow goes to oData\r\n EnumPaused: 124,\r\n EnumBudgetPaused: 126,\r\n EnumBudgetUserPaused: 127,\r\n};\r\n","/* eslint-disable import/extensions */\r\n/* eslint-disable import/no-unresolved */\r\nimport _ from 'underscore';\r\nimport { StatusIconColumn as BaseStatusIconColumn } from '@bingads-webui-campaign/campaignui-common-columns';\r\nimport { showPausedCampaignNotifications } from '@bingads-webui-campaign/import-shared-utils';\r\nimport { inlineEditSave } from '@bingads-webui-campaign/summary-grid-helper';\r\nimport jsData from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport * as i18nErrors from '@bingads-webui-component-legacy/api-errors-campaign/index';\r\nimport campaignStatus from '../../campaign-status';\r\n\r\nexport class StatusIconColumn extends BaseStatusIconColumn {\r\n constructor(options) {\r\n super(_.extend({}, options, {\r\n enableEdit: true,\r\n statusOptions: [\r\n { name: 'Enabled', value: 'Active' },\r\n { name: 'Paused', value: 'UserPaused' },\r\n ],\r\n group: 'freezing',\r\n title: options.i18n ? options.i18n.getString('ColumnName_Status') : 'Status',\r\n }));\r\n }\r\n\r\n updateStatus({ status, item }) {\r\n const updatedItem = _.extend({}, item, { Status: status });\r\n // workaround to fix the bug in bulkupsert api. use 'UserPaused' will get success\r\n // but actually the request take No effect.\r\n updatedItem.Status = updatedItem.Status === 'UserPaused' ? 'Paused' : updatedItem.Status;\r\n\r\n const { instrumentation } = this.view;\r\n\r\n const { activity } = instrumentation.createScenarioAndActivity({\r\n scenarioName: 'PausedCampaignImportNotification',\r\n activityName: 'CampaignsGridStatusColumn',\r\n });\r\n return inlineEditSave(\r\n {\r\n id: item.Id,\r\n fieldName: 'Status',\r\n updatedItem,\r\n },\r\n {\r\n view: this.view,\r\n resource: jsData.Campaign,\r\n i18n: this.i18n,\r\n i18nErrors,\r\n editorViewCallbackAfterUpdate: () => {\r\n const response = [{\r\n Id: updatedItem.Id,\r\n Status: status === 'UserPaused' ? campaignStatus.EnumPaused : status,\r\n }];\r\n\r\n window.App.trigger('campaignUpdated', { data: response });\r\n },\r\n importNotificationCallback: () => {\r\n // show paused campaign notifications based on specific conditions\r\n showPausedCampaignNotifications({ campaignItemList: [item], updateStatus: status, activity });\r\n },\r\n customBlockerTarget: this.isForVNext ? '.campaigns-page' : null,\r\n }\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 { CampaignuiBaseColumn } from '@bingads-webui-campaign/campaignui-base-column';\r\nimport { InlineEditableColumnPrompt } from '@bingads-webui-campaign/summary-grid-helper';\r\nimport { Campaign } from '@bingads-webui-campaign/campaign-ui-schemas';\r\nimport jsData from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport * as i18nErrors from '@bingads-webui-component-legacy/api-errors-campaign/index';\r\nimport { cloneDeep } from '@bingads-webui-universal/primitive-utilities';\r\nimport PageContext from '@bingads-webui-static-legacy/page-context';\r\nimport { withUiBlock } from '@bingads-webui/uiblocker';\r\nimport { targetCpaInlineEditorView } from '@bingads-webui-campaign-react/portfolio-bid-strategy-shared';\r\nimport { NumberRange } from '@bingads-webui-campaign-legacy/bidding-strategy/viewmodel/setting';\r\nimport decimal from '@bingads-webui-component-legacy/humanize/decimal';\r\nimport { getBidLandscapeConfigs } from '@bingads-webui-campaign/campaignui-common-columns';\r\nimport template from './bid-strategy-target-cpa.pug';\r\n\r\nexport class BidStrategyTargetCPAColumn extends CampaignuiBaseColumn {\r\n constructor(options) {\r\n const {\r\n i18n,\r\n view,\r\n helpId = 'pop_BA_CampaignGrids_TargetCPA',\r\n } = options;\r\n const title = i18n.getString('ColumnName_BidStrategyTargetCpa');\r\n\r\n super({\r\n name: 'DisplayBiddingStrategyTargetCpa',\r\n property: ['BiddingScheme'],\r\n title,\r\n sortable: 'DisplayBiddingStrategyTargetCpa',\r\n type: 'number',\r\n helpId,\r\n bodyClasses: ['grid-column-biddingStrategyTargetCpa'],\r\n helpAriaLabel: i18n.getString('Click to learn more about {{item}}', { item: title }),\r\n enableEdit: item =>\r\n (item.BiddingScheme && item.BiddingScheme.Type === 'TargetCpa') ||\r\n ((item.CampaignType === 'PerformanceMax' || item.CampaignSubType === 'ShoppingSmartAds') && item.BiddingScheme && item.BiddingScheme.Type === 'MaxConversions' && item.BiddingScheme.TargetCpa),\r\n });\r\n this.i18n = i18n;\r\n this.view = view;\r\n this.permissions = options.permissions;\r\n }\r\n\r\n pickProperty(item) {\r\n return {\r\n Id: item.Id,\r\n DeliveryStatus: item.DeliveryStatus,\r\n Budget: item.Budget,\r\n BiddingScheme: item.BiddingScheme,\r\n DeliveryStatusDetails: item.DeliveryStatusDetails,\r\n IsBidLandscapeAvailable: item.IsBidLandscapeAvailable,\r\n };\r\n }\r\n\r\n template({ value }) {\r\n const { DeliveryStatus } = value;\r\n const isAutoBiddingLimited = DeliveryStatus === 'AutoBiddingLimitedUnAttainableTarget';\r\n let { enabledBidLandscape, hasBidLandscapeIcon } = getBidLandscapeConfigs({\r\n permissions: this.permissions,\r\n value,\r\n });\r\n if (!isAutoBiddingLimited) {\r\n enabledBidLandscape = false;\r\n hasBidLandscapeIcon = false;\r\n }\r\n\r\n const getTargetCpaValue = () => {\r\n if (value && value.BiddingScheme && value.BiddingScheme.TargetCpa) {\r\n return _.isNull(value.BiddingScheme.TargetCpa) ? '-' : decimal.fromFloatToString(value.BiddingScheme.TargetCpa);\r\n }\r\n return '-';\r\n };\r\n\r\n const targetCpaValue = getTargetCpaValue();\r\n\r\n return template({\r\n targetCpaValue,\r\n budgetType: value && value.Budget ? value.Budget.Type : null,\r\n budgetId: value && value.Budget ? value.Budget.Id : null,\r\n enabledBidlandscape: enabledBidLandscape && targetCpaValue !== '-',\r\n hasBidlandscapeIcon: hasBidLandscapeIcon && targetCpaValue !== '-',\r\n i18n: this.i18n,\r\n });\r\n }\r\n\r\n onPrompt({\r\n item, newPosition,\r\n }) {\r\n // disable edit while using existing bid strategy\r\n if (item.BidStrategyName) {\r\n window.App.views.alertCenter.showError(this.i18n.getString('Target_Edit_Not_Support_Hint'));\r\n return undefined;\r\n }\r\n const model = cloneDeep(item);\r\n model['BiddingScheme/TargetCpa'] = item.BiddingScheme.TargetCpa;\r\n const flattenedSchema = {\r\n ...Campaign,\r\n properties: {\r\n ...Campaign.properties,\r\n 'BiddingScheme/TargetCpa': Campaign.properties.BiddingScheme.schema.properties.TargetCpa,\r\n },\r\n };\r\n const minValue = (NumberRange && NumberRange.targetCpa && NumberRange.targetCpa.minValue) || 0.01;\r\n const maxValue = (NumberRange && NumberRange.targetCpa && NumberRange.targetCpa.maxValue) || 4000;\r\n const fieldName =\r\n {\r\n property: 'BiddingScheme/TargetCpa',\r\n control: targetCpaInlineEditorView,\r\n i18n: this.i18n,\r\n curTargetCpa: decimal.fromFloatToString(item.BiddingScheme.TargetCpa),\r\n minValue,\r\n maxValue,\r\n currencySymbol: this.i18n.getCurrencySymbol(PageContext.AccountCurrencyCode),\r\n currencySymbolClassName: `symbol-size-${this.i18n.getCurrencySymbol(PageContext.AccountCurrencyCode).length}`,\r\n };\r\n return InlineEditableColumnPrompt({\r\n position: newPosition,\r\n item: model,\r\n view: this.view,\r\n i18n: this.i18n,\r\n fieldName,\r\n schema: flattenedSchema,\r\n saveModel: (updated, editorView) => {\r\n if (updated['BiddingScheme/TargetCpa'] < minValue || updated['BiddingScheme/TargetCpa'] > maxValue) {\r\n return;\r\n }\r\n const bidObject = cloneDeep(item.BiddingScheme);\r\n bidObject.TargetCpa = updated['BiddingScheme/TargetCpa'];\r\n const toUpdated = _.defaults({\r\n BiddingScheme: bidObject,\r\n }, _.pick(this.item, 'Id'));\r\n\r\n jsData.Campaign\r\n .update(item.Id, toUpdated, { adapter: 'bulk', cacheResponse: false })\r\n .finally(withUiBlock(this.view.grid.gridView.$el))\r\n .then(() => {\r\n editorView.trigger('save');\r\n this.view.grid.gridView.refresh(true);\r\n })\r\n .catch((response) => {\r\n let errorMessage;\r\n const unexpectedError = this.i18n.getString('ErrorNumber_-1');\r\n if (!response || !response.errors) {\r\n errorMessage = unexpectedError;\r\n } else {\r\n const errors = i18nErrors.getBulkApiErrors(response.errors);\r\n if (!errors || !errors[0] || !errors[0].message) {\r\n errorMessage = unexpectedError;\r\n } else {\r\n errorMessage = errors[0].message;\r\n }\r\n }\r\n editorView.setErrors({\r\n 'BiddingScheme/TargetCpa': errorMessage,\r\n });\r\n });\r\n },\r\n parentContainerSelector: '.grid-and-disclaim-container',\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 { CampaignuiBaseColumn } from '@bingads-webui-campaign/campaignui-base-column';\r\nimport { InlineEditableColumnPrompt } from '@bingads-webui-campaign/summary-grid-helper';\r\nimport { Campaign } from '@bingads-webui-campaign/campaign-ui-schemas';\r\nimport jsData from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport * as i18nErrors from '@bingads-webui-component-legacy/api-errors-campaign/index';\r\nimport { cloneDeep } from '@bingads-webui-universal/primitive-utilities';\r\nimport { withUiBlock } from '@bingads-webui/uiblocker';\r\nimport { targetRoasInlineEditorView } from '@bingads-webui-campaign-react/portfolio-bid-strategy-shared';\r\nimport decimal from '@bingads-webui-component-legacy/humanize/decimal';\r\nimport { getBidLandscapeConfigs } from '@bingads-webui-campaign/campaignui-common-columns';\r\nimport template from './bid-strategy-target-roas.pug';\r\n\r\nexport class BidStrategyTargetROASColumn extends CampaignuiBaseColumn {\r\n constructor(options) {\r\n const {\r\n i18n,\r\n view,\r\n helpId = 'pop_BA_CampaignGrids_TargetROAS',\r\n } = options;\r\n\r\n const title = i18n.getString('ColumnName_BidStrategyTargetRoas');\r\n\r\n super({\r\n name: 'DisplayBiddingStrategyTargetRoas',\r\n property: ['BiddingScheme'],\r\n title,\r\n sortable: 'DisplayBiddingStrategyTargetRoas',\r\n type: 'number',\r\n helpId,\r\n bodyClasses: ['grid-column-biddingStrategyTargetRoas'],\r\n helpAriaLabel: i18n.getString('Click to learn more about {{item}}', { item: title }),\r\n enableEdit: item =>\r\n (item.BiddingScheme && _.result(item.BiddingScheme, 'Type') === 'TargetRoas') ||\r\n ((item.CampaignSubType === 'ShoppingSmartAds' || item.CampaignType === 'Default' || item.CampaignType === 'Shopping') && item.BiddingScheme && _.result(item.BiddingScheme, 'Type') === 'MaxConversionValue' && _.result(item.BiddingScheme, 'TargetRoas')),\r\n });\r\n this.i18n = i18n;\r\n this.view = view;\r\n this.permissions = options.permissions;\r\n }\r\n\r\n pickProperty(item) {\r\n return {\r\n Id: item.Id,\r\n Budget: item.Budget,\r\n DeliveryStatus: item.DeliveryStatus,\r\n BiddingScheme: item.BiddingScheme,\r\n DeliveryStatusDetails: item.DeliveryStatusDetails,\r\n IsBidLandscapeAvailable: item.IsBidLandscapeAvailable,\r\n };\r\n }\r\n\r\n template({ value }) {\r\n const { DeliveryStatus } = value;\r\n const isAutoBiddingLimited = DeliveryStatus === 'AutoBiddingLimitedUnAttainableTarget';\r\n let { enabledBidLandscape, hasBidLandscapeIcon } = getBidLandscapeConfigs({\r\n permissions: this.permissions,\r\n value,\r\n });\r\n if (!isAutoBiddingLimited) {\r\n enabledBidLandscape = false;\r\n hasBidLandscapeIcon = false;\r\n }\r\n\r\n const getTargetRoasValue = () => {\r\n if (value && value.BiddingScheme && value.BiddingScheme.TargetRoas) {\r\n return _.isNull(value.BiddingScheme.TargetRoas) ? '-' : decimal.fromFloatToPercentString(value.BiddingScheme.TargetRoas * 100);\r\n }\r\n return '-';\r\n };\r\n\r\n const targetRoasValue = getTargetRoasValue();\r\n\r\n return template({\r\n targetRoasValue,\r\n budgetType: value && value.Budget ? value.Budget.Type : null,\r\n budgetId: value && value.Budget ? value.Budget.Id : null,\r\n enabledBidlandscape: enabledBidLandscape && targetRoasValue !== '-',\r\n hasBidlandscapeIcon: hasBidLandscapeIcon && targetRoasValue !== '-',\r\n i18n: this.i18n,\r\n });\r\n }\r\n\r\n onPrompt({\r\n item, newPosition,\r\n }) {\r\n // disable edit while using existing bid strategy\r\n if (item.BidStrategyName) {\r\n window.App.views.alertCenter.showError(this.i18n.getString('Target_Edit_Not_Support_Hint'));\r\n return undefined;\r\n }\r\n const model = cloneDeep(item);\r\n model['BiddingScheme/TargetRoas'] = decimal.fromLocalToFloat(item.BiddingScheme.TargetRoas * 100.0, 2);\r\n const flattenedSchema = {\r\n ...Campaign,\r\n properties: {\r\n ...Campaign.properties,\r\n 'BiddingScheme/TargetRoas': Campaign.properties.BiddingScheme.schema.properties.TargetRoas,\r\n },\r\n };\r\n const fieldName =\r\n {\r\n property: 'BiddingScheme/TargetRoas',\r\n control: targetRoasInlineEditorView,\r\n i18n: this.i18n,\r\n curTargetRoas: decimal.fromFloatToString(item.BiddingScheme.TargetRoas * 100.0, 2),\r\n };\r\n return InlineEditableColumnPrompt({\r\n position: newPosition,\r\n item: model,\r\n view: this.view,\r\n i18n: this.i18n,\r\n fieldName,\r\n schema: flattenedSchema,\r\n saveModel: (updated, editorView) => {\r\n if (updated['BiddingScheme/TargetRoas'] < 1.0 || updated['BiddingScheme/TargetRoas'] > 100000.0) {\r\n return;\r\n }\r\n const bidObject = cloneDeep(item.BiddingScheme);\r\n bidObject.TargetRoas = (updated['BiddingScheme/TargetRoas'] / 100.0).toFixed(4);\r\n const toUpdated = _.defaults({\r\n BiddingScheme: bidObject,\r\n }, _.pick(this.item, 'Id'));\r\n\r\n jsData.Campaign\r\n .update(item.Id, toUpdated, { adapter: 'bulk', cacheResponse: false })\r\n .finally(withUiBlock(this.view.grid.gridView.$el))\r\n .then(() => {\r\n editorView.trigger('save');\r\n this.view.grid.gridView.refresh(true);\r\n })\r\n .catch((response) => {\r\n let errorMessage;\r\n const unexpectedError = this.i18n.getString('ErrorNumber_-1');\r\n if (!response || !response.errors) {\r\n errorMessage = unexpectedError;\r\n } else {\r\n const errors = i18nErrors.getBulkApiErrors(response.errors);\r\n if (!errors || !errors[0] || !errors[0].message) {\r\n errorMessage = unexpectedError;\r\n } else {\r\n errorMessage = errors[0].message;\r\n }\r\n }\r\n editorView.setErrors({\r\n 'BiddingScheme/TargetRoas': errorMessage,\r\n });\r\n });\r\n },\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 { CampaignuiBaseColumn } from '@bingads-webui-campaign/campaignui-base-column';\r\nimport { InlineEditableColumnPrompt } from '@bingads-webui-campaign/summary-grid-helper';\r\nimport { Campaign } from '@bingads-webui-campaign/campaign-ui-schemas';\r\nimport jsData from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport * as i18nErrors from '@bingads-webui-component-legacy/api-errors-campaign/index';\r\nimport { cloneDeep } from '@bingads-webui-universal/primitive-utilities';\r\nimport PageContext from '@bingads-webui-static-legacy/page-context';\r\nimport { withUiBlock } from '@bingads-webui/uiblocker';\r\nimport { manualCpiInlineEditorView } from '@bingads-webui-campaign-react/portfolio-bid-strategy-shared';\r\nimport { NumberRange } from '@bingads-webui-campaign-legacy/bidding-strategy/viewmodel/setting';\r\nimport decimal from '@bingads-webui-component-legacy/humanize/decimal';\r\n\r\nexport class BidStrategyManualCPIColumn extends CampaignuiBaseColumn {\r\n constructor({\r\n i18n, view, helpId = 'pop_BA_CampaignGrids_ManualCPI',\r\n }) {\r\n const title = i18n.getString('BiddingStrategyType_ManualCpi');\r\n\r\n super({\r\n name: 'DisplayBiddingStrategyManualCpi',\r\n property: 'BiddingScheme',\r\n title,\r\n sortable: 'DisplayBiddingStrategyManualCpi',\r\n type: 'number',\r\n helpId,\r\n helpAriaLabel: i18n.getString('Click to learn more about {{item}}', { item: title }),\r\n enableEdit: item =>\r\n item.BiddingScheme && item.BiddingScheme.Type === 'ManualCpa' && item.CampaignType === 'App' && item.BiddingScheme.ManualCPI,\r\n });\r\n this.i18n = i18n;\r\n this.view = view;\r\n }\r\n\r\n pickProperty(item) {\r\n return _.result(item, 'BiddingScheme', null);\r\n }\r\n\r\n template({ value }) {\r\n if (value && value.ManualCPI) {\r\n return _.isNull(value.ManualCPI) ? '-' : decimal.fromFloatToString(value.ManualCPI);\r\n }\r\n return '-';\r\n }\r\n\r\n onPrompt({\r\n item, newPosition,\r\n }) {\r\n // disable edit while using existing bid strategy\r\n if (item.BidStrategyName) {\r\n window.App.views.alertCenter.showError(this.i18n.getString('Target_Edit_Not_Support_Hint'));\r\n return undefined;\r\n }\r\n const model = cloneDeep(item);\r\n model['BiddingScheme/ManualCpi'] = item.BiddingScheme.ManualCPI;\r\n const flattenedSchema = {\r\n ...Campaign,\r\n properties: {\r\n ...Campaign.properties,\r\n 'BiddingScheme/ManualCpi': Campaign.properties.BiddingScheme.schema.properties.ManualCpi,\r\n },\r\n };\r\n const minValue = (NumberRange && NumberRange.manualCpi && NumberRange.manualCpi.minValue) || 0.01;\r\n const maxValue = (NumberRange && NumberRange.manualCpi && NumberRange.manualCpi.maxValue) || 4000;\r\n const fieldName =\r\n {\r\n property: 'BiddingScheme/ManualCpi',\r\n control: manualCpiInlineEditorView,\r\n i18n: this.i18n,\r\n curTargetCpi: decimal.fromFloatToString(item.BiddingScheme.ManualCPI),\r\n minValue,\r\n maxValue,\r\n currencySymbol: this.i18n.getCurrencySymbol(PageContext.AccountCurrencyCode),\r\n currencySymbolClassName: `symbol-size-${this.i18n.getCurrencySymbol(PageContext.AccountCurrencyCode).length}`,\r\n };\r\n return InlineEditableColumnPrompt({\r\n position: newPosition,\r\n item: model,\r\n view: this.view,\r\n i18n: this.i18n,\r\n fieldName,\r\n schema: flattenedSchema,\r\n saveModel: (updated, editorView) => {\r\n if (updated['BiddingScheme/ManualCpi'] < minValue || updated['BiddingScheme/ManualCpi'] > maxValue) {\r\n return;\r\n }\r\n const bidObject = cloneDeep(item.BiddingScheme);\r\n bidObject.ManualCpi = updated['BiddingScheme/ManualCpi'];\r\n const toUpdated = _.defaults({\r\n BiddingScheme: bidObject,\r\n }, _.pick(this.item, 'Id'));\r\n\r\n jsData.Campaign\r\n .update(item.Id, toUpdated, { adapter: 'bulk', cacheResponse: false })\r\n .finally(withUiBlock(this.view.grid.gridView.$el))\r\n .then(() => {\r\n editorView.trigger('save');\r\n this.view.grid.gridView.refresh(true);\r\n })\r\n .catch((response) => {\r\n let errorMessage;\r\n const unexpectedError = this.i18n.getString('ErrorNumber_-1');\r\n if (!response || !response.errors) {\r\n errorMessage = unexpectedError;\r\n } else {\r\n const errors = i18nErrors.getBulkApiErrors(response.errors);\r\n if (!errors || !errors[0] || !errors[0].message) {\r\n errorMessage = unexpectedError;\r\n } else {\r\n errorMessage = errors[0].message;\r\n }\r\n }\r\n editorView.setErrors({\r\n 'BiddingScheme/ManualCpi': errorMessage,\r\n });\r\n });\r\n },\r\n parentContainerSelector: '.grid-and-disclaim-container',\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 { CampaignuiBaseColumn } from '@bingads-webui-campaign/campaignui-base-column';\r\nimport { InlineEditableColumnPrompt } from '@bingads-webui-campaign/summary-grid-helper';\r\nimport { Campaign } from '@bingads-webui-campaign/campaign-ui-schemas';\r\nimport jsData from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport * as i18nErrors from '@bingads-webui-component-legacy/api-errors-campaign/index';\r\nimport { cloneDeep } from '@bingads-webui-universal/primitive-utilities';\r\nimport PageContext from '@bingads-webui-static-legacy/page-context';\r\nimport { withUiBlock } from '@bingads-webui/uiblocker';\r\nimport { manualCpcInlineEditorView } from '@bingads-webui-campaign-react/portfolio-bid-strategy-shared';\r\nimport { NumberRange } from '@bingads-webui-campaign-legacy/bidding-strategy/viewmodel/setting';\r\nimport decimal from '@bingads-webui-component-legacy/humanize/decimal';\r\n\r\nexport class BidStrategyManualCPCColumn extends CampaignuiBaseColumn {\r\n constructor({\r\n i18n, view, helpId = 'pop_BA_CampaignGrids_ManualCPI',\r\n }) {\r\n const title = i18n.getString('BiddingStrategyType_ManualCpc');\r\n\r\n super({\r\n name: 'DisplayBiddingStrategyManualCpc',\r\n property: 'BiddingScheme',\r\n title,\r\n sortable: 'DisplayBiddingStrategyManualCpc',\r\n type: 'number',\r\n helpId,\r\n helpAriaLabel: i18n.getString('Click to learn more about {{item}}', { item: title }),\r\n enableEdit: item =>\r\n item.BiddingScheme && item.BiddingScheme.Type === 'ManualCpc' && item.CampaignType === 'App' && item.BiddingScheme.ManualCPC,\r\n });\r\n this.i18n = i18n;\r\n this.view = view;\r\n }\r\n\r\n pickProperty(item) {\r\n return _.result(item, 'BiddingScheme', null);\r\n }\r\n\r\n template({ value }) {\r\n if (value && value.ManualCPC) {\r\n return _.isNull(value.ManualCPC) ? '-' : decimal.fromFloatToString(value.ManualCPC);\r\n }\r\n return '-';\r\n }\r\n\r\n onPrompt({\r\n item, newPosition,\r\n }) {\r\n // disable edit while using existing bid strategy\r\n if (item.BidStrategyName) {\r\n window.App.views.alertCenter.showError(this.i18n.getString('Target_Edit_Not_Support_Hint'));\r\n return undefined;\r\n }\r\n const model = cloneDeep(item);\r\n model['BiddingScheme/ManualCpc'] = item.BiddingScheme.ManualCPC;\r\n const flattenedSchema = {\r\n ...Campaign,\r\n properties: {\r\n ...Campaign.properties,\r\n 'BiddingScheme/ManualCpc': Campaign.properties.BiddingScheme.schema.properties.ManualCpc,\r\n },\r\n };\r\n const minValue = (NumberRange && NumberRange.manualCpc && NumberRange.manualCpc.minValue) || 0.01;\r\n const maxValue = (NumberRange && NumberRange.manualCpc && NumberRange.manualCpc.maxValue) || 4000;\r\n const fieldName =\r\n {\r\n property: 'BiddingScheme/ManualCpc',\r\n control: manualCpcInlineEditorView,\r\n i18n: this.i18n,\r\n curTargetCpc: decimal.fromFloatToString(item.BiddingScheme.ManualCPC),\r\n minValue,\r\n maxValue,\r\n currencySymbol: this.i18n.getCurrencySymbol(PageContext.AccountCurrencyCode),\r\n currencySymbolClassName: `symbol-size-${this.i18n.getCurrencySymbol(PageContext.AccountCurrencyCode).length}`,\r\n };\r\n return InlineEditableColumnPrompt({\r\n position: newPosition,\r\n item: model,\r\n view: this.view,\r\n i18n: this.i18n,\r\n fieldName,\r\n schema: flattenedSchema,\r\n saveModel: (updated, editorView) => {\r\n if (updated['BiddingScheme/ManualCpc'] < minValue || updated['BiddingScheme/ManualCpc'] > maxValue) {\r\n return;\r\n }\r\n const bidObject = cloneDeep(item.BiddingScheme);\r\n bidObject.ManualCpc = updated['BiddingScheme/ManualCpc'];\r\n const toUpdated = _.defaults({\r\n BiddingScheme: bidObject,\r\n }, _.pick(this.item, 'Id'));\r\n\r\n jsData.Campaign\r\n .update(item.Id, toUpdated, { adapter: 'bulk', cacheResponse: false })\r\n .finally(withUiBlock(this.view.grid.gridView.$el))\r\n .then(() => {\r\n editorView.trigger('save');\r\n this.view.grid.gridView.refresh(true);\r\n })\r\n .catch((response) => {\r\n let errorMessage;\r\n const unexpectedError = this.i18n.getString('ErrorNumber_-1');\r\n if (!response || !response.errors) {\r\n errorMessage = unexpectedError;\r\n } else {\r\n const errors = i18nErrors.getBulkApiErrors(response.errors);\r\n if (!errors || !errors[0] || !errors[0].message) {\r\n errorMessage = unexpectedError;\r\n } else {\r\n errorMessage = errors[0].message;\r\n }\r\n }\r\n editorView.setErrors({\r\n 'BiddingScheme/ManualCpc': errorMessage,\r\n });\r\n });\r\n },\r\n parentContainerSelector: '.grid-and-disclaim-container',\r\n });\r\n }\r\n}\r\n","import { inlineEditSave } from '@bingads-webui-campaign/summary-grid-helper';\r\nimport jsData from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport * as i18nErrors from '@bingads-webui-component-legacy/api-errors-campaign/index';\r\n\r\nconst save = ({\r\n view,\r\n i18n,\r\n updated,\r\n fieldName,\r\n scenario,\r\n editorView,\r\n editorViewCallbackAfterUpdate,\r\n isDateType,\r\n}) => inlineEditSave({\r\n id: updated.Id,\r\n fieldName,\r\n updatedItem: updated,\r\n refreshGrid: true,\r\n}, {\r\n view,\r\n gridView: view.grid.gridView,\r\n resource: jsData.Campaign,\r\n scenario,\r\n i18n,\r\n i18nErrors,\r\n editorView,\r\n editorViewCallbackAfterUpdate,\r\n isDateType,\r\n});\r\n\r\nexport const getDateSaveAction = (fieldName, scenario) =>\r\n props => save({\r\n ...props,\r\n fieldName,\r\n scenario,\r\n });\r\n","import '@bingads-webui/kendo/kendo.data';\r\nimport { CampaignuiBaseColumn } from '@bingads-webui-campaign/campaignui-base-column';\r\nimport { DateInlineEditableColumnPrompt } from '@bingads-webui-campaign/date-inline-edit-prompt';\r\nimport { convertUTCDateToMachineDate, getCurrentDate, formatDate } from '@bingads-webui-campaign/summary-grid-helper';\r\n\r\nimport { getDateSaveAction } from '../inline-editable/date-save';\r\n\r\nconst fieldName = 'StartDate';\r\n\r\nexport class StartDateColumn extends CampaignuiBaseColumn {\r\n constructor({ i18n, view, isForVNext }) {\r\n const title = i18n.getString('ColumnName_StartDate');\r\n\r\n super({\r\n name: fieldName,\r\n property: [fieldName, 'UseCampaignLevelDates'],\r\n title,\r\n editable: true,\r\n sortable: fieldName,\r\n type: 'string',\r\n helpId: 'Page_CampaignGrids_StartDate',\r\n enableEdit: item => item.UseCampaignLevelDates && new Date(item.StartDate) > getCurrentDate(),\r\n helpAriaLabel: i18n.getString('Click to learn more about {{item}}', { item: title }),\r\n });\r\n this.i18n = i18n;\r\n this.view = view;\r\n this.isForVNext = isForVNext;\r\n }\r\n\r\n pickProperty(item) {\r\n if (item.$total) {\r\n return '';\r\n }\r\n\r\n return item.UseCampaignLevelDates && item.StartDate\r\n ? formatDate(item.StartDate, this.i18n)\r\n : this.i18n.getString('StartDate_None');\r\n }\r\n\r\n onPrompt({ position, item, newPosition }) {\r\n const saveDate = getDateSaveAction(fieldName, 'CampaignsGridStartDateColumn');\r\n\r\n const options = {\r\n position: this.isForVNext ? newPosition : position,\r\n isForVNext: this.isForVNext,\r\n item,\r\n view: this.view,\r\n i18n: this.i18n,\r\n fieldName,\r\n allowNoDate: false,\r\n selectedDate: convertUTCDateToMachineDate(new Date(item.StartDate), this.i18n),\r\n updater: saveDate,\r\n };\r\n\r\n if (item.EndDate) {\r\n options.maxDate = convertUTCDateToMachineDate(new Date(item.EndDate), this.i18n);\r\n }\r\n return DateInlineEditableColumnPrompt(options);\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport '@bingads-webui/kendo/kendo.data';\r\nimport { CampaignuiBaseColumn } from '@bingads-webui-campaign/campaignui-base-column';\r\nimport { DateInlineEditableColumnPrompt } from '@bingads-webui-campaign/date-inline-edit-prompt';\r\nimport { convertUTCDateToMachineDate, displayDate } from '@bingads-webui-campaign/summary-grid-helper';\r\nimport { getLaterDate } from '@bingads-webui-campaign/date-setting';\r\n\r\nimport { getDateSaveAction } from '../inline-editable/date-save';\r\n\r\nconst fieldName = 'EndDate';\r\n\r\nexport class EndDateColumn extends CampaignuiBaseColumn {\r\n constructor({ i18n, view, isForVNext }) {\r\n const title = i18n.getString('ColumnName_EndDate');\r\n\r\n super({\r\n name: fieldName,\r\n property: [fieldName, 'UseCampaignLevelDates'],\r\n title,\r\n editable: true,\r\n enableEdit: item => item.UseCampaignLevelDates,\r\n sortable: fieldName,\r\n type: 'string',\r\n helpId: 'Page_CampaignGrids_EndDate',\r\n helpAriaLabel: i18n.getString('Click to learn more about {{item}}', { item: title }),\r\n });\r\n this.i18n = i18n;\r\n this.view = view;\r\n this.isForVNext = isForVNext;\r\n }\r\n\r\n pickProperty(item) {\r\n if (item.$total) {\r\n return '';\r\n }\r\n\r\n return item.UseCampaignLevelDates\r\n ? displayDate(item.EndDate, 'EndDate_None', this.i18n)\r\n : this.i18n.getString('EndDate_Unavailable');\r\n }\r\n\r\n getMaxDate(budgetType, startDate) {\r\n if (budgetType === 'LifetimeBudgetStandard') {\r\n return getLaterDate(startDate, 365);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n onPrompt({ position, item, newPosition }) {\r\n const groupClass = `grid-group-${_.result(this.config, 'group', 'other')}`;\r\n const localizedStartDate = convertUTCDateToMachineDate(new Date(item.StartDate), this.i18n);\r\n\r\n const saveDate = getDateSaveAction(fieldName, 'CampaignsGridEndDateColumn');\r\n\r\n const options = {\r\n position: this.isForVNext ? newPosition : position,\r\n isForVNext: this.isForVNext,\r\n item,\r\n view: this.view,\r\n i18n: this.i18n,\r\n fieldName,\r\n allowNoDate: item.Budget?.Type === 'DailyStandard',\r\n minDate: localizedStartDate,\r\n maxDate: this.getMaxDate(item.Budget?.Type, localizedStartDate),\r\n customClass: groupClass,\r\n updater: saveDate,\r\n };\r\n\r\n if (item.EndDate) {\r\n options.selectedDate = convertUTCDateToMachineDate(new Date(item.EndDate), this.i18n);\r\n }\r\n return DateInlineEditableColumnPrompt(options);\r\n }\r\n}\r\n","/* eslint-disable import/extensions */\r\n/* eslint-disable import/no-unresolved */\r\nimport _ from 'underscore';\r\nimport { CampaignuiBaseColumn } from '@bingads-webui-campaign/campaignui-base-column';\r\nimport { Campaign } from '@bingads-webui-campaign/campaign-ui-schemas';\r\nimport jsData from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport decimal from '@bingads-webui-component-legacy/humanize/decimal';\r\nimport { targetImpressionShareInlineEditorView, targetAdPositionInlineEditorView } from '@bingads-webui-campaign-react/portfolio-bid-strategy-shared';\r\nimport * as PopupEditor from '@bingads-webui/popup-editor';\r\nimport * as i18nErrors from '@bingads-webui-component-legacy/api-errors-campaign/index';\r\nimport { cloneDeep } from '@bingads-webui-universal/primitive-utilities';\r\nimport { withUiBlock } from '@bingads-webui/uiblocker';\r\n\r\nexport class BidStrategyTargetImpressionShareColumn extends CampaignuiBaseColumn {\r\n constructor({ i18n, view, helpId = 'pop_BA_CampaignGrids_TargetImprShare' }) {\r\n const title = i18n.getString('ColumnName_BidStrategyTargetImpressionShare');\r\n\r\n super({\r\n name: 'DisplayBiddingStrategyTargetImpressionShare',\r\n property: 'BiddingScheme',\r\n title,\r\n sortable: 'DisplayBiddingStrategyTargetImpressionShare',\r\n type: 'number',\r\n helpId,\r\n helpAriaLabel: i18n.getString('Click to learn more about {{item}}', { item: title }),\r\n enableEdit: item =>\r\n item.BiddingScheme && item.BiddingScheme.Type === 'TargetImpressionShare',\r\n });\r\n this.i18n = i18n;\r\n this.view = view;\r\n }\r\n\r\n pickProperty(item) {\r\n return _.result(item, 'BiddingScheme', null);\r\n }\r\n\r\n template({ value }) {\r\n if (value && value.TargetImpressionShare) {\r\n return _.isNull(value.TargetImpressionShare) ? '-' : decimal.fromFloatToPercentString(value.TargetImpressionShare);\r\n }\r\n return '-';\r\n }\r\n\r\n onPrompt({\r\n item, newPosition,\r\n }) {\r\n // disable edit while using existing bid strategy\r\n if (item.BidStrategyName) {\r\n window.App.views.alertCenter.showError(this.i18n.getString('Target_Edit_Not_Support_Hint'));\r\n return undefined;\r\n }\r\n const model = cloneDeep(item);\r\n model['BiddingScheme/TargetImpressionShare'] = item.BiddingScheme.TargetImpressionShare;\r\n model['BiddingScheme/TargetAdPosition'] = item.BiddingScheme.TargetAdPosition;\r\n const flattenedSchema = {\r\n ...Campaign,\r\n properties: {\r\n ...Campaign.properties,\r\n 'BiddingScheme/TargetImpressionShare': Campaign.properties.BiddingScheme.schema.properties.TargetImpressionShare,\r\n 'BiddingScheme/TargetAdPosition': Campaign.properties.BiddingScheme.schema.properties.TargetAdPosition,\r\n },\r\n };\r\n const fields =\r\n [{\r\n property: 'BiddingScheme/TargetImpressionShare',\r\n valueProperty: 'BiddingScheme/TargetAdPosition',\r\n control: targetImpressionShareInlineEditorView,\r\n i18n: this.i18n,\r\n curTargetImpressionShare: decimal.fromFloatToString(item.BiddingScheme.TargetImpressionShare),\r\n curTargetAdPosition: item.BiddingScheme.TargetAdPosition,\r\n },\r\n {\r\n property: 'BiddingScheme/TargetAdPosition',\r\n control: targetAdPositionInlineEditorView,\r\n }];\r\n return PopupEditor.prompt({\r\n position: newPosition,\r\n i18n: this.i18n,\r\n schema: flattenedSchema,\r\n model,\r\n fields,\r\n hasLabels: false,\r\n template: 'inline',\r\n saveModel: (updated, editorView) => {\r\n if (updated['BiddingScheme/TargetImpressionShare'] < 0.01 || updated['BiddingScheme/TargetImpressionShare'] > 100.0) {\r\n return;\r\n }\r\n const bidObject = cloneDeep(item.BiddingScheme);\r\n bidObject.TargetImpressionShare = updated['BiddingScheme/TargetImpressionShare'];\r\n bidObject.TargetAdPosition = updated['BiddingScheme/TargetAdPosition'];\r\n const toUpdated = _.defaults({\r\n BiddingScheme: bidObject,\r\n }, _.pick(this.item, 'Id'));\r\n\r\n jsData.Campaign\r\n .update(item.Id, toUpdated, { adapter: 'bulk', cacheResponse: false })\r\n .finally(withUiBlock(this.view.grid.gridView.$el))\r\n .then(() => {\r\n editorView.trigger('save');\r\n this.view.grid.gridView.refresh(true);\r\n })\r\n .catch((response) => {\r\n let errorMessage;\r\n const unexpectedError = this.i18n.getString('ErrorNumber_-1');\r\n if (!response || !response.errors) {\r\n errorMessage = unexpectedError;\r\n } else {\r\n const errors = i18nErrors.getBulkApiErrors(response.errors);\r\n if (!errors || !errors[0] || !errors[0].message) {\r\n errorMessage = unexpectedError;\r\n } else {\r\n errorMessage = errors[0].message;\r\n }\r\n }\r\n editorView.setErrors({\r\n 'BiddingScheme/TargetImpressionShare': errorMessage,\r\n });\r\n });\r\n },\r\n parentContainerSelector: '.grid-and-disclaim-container',\r\n });\r\n }\r\n}\r\n","import { CampaignuiBaseColumn } from '@bingads-webui-campaign/campaignui-base-column';\r\nimport _ from 'underscore';\r\nimport OptimizationScoreTemplate from './optimization-score.pug';\r\n\r\nexport class OptimizationScoreColumn extends CampaignuiBaseColumn {\r\n constructor({ i18n }) {\r\n super({\r\n name: 'OptimizationScore',\r\n property: 'OptimizationScore',\r\n title: i18n.getString('ColumnName_OptimizationScore'),\r\n sortable: 'OptimizationScore',\r\n bodyClasses: ['grid-column-OptimizationScoreColumn'],\r\n type: 'number',\r\n helpId: 'Pop_BA_Recommendations_OptScoreAcct',\r\n });\r\n this.i18n = i18n;\r\n }\r\n\r\n pickProperty(item) {\r\n const { Id: cpid, Name } = item;\r\n const ariaLabel = this.i18n.getString('Click to scope to the recommendation with campaign {{campaignName}}', { campaignName: Name });\r\n return {\r\n display: _.has(item, 'OptimizationScore'), OptimizationScore: _.result(item, 'OptimizationScore', null), cpid, ariaLabel,\r\n };\r\n }\r\n\r\n template({ value }) {\r\n const newProps = _.defaults({ value: this.formatter(value.OptimizationScore), pathname: '/campaign/vnext/recommendations/All' }, value);\r\n return OptimizationScoreTemplate(newProps);\r\n }\r\n\r\n get formatter() {\r\n if (!this.cached.formatter) {\r\n this.cached.formatter = val =>\r\n (_.isFinite(val) ?\r\n _.compose(this.i18n.percentToFixedFormatter({ digits: 1 }), Number)(val)\r\n : val);\r\n }\r\n return this.cached.formatter;\r\n }\r\n}\r\n","import { CampaignuiBaseColumn } from '@bingads-webui-campaign/campaignui-base-column';\r\nimport PerformanceInsightsTemplate from './performance-insights.pug';\r\n\r\nexport class PerformanceInsightsColumn extends CampaignuiBaseColumn {\r\n constructor({ i18n }) {\r\n super({\r\n name: 'PerformanceInsights',\r\n property: 'PerformanceInsights',\r\n title: i18n.getString('ColumnName_PerformanceInsights'),\r\n sortable: 'PerformanceInsights',\r\n bodyClasses: ['grid-column-PerformanceInsightsColumn'],\r\n type: 'number',\r\n helpId: 'Pop_BA_Recommendations_OptScoreAcct', // TODO: Update helpId\r\n });\r\n this.i18n = i18n;\r\n }\r\n\r\n pickProperty(item) {\r\n // TODO: integrate API response\r\n let performanceInsights = {\r\n issue: 0,\r\n recommendation: 0,\r\n };\r\n if (item.Name === 'OPT-Test-Campaign-00') {\r\n performanceInsights = {\r\n issue: 2,\r\n recommendation: 1,\r\n };\r\n } else if (item.Name === 'OPT-Test-Campaign-01') {\r\n performanceInsights = {\r\n issue: 0,\r\n recommendation: 1,\r\n };\r\n }\r\n return performanceInsights;\r\n }\r\n\r\n template({ value }) {\r\n const { i18n } = this;\r\n const { issue, recommendation } = value;\r\n let status = '-';\r\n if (issue > 0) {\r\n status = issue === 1 ? i18n.getString('Issue_Singular', { n: issue }) : i18n.getString('Issues', { n: issue });\r\n } else if (recommendation > 0) {\r\n status = recommendation === 1 ? i18n.getString('Recommendation_Singular', { n: recommendation }) : i18n.getString('Recommendations', { n: recommendation });\r\n }\r\n return PerformanceInsightsTemplate({ status, issue, recommendation });\r\n }\r\n}\r\n","/* eslint-disable import/extensions */\r\n/* eslint-disable import/no-unresolved */\r\nimport _ from 'underscore';\r\nimport { campaignMetricCategoriesFactory } from '@bingads-webui/custom-columns-shared-config';\r\nimport { RSAAdCustomizerAttributeColumn } from '@bingads-webui-campaign/rsa-ad-customizer-attribute-column';\r\n\r\nimport {\r\n BudgetColumn,\r\n LifetimeBudgetColumn,\r\n QualityScoreColumn,\r\n ColumnCTR,\r\n ColumnAverageCPC,\r\n ColumnAveragePosition,\r\n ColumnTopImpressionRate,\r\n ColumnAbsoluteTopImpressionRate,\r\n ColumnConversions,\r\n ColumnConversionsCredit,\r\n DeliveryColumn,\r\n ColumnClicksWithFluctuation,\r\n ColumnImpressionsWithFluctuation,\r\n ColumnSpendWithFluctuation,\r\n BidStrategyNameColumn,\r\n CampaignBidStrategyTypeColumn as BidStrategyTypeColumn,\r\n ColumnViewThroughConversionsCredit,\r\n ColumnViewThroughConversions,\r\n} from '@bingads-webui-campaign/campaignui-common-columns';\r\nimport {\r\n CampaignCashbackPercentColumn,\r\n CashbackBudgetColumn,\r\n CampaignCashbackScopeColumn,\r\n CampaignCouponColumn,\r\n} from '@bingads-webui-campaign/personalized-offer-columns';\r\n\r\nimport { LabelsColumn } from '@bingads-webui-campaign/labels';\r\nimport { ColumnsConfigBuilder } from '@bingads-webui-campaign/summary-grid-helper';\r\nimport config from '@bingads-webui-component-legacy/config/index';\r\nimport decimal from '@bingads-webui-component-legacy/humanize/decimal';\r\nimport { Columns, SelectedColumns } from '@bingads-webui-component-legacy/bingads-grid/service/column-chooser-preferences';\r\nimport { CustomColumns } from '@bingads-webui-component-legacy/bingads-grid/service/custom-column-preferences';\r\nimport { LegacyColumns, LegacySelectedColumns } from '@bingads-webui-component-legacy/bingads-grid/service/legacy-column-chooser-preferences';\r\nimport { LegacyGridFlag } from '@bingads-webui-component-legacy/bingads-grid/service/legacy-grid-flag-preferences';\r\nimport InlineSharedBudgetEditor from '@bingads-webui-campaign-legacy/shared-budget/view/campaigns-grid-inline-shared-budget-editor';\r\nimport InlineBudgetEditor from '@bingads-webui-campaign-legacy/budget/view/inline-budget-editor';\r\nimport jsData from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport * as i18nErrors from '@bingads-webui-component-legacy/api-errors-campaign/index';\r\n\r\nimport { CampaignIdColumn } from './attributes/campaign-id';\r\nimport { CampaignLanguagesColumn } from './attributes/campaign-languages';\r\nimport { CampaignTypeColumn } from './attributes/campaign-type';\r\nimport { CampaignColumn } from './attributes/campaign';\r\nimport { StatusIconColumn } from './attributes/status-icon';\r\nimport { BidStrategyTargetCPAColumn } from './attributes/bid-strategy-target-cpa';\r\nimport { BidStrategyTargetROASColumn } from './attributes/bid-strategy-target-roas';\r\nimport { BidStrategyManualCPIColumn } from './attributes/bid-strategy-manual-cpi';\r\nimport { BidStrategyManualCPCColumn } from './attributes/bid-strategy-manual-cpc';\r\nimport { StartDateColumn } from './attributes/start-date';\r\nimport { EndDateColumn } from './attributes/end-date';\r\nimport { BidStrategyTargetImpressionShareColumn } from './attributes/bid-strategy-target-impression-share';\r\nimport { OptimizationScoreColumn } from './attributes/optimization-score';\r\nimport { PerformanceInsightsColumn } from './attributes/performance-insights';\r\nimport template from './attributes/budget.pug';\r\n\r\nconst Permissions = config.get('Permissions');\r\nconst i18n = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/feature/campaigns-tab/campaigns');\r\n\r\n// we use the shared version of delivery column to share code, but we need to keep the legacy name\r\n// otherwise, user column chooser preference will break\r\nclass DeliveryColumnForCampaign extends DeliveryColumn {\r\n constructor(...args) {\r\n super(...args);\r\n\r\n this.config.name = 'DeliveryStatus';\r\n }\r\n}\r\n\r\nconst {\r\n IsViewThroughConversionEnabled,\r\n IsAudienceSOVEnabled,\r\n IsAvgPositionDeprecationPhase1Enabled,\r\n IsAvgPositionDeprecationPhase2Enabled,\r\n IsPersonalizedOffersEnabled,\r\n IsPersonalizedOffersV2Enabled,\r\n IsPersonalizedOffersV3Enabled,\r\n IsViewThroughConversionsRevenueEnabled,\r\n IsPersonalizedOffersV4Enabled,\r\n IsOptimizationScoreInCampaignsGridEnabled,\r\n dynamic = {},\r\n IsPerformanceInsightsEnabled,\r\n} = Permissions;\r\nconst {\r\n PartialConversions: IsPartialConversionsEnabled,\r\n ColumnConversion: IsColumnConversionEnabled,\r\n CPSReporting,\r\n InstallPerformanceColumns,\r\n ConvValueRules,\r\n CampaignLifetimeBudget: IsCampaignLifetimeBudgetEnabled,\r\n} = dynamic;\r\nconst usePartialConversions = IsPartialConversionsEnabled && IsColumnConversionEnabled;\r\n\r\nconst isPortfolioBidStrategyEnabled = _.result(Permissions.dynamic, 'PortfolioBidStrategy');\r\nconst isAppAdsCampaignPhaseOneEnabled = _.result(Permissions.dynamic, 'AppAdsCampaignPhaseOne');\r\nconst isUnifiedAppAdsEnabled = _.result(Permissions.dynamic, 'UnifiedAppAds');\r\n\r\nfunction isCampaignTypeAllowed() {\r\n return Permissions.IsEnhancedShoppingCampaignAllowed ||\r\n Permissions.IsDynamicSearchAdsV1Enabled ||\r\n Permissions.IsAIMCampaignEnabled;\r\n}\r\n\r\nfunction getBuilder(options) {\r\n const builder = new ColumnsConfigBuilder({ Permissions });\r\n\r\n const getCampaignTypeGlobalFilter = options && options.getCampaignTypeGlobalFilter;\r\n\r\n builder\r\n .addCategory('Attributes', category => category.addColumns(_.compact([\r\n StatusIconColumn,\r\n CampaignColumn,\r\n BudgetColumn,\r\n IsCampaignLifetimeBudgetEnabled && LifetimeBudgetColumn,\r\n IsOptimizationScoreInCampaignsGridEnabled ? OptimizationScoreColumn : null,\r\n IsPerformanceInsightsEnabled ? PerformanceInsightsColumn : null,\r\n DeliveryColumnForCampaign,\r\n CampaignIdColumn,\r\n isCampaignTypeAllowed() ? CampaignTypeColumn : null,\r\n isPortfolioBidStrategyEnabled && BidStrategyNameColumn,\r\n BidStrategyTypeColumn,\r\n IsCampaignLifetimeBudgetEnabled && StartDateColumn,\r\n IsCampaignLifetimeBudgetEnabled && EndDateColumn,\r\n BidStrategyTargetCPAColumn,\r\n isAppAdsCampaignPhaseOneEnabled && BidStrategyManualCPIColumn,\r\n isUnifiedAppAdsEnabled && BidStrategyManualCPCColumn,\r\n BidStrategyTargetROASColumn,\r\n BidStrategyTargetImpressionShareColumn,\r\n QualityScoreColumn,\r\n CampaignLanguagesColumn,\r\n LabelsColumn,\r\n IsPersonalizedOffersEnabled && !IsPersonalizedOffersV4Enabled\r\n ? CampaignCashbackScopeColumn : null,\r\n IsPersonalizedOffersEnabled && !IsPersonalizedOffersV4Enabled &&\r\n !(IsPersonalizedOffersV2Enabled || IsPersonalizedOffersV3Enabled) ?\r\n CashbackBudgetColumn : null,\r\n IsPersonalizedOffersEnabled && !IsPersonalizedOffersV4Enabled ?\r\n CampaignCashbackPercentColumn : null,\r\n IsPersonalizedOffersV3Enabled && !IsPersonalizedOffersV4Enabled ? CampaignCouponColumn : null,\r\n ])))\r\n .addPerformanceCategoryForCampaign({\r\n withFluctuations: true,\r\n IsAvgPositionDeprecationPhase2Enabled,\r\n getCampaignTypeGlobalFilter,\r\n })\r\n .addConversionsCategory({\r\n withFluctuations: true,\r\n withPartialConversions: IsPartialConversionsEnabled,\r\n IsViewThroughConversionEnabled,\r\n IsViewThroughConversionsRevenueEnabled,\r\n IsColumnConversionEnabled,\r\n isCPSEnabled: CPSReporting,\r\n isInstallColumnsEnabled: InstallPerformanceColumns,\r\n isConversionValueRuleColumnsEnabled: ConvValueRules,\r\n })\r\n .addCompetitiveCategoryForCampaignOrAdGroups({\r\n IsAudienceSOVEnabled,\r\n });\r\n\r\n if (Permissions.IsCallMeteringAllowed) {\r\n builder.addCallDetailsCategoryForCampaigns();\r\n }\r\n\r\n builder\r\n .setLockedColumns(_.compact([\r\n StatusIconColumn,\r\n CampaignColumn,\r\n ]))\r\n .setSelectedColumns(_.compact([\r\n StatusIconColumn,\r\n CampaignColumn,\r\n BudgetColumn,\r\n IsCampaignLifetimeBudgetEnabled && LifetimeBudgetColumn,\r\n IsOptimizationScoreInCampaignsGridEnabled ? OptimizationScoreColumn : null,\r\n IsPerformanceInsightsEnabled ? PerformanceInsightsColumn : null,\r\n DeliveryColumnForCampaign,\r\n isCampaignTypeAllowed() ? CampaignTypeColumn : null,\r\n isPortfolioBidStrategyEnabled && BidStrategyNameColumn,\r\n BidStrategyTypeColumn,\r\n IsCampaignLifetimeBudgetEnabled && StartDateColumn,\r\n IsCampaignLifetimeBudgetEnabled && EndDateColumn,\r\n BidStrategyTargetCPAColumn,\r\n isAppAdsCampaignPhaseOneEnabled && BidStrategyManualCPIColumn,\r\n isUnifiedAppAdsEnabled && BidStrategyManualCPCColumn,\r\n BidStrategyTargetROASColumn,\r\n BidStrategyTargetImpressionShareColumn,\r\n LabelsColumn,\r\n ColumnClicksWithFluctuation,\r\n ColumnImpressionsWithFluctuation,\r\n ColumnCTR,\r\n ColumnAverageCPC,\r\n ColumnSpendWithFluctuation,\r\n usePartialConversions && ColumnConversionsCredit,\r\n !usePartialConversions && ColumnConversions,\r\n usePartialConversions && ColumnViewThroughConversionsCredit,\r\n !usePartialConversions && ColumnViewThroughConversions,\r\n !IsAvgPositionDeprecationPhase1Enabled\r\n && !IsAvgPositionDeprecationPhase2Enabled\r\n && ColumnAveragePosition,\r\n IsAvgPositionDeprecationPhase1Enabled && ColumnTopImpressionRate,\r\n IsAvgPositionDeprecationPhase1Enabled && ColumnAbsoluteTopImpressionRate,\r\n ]));\r\n\r\n return builder;\r\n}\r\n\r\nexport function getColumnsConfig(options) {\r\n _.extend(options, {\r\n InlineSharedBudgetEditor,\r\n InlineBudgetEditor,\r\n budgetTemplate: template,\r\n decimal,\r\n permissions: Permissions,\r\n isCampaign: true,\r\n showExperiment: Permissions.IsExperimentsEnabled,\r\n });\r\n\r\n const getCampaignTypeGlobalFilter = options && options.getCampaignTypeGlobalFilter;\r\n return getBuilder({ getCampaignTypeGlobalFilter }).getColumnsConfig(options);\r\n}\r\n\r\nexport function getColumnChooserConfig({ filterService, isForVNext = false, getCampaignTypeGlobalFilter }) {\r\n let customColumnConfig;\r\n if (Permissions.IsCustomColumnsInCampaignsSupported) {\r\n const { metricCategories, segmentCategories } = campaignMetricCategoriesFactory(Permissions);\r\n customColumnConfig = {\r\n enabled: true,\r\n metricCategories,\r\n segmentCategories,\r\n filterService,\r\n };\r\n }\r\n\r\n return _.defaults(getBuilder({ getCampaignTypeGlobalFilter }).getColumnChooserConfig({\r\n patchQuery: true,\r\n Columns,\r\n SelectedColumns,\r\n LegacyColumns,\r\n LegacySelectedColumns,\r\n LegacyGridFlag,\r\n i18n,\r\n CustomColumns,\r\n customColumnConfig,\r\n permissions: Permissions,\r\n }), {\r\n isForVNext,\r\n i18nErrors,\r\n AdCustomizerAttribute: jsData.AdCustomizerAttribute,\r\n resource: jsData.CampaignAdCustomizerAttribute,\r\n RSAAdCustomizerAttributeColumn,\r\n enableRSAAdCustomizer: true,\r\n });\r\n}\r\n","const i18n = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/feature/campaigns-tab/campaigns');\r\n\r\nexport function getPluginsConfig() {\r\n return {\r\n popColumns: {\r\n i18n,\r\n },\r\n };\r\n}\r\n","/* eslint-disable import/extensions */\r\n/* eslint-disable import/no-unresolved */\r\nimport $ from 'jquery';\r\nimport _ from 'underscore';\r\nimport { crossPageSelectHeadRow } from '@bingads-webui/projection-grid-cross-page-select-all';\r\nimport { getGridName } from '@bingads-webui-campaign/inline-download-grids-metadata';\r\nimport { sortableHeaderTemplate, validateOrder } from '@bingads-webui-campaign/summary-grid-helper';\r\nimport preferenceService from '@bingads-webui-component-legacy/preference/service/index';\r\nimport config from '@bingads-webui-component-legacy/config/index';\r\nimport { getColumnsConfig } from '../columns/index';\r\nimport { getPluginsConfig } from './plugin-config';\r\n\r\nconst i18n = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/feature/campaigns-tab/campaigns');\r\nconst schemaI18n = window.globalLegacyI18n.get('$/schema-i18n!campaign');\r\n\r\nexport function getConfig({\r\n dataSource,\r\n scope,\r\n view,\r\n filterService,\r\n addDateChangeListener,\r\n customHeaderOffset,\r\n isForVNext,\r\n viewport,\r\n isDataFetchManagerSource = false,\r\n gridName = getGridName('Campaign'),\r\n preferenceConfig,\r\n getCampaignTypeGlobalFilter,\r\n}) {\r\n const tableName = i18n.getString('EntityType_Campaign_Plural');\r\n const permissions = config.get('Permissions');\r\n const { dynamic = {} } = permissions;\r\n\r\n const enableGridFlexLayout = _.result(dynamic, 'GridFlexLayout', false) && isForVNext && (gridName === getGridName('Campaign'));\r\n const scrolling = {\r\n header: {\r\n type: 'sticky',\r\n offset: customHeaderOffset || (() => $('nav.navbar-default.navbar-fixed-top').height()),\r\n attributes: {\r\n 'aria-label': i18n.getString('{{tableName}} table header', { tableName }),\r\n role: 'rowgroup',\r\n },\r\n },\r\n virtualized: true,\r\n };\r\n\r\n const columns = getColumnsConfig({\r\n i18n,\r\n schemaI18n,\r\n scope,\r\n view,\r\n isForVNext,\r\n enableGridFlexLayout,\r\n getCampaignTypeGlobalFilter,\r\n });\r\n\r\n validateOrder(preferenceConfig, columns, gridName, permissions);\r\n\r\n if (viewport) {\r\n scrolling.viewport = viewport;\r\n }\r\n\r\n return {\r\n name: gridName,\r\n legacyGridName: 'CampaignsGrid',\r\n tableClasses: enableGridFlexLayout ? ['table'] : ['table', 'table-bordered'],\r\n tableAttributes: { 'aria-label': tableName },\r\n dataSource,\r\n selection: true,\r\n filterService,\r\n rows: {\r\n headRows:\r\n isForVNext\r\n ? [\r\n 'column-header-rows',\r\n ]\r\n : [\r\n crossPageSelectHeadRow(),\r\n 'column-header-rows',\r\n ],\r\n },\r\n columns,\r\n scrolling,\r\n plugins: getPluginsConfig({\r\n view,\r\n scope,\r\n addDateChangeListener,\r\n }),\r\n i18n,\r\n sortableHeader: {\r\n template: sortableHeaderTemplate,\r\n },\r\n preferenceService,\r\n config,\r\n isDataFetchManagerSource,\r\n ...enableGridFlexLayout && { layout: 'flex' },\r\n };\r\n}\r\n","const navigation = ({\r\n toJSON: () => ({}),\r\n source: {\r\n $call: () => ({\r\n toJSON: () => ({}),\r\n navigation,\r\n }),\r\n },\r\n parameters: {},\r\n});\r\n\r\nexport const mockEdm = {\r\n root: {\r\n identifyEntitySet: () => ({\r\n toJSON: () => ({}),\r\n navigation,\r\n }),\r\n },\r\n};\r\n","/* eslint-disable no-underscore-dangle */\r\n/* eslint-disable import/extensions */\r\n/* eslint-disable import/no-unresolved */\r\nimport $ from 'jquery';\r\nimport _ from 'underscore';\r\n\r\nimport { paginationPlugin } from '@bingads-webui/projection-grid-pagination';\r\nimport { columnChooserPlugin } from '@bingads-webui-campaign/projection-grid-column-chooser';\r\nimport { editablePlugin } from '@bingads-webui-campaign/projection-grid-editable';\r\nimport { auctionInsightPlugin } from '@bingads-webui-campaign/projection-grid-auction-insight';\r\nimport { inlineDownloadWithoutFilterstatePlugin } from '@bingads-webui-campaign/projection-grid-inline-download';\r\nimport {\r\n jsdataRawDataPlugin as commonJsdataRawDataPlugin,\r\n} from '@bingads-webui/projection-grid-js-data-raw-data';\r\nimport { periodOverPeriodPlugin } from '@bingads-webui-campaign/projection-grid-period-over-period';\r\nimport { segmentPlugin } from '@bingads-webui-campaign/projection-grid-segment';\r\nimport {\r\n campaignSegmentationTypeEnum,\r\n segmentationType,\r\n} from '@bingads-webui-campaign/segmentation-utilities';\r\nimport { inlineErrorPlugin } from '@bingads-webui/projection-grid-inline-error';\r\nimport { bidStrategy } from '@bingads-webui-campaign/projection-grid-bid-strategy';\r\nimport { uiBlockerPlugin } from '@bingads-webui/projection-grid-uiblocker';\r\nimport { assistedSelectionPlugin } from '@bingads-webui/projection-grid-assisted-selection';\r\nimport { performanceLogPlugin, perfMarkerPlugin } from '@bingads-webui-campaign/pgrid-performance-log';\r\nimport { a11yPlugin } from '@bingads-webui/projection-grid-a11y';\r\nimport { aggregatedRowsPluginBuilder } from '@bingads-webui-campaign/pgrid-aggregated-rows';\r\nimport { dateFilterPlugin } from '@bingads-webui-campaign/projection-grid-date-filter';\r\nimport { Campaign } from '@bingads-webui-campaign/campaign-ui-schemas';\r\nimport appConfig from '@bingads-webui-component-legacy/config/index';\r\nimport appState from '@bingads-webui-component-legacy/state/index';\r\nimport edm from '@bingads-webui-component-legacy/edm-campaign/index';\r\nimport sessionStore from '@bingads-webui-component-legacy/js-data-storage/session-storage';\r\nimport { DownloadView } from '@bingads-webui-campaign-legacy/griddownload/view/adapter';\r\nimport { setSegType, getSegType } from '@bingads-webui-component-legacy/bingads-grid/service/segmentation-preferences';\r\nimport ChangeBiddingStrategyModel from '@bingads-webui-static-legacy/bulk-edit/model/shared/changeBiddingStrategy';\r\nimport ChangeBiddingStrategyView from '@bingads-webui-static-legacy/bulk-edit/view/shared/changeBiddingStrategy';\r\nimport logger from '@bingads-webui-static-legacy/instrumentation/index';\r\n\r\nimport { getColumnChooserConfig } from '../columns/index';\r\nimport { mockEdm } from '../../demo/mock/edm';\r\n\r\nconst i18n = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/feature/campaigns-tab/campaigns');\r\nconst s$i18n = window.globalLegacyI18n.get('$/schema-i18n!campaign');\r\n\r\nconst permissions = appConfig.get('Permissions');\r\n\r\nconst jsdataRawDataPlugin = commonJsdataRawDataPlugin({\r\n getRawData: _.property('raw'),\r\n rawDataAccessor(ds) {\r\n return ds._rawData || ds.dataSource.dfmRawData;\r\n },\r\n});\r\n\r\nexport function getCampaignsPlugins({\r\n filterService,\r\n preferenceService,\r\n router,\r\n scope,\r\n isForVNext,\r\n addDateChangeListener,\r\n p$daterange,\r\n campaignTabPerfMarker,\r\n viewport,\r\n processReportRule,\r\n gridId,\r\n preexecuteFlag = false,\r\n getCampaignTypeGlobalFilter,\r\n}) {\r\n const aggregatedRowsPlugin = aggregatedRowsPluginBuilder({\r\n i18n,\r\n keys: {\r\n overallI18nKey: 'Campaigns_Total_New',\r\n filteredI18nKey: 'Campaigns_Filtered_Total_New',\r\n waterfallFilterI18nKey: 'Campaigns_Quickfilter_Total_New',\r\n },\r\n permissions,\r\n filterService,\r\n customConfig: {\r\n showPmaxRow: true,\r\n showLinkedInRow: true,\r\n },\r\n });\r\n\r\n const columnChooserConfig = getColumnChooserConfig({ isForVNext, filterService, getCampaignTypeGlobalFilter });\r\n\r\n const ReportEmailRule = appState.get('$ReportEmailRule');\r\n appState.unset('$ReportEmailRule');\r\n\r\n const inlineDownloadConfig = {\r\n isForVNext,\r\n p$daterange,\r\n DownloadView,\r\n isAvailable: true,\r\n gridId: gridId || 'CampaignGrid',\r\n schema: Campaign,\r\n s$i18n,\r\n i18n,\r\n ReportEmailRule,\r\n };\r\n\r\n if (processReportRule) {\r\n inlineDownloadConfig.processReportRule = processReportRule;\r\n }\r\n\r\n if (isForVNext) {\r\n columnChooserConfig.customToolbarIcon = 'ba-TripleColumnSolid';\r\n }\r\n\r\n const getSegmentationTypes = () => {\r\n if (permissions.IsVerticalAdsReportingPhase1Enabled) {\r\n return [...campaignSegmentationTypeEnum, segmentationType.AdScenario];\r\n }\r\n\r\n return campaignSegmentationTypeEnum;\r\n };\r\n\r\n return _.compact([{\r\n // For accurate grid init latency, PerfMarkerPlugin should be the first plugin to load.\r\n plugin: perfMarkerPlugin,\r\n config: {\r\n appConfig,\r\n marker: campaignTabPerfMarker,\r\n },\r\n }, {\r\n plugin: paginationPlugin,\r\n config: {\r\n availablePageSizes: [20, 50, 100, 200],\r\n enableRandomPage: false,\r\n pageNumberLabelText: isForVNext ? '' : i18n.getString('Grid_Page_Number_Label_Text'),\r\n pageSizeText: i18n.getString('Grid_ShowRows'),\r\n totalPageCountText: i18n.getString('Grid_PageOf'),\r\n resetPageNumberOnSort: true,\r\n },\r\n },\r\n {\r\n plugin: auctionInsightPlugin,\r\n config: {\r\n isForVNext,\r\n pageName: 'campaigns',\r\n i18n,\r\n state: appState,\r\n legacyRouter: router,\r\n route: 'campaign_auction_insight',\r\n crossPageSelectNotAllowedI18nKey: 'CampaignSummaryPage_MultiplePageSelectionNotAllowed',\r\n shouldNavigateToCompetitionTab: permissions.IsBAACompetitionEnabled,\r\n scope,\r\n sessionStore,\r\n preferenceService,\r\n permissions,\r\n getCampaignTypeGlobalFilter,\r\n },\r\n },\r\n {\r\n plugin: inlineDownloadWithoutFilterstatePlugin,\r\n config: inlineDownloadConfig,\r\n },\r\n {\r\n plugin: segmentPlugin,\r\n config: {\r\n i18n,\r\n permissions,\r\n state: appState,\r\n isOdataActionSource: true,\r\n edm: preexecuteFlag ? mockEdm : edm,\r\n getSegType,\r\n setSegType,\r\n cultureShortDatePattern: appConfig.get('CultureDateTimeFormat').ShortDatePattern,\r\n cellTemplates: {\r\n Name: 'default',\r\n },\r\n segmentationTypes: getSegmentationTypes(),\r\n },\r\n },\r\n {\r\n plugin: bidStrategy,\r\n config: {\r\n isForVNext,\r\n ChangeBiddingStrategyView,\r\n ChangeBiddingStrategyModel,\r\n i18n,\r\n permissions,\r\n },\r\n }, !appConfig.get('CurrentAccountInActive') && !permissions.IsReadOnlyUser && {\r\n plugin: editablePlugin,\r\n config: { i18n },\r\n },\r\n {\r\n plugin: uiBlockerPlugin,\r\n config: { el: viewport || $(isForVNext ? '.campaigns-page' : '#child-page') },\r\n },\r\n {\r\n plugin: performanceLogPlugin,\r\n config: { appConfig, logger },\r\n },\r\n {\r\n plugin: periodOverPeriodPlugin,\r\n config: { i18n },\r\n },\r\n {\r\n plugin: columnChooserPlugin,\r\n config: columnChooserConfig,\r\n },\r\n {\r\n plugin: dateFilterPlugin,\r\n config: {\r\n isForVNext,\r\n state: appState,\r\n isOdataActionSource: true,\r\n edm: preexecuteFlag ? mockEdm : edm,\r\n addDateChangeListener,\r\n p$daterange, // FIXME: Wasn't in original campaigngrid\r\n },\r\n },\r\n {\r\n plugin: inlineErrorPlugin({\r\n errorIconClasses: ['grid-error'],\r\n }),\r\n },\r\n {\r\n plugin: assistedSelectionPlugin,\r\n },\r\n {\r\n plugin: a11yPlugin,\r\n config: { i18n },\r\n },\r\n {\r\n plugin: aggregatedRowsPlugin,\r\n },\r\n {\r\n plugin: jsdataRawDataPlugin,\r\n }]);\r\n}\r\n","/* eslint-disable import/extensions */\r\n/* eslint-disable import/no-unresolved */\r\nimport { setUpErrorHandling } from '@bingads-webui-campaign/summary-grid-helper';\r\n\r\nimport { CampaignsGrid } from './campaigns-grid';\r\nimport { getConfig } from './grid-config';\r\nimport { getCampaignsPlugins } from './plugins';\r\n\r\nconst i18n = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/feature/campaigns-tab/campaigns');\r\n\r\nexport function createCampaignsGrid({\r\n dataSource,\r\n filterService,\r\n getAdditionalPlugins = () => [],\r\n preferenceConfig,\r\n preferenceService,\r\n router,\r\n scope,\r\n addDateChangeListener,\r\n p$daterange,\r\n isForVNext = false,\r\n viewport,\r\n gridConfig,\r\n instrumentation,\r\n serverContext,\r\n campaignTabPerfMarker,\r\n customHeaderOffset,\r\n isDataFetchManagerSource,\r\n gridName,\r\n pageName,\r\n preexecuteFlag = false,\r\n theme,\r\n processReportRule,\r\n gridId,\r\n enableCopyPaste = true,\r\n azureUrlRewrite,\r\n getCampaignTypeGlobalFilter,\r\n newI18n,\r\n}) {\r\n // performance targets details page also use campaign grid\r\n // verify functionalility to avoid regression after modification\r\n return new CampaignsGrid({\r\n isForVNext,\r\n enableCopyPaste,\r\n filterService,\r\n gridConfig,\r\n serverContext,\r\n instrumentation,\r\n newI18n,\r\n getGridConfig: view => getConfig({\r\n dataSource,\r\n scope,\r\n view,\r\n filterService,\r\n preferenceConfig,\r\n router,\r\n isForVNext,\r\n viewport,\r\n customHeaderOffset,\r\n isDataFetchManagerSource,\r\n gridName,\r\n instrumentation,\r\n getCampaignTypeGlobalFilter,\r\n }),\r\n getPlugins: view => getCampaignsPlugins({\r\n filterService,\r\n router,\r\n scope,\r\n isForVNext,\r\n addDateChangeListener,\r\n p$daterange,\r\n campaignTabPerfMarker,\r\n viewport,\r\n processReportRule,\r\n gridId,\r\n preexecuteFlag,\r\n getCampaignTypeGlobalFilter,\r\n preferenceService,\r\n }).concat(getAdditionalPlugins(view)),\r\n router,\r\n scope,\r\n setupDataSourceErrorHandling: view => setUpErrorHandling({\r\n gridView: view,\r\n scope,\r\n dataSource,\r\n i18n,\r\n }),\r\n preferenceConfig,\r\n pageName,\r\n preexecuteFlag,\r\n theme,\r\n azureUrlRewrite,\r\n perfMarker: campaignTabPerfMarker,\r\n });\r\n}\r\n","import Backbone from 'backbone';\r\nimport template from './coupon-control-view.pug';\r\n\r\nexport class CouponControlView extends Backbone.View {\r\n initialize({\r\n CouponsEnabled,\r\n ParentCouponsEnabled,\r\n currentLevel,\r\n deps = {\r\n i18n: {\r\n getString: a => a,\r\n },\r\n },\r\n }) {\r\n this.parentOption = ParentCouponsEnabled;\r\n this.option = CouponsEnabled;\r\n this.currentLevel = currentLevel;\r\n this.deps = deps;\r\n this.errorMsg = null;\r\n this.initOptions();\r\n }\r\n\r\n events() {\r\n return {\r\n 'change input[type=\\'checkbox\\']': e => this.handleOption(e),\r\n 'change input[type=\\'radio\\']': e => this.handleOption(e),\r\n };\r\n }\r\n\r\n handleOption(e) {\r\n if (e.target.type === 'checkbox') {\r\n this.setValue(e.target.checked ? 'Enabled' : 'Disabled');\r\n } else {\r\n this.setValue(e.target.value);\r\n }\r\n }\r\n\r\n getI18n() {\r\n return this.deps.i18n || ({ getString: a => a });\r\n }\r\n\r\n getI18nKeyMap() {\r\n // TODO: sync the value with UI mock\r\n return {\r\n None: 'CashbackOption_InheritFromCampaign',\r\n Enabled: 'CouponOption_Enabled',\r\n Disabled: 'CouponOption_Disabled',\r\n };\r\n }\r\n\r\n initOptions() {\r\n const i18n = this.getI18n();\r\n const keyMap = this.getI18nKeyMap();\r\n if (this.currentLevel === 'campaign') {\r\n this.options = ['Enabled', 'Disabled'].map(key => ({\r\n text: i18n.getString(keyMap[key]) || key,\r\n value: key,\r\n }));\r\n } else if (this.currentLevel === 'adgroup') {\r\n const parentOption = (this.parentOption == null || this.parentOption === 'None') ? '-' :\r\n (i18n.getString(`CouponOption_${this.parentOption}`) || this.parentOption);\r\n this.options = ['None', 'Enabled', 'Disabled'].map((key) => {\r\n let textData = i18n.getString(keyMap[key]);\r\n if (key === 'None') {\r\n textData = textData && `${textData} (${parentOption})`;\r\n }\r\n return ({\r\n text: textData || key,\r\n value: key,\r\n });\r\n });\r\n }\r\n }\r\n\r\n getValue() {\r\n return this.option;\r\n }\r\n\r\n showError() {\r\n this.$('.error').text(this.errorMsg);\r\n }\r\n\r\n hideError() {\r\n this.$('.error').empty().hide();\r\n }\r\n\r\n setValue(option) {\r\n this.option = option;\r\n if (!this.validate()) {\r\n // this should not happen\r\n this.errorMsg = `option ${this.option} is not valid`;\r\n } else {\r\n this.errorMsg = null;\r\n }\r\n this.render();\r\n }\r\n\r\n validate() {\r\n return this.options.map(x => x.value).includes(this.option);\r\n }\r\n\r\n render() {\r\n this.$el.html(template({\r\n options: this.options,\r\n i18n: this.getI18n(),\r\n selectedOption: this.option,\r\n isCampaign: this.currentLevel === 'campaign',\r\n }));\r\n if (this.errorMsg) {\r\n this.showError();\r\n } else {\r\n this.hideError();\r\n }\r\n return this;\r\n }\r\n}\r\n","import ko from 'knockout';\r\n\r\nexport default class ViewModel {\r\n constructor({\r\n i18n,\r\n decimal,\r\n PersonalizedOffersEnabled,\r\n CashbackPercent = '',\r\n CashbackMonthlyBudget = '',\r\n CashbackScope = 'None',\r\n isEnablePersonalizedOffersDisabled = false,\r\n showEnableCashbackSettingsCheckbox = true,\r\n showCashbackBudget = true,\r\n ParentLevelCashbackScope = 'None',\r\n cashbackPercentControlView,\r\n couponControlView,\r\n isPersonalizedOffersV2Enabled,\r\n isPersonalizedOffersV3Enabled,\r\n isReadOnly,\r\n }) {\r\n this.i18n = i18n;\r\n this.decimal = decimal;\r\n this.isEnablePersonalizedOffersDisabled = ko.observable(isEnablePersonalizedOffersDisabled);\r\n this.isReadOnly = ko.observable(isReadOnly);\r\n\r\n this.cashbackPercentControlView = cashbackPercentControlView;\r\n this.couponControlView = couponControlView;\r\n\r\n const enablePersonalizedOffersByDefault =\r\n (this.decimal.fromLocalToFloat(CashbackMonthlyBudget) > 0 ||\r\n (isPersonalizedOffersV3Enabled && PersonalizedOffersEnabled)) ||\r\n !showEnableCashbackSettingsCheckbox;\r\n // we need to set budget to empty or the validation cannot work\r\n if (!enablePersonalizedOffersByDefault) {\r\n CashbackMonthlyBudget = ''; // eslint-disable-line\r\n }\r\n\r\n this.isEnablePersonalizedOffersChecked = ko.observable(enablePersonalizedOffersByDefault);\r\n this.CashbackPercent = ko.observable(CashbackPercent);\r\n this.CashbackMonthlyBudget = ko.observable(CashbackMonthlyBudget);\r\n this.CashbackScope = ko.observable(CashbackScope);\r\n this.ScopeOptions = {\r\n Store: 'Store',\r\n Product: 'Product',\r\n None: 'None',\r\n };\r\n this.InheritCashbackScope = ParentLevelCashbackScope;\r\n this.cashbackBudgetError = ko.observable(null);\r\n\r\n this.CashbackMonthlyBudget.subscribe((v) => {\r\n this.validateCashbackMonthlyBudget(v);\r\n });\r\n this.showCashbackBudget = ko.observable(showCashbackBudget);\r\n this.isPersonalizedOffersV2Enabled = isPersonalizedOffersV2Enabled;\r\n this.isPersonalizedOffersV3Enabled = isPersonalizedOffersV3Enabled;\r\n }\r\n\r\n validate() {\r\n const cashbackPercentValid = this.validateCashbackPercent();\r\n const cashbackBudgetValid = this.validateCashbackMonthlyBudget(this.CashbackMonthlyBudget());\r\n const couponValid = this.validateCoupon();\r\n return cashbackPercentValid && cashbackBudgetValid && couponValid;\r\n }\r\n\r\n validateCashbackPercent() {\r\n return this.cashbackPercentControlView.validate();\r\n }\r\n\r\n validateCashbackMonthlyBudget(v) {\r\n // since the cashback budget is hide in V2, here we can simply bypass the validation\r\n if (this.isPersonalizedOffersV2Enabled) {\r\n return true;\r\n }\r\n\r\n if (!this.showCashbackBudget()) {\r\n this.cashbackBudgetError(null);\r\n return true;\r\n }\r\n\r\n if (v == null || v === '') {\r\n this.cashbackBudgetError(this.i18n.getString('Validation_NotEmpty_Required_Field'));\r\n return false;\r\n } else if (!this.decimal.isValid(v)) {\r\n this.cashbackBudgetError(this.i18n.getString('Campaigns_InlineValidBudgetInputMsg'));\r\n return false;\r\n } else if (this.decimal.fromLocalToFloat(v) <= 0) {\r\n this.cashbackBudgetError(this.i18n.getString('Validation_Number_Range_Min').replace('{{min}}', 0));\r\n return false;\r\n }\r\n this.cashbackBudgetError(null);\r\n return true;\r\n }\r\n\r\n validateCoupon() {\r\n return (this.couponControlView == null) || this.couponControlView.validate();\r\n }\r\n}\r\n","/* eslint-disable no-param-reassign */\r\nimport Backbone from 'backbone';\r\nimport ko from 'knockout';\r\nimport { CashbackPercentControlView } from '@bingads-webui-campaign/cashback-percent-control-view';\r\nimport { CouponControlView } from '@bingads-webui-campaign/coupon-control-view';\r\nimport ViewModel from './view-model';\r\nimport tmpl from './template.pug';\r\n\r\nexport class CashbackSettings extends Backbone.View {\r\n initialize({\r\n PersonalizedOffersEnabled = false, // Campaign attribute\r\n CashbackPercent,\r\n CashbackMonthlyBudget, // Campaign attribute\r\n CashbackScope = 'Store',\r\n showEnableCashbackSettingsCheckbox = true,\r\n showCashbackBudget = true,\r\n isCashbackScopeReadonly = false,\r\n showInheritFromParentOption = false,\r\n ParentLevelCashbackPercent,\r\n ParentLevelCashbackScope = 'Store',\r\n ParentLevel = 'Campaign',\r\n isCreationScenario,\r\n showCoupon = false,\r\n CouponsEnabled = 'None',\r\n ParentCouponsEnabled,\r\n isReadOnly = false,\r\n deps = {},\r\n }) {\r\n // for campaign level setting, there is no None option, reset it to Store\r\n if (CashbackScope === 'None' && !showInheritFromParentOption) {\r\n CashbackScope = 'Store'; // eslint-disable-line\r\n }\r\n\r\n this.showCoupon = showCoupon;\r\n this.isCampaign = !showInheritFromParentOption;\r\n\r\n if (CouponsEnabled === null) {\r\n CouponsEnabled = 'None'; // eslint-disable-line\r\n }\r\n // for campaign level setting, there is no none option, reset it to enabled\r\n if (CouponsEnabled === 'None' && !showInheritFromParentOption && this.showCoupon) {\r\n CouponsEnabled = 'Disabled'; // eslint-disable-line\r\n }\r\n\r\n const {\r\n i18n,\r\n pageContext,\r\n decimal,\r\n } = deps;\r\n this.ParentLevel = ParentLevel;\r\n this.ParentLevelCashbackScope = ParentLevelCashbackScope;\r\n this.i18n = i18n;\r\n this.decimal = decimal;\r\n this.pageContext = pageContext;\r\n const budgetAmountPlaceholder = i18n.getString('CampaignSetting_Placeholder_Budget')\r\n .replace('{0}', decimal.fromLocalToString(this.getDefaultBudget()));\r\n\r\n this.budgetAmountPlaceholder = budgetAmountPlaceholder;\r\n this.showCashbackBudget = this.pageContext.Permissions.IsPersonalizedOffersV3Enabled ?\r\n false : showCashbackBudget;\r\n this.isCashbackScopeReadonly = isCashbackScopeReadonly;\r\n this.showInheritFromParentOption = showInheritFromParentOption;\r\n this.accountCurrencyCode = `${pageContext.AccountCurrencyCode} ${i18n.getString('Control_CampaignBudgetControl_MonthlyBudgetOption')}`;\r\n this.showEnableCashbackSettingsCheckbox = showEnableCashbackSettingsCheckbox;\r\n this.cashbackPercentControlView = new CashbackPercentControlView({\r\n viewContext: showInheritFromParentOption ? {\r\n currentCampaign: {\r\n CampaignCashback: {\r\n Percent: ParentLevelCashbackPercent,\r\n },\r\n },\r\n } : {},\r\n i18n,\r\n decimal,\r\n CashbackPercent,\r\n showInheritFromParentOption,\r\n isCreationScenario,\r\n allowEmptyCashbackPercent: !showInheritFromParentOption,\r\n });\r\n\r\n if (this.pageContext.Permissions.IsPersonalizedOffersV3Enabled && this.showCoupon) {\r\n this.couponControlView = new CouponControlView({\r\n CouponsEnabled,\r\n ParentCouponsEnabled,\r\n currentLevel: showInheritFromParentOption ? 'adgroup' : 'campaign',\r\n deps,\r\n useSelect: false,\r\n });\r\n }\r\n\r\n this.viewModel = new ViewModel({\r\n PersonalizedOffersEnabled,\r\n CashbackMonthlyBudget: CashbackMonthlyBudget != null ?\r\n decimal.fromFloatToString(CashbackMonthlyBudget, 2) : CashbackMonthlyBudget,\r\n CashbackScope,\r\n ParentLevelCashbackScope,\r\n i18n,\r\n showEnableCashbackSettingsCheckbox,\r\n showCashbackBudget: this.showCashbackBudget,\r\n showInheritFromParentOption,\r\n isCreationScenario,\r\n decimal,\r\n cashbackPercentControlView: this.cashbackPercentControlView,\r\n couponControlView: this.couponControlView,\r\n isPersonalizedOffersV2Enabled: this.pageContext.Permissions.IsPersonalizedOffersV2Enabled,\r\n isPersonalizedOffersV3Enabled: this.pageContext.Permissions.IsPersonalizedOffersV3Enabled,\r\n isReadOnly,\r\n });\r\n }\r\n\r\n get className() { return 'cashback-settings-root'; }\r\n\r\n getDefaultBudget() {\r\n const { pageContext } = this;\r\n const USDefaultBudget = pageContext.Permissions.IsDefaultBudgetExperimentationEnabled ? 25 : 20;\r\n const budgetRange = pageContext.BudgetRange;\r\n if (pageContext.AccountCurrencyCode && pageContext.AccountCurrencyCode === 'USD') {\r\n return USDefaultBudget;\r\n } else if (budgetRange.DailyRange.FloorValue > 20) {\r\n return budgetRange.DailyRange.FloorValue;\r\n }\r\n return 20;\r\n }\r\n\r\n getHelpId(target) {\r\n if (this.isCampaign) {\r\n switch (target) {\r\n case 'Campaign_Personalized_Promotions_Title':\r\n if (this.showCoupon) {\r\n return 'pop_BA_CampaignCreate_Settings_PP_PersonalizedPromotions';\r\n }\r\n return 'pop_BA_CampaignCreate_Settings_PP_SearchCampaign';\r\n case 'Campaign_Maximum_Cashback_Offer':\r\n return 'pop_BA_CampaignCreate_Settings_PP_CashbackOffer';\r\n case 'Campaign_Cashback_Offer_Scope':\r\n if (!this.isCashbackScopeReadonly) {\r\n return 'pop_BA_CampaignCreate_Settings_PP_CashbackOfferScope ';\r\n }\r\n return 'pop_BA_CampaignCreate_Settings_PP_Scope_SearchCampaign';\r\n case 'Campaign_Cashback_Coupon':\r\n return 'pop_BA_CampaignCreate_Settings_PP_Coupons';\r\n default:\r\n throw new Error('Out of scope');\r\n }\r\n } else {\r\n switch (target) {\r\n case 'Campaign_Personalized_Promotions_Title':\r\n // preserve this in case out of scope\r\n if (this.showCoupon) {\r\n return 'pop_BA_CampaignCreate_Settings_PP_PersonalizedPromotions';\r\n }\r\n return 'pop_BA_CampaignCreate_Settings_PP_SearchCampaign';\r\n case 'Campaign_Maximum_Cashback_Offer':\r\n return 'pop_BA_CampaignGrids_CashbackOffer';\r\n case 'Campaign_Cashback_Offer_Scope':\r\n if (!this.isCashbackScopeReadonly) {\r\n return 'pop_BA_CampaignCreate_PP_ShoppingCampaign_Scope';\r\n }\r\n return 'pop_BA_CampaignCreate_Settings_PP_Scope_SearchCampaign';\r\n case 'Campaign_Cashback_Coupon':\r\n return 'pop_BA_CampaignGrids_Coupons';\r\n default:\r\n throw new Error('Out of scope');\r\n }\r\n }\r\n }\r\n\r\n render() {\r\n const inheritOptionText = this.showInheritFromParentOption ?\r\n `${this.i18n.getString(`CashbackOption_InheritFrom${this.ParentLevel}`)}\r\n (${this.i18n.getString(`ColumnField_CashbackScope_${this.ParentLevelCashbackScope}`)})`\r\n : null;\r\n this.$el.html(tmpl({\r\n i18n: this.i18n,\r\n showEnableCashbackSettingsCheckbox: this.showEnableCashbackSettingsCheckbox,\r\n showCashbackBudget: this.showCashbackBudget,\r\n isCashbackScopeReadonly: this.isCashbackScopeReadonly,\r\n showCoupon: this.showCoupon,\r\n accountCurrencyCode: this.accountCurrencyCode,\r\n budgetAmountPlaceholder: this.budgetAmountPlaceholder,\r\n showInheritFromParentOption: this.showInheritFromParentOption,\r\n isPersonalizedOffersV2Enabled: this.pageContext.Permissions.IsPersonalizedOffersV2Enabled,\r\n isPersonalizedOffersV3Enabled: this.pageContext.Permissions.IsPersonalizedOffersV3Enabled,\r\n getHelpId: this.getHelpId.bind(this),\r\n inheritOptionText,\r\n }));\r\n const cashbackPercentControlViewContainer = this.$('.cashback-percent-container');\r\n cashbackPercentControlViewContainer\r\n .empty()\r\n .append(this.cashbackPercentControlView.render().$el);\r\n\r\n if (this.couponControlView) {\r\n this.$('.coupon-container').empty().append(this.couponControlView.render().$el);\r\n }\r\n\r\n this.cashbackPercentControlView.on('change', (validated, cashbackPercent) => {\r\n if (validated) {\r\n this.viewModel.CashbackPercent(cashbackPercent);\r\n }\r\n });\r\n\r\n ko.applyBindings(this.viewModel, this.el);\r\n return this;\r\n }\r\n\r\n validate() {\r\n return !this.viewModel.isEnablePersonalizedOffersChecked() ||\r\n this.viewModel.validate();\r\n }\r\n\r\n setValues({\r\n PersonalizedOffersEnabled,\r\n CashbackPercent,\r\n CashbackMonthlyBudget,\r\n CashbackScope,\r\n CouponsEnabled,\r\n }) {\r\n // this function is used for Copy\r\n if (this.pageContext.Permissions.IsPersonalizedOffersV3Enabled &&\r\n this.showEnableCashbackSettingsCheckbox) {\r\n this.viewModel.isEnablePersonalizedOffersChecked(PersonalizedOffersEnabled);\r\n }\r\n\r\n if (!this.viewModel.isEnablePersonalizedOffersChecked()) {\r\n return;\r\n }\r\n\r\n if (CouponsEnabled !== undefined && this.couponControlView) {\r\n this.couponControlView.setValue(CouponsEnabled);\r\n }\r\n if (CashbackPercent !== undefined) { // null is a valid value for cashback percent!\r\n this.cashbackPercentControlView.setValues(CashbackPercent);\r\n }\r\n if (CashbackMonthlyBudget != null && this.showCashbackBudget) {\r\n this.viewModel.CashbackMonthlyBudget(CashbackMonthlyBudget);\r\n }\r\n if (CashbackScope != null &&\r\n // invalid situation: no product option but cashback scope is product\r\n !(this.isCashbackScopeReadonly && CashbackScope === 'Product')\r\n // invalid situation: no inherit option but cashback scope is inherit\r\n && !(!this.showInheritFromParentOption && CashbackScope === 'None')) {\r\n this.viewModel.CashbackScope(CashbackScope);\r\n }\r\n }\r\n\r\n getValues() {\r\n if (this.viewModel.isEnablePersonalizedOffersDisabled()) {\r\n return {};\r\n }\r\n\r\n if (this.validate()) {\r\n const cashbackPercent = this.cashbackPercentControlView.getCashbackPercentValue();\r\n let result;\r\n\r\n if (this.viewModel.isEnablePersonalizedOffersChecked()) {\r\n result = {\r\n // for July pilot we temporarily hide the cashback budget and send a fake value to MT\r\n // this should be re-implemented in August pilot\r\n CashbackMonthlyBudget: this.pageContext.Permissions.IsPersonalizedOffersV2Enabled ?\r\n 1 : this.decimal.fromLocalToFloat(this.viewModel.CashbackMonthlyBudget()),\r\n CashbackPercent: cashbackPercent,\r\n CashbackScope: this.viewModel.CashbackScope(),\r\n };\r\n } else {\r\n result = {\r\n CashbackMonthlyBudget: 0,\r\n CashbackScope: 'None',\r\n CashbackPercent: -1,\r\n };\r\n }\r\n if (this.pageContext.Permissions.IsPersonalizedOffersV3Enabled) {\r\n if (this.viewModel.isEnablePersonalizedOffersChecked()) {\r\n if (this.couponControlView) {\r\n result.CouponsEnabled = this.couponControlView.getValue();\r\n }\r\n result.PersonalizedOffersEnabled = true;\r\n } else {\r\n if (this.showCoupon) {\r\n result.CouponsEnabled = 'None';\r\n }\r\n result.PersonalizedOffersEnabled = false;\r\n }\r\n }\r\n if (!this.showCashbackBudget) {\r\n delete result.CashbackMonthlyBudget;\r\n }\r\n return result;\r\n }\r\n return null;\r\n }\r\n\r\n remove() {\r\n super.remove();\r\n this.cashbackPercentControlView.remove();\r\n if (this.couponControlView) {\r\n this.couponControlView.remove();\r\n }\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-unused-vars */\r\nimport { uncheckedInjectionContext as globalContext } from '@bingads-webui-campaign/injection-context';\r\nimport pkg from './package.json';\r\n\r\nexport { getBmcMtEndpoint, hasError } from './src/shared/util';\r\n\r\nexport function getProductFeedGridFactory(initializeGlobalContext = true) {\r\n if (initializeGlobalContext) {\r\n const pfgDeps = [\r\n 'component/azure-upload/index',\r\n ];\r\n return globalContext.define(\r\n pkg.legacyDependencies.concat(pfgDeps),\r\n Promise => import(/* webpackMode: 'eager' */ './src/product-feed-grid-factory') // eslint-disable-line no-unused-vars\r\n );\r\n }\r\n return import(/* webpackMode: 'eager' */ './src/product-feed-grid-factory'); // eslint-disable-line no-unused-vars\r\n}\r\n\r\nexport function getLinkedStoreGridFactory(initializeGlobalContext = true) {\r\n if (initializeGlobalContext) {\r\n return globalContext.define(\r\n pkg.legacyDependencies,\r\n Promise => import(/* webpackMode: 'eager' */ './src/linked-store-grid-factory') // eslint-disable-line no-unused-vars\r\n );\r\n }\r\n return import(/* webpackMode: 'eager' */ './src/linked-store-grid-factory'); // eslint-disable-line no-unused-vars\r\n}\r\n\r\nexport function getBrandGridFactory(initializeGlobalContext = true) {\r\n if (initializeGlobalContext) {\r\n return globalContext.define(\r\n pkg.legacyDependencies,\r\n Promise => import(/* webpackMode: 'eager' */ './src/brand-grid-factory') // eslint-disable-line no-unused-vars\r\n );\r\n }\r\n return import(/* webpackMode: 'eager' */ './src/brand-grid-factory'); // eslint-disable-line no-unused-vars\r\n}\r\n","/* eslint-disable import/extensions */\r\n/* eslint-disable import/no-unresolved */\r\n\r\n/* eslint-disable valid-jsdoc */\r\nimport $ from 'jquery';\r\nimport Events from 'events';\r\nimport { DeterministicWrapperView } from '@bingads-webui/deterministic-wrapper-view';\r\nimport { withUiBlock } from '@bingads-webui/uiblocker';\r\nimport { pgridFactory } from '@bingads-webui-campaign/pgrid-factory';\r\nimport { hasError, getBmcMtEndpoint } from '../shared/util';\r\n\r\n/**\r\n * CPG Brands grid\r\n */\r\nexport class BrandGrid extends DeterministicWrapperView {\r\n eventHub = new Events();\r\n\r\n get className() { return 'brand-grid'; }\r\n\r\n viewFactory({\r\n deps,\r\n preferenceConfig,\r\n getGridConfig,\r\n getPlugins,\r\n }) {\r\n this.EVENT_NAMES = {\r\n SHOW_ADD_BRAND_PANEL: 'SHOW_ADD_BRAND_PANEL',\r\n SHOW_ERRORS: 'SHOW_ERRORS',\r\n DATA_REFRESHED: 'DATA_REFRESHED',\r\n };\r\n const gridConfig = getGridConfig(this);\r\n this.grid = pgridFactory({\r\n gridConfig,\r\n plugins: getPlugins(this),\r\n preferenceConfig,\r\n });\r\n this.fetchGridData = true;\r\n this.getBmcMtEndpoint = getBmcMtEndpoint;\r\n this.hasError = hasError;\r\n this.deps = deps;\r\n this.i18n = deps.i18n;\r\n this.customerId = deps.pageContext.CurrentCustomer.Id;\r\n this.accountId = deps.pageContext.CurrentAccount.Id;\r\n this.userId = deps.pageContext.CurrentUser.Id;\r\n\r\n return this.grid.gridView;\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click .show-brand-dropdown': 'switchDisplayBrandDropdown',\r\n 'mouseleave .brand-dropdown': 'closeBrandDropdown',\r\n 'click .delete-brand': 'deleteBrand',\r\n };\r\n }\r\n\r\n AddBrandToolbar() {\r\n this.grid.gridView.trigger(this.EVENT_NAMES.SHOW_ADD_BRAND_PANEL, {\r\n displayName: this.i18n.getString('CPG_AddBrandoolbar_Title'),\r\n });\r\n\r\n // not support add brand functionality in old UI\r\n }\r\n\r\n onBrandSearch(searchText) {\r\n this.grid.dataSource.setQueryString(searchText.trim());\r\n this.grid.gridView.refresh(true);\r\n }\r\n\r\n switchDisplayBrandDropdown(e) {\r\n const dropdown = e.currentTarget.getElementsByClassName('brand-dropdown');\r\n if (dropdown.length !== 0) {\r\n if (dropdown[0].style.display === 'none') {\r\n dropdown[0].style.display = '';\r\n } else {\r\n dropdown[0].style.display = 'none';\r\n }\r\n }\r\n }\r\n\r\n closeBrandDropdown(e) {\r\n const dropdown = e.currentTarget;\r\n if (dropdown.style.display !== 'none') {\r\n dropdown.style.display = 'none';\r\n }\r\n }\r\n\r\n deleteBrand(e) {\r\n const unblock = withUiBlock(this.grid.gridView.$el);\r\n const item = this.grid.gridView.itemOfElement(e.target);\r\n if (!item) {\r\n return;\r\n }\r\n $.ajax({\r\n url: `${this.getBmcMtEndpoint()}/api/v1/manufacturers/${this.customerId}/brands/${item.MmcBrandId}?cid=${this.customerId}&aid=${this.accountId}&uid=${this.userId}`,\r\n type: 'DELETE',\r\n xhrFields: {\r\n withCredentials: true,\r\n },\r\n success: () => {\r\n unblock();\r\n this.fetchGridData = true;\r\n this.grid.gridView.refresh(true);\r\n this.grid.gridView.trigger(this.EVENT_NAMES.DATA_REFRESHED, true);\r\n },\r\n error: () => {\r\n unblock();\r\n this.setErrors([this.i18n.getString('CPG_Error_RequestFailed')], false);\r\n },\r\n });\r\n }\r\n\r\n setErrors(errors = []) {\r\n this.showErrors(errors);\r\n }\r\n\r\n showErrors(errors) {\r\n this.eventHub.emit(this.EVENT_NAMES.SHOW_ERRORS, errors);\r\n }\r\n}\r\n","import { CampaignuiBaseColumn } from '@bingads-webui-campaign/campaignui-base-column';\r\nimport DropdownColumnTemplate from './dropdown-column.pug';\r\n\r\nconst StatusMap = {\r\n 0: 'Pending',\r\n 1: 'Verified',\r\n 2: 'Rejected', // link request was rejected by retailer\r\n};\r\n\r\nexport const ColumnsName = {\r\n SubBrands: 'Sub-brands',\r\n};\r\n\r\nclass BrandNameColumn extends CampaignuiBaseColumn {\r\n constructor({ i18n }) {\r\n const title = i18n.getString('CPG_ProductFeed_Column_BrandName');\r\n\r\n super({\r\n name: 'Brand Name',\r\n property: 'BrandName',\r\n title,\r\n type: 'string',\r\n helpId: 'pop_BA_ProductFeed_Brand',\r\n sortable: true,\r\n helpAriaLabel: i18n.getString('Click to learn more about {{item}}', { item: title }),\r\n });\r\n }\r\n}\r\n\r\nclass BrandWebsiteColumn extends CampaignuiBaseColumn {\r\n constructor({ i18n }) {\r\n const title = i18n.getString('CPG_ProductFeed_Column_BrandWebsite');\r\n\r\n super({\r\n name: 'Brand Website',\r\n property: 'BrandUrl',\r\n title,\r\n type: 'string',\r\n helpId: 'pop_BA_ProductFeed_BrandWebsite',\r\n sortable: true,\r\n helpAriaLabel: i18n.getString('Click to learn more about {{item}}', { item: title }),\r\n });\r\n }\r\n}\r\n\r\nclass SubBrandsColumn extends CampaignuiBaseColumn {\r\n constructor({ i18n }) {\r\n const title = i18n.getString('CPG_ProductFeed_Column_SubBrands');\r\n\r\n super({\r\n name: ColumnsName.SubBrands,\r\n property: 'SubBrands',\r\n title,\r\n type: 'string',\r\n helpId: 'pop_BA_ProductFeed_SubBrands',\r\n sortable: true,\r\n helpAriaLabel: i18n.getString('Click to learn more about {{item}}', { item: title }),\r\n });\r\n }\r\n\r\n pickProperty(item) {\r\n return item.SubBrands ? item.SubBrands.join(', ') : null;\r\n }\r\n}\r\n\r\nclass BrandStatusColumn extends CampaignuiBaseColumn {\r\n constructor({ i18n }) {\r\n const title = i18n.getString('CPG_ProductFeed_Column_BrandStatus');\r\n\r\n super({\r\n name: 'Status',\r\n property: 'Status',\r\n title,\r\n type: 'string',\r\n helpId: 'pop_BA_MSCBrands_Status',\r\n sortable: true,\r\n helpAriaLabel: i18n.getString('Click to learn more about {{item}}', { item: title }),\r\n });\r\n this.i18n = i18n;\r\n }\r\n\r\n pickProperty(item) {\r\n return StatusMap[item.Status];\r\n }\r\n\r\n template({ value }) {\r\n return super.template({ value: this.i18n.getString(`Brand_Status_${value}`) || value });\r\n }\r\n}\r\n\r\nclass MatchedProductCountColumn extends CampaignuiBaseColumn {\r\n constructor({ i18n }) {\r\n const title = i18n.getString('CPG_ProductFeed_Column_MatchedProductCount');\r\n\r\n super({\r\n name: 'Matched Products',\r\n property: 'MatchedProductCount',\r\n title,\r\n type: 'number',\r\n helpId: 'pop_BA_ProductFeed_MatchedProducts',\r\n sortable: true,\r\n helpAriaLabel: i18n.getString('Click to learn more about {{item}}', { item: title }),\r\n });\r\n\r\n this.i18n = i18n;\r\n }\r\n\r\n template({ value }) {\r\n let updatedValue = value;\r\n if (value === null) {\r\n updatedValue = this.i18n.getString('Brand_MatchedProductCount_Pending');\r\n }\r\n\r\n return super.template({ value: updatedValue });\r\n }\r\n}\r\n\r\nclass ActionColumn extends CampaignuiBaseColumn {\r\n constructor({ i18n, deps }) {\r\n const title = i18n.getString('CPG_ProductFeed_Column_Action');\r\n\r\n super({\r\n name: 'Action',\r\n property: 'Status',\r\n title,\r\n type: 'string',\r\n helpId: 'pop_BA_ProductFeed_Actions',\r\n helpAriaLabel: i18n.getString('Click to learn more about {{item}}', { item: title }),\r\n });\r\n this.i18n = i18n;\r\n this.deps = deps;\r\n }\r\n\r\n pickProperty(item) {\r\n return item;\r\n }\r\n\r\n template({ value }) {\r\n return DropdownColumnTemplate({\r\n actionText: this.i18n.getString('Button_Delete'),\r\n actionClass: 'delete-brand',\r\n isReadOnly: this.deps.config.get('CurrentAccountInActive') || this.deps.config.get('ReadOnlyMode'),\r\n brandName: value.BrandName,\r\n });\r\n }\r\n}\r\n\r\nexport const columns = {\r\n BrandNameColumn,\r\n BrandWebsiteColumn,\r\n SubBrandsColumn,\r\n BrandStatusColumn,\r\n MatchedProductCountColumn,\r\n ActionColumn,\r\n};\r\n","import $ from 'jquery';\r\nimport _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport { dataSource } from 'projection-grid';\r\nimport { hasError, getError, getBmcMtEndpoint } from '../shared/util';\r\nimport { columns, ColumnsName } from './grid-columns';\r\n\r\nclass CustomizedDataSource extends dataSource.Base {\r\n constructor({ view, deps, fetchDataCallback }) {\r\n super();\r\n this.view = view;\r\n this.deps = deps;\r\n this.gridData = [];\r\n this.queryString = '';\r\n this.fetchDataCallback = fetchDataCallback;\r\n }\r\n\r\n setQueryString(queryString) {\r\n this.queryString = queryString;\r\n }\r\n\r\n getFilterData(sourceData, queryString) {\r\n const filterData = !_.isEmpty(queryString) ? _.filter(sourceData, (item) => {\r\n const { BrandName } = item;\r\n return BrandName.toLowerCase().indexOf(queryString.toLowerCase()) > -1;\r\n }) : sourceData;\r\n\r\n return {\r\n totalCount: filterData.length,\r\n items: filterData,\r\n };\r\n }\r\n\r\n query() {\r\n if (!this.view.fetchGridData) {\r\n const result = this.getFilterData(this.gridData, this.queryString);\r\n return Promise.resolve(result);\r\n }\r\n\r\n return new Promise((resolve) => {\r\n $.ajax({\r\n url: `${getBmcMtEndpoint()}/api/v1/manufacturers/${this.view.customerId}/brands?cid=${this.view.customerId}&aid=${this.view.accountId}&uid=${this.view.userId}`,\r\n type: 'GET',\r\n xhrFields: {\r\n withCredentials: true,\r\n },\r\n success: (obj) => {\r\n this.view.fetchGridData = false;\r\n\r\n if (!hasError(obj)) {\r\n this.gridData = _.result(obj.ResponseObject, 'Brands', []);\r\n if (_.isFunction(this.fetchDataCallback)) {\r\n this.fetchDataCallback(this.gridData);\r\n }\r\n } else {\r\n this.view.setErrors(getError(obj, this.view.i18n), false);\r\n }\r\n resolve();\r\n },\r\n error: () => {\r\n this.view.setErrors([this.view.i18n.getString('CPG_Error_RequestFailed')], false);\r\n this.gridData = [];\r\n resolve();\r\n },\r\n });\r\n }).then(() => (this.getFilterData(this.gridData, this.queryString)));\r\n }\r\n}\r\n\r\nexport function getBrandGridConfig({\r\n view,\r\n deps,\r\n viewport,\r\n customHeaderOffset,\r\n fetchDataCallback,\r\n hideSubBrand = false,\r\n}) {\r\n const headRows = ['column-header-rows'];\r\n const tableName = deps.i18n.getString('CPG_ProductFeed_Grid_Title_Brands');\r\n const gridConfig = {\r\n name: 'brandGrid',\r\n legacyGridName: 'brandGrid',\r\n dataSource: new CustomizedDataSource({ view, deps, fetchDataCallback }),\r\n tableAttributes: { 'aria-label': tableName },\r\n tableClasses: ['table', 'table-bordered'],\r\n preferenceService: deps.preferenceService,\r\n config: deps.config,\r\n columns: _.chain(columns)\r\n .compact()\r\n .map(Column => (new Column({ i18n: deps.i18n, deps })).toJSON())\r\n .filter(Column => !hideSubBrand || Column.name !== ColumnsName.SubBrands)\r\n .value(),\r\n rows: {\r\n headRows,\r\n },\r\n scrolling: {\r\n virtualized: false,\r\n header: {\r\n type: 'sticky',\r\n offset: customHeaderOffset || (() => $('nav.navbar-default.navbar-fixed-top').height()),\r\n attributes: { 'aria-label': deps.i18n.getString('CPG_ProductFeed_Grid_Header_Brands') },\r\n },\r\n },\r\n };\r\n\r\n if (viewport) {\r\n gridConfig.scrolling.viewport = viewport;\r\n }\r\n\r\n return gridConfig;\r\n}\r\n","import $ from 'jquery';\r\nimport { paginationPlugin } from '@bingads-webui/projection-grid-pagination';\r\nimport { uiBlockerPlugin } from '@bingads-webui/projection-grid-uiblocker';\r\nimport { performanceLogPlugin, perfMarkerPlugin } from '@bingads-webui-campaign/pgrid-performance-log';\r\nimport { clientSideSortPlugin } from '@bingads-webui/projection-grid-client-sort';\r\nimport { clientSidePaginationPlugin } from '@bingads-webui/projection-grid-client-pagination';\r\nimport { a11yPlugin } from '@bingads-webui/projection-grid-a11y';\r\nimport { getPGridColumnResizePlugin } from '@bingads-webui-campaign/projection-grid-column-resize-helper';\r\n\r\nconst getSortReturn = (value1, value2) => {\r\n let v1 = value1;\r\n let v2 = value2;\r\n if (typeof value1 === 'string' && typeof value2 === 'string') {\r\n v1 = value1.toLowerCase();\r\n v2 = value2.toLowerCase();\r\n }\r\n if (v1 < v2) {\r\n return -1;\r\n }\r\n if (v1 > v2) {\r\n return 1;\r\n }\r\n return 0;\r\n};\r\n\r\nexport function getBrandGridPlugins({\r\n deps,\r\n perfMarker,\r\n gridName,\r\n preferenceService,\r\n permissions,\r\n}) {\r\n const { i18n } = deps;\r\n return [{\r\n plugin: perfMarkerPlugin,\r\n config: { appConfig: deps.config, marker: perfMarker },\r\n }, {\r\n plugin: uiBlockerPlugin,\r\n config: {\r\n el: $('.brand-page'),\r\n },\r\n }, {\r\n plugin: paginationPlugin,\r\n config: {\r\n availablePageSizes: [20, 50, 100],\r\n enableRandomPage: false,\r\n preferenceService: deps.preferenceService,\r\n pageNumberLabelText: i18n.getString('Grid_Page_Number_Label_Text'),\r\n pageSizeText: i18n.getString('Grid_ShowRows'),\r\n totalPageCountText: i18n.getString('Grid_PageOf'),\r\n },\r\n }, {\r\n plugin: performanceLogPlugin,\r\n config: {\r\n appConfig: deps.config,\r\n logger: deps.logger,\r\n },\r\n }, {\r\n plugin: clientSideSortPlugin,\r\n config: {\r\n compareMaker: (sortIteratee, direction) => (item1, item2) => getSortReturn(\r\n sortIteratee(item1, direction),\r\n sortIteratee(item2, direction)\r\n ),\r\n setTopToMax: true,\r\n },\r\n }, {\r\n plugin: clientSidePaginationPlugin,\r\n }, {\r\n plugin: a11yPlugin,\r\n config: { i18n },\r\n },\r\n getPGridColumnResizePlugin({\r\n gridName,\r\n preferenceService,\r\n permissions,\r\n }),\r\n ];\r\n}\r\n","import { uncheckedInjectionContext as globalContext } from '@bingads-webui-campaign/injection-context';\r\n\r\nconst i18n = globalContext.require('@bingads-webui/i18n-amd-loader!campaignui/feature/product-feed');\r\nconst edmCampaign = globalContext.requireDefault('component/edm-campaign/index');\r\nconst config = globalContext.require('component/config/index');\r\nconst logger = globalContext.require('module/service/instrumentation/index');\r\nconst { Columns, SelectedColumns } = globalContext.require('component/bingads-grid/service/column-chooser-preferences');\r\nconst { LegacyColumns, LegacySelectedColumns } = globalContext.require('component/bingads-grid/service/legacy-column-chooser-preferences');\r\nconst jsData = globalContext.require('component/js-data-campaign/index');\r\nconst state = globalContext.require('component/state/index');\r\nconst preferenceService = globalContext.requireDefault('component/preference/service/index');\r\nconst s$ProductOffer = globalContext.require('$/schema!campaign/ProductOffer');\r\nconst sessionStore = globalContext.requireDefault('component/js-data-storage/session-storage');\r\nconst preferenceStoreFactory = globalContext.require('component/bingads-grid/service/filter-preferences').getFilters;\r\nconst cacheService = globalContext.require('Services/CacheService');\r\nconst dataContextManager = globalContext.require('SummaryDataContextManager');\r\nconst s$i18n = globalContext.require('$/schema-i18n!campaign');\r\nconst pageContext = globalContext.require('PageContext');\r\n\r\nconst deps = {\r\n pageContext,\r\n i18n,\r\n edmCampaign,\r\n config,\r\n logger,\r\n Columns,\r\n SelectedColumns,\r\n LegacyColumns,\r\n LegacySelectedColumns,\r\n jsData,\r\n state,\r\n addDateChangeListener: (handler) => {\r\n window.App.views.Summary.bindDateFilterChangeHandler(handler);\r\n },\r\n preferenceService,\r\n s$ProductOffer,\r\n sessionStore,\r\n preferenceStoreFactory,\r\n cacheService,\r\n dataContextManager,\r\n s$i18n,\r\n};\r\n\r\nexport default deps;\r\n","import { BrandGrid } from './brand-grid/brand-grid';\r\nimport { getBrandGridConfig } from './brand-grid/grid-config';\r\nimport { getBrandGridPlugins } from './brand-grid/grid-plugins-config';\r\n\r\nimport deps from './brand-grid-deps';\r\n\r\nexport function createBrandGrid({\r\n getAdditionalPlugins,\r\n preferenceConfig,\r\n viewport,\r\n customHeaderOffset,\r\n perfMarker,\r\n fetchDataCallback,\r\n hideSubBrand,\r\n}) {\r\n return new BrandGrid({\r\n deps,\r\n getGridConfig: view => getBrandGridConfig({\r\n view,\r\n deps,\r\n viewport,\r\n customHeaderOffset,\r\n fetchDataCallback,\r\n hideSubBrand,\r\n }),\r\n getPlugins: view => getBrandGridPlugins({\r\n deps,\r\n perfMarker,\r\n }).concat(getAdditionalPlugins(view)),\r\n preferenceConfig,\r\n });\r\n}\r\n","/* eslint-disable import/extensions */\r\n/* eslint-disable import/no-unresolved */\r\n\r\nimport _ from 'underscore';\r\nimport ko from 'knockout';\r\nimport { KoSchema } from '@bingads-webui/ko-schema';\r\n\r\n/**\r\n * Link store dialog view\r\n */\r\nexport class LinkStoreViewModel {\r\n constructor({\r\n i18n,\r\n }) {\r\n const schema = {\r\n properties: {\r\n storeId: {\r\n type: 'string',\r\n required: true,\r\n pattern: '^[1-9]\\\\d*$',\r\n maxLength: 9,\r\n },\r\n },\r\n };\r\n KoSchema(this, schema, _.keys(schema.properties), {}, {}, i18n);\r\n\r\n this.isValid = ko.computed(() =>\r\n this.storeId.isValid() && !_.isEmpty(this.storeId()));\r\n\r\n this.errors = ko.observableArray([]);\r\n }\r\n}\r\n","/* eslint-disable import/extensions */\r\n/* eslint-disable import/no-unresolved */\r\n\r\nimport { KnockoutView } from '@bingads-webui/knockout-view';\r\nimport template from './template.pug';\r\nimport { LinkStoreViewModel } from './viewmodel';\r\n\r\n/**\r\n * Link store dialog view\r\n */\r\nexport class LinkStoreView extends KnockoutView {\r\n initialize({ i18n }) {\r\n super.initialize({ i18n });\r\n this.i18n = i18n;\r\n }\r\n\r\n get template() {\r\n return template;\r\n }\r\n\r\n get ViewModel() {\r\n return LinkStoreViewModel;\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click .btn.btn-primary.btn-sendReq': 'sendRequest',\r\n 'click .btn.btn-default.btn-cancel': 'cancel',\r\n };\r\n }\r\n\r\n setErrors(errors) {\r\n this.viewModel.errors(errors);\r\n }\r\n\r\n renderTrunk() {\r\n super.renderTrunk();\r\n this.$('input.store-id-input').bind('input propertychange', () => this.viewModel.storeId.validate());\r\n }\r\n\r\n sendRequest() {\r\n this.trigger('linkToStore', this.viewModel.storeId());\r\n }\r\n\r\n cancel() {\r\n this.trigger('cancel');\r\n }\r\n}\r\n","/* eslint-disable import/extensions */\r\n/* eslint-disable import/no-unresolved */\r\n\r\nimport $ from 'jquery';\r\nimport _ from 'underscore';\r\nimport Events from 'events';\r\nimport { DeterministicWrapperView } from '@bingads-webui/deterministic-wrapper-view';\r\nimport { updateGridQuery } from '@bingads-webui-campaign/summary-grid-helper';\r\nimport { pgridFactory } from '@bingads-webui-campaign/pgrid-factory';\r\nimport { constants } from '@bingads-webui/projection-grid-toolbar';\r\nimport { withUiBlock } from '@bingads-webui/uiblocker';\r\nimport { LinkStoreView } from '../link-store-toolbar/view';\r\nimport { hasError, getError, getEndpoint, getBmcMtEndpoint } from '../shared/util';\r\n\r\n/**\r\n * CPG Linked Stores grid\r\n */\r\nexport class LinkedStoreGrid extends DeterministicWrapperView {\r\n EVENT_NAMES = {\r\n SHOW_ERRORS: 'SHOW_ERRORS',\r\n };\r\n eventHub = new Events();\r\n\r\n get className() { return 'linked-store-grid'; }\r\n\r\n viewFactory({\r\n deps,\r\n filterService,\r\n preferenceConfig,\r\n getGridConfig,\r\n getPlugins,\r\n }) {\r\n this.EVENT_NAMES = {\r\n SHOW_LINK_TO_STORE_PANEL: 'SHOW_LINK_TO_STORE_PANEL',\r\n SHOW_ERRORS: 'SHOW_ERRORS',\r\n };\r\n const gridConfig = getGridConfig(this);\r\n this.getEndpoint = getEndpoint;\r\n this.getBmcMtEndpoint = getBmcMtEndpoint;\r\n this.hasError = hasError;\r\n this.isSPAv2Enabled = deps.pageContext.Permissions.IsSPAv2Enabled;\r\n this.filterService = filterService;\r\n\r\n this.filterService.on('filter-state-changed', () => {\r\n updateGridQuery(\r\n this.grid.gridView,\r\n this.filterService.getCombinedFilter(), true\r\n );\r\n });\r\n\r\n this.grid = pgridFactory({\r\n gridConfig,\r\n plugins: getPlugins(this),\r\n preferenceConfig,\r\n });\r\n this.fetchGridData = true;\r\n this.deps = deps;\r\n this.i18n = deps.i18n;\r\n this.customerEmail = deps.pageContext.CurrentCustomer.Email;\r\n this.customerName = deps.pageContext.CurrentCustomer.Name;\r\n this.customerId = deps.pageContext.CurrentCustomer.Id;\r\n this.accountId = deps.pageContext.CurrentAccount.Id;\r\n this.userId = deps.pageContext.CurrentUser.Id;\r\n const { IsUsePreferencesServiceEnabled } = deps.pageContext.Permissions;\r\n\r\n this.grid.gridView.on('didUpdate', (changes) => {\r\n if (_.has(changes, 'sortableHeader')) {\r\n const orderby = _.result(changes.query, 'orderby') || _.result(this.grid.gridView.get('query'), 'orderby');\r\n const { sortableHeader } = changes;\r\n\r\n if (IsUsePreferencesServiceEnabled) {\r\n deps.preferencesService.setAtUserLevel({ Name: `WebApp.CampaignUI.${deps.config.name}`, Data: { sortInfo: { orderby, sortableHeader } } });\r\n } else {\r\n // (TODO) need to add CmapaignStateManager to deps.js\r\n deps.CampaignStateManager.setItem('permanent', deps.config.name, {\r\n sortInfo: {\r\n orderby,\r\n sortableHeader,\r\n },\r\n });\r\n }\r\n }\r\n });\r\n\r\n return this.grid.gridView;\r\n }\r\n\r\n renderTrunk() {\r\n this.filterService.initializeCombinedFilterPromise.then(() => {\r\n updateGridQuery(\r\n this.grid.gridView,\r\n this.filterService.getCombinedFilter(), true\r\n );\r\n });\r\n super.renderTrunk();\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click .resend-action': 'resend',\r\n 'click .unlink-action': 'unlink',\r\n 'click .revoke-action': 'unlink',\r\n };\r\n }\r\n\r\n get toolbarEditor() {\r\n return this.grid.toolbar.gridToolbarGroup.toolbarWithName(constants.DEFAULT_TOOLBAR_NAME);\r\n }\r\n\r\n unlinkLegacy(unblock, item) {\r\n $.ajax({\r\n url: `${getEndpoint()}/coop/UnLinkCoOpFeed?cid=${this.customerId}&aid=${this.accountId}&providerId=${item.ProviderId}&customerId=${this.customerId}`,\r\n type: 'POST',\r\n xhrFields: {\r\n withCredentials: true,\r\n },\r\n success: (response) => {\r\n unblock();\r\n const obj = JSON.parse(response);\r\n if (!hasError(obj)) {\r\n this.fetchGridData = true;\r\n this.grid.gridView.refresh(true);\r\n } else {\r\n this.setErrors(getError(obj, this.i18n), false);\r\n }\r\n },\r\n error: () => {\r\n unblock();\r\n this.setErrors([this.i18n.getString('CPG_Error_RequestFailed')], false);\r\n },\r\n });\r\n }\r\n\r\n unlink(e) {\r\n const unblock = withUiBlock(this.grid.gridView.$el);\r\n const item = this.grid.gridView.itemOfElement(e.target);\r\n if (this.isSPAv2Enabled) {\r\n this.updateStoreLink(item.RetailerProviderId, false);\r\n } else {\r\n this.unlinkLegacy(unblock, item);\r\n }\r\n }\r\n\r\n resend(e) {\r\n const item = this.grid.gridView.itemOfElement(e.target);\r\n if (this.isSPAv2Enabled) {\r\n this.updateStoreLink(item.RetailerProviderId, true);\r\n } else {\r\n this.linkToStore(item.ProviderId, false);\r\n }\r\n }\r\n\r\n updateStoreLink(storeId, shouldLink) {\r\n const unblock = withUiBlock(this.grid.gridView.$el);\r\n $.ajax({\r\n url: `${getBmcMtEndpoint()}/api/v1/manufacturers/${this.customerId}/linkedStores?cid=${this.customerId}&aid=${this.accountId}&uid=${this.userId}`,\r\n type: 'PUT',\r\n contentType: 'application/json',\r\n data: JSON.stringify({\r\n retailerId: storeId,\r\n action: shouldLink ? 'link' : 'unlink',\r\n }),\r\n xhrFields: {\r\n withCredentials: true,\r\n },\r\n success: (obj) => {\r\n unblock();\r\n if (!hasError(obj)) {\r\n this.fetchGridData = true;\r\n this.grid.gridView.refresh(true);\r\n } else {\r\n this.setErrors(getError(obj, this.i18n), false);\r\n }\r\n },\r\n error: () => {\r\n unblock();\r\n this.setErrors([this.i18n.getString('CPG_Error_RequestFailed')], false);\r\n },\r\n });\r\n }\r\n\r\n showLinkStoreToolbar(showTopOfGridPanel) {\r\n if (this.isSPAv2Enabled) {\r\n this.grid.gridView.trigger(this.EVENT_NAMES.SHOW_LINK_TO_STORE_PANEL, {\r\n displayName: this.i18n.getString('CPG_LinkToolbar_Title'),\r\n });\r\n } else {\r\n this.linkStoreView = new LinkStoreView(this.deps).render();\r\n\r\n this.toolbarEditor.overrideWith(this.linkStoreView);\r\n this.linkStoreView.on('linkToStore', (providerId) => {\r\n this.linkToStore(providerId, true, showTopOfGridPanel);\r\n });\r\n this.linkStoreView.on('cancel', () => {\r\n this.removeToolbar();\r\n showTopOfGridPanel();\r\n });\r\n }\r\n }\r\n\r\n removeToolbar() {\r\n if (this.linkStoreView) {\r\n this.toolbarEditor.restoreToolbar();\r\n this.linkStoreView.remove();\r\n this.linkStoreView = null;\r\n }\r\n }\r\n\r\n linkToStore(providerId, fromToolbar, showTopOfGridPanel = () => {}) {\r\n const unblock = withUiBlock(this.grid.gridView.$el);\r\n $.ajax({\r\n url: `${getEndpoint()}/coop/LinkCoOpFeed?cid=${this.customerId}&aid=${this.accountId}&providerId=${providerId}&customerName=${this.customerName}&customerEmail=${this.customerEmail}`,\r\n type: 'POST',\r\n xhrFields: {\r\n withCredentials: true,\r\n },\r\n success: (response) => {\r\n unblock();\r\n const obj = JSON.parse(response);\r\n if (!hasError(obj)) {\r\n this.removeToolbar();\r\n this.fetchGridData = true;\r\n this.grid.gridView.refresh(true);\r\n showTopOfGridPanel();\r\n } else {\r\n this.setErrors(getError(obj, this.i18n), fromToolbar);\r\n }\r\n },\r\n error: () => {\r\n unblock();\r\n this.setErrors([this.i18n.getString('CPG_Error_RequestFailed')], fromToolbar);\r\n },\r\n });\r\n }\r\n\r\n setErrors(errors = [], fromToolbar = false) {\r\n if (fromToolbar) {\r\n this.linkStoreView.setErrors(errors);\r\n } else {\r\n this.showErrors(errors);\r\n }\r\n }\r\n\r\n showErrors(errors) {\r\n this.eventHub.emit(this.EVENT_NAMES.SHOW_ERRORS, errors);\r\n }\r\n\r\n remove() {\r\n if (this.grid) {\r\n if (this.grid.gridView) {\r\n this.grid.gridView.remove();\r\n }\r\n if (this.grid.toolbar && this.grid.toolbar.gridToolbarGroup) {\r\n this.grid.toolbar.gridToolbarGroup.remove();\r\n }\r\n }\r\n if (this.linkStoreView) {\r\n this.linkStoreView.remove();\r\n }\r\n super.remove();\r\n }\r\n}\r\n","import { CampaignuiBaseColumn } from '@bingads-webui-campaign/campaignui-base-column';\r\nimport ActionColumnTemplate from './action-column.pug';\r\nimport StatusColumnTemplate from './status-column.pug';\r\n\r\nconst StatusMap = {\r\n 0: 'Pending',\r\n 1: 'Approved',\r\n 2: 'Rejected', // link request was rejected by retailer\r\n 3: 'Expired',\r\n 4: 'Cancelled', // link request was cancelled by Coop customer\r\n};\r\n\r\nconst ActionText = {\r\n Pending: 'CPG_ProductFeed_Grid_Revoke',\r\n Approved: 'CPG_ProductFeed_Grid_Unlink',\r\n Rejected: 'CPG_ProductFeed_Grid_Resend',\r\n Expired: 'CPG_ProductFeed_Grid_Resend',\r\n Cancelled: 'CPG_ProductFeed_Grid_Resend',\r\n};\r\n\r\nconst ActionClass = {\r\n Pending: 'revoke-action',\r\n Approved: 'unlink-action',\r\n Rejected: 'resend-action',\r\n Expired: 'resend-action',\r\n Cancelled: 'resend-action',\r\n};\r\n\r\nclass StoreIdColumn extends CampaignuiBaseColumn {\r\n constructor({ i18n, deps }) {\r\n const title = i18n.getString('CPG_ProductFeed_Column_StoreId');\r\n\r\n super({\r\n name: 'StoreId',\r\n property: deps.pageContext.Permissions.IsSPAv2Enabled ? 'RetailerProviderId' : 'ProviderId',\r\n title,\r\n type: 'string',\r\n helpId: 'pop_BA_CampaignGrids_Store_ID',\r\n sortable: true,\r\n helpAriaLabel: i18n.getString('Click to learn more about {{item}}', { item: title }),\r\n });\r\n }\r\n}\r\n\r\nclass StoreNameColumn extends CampaignuiBaseColumn {\r\n constructor({ i18n, deps }) {\r\n const title = i18n.getString('CPG_ProductFeed_Column_StoreName');\r\n\r\n super({\r\n name: 'StoreName',\r\n property: deps.pageContext.Permissions.IsSPAv2Enabled ? 'RetailerName' : 'ProviderName',\r\n title,\r\n type: 'string',\r\n helpId: 'pop_BA_CampaignGrids_StoreName',\r\n sortable: true,\r\n helpAriaLabel: i18n.getString('Click to learn more about {{item}}', { item: title }),\r\n });\r\n }\r\n}\r\n\r\nclass StatusColumn extends CampaignuiBaseColumn {\r\n constructor({ i18n }) {\r\n const title = i18n.getString('CPG_ProductFeed_Column_Status');\r\n\r\n super({\r\n name: 'Status',\r\n property: 'Status',\r\n title,\r\n type: 'string',\r\n helpId: 'pop_BA_CampaignGrids_StoreLinkStatus',\r\n sortable: true,\r\n helpAriaLabel: i18n.getString('Click to learn more about {{item}}', { item: title }),\r\n });\r\n this.i18n = i18n;\r\n }\r\n\r\n pickProperty(item) {\r\n return StatusMap[item.Status];\r\n }\r\n\r\n template({ value }) {\r\n return StatusColumnTemplate({\r\n statusString: this.i18n.getString(`LinkStore_Status_${value}`) || value,\r\n });\r\n }\r\n}\r\n\r\nclass ActionColumn extends CampaignuiBaseColumn {\r\n constructor({ i18n, deps }) {\r\n const title = i18n.getString('CPG_ProductFeed_Column_Action');\r\n\r\n super({\r\n name: 'Action',\r\n property: 'Status',\r\n title,\r\n type: 'string',\r\n helpId: 'pop_BA_BSC_StoreLinkAction',\r\n helpAriaLabel: i18n.getString('Click to learn more about {{item}}', { item: title }),\r\n });\r\n this.i18n = i18n;\r\n this.deps = deps;\r\n }\r\n\r\n pickProperty(item) {\r\n return item;\r\n }\r\n\r\n template({ value }) {\r\n const status = StatusMap[value.Status];\r\n return ActionColumnTemplate({\r\n status,\r\n actionText: this.i18n.getString(ActionText[status]),\r\n actionClass: ActionClass[status],\r\n isReadOnly: this.deps.config.get('CurrentAccountInActive') || this.deps.config.get('ReadOnlyMode'),\r\n storeName: this.deps.pageContext.Permissions.IsSPAv2Enabled ?\r\n value.RetailerName : value.ProviderName,\r\n });\r\n }\r\n}\r\n\r\nclass MatchedProductCountColumn extends CampaignuiBaseColumn {\r\n constructor({ i18n }) {\r\n const title = i18n.getString('CPG_ProductFeed_Column_MatchedProductCount');\r\n\r\n super({\r\n name: 'MatchedProductCount',\r\n property: 'MatchedProductCount',\r\n title,\r\n type: 'number',\r\n helpId: 'pop_BA_BMC_MatchedProducts',\r\n helpAriaLabel: i18n.getString('Click to learn more about {{item}}', { item: title }),\r\n sortable: true,\r\n });\r\n }\r\n}\r\n\r\nexport const columns = {\r\n StoreIdColumn,\r\n StoreNameColumn,\r\n MatchedProductCountColumn,\r\n StatusColumn,\r\n ActionColumn,\r\n};\r\n","import $ from 'jquery';\r\nimport _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport { dataSource } from 'projection-grid';\r\nimport { hasError, getError, getEndpoint, getBmcMtEndpoint } from '../shared/util';\r\nimport { columns } from './grid-columns';\r\n\r\nclass CustomizedDataSource extends dataSource.Base {\r\n constructor({ view, deps }) {\r\n super();\r\n this.view = view;\r\n this.deps = deps;\r\n this.isSPAv2Enabled = deps.pageContext.Permissions.IsSPAv2Enabled;\r\n this.gridData = [];\r\n }\r\n\r\n getFilterParams() {\r\n let filterParams = '';\r\n if (this.view.filterService.editableFilter\r\n && this.view.filterService.editableFilter.query.Status) {\r\n filterParams = `&filter=Status eq ${this.view.filterService.editableFilter.query.Status.$eq[0]}`;\r\n }\r\n return filterParams;\r\n }\r\n\r\n getQueryUrl() {\r\n if (!this.isSPAv2Enabled) {\r\n return `${getEndpoint()}/coop/LinkedStores?cid=${this.view.customerId}&aid=${this.view.accountId}`;\r\n }\r\n\r\n const filterParams = this.getFilterParams();\r\n\r\n return `${getBmcMtEndpoint()}/api/v1/manufacturers/${this.view.customerId}/linkedStores?cid=${this.view.customerId}&aid=${this.view.accountId}&uid=${this.view.userId}${filterParams}`;\r\n }\r\n\r\n query() {\r\n return new Promise((resolve) => {\r\n const url = this.getQueryUrl();\r\n\r\n $.ajax({\r\n url: `${url}`,\r\n type: 'GET',\r\n xhrFields: {\r\n withCredentials: true,\r\n },\r\n success: (response) => {\r\n this.view.fetchGridData = false;\r\n\r\n const obj = this.isSPAv2Enabled ? response : JSON.parse(response);\r\n if (!hasError(obj)) {\r\n this.gridData = _.result(obj.ResponseObject, 'CoOpLinkedStores', []);\r\n } else {\r\n this.view.setErrors(getError(obj, this.view.i18n), false);\r\n }\r\n resolve();\r\n },\r\n error: () => {\r\n this.view.setErrors([this.view.i18n.getString('CPG_Error_RequestFailed')], false);\r\n this.gridData = [];\r\n resolve();\r\n },\r\n });\r\n }).then(() => ({\r\n totalCount: this.gridData.length,\r\n items: this.gridData,\r\n }));\r\n }\r\n}\r\n\r\nexport function getLinkedStoreGridConfig({\r\n view,\r\n deps,\r\n viewport,\r\n customHeaderOffset,\r\n}) {\r\n const headRows = ['column-header-rows'];\r\n const tableName = deps.i18n.getString('CPG_ProductFeed_Grid_Title_Stores');\r\n const gridConfig = {\r\n name: 'linkedStoreGrid',\r\n legacyGridName: 'linkedStoreGrid',\r\n dataSource: new CustomizedDataSource({ view, deps }),\r\n tableAttributes: { 'aria-label': tableName },\r\n tableClasses: ['table', 'table-bordered'],\r\n preferenceService: deps.preferenceService,\r\n config: deps.config,\r\n columns: _.chain(columns)\r\n .compact()\r\n .map(Column => (new Column({ i18n: deps.i18n, deps })).toJSON())\r\n .value(),\r\n rows: {\r\n headRows,\r\n },\r\n scrolling: {\r\n virtualized: false,\r\n header: {\r\n type: 'sticky',\r\n offset: customHeaderOffset || (() => $('nav.navbar-default.navbar-fixed-top').height()),\r\n attributes: { 'aria-label': deps.i18n.getString('CPG_ProductFeed_Grid_Header_Stores') },\r\n },\r\n },\r\n };\r\n\r\n if (!deps.pageContext.Permissions.IsSPAv2Enabled) {\r\n // MatchedProductCount is only enabled in SPAv2\r\n gridConfig.columns = gridConfig.columns.filter(col => col.name !== 'MatchedProductCount');\r\n }\r\n\r\n if (viewport) {\r\n gridConfig.scrolling.viewport = viewport;\r\n }\r\n\r\n return gridConfig;\r\n}\r\n","import { uncheckedInjectionContext as globalContext } from '@bingads-webui-campaign/injection-context';\r\n\r\nconst i18n = globalContext.require('@bingads-webui/i18n-amd-loader!campaignui/feature/product-feed');\r\nconst edmCampaign = globalContext.requireDefault('component/edm-campaign/index');\r\nconst config = globalContext.require('component/config/index');\r\nconst logger = globalContext.require('module/service/instrumentation/index');\r\nconst { Columns, SelectedColumns } = globalContext.require('component/bingads-grid/service/column-chooser-preferences');\r\nconst { LegacyColumns, LegacySelectedColumns } = globalContext.require('component/bingads-grid/service/legacy-column-chooser-preferences');\r\nconst jsData = globalContext.require('component/js-data-campaign/index');\r\nconst state = globalContext.require('component/state/index');\r\nconst preferenceService = globalContext.requireDefault('component/preference/service/index');\r\nconst s$ProductOffer = globalContext.require('$/schema!campaign/ProductOffer');\r\nconst sessionStore = globalContext.requireDefault('component/js-data-storage/session-storage');\r\nconst preferenceStoreFactory = globalContext.require('component/bingads-grid/service/filter-preferences').getFilters;\r\nconst cacheService = globalContext.require('Services/CacheService');\r\nconst dataContextManager = globalContext.require('SummaryDataContextManager');\r\nconst s$i18n = globalContext.require('$/schema-i18n!campaign');\r\nconst pageContext = globalContext.require('PageContext');\r\n\r\nconst deps = {\r\n pageContext,\r\n i18n,\r\n edmCampaign,\r\n config,\r\n logger,\r\n Columns,\r\n SelectedColumns,\r\n LegacyColumns,\r\n LegacySelectedColumns,\r\n jsData,\r\n state,\r\n addDateChangeListener: (handler) => {\r\n window.App.views.Summary.bindDateFilterChangeHandler(handler);\r\n },\r\n preferenceService,\r\n s$ProductOffer,\r\n sessionStore,\r\n preferenceStoreFactory,\r\n cacheService,\r\n dataContextManager,\r\n s$i18n,\r\n};\r\n\r\nexport default deps;\r\n","import { LinkedStoreGrid } from './linked-store-grid/linked-store-grid';\r\nimport { getLinkedStoreGridConfig } from './linked-store-grid/grid-config';\r\nimport { getLinkedStoreGridPlugins } from './linked-store-grid/grid-plugins-config';\r\n\r\nimport deps from './linked-store-grid-deps';\r\n\r\nexport function createLinkedStoreGrid({\r\n filterService,\r\n getAdditionalPlugins,\r\n preferenceConfig,\r\n viewport,\r\n customHeaderOffset,\r\n perfMarker,\r\n}) {\r\n return new LinkedStoreGrid({\r\n deps,\r\n filterService,\r\n getGridConfig: view => getLinkedStoreGridConfig({\r\n view,\r\n deps,\r\n viewport,\r\n customHeaderOffset,\r\n }),\r\n getPlugins: view => getLinkedStoreGridPlugins({\r\n filterService,\r\n deps,\r\n perfMarker,\r\n }).concat(getAdditionalPlugins(view)),\r\n preferenceConfig,\r\n });\r\n}\r\n","import $ from 'jquery';\r\nimport { paginationPlugin } from '@bingads-webui/projection-grid-pagination';\r\nimport { uiBlockerPlugin } from '@bingads-webui/projection-grid-uiblocker';\r\nimport { performanceLogPlugin, perfMarkerPlugin } from '@bingads-webui-campaign/pgrid-performance-log';\r\nimport { clientSideSortPlugin } from '@bingads-webui/projection-grid-client-sort';\r\nimport { clientSidePaginationPlugin } from '@bingads-webui/projection-grid-client-pagination';\r\nimport { a11yPlugin } from '@bingads-webui/projection-grid-a11y';\r\nimport { getPGridColumnResizePlugin } from '@bingads-webui-campaign/projection-grid-column-resize-helper';\r\n\r\nexport function getLinkedStoreGridPlugins({\r\n deps,\r\n perfMarker,\r\n gridName,\r\n preferenceService,\r\n permissions,\r\n}) {\r\n const { i18n } = deps;\r\n return [{\r\n plugin: perfMarkerPlugin,\r\n config: { appConfig: deps.config, marker: perfMarker },\r\n }, {\r\n plugin: uiBlockerPlugin,\r\n config: {\r\n el: $('.linked-store-page'),\r\n },\r\n }, {\r\n plugin: paginationPlugin,\r\n config: {\r\n availablePageSizes: [20, 50, 100],\r\n enableRandomPage: false,\r\n preferenceService: deps.preferenceService,\r\n pageNumberLabelText: i18n.getString('Grid_Page_Number_Label_Text'),\r\n pageSizeText: i18n.getString('Grid_ShowRows'),\r\n totalPageCountText: i18n.getString('Grid_PageOf'),\r\n },\r\n }, {\r\n plugin: performanceLogPlugin,\r\n config: {\r\n appConfig: deps.config,\r\n logger: deps.logger,\r\n },\r\n }, {\r\n plugin: clientSideSortPlugin,\r\n }, {\r\n plugin: clientSidePaginationPlugin,\r\n }, {\r\n plugin: a11yPlugin,\r\n config: { i18n },\r\n },\r\n getPGridColumnResizePlugin({\r\n gridName,\r\n preferenceService,\r\n permissions,\r\n }),\r\n ];\r\n}\r\n","/* eslint-disable import/extensions */\r\n/* eslint-disable import/no-unresolved */\r\n\r\nimport _ from 'underscore';\r\nimport $ from 'jquery';\r\nimport ko from 'knockout';\r\nimport { KnockoutView } from '@bingads-webui/knockout-view';\r\nimport { FilePicker } from '@bingads-webui/file-picker';\r\nimport { withUiBlock } from '@bingads-webui/uiblocker';\r\nimport { hasError, getError, getEndpoint } from '../shared/util';\r\nimport template from './template.pug';\r\n\r\nconst hostname = getEndpoint();\r\n\r\n/**\r\n * Upload feed dialog view\r\n */\r\n\r\nclass UploadFeedViewModel {\r\n constructor() {\r\n this.errors = ko.observableArray([]);\r\n }\r\n}\r\n\r\nexport class UploadFeedView extends KnockoutView {\r\n initialize(deps) {\r\n super.initialize();\r\n this.deps = deps;\r\n this.i18n = deps.i18n;\r\n this.hostname = hostname;\r\n this.customerId = deps.pageContext.CurrentCustomer.Id;\r\n this.accountId = deps.pageContext.CurrentAccount.Id;\r\n this.unblock = null;\r\n this.setState({ isFeedReady: false });\r\n\r\n this.filePicker = new FilePicker({\r\n theme: 'default',\r\n allowedFileExtensions: ['.csv', '.tsv', '.xlsx', '.txt', '.zip'],\r\n i18n: deps.i18n,\r\n displayFilePath: 'filename',\r\n validator: (file) => {\r\n if (file.size === 0) {\r\n return deps.i18n.getString('CPG_FileImport_Upload_InvalidFile');\r\n }\r\n return null;\r\n },\r\n }).render();\r\n\r\n this.filePicker.on('error.extension', () => {\r\n this.setState({ isFeedReady: false });\r\n });\r\n this.filePicker.on('changed', (newFilePath) => {\r\n this.setState({ isFeedReady: !_.isEmpty(newFilePath) });\r\n });\r\n }\r\n\r\n get template() {\r\n return template;\r\n }\r\n\r\n get ViewModel() {\r\n return UploadFeedViewModel;\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click .btn-upload': 'getSasUrl',\r\n 'click .btn-cancel': 'cancel',\r\n 'click .download-template': 'downloadTemplate',\r\n };\r\n }\r\n\r\n getSasUrl() {\r\n if (!this.model.get('isFeedReady')) {\r\n return;\r\n }\r\n this.viewModel.errors([]);\r\n this.unblock = withUiBlock(this.$el);\r\n $.ajax({\r\n url: `${this.hostname}/coop/GetCoOpBlobContext?cid=${this.customerId}&aid=${this.accountId}`,\r\n type: 'GET',\r\n xhrFields: {\r\n withCredentials: true,\r\n },\r\n success: (response) => {\r\n const obj = JSON.parse(response);\r\n if (!hasError(obj)) {\r\n const sasUrl = obj.ResponseObject.BlobSasUrl;\r\n const securityToken = obj.ResponseObject.SecurityToken;\r\n this.uploadToAzure({ sasUrl, securityToken });\r\n } else {\r\n this.removeUiBlocker();\r\n this.viewModel.errors(getError(obj, this.i18n));\r\n }\r\n },\r\n error: () => {\r\n this.removeUiBlocker();\r\n this.viewModel.errors([this.i18n.getString('CPG_Error_RequestFailed')]);\r\n },\r\n });\r\n }\r\n\r\n uploadToAzure({\r\n sasUrl = '',\r\n securityToken = '',\r\n }) {\r\n if (_.isEmpty(sasUrl) || _.isEmpty(securityToken)) {\r\n this.viewModel.errors([this.i18n.getString('CPG_Error_AzureInfoInvalid')]);\r\n return;\r\n }\r\n const { UploadService } = this.deps;\r\n const file = this.filePicker.fileObject;\r\n const uploadService = new UploadService({\r\n blobSetting: {\r\n SasUrl: sasUrl,\r\n blobName: file.name,\r\n },\r\n file,\r\n });\r\n uploadService.start()\r\n .then(() => {\r\n this.uploadToBMC({ securityToken });\r\n }).catch(() => {\r\n this.removeUiBlocker();\r\n this.viewModel.errors([this.i18n.getString('CPG_Error_AzureUploadFailed')]);\r\n });\r\n }\r\n\r\n uploadToBMC({\r\n securityToken = '',\r\n }) {\r\n $.ajax({\r\n url: `${this.hostname}/coop/UploadCoOpFeed?cid=${this.customerId}&aid=${this.accountId}`,\r\n type: 'POST',\r\n xhrFields: {\r\n withCredentials: true,\r\n },\r\n data: {\r\n FileName: this.filePicker.fileObject.name,\r\n SecurityToken: securityToken,\r\n },\r\n success: (response) => {\r\n this.removeUiBlocker();\r\n const obj = JSON.parse(response);\r\n if (!hasError(obj)) {\r\n this.trigger('trackStatus', obj.ResponseObject);\r\n } else {\r\n this.viewModel.errors(getError(obj, this.i18n));\r\n }\r\n },\r\n error: () => {\r\n this.removeUiBlocker();\r\n this.viewModel.errors([this.i18n.getString('CPG_Error_RequestFailed')]);\r\n },\r\n });\r\n }\r\n\r\n cancel() {\r\n this.trigger('cancel');\r\n }\r\n\r\n downloadTemplate() {\r\n window.location.href = `${this.deps.pageContext.TemplatesPathUrl}Import/CSV_CPG_UploadFeed_Template.csv`;\r\n }\r\n\r\n removeUiBlocker() {\r\n if (this.unblock) {\r\n this.unblock();\r\n this.unblock = null;\r\n }\r\n }\r\n\r\n renderTrunk() {\r\n super.renderTrunk();\r\n this.$('.file-picker').append(this.filePicker.$el);\r\n return this;\r\n }\r\n\r\n remove() {\r\n if (this.filePicker) {\r\n this.filePicker.remove();\r\n }\r\n super.remove();\r\n }\r\n}\r\n","export const StateCode = {\r\n 0: 'Inserted',\r\n 10: 'PickedUp',\r\n 20: 'Started',\r\n 30: 'Processing',\r\n 100: 'Completed',\r\n 255: 'FailedRetryable',\r\n 265: 'FailedFinal',\r\n};\r\n\r\nexport const FailureCode = {\r\n 0: 'Failed',\r\n 1: 'ArchivedAndSentToProcessing',\r\n 2: 'BatchFileArchivedOnly',\r\n 3: 'DecompressionFailed',\r\n 4: 'Unrecognized',\r\n 5: 'Pending',\r\n 6: 'InvalidFieldDelimeter',\r\n 7: 'HeaderError',\r\n 9: 'InvalidXml',\r\n 10: 'UndeterminedOrInvalidEncoding',\r\n 11: 'NoOffersUploaded',\r\n 12: 'ProductAdsDisabled',\r\n 13: 'InternalError',\r\n 14: 'StoreNotCapiProvisioned',\r\n 15: 'StoreOrFeedNotEnabled',\r\n 16: 'UnsupportedCompressedFile',\r\n 17: 'Cancelled',\r\n 20: 'UnSupportedFileExtension',\r\n 1001: 'UnifiedBmcDisabled',\r\n 1002: 'MarketNotSupported',\r\n 1003: 'FileNotMappedToCatalog',\r\n 1004: 'FeedFileMissingAtSource',\r\n};\r\n","import $ from 'jquery';\r\nimport _ from 'underscore';\r\nimport { DeterministicView } from '@bingads-webui/deterministic-view';\r\nimport { getEndpoint } from '../shared/util';\r\nimport template from './template.pug';\r\nimport { StateCode, FailureCode } from '../shared/upload-feed-status';\r\n\r\nconst hostname = getEndpoint();\r\n\r\nconst Interval = 1000;\r\n/**\r\n * Upload feed progress view\r\n */\r\n// TODO[danluo] - extract shared component\r\nexport class UploadProgressView extends DeterministicView {\r\n initialize({\r\n trackingId,\r\n gridView,\r\n deps,\r\n }) {\r\n this.i18n = deps.i18n;\r\n this.hostname = hostname;\r\n this.customerId = deps.pageContext.CurrentCustomer.Id;\r\n this.accountId = deps.pageContext.CurrentAccount.Id;\r\n this.trackingId = trackingId;\r\n this.gridView = gridView;\r\n this.retryCount = 0;\r\n this.setState({ percentage: '0%' });\r\n this.trackProgress();\r\n }\r\n\r\n get template() {\r\n return template;\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click .btn-return': 'returnToBackground',\r\n };\r\n }\r\n\r\n returnToBackground() {\r\n this.trigger('hideProgressBar');\r\n }\r\n\r\n isUploadingFinished(response) {\r\n const obj = JSON.parse(response).ResponseObject;\r\n const status = StateCode[obj.State];\r\n const failure = FailureCode[obj.FailureCode];\r\n\r\n if (status === 'Completed' || status === 'FailedFinal' || (status === 'FailedRetryable' && failure === 'InternalError')) {\r\n // will remove last upload message when new upload is completed.\r\n this.gridView.removeLastUploadedStatus();\r\n this.stopTracking();\r\n\r\n if (status === 'FailedFinal') {\r\n this.showError(this.i18n.getString(`CPG_Error_${failure}`));\r\n } else if (status === 'FailedRetryable') {\r\n this.showError(this.i18n.getString('CPG_Error_InternalError'));\r\n } else {\r\n this.setState({ percentage: '100%' });\r\n this.showConfirmation(this.i18n.getString('CPG_Info_AzureUploadCompleted'));\r\n }\r\n\r\n return true;\r\n }\r\n\r\n this.setState({ percentage: `${obj.Progress.toString()}%` });\r\n\r\n return false;\r\n }\r\n\r\n makeRequest() {\r\n $.ajax({\r\n url: `${this.hostname}/coop/FeedStatus?id=${this.trackingId}&cid=${this.customerId}&aid=${this.accountId}`,\r\n type: 'GET',\r\n xhrFields: {\r\n withCredentials: true,\r\n },\r\n success: (response) => {\r\n if (this.isUploadingFinished(response)) {\r\n setTimeout(() => this.trigger('complete'), 1000);\r\n }\r\n },\r\n error: () => {\r\n this.retryCount += 1;\r\n if (this.retryCount === 3) {\r\n this.showError(this.i18n.getString('CPG_Error_RequestFailed'));\r\n this.stopTracking();\r\n this.trigger('error');\r\n }\r\n },\r\n });\r\n }\r\n\r\n trackProgress() {\r\n this.retryCount = 0;\r\n this.timer = setInterval(this.makeRequest.bind(this), Interval);\r\n }\r\n\r\n showError(error = '') {\r\n if (!_.isEmpty(error)) {\r\n this.gridView.setUploadedFeedStatus(true, error);\r\n }\r\n }\r\n\r\n showConfirmation(message = '') {\r\n if (!_.isEmpty(message)) {\r\n this.gridView.setUploadedFeedStatus(false, message);\r\n }\r\n }\r\n\r\n stopTracking() {\r\n clearInterval(this.timer);\r\n this.timer = null;\r\n }\r\n}\r\n","import $ from 'jquery';\r\nimport _ from 'underscore';\r\nimport { endsWith } from 'underscore.string';\r\nimport { DeterministicWrapperView } from '@bingads-webui/deterministic-wrapper-view';\r\nimport { constants } from '@bingads-webui/projection-grid-toolbar';\r\nimport { pgridFactory } from '@bingads-webui-campaign/pgrid-factory';\r\nimport Events from 'events';\r\nimport Promise from 'bluebird';\r\n\r\nimport { UploadFeedView } from '../upload-feed-toolbar/view';\r\nimport { hasError, getError, getEndpoint } from '../shared/util';\r\nimport { UploadProgressView } from '../upload-progress-bar/view';\r\nimport { StateCode, FailureCode } from '../shared/upload-feed-status';\r\n\r\nexport class ProductFeedGrid extends DeterministicWrapperView {\r\n viewFactory({\r\n deps,\r\n preferenceConfig,\r\n getGridConfig,\r\n getPlugins,\r\n getLastUploadedFeedStatusInterval = 3000,\r\n }) {\r\n this.getLastUploadedFeedStatusInterval = getLastUploadedFeedStatusInterval;\r\n this.eventHub = new Events();\r\n this.pageToken = {\r\n 0: null,\r\n };\r\n this.downloadBtnDisabled = false;\r\n this.deps = deps;\r\n this.retryCount = 0;\r\n const gridConfig = getGridConfig(this);\r\n const { i18n, pageContext } = deps;\r\n this.i18n = i18n;\r\n this.pageContext = pageContext;\r\n this.hostname = getEndpoint();\r\n this.customerId = pageContext.CurrentCustomer.Id;\r\n this.accountId = pageContext.CurrentAccount.Id;\r\n this.EVENT_NAMES = {\r\n SHOW_TOP_OF_GRID_PANEL: 'SHOW_TOP_OF_GRID_PANEL',\r\n SHOW_UPLOAD_STATUS: 'SHOW_UPLOAD_STATUS',\r\n SHOW_MESSAGES: 'SHOW_MESSAGES',\r\n SHOW_ERRORS: 'SHOW_ERRORS',\r\n GRID_DID_LOAD: 'GRID_DID_LOAD',\r\n };\r\n\r\n this.grid = pgridFactory({\r\n gridConfig,\r\n plugins: getPlugins(this),\r\n preferenceConfig,\r\n });\r\n this.eventHub.once(this.EVENT_NAMES.GRID_DID_LOAD, () => {\r\n this.lastUploadedFeedStatus();\r\n });\r\n\r\n this.grid.gridView.on('didUpdate', () => {\r\n this.refreshDownloadButtonStatus();\r\n });\r\n\r\n return this.grid.gridView;\r\n }\r\n\r\n refreshDownloadButtonStatus() {\r\n const { gridHasData } = this.grid.gridView.dataSource;\r\n const $buttonDownload = $('#button-download');\r\n this.downloadBtnDisabled = !gridHasData;\r\n $buttonDownload.prop('disabled', !gridHasData);\r\n }\r\n\r\n // the component tests need this property\r\n // add this to make sure the tests could run successfully\r\n get toolbarEditor() {\r\n return this.grid.toolbar.gridToolbarGroup.toolbarWithName(constants.DEFAULT_TOOLBAR_NAME);\r\n }\r\n\r\n toggleUploadView(visible = false) {\r\n this.eventHub.emit(\r\n this.EVENT_NAMES.SHOW_TOP_OF_GRID_PANEL,\r\n visible ? this.uploadFeedView : null\r\n );\r\n }\r\n\r\n toggleUploadProgressView(visible = false) {\r\n this.eventHub.emit(\r\n this.EVENT_NAMES.SHOW_TOP_OF_GRID_PANEL,\r\n visible ? this.uploadProgressView : null\r\n );\r\n }\r\n\r\n showErrors(errors = null) {\r\n this.eventHub.emit(\r\n this.EVENT_NAMES.SHOW_ERRORS,\r\n errors\r\n );\r\n }\r\n\r\n showMessasges(messages = null) {\r\n this.eventHub.emit(\r\n this.EVENT_NAMES.SHOW_MESSAGES,\r\n messages\r\n );\r\n }\r\n\r\n showUploadStatus(uploadStatus) {\r\n this.eventHub.emit(\r\n this.EVENT_NAMES.SHOW_UPLOAD_STATUS,\r\n uploadStatus\r\n );\r\n }\r\n\r\n uploadFeed() {\r\n // remove all current messsages/errors\r\n this.removeLastUploadedStatus();\r\n this.showErrors([]);\r\n this.showMessasges([]);\r\n\r\n const closeUploadView = () => {\r\n this.uploadFeedView.remove();\r\n this.uploadFeedView = null;\r\n this.toggleUploadView(false);\r\n this.refreshDownloadButtonStatus();\r\n };\r\n this.uploadFeedView = new UploadFeedView(this.deps).render();\r\n this.toggleUploadView(true);\r\n\r\n this.uploadFeedView.on('trackStatus', (trackingId) => {\r\n closeUploadView();\r\n this.showUploadProgress(trackingId);\r\n });\r\n this.uploadFeedView.on('cancel', () => closeUploadView());\r\n }\r\n\r\n sendAjaxCall(action, successCallback = _.noop, errorCallback = _.noop, type = 'GET') {\r\n const url = `${this.hostname}/coop/${action}?cid=${this.customerId}&aid=${this.accountId}`;\r\n return $.ajax({\r\n url,\r\n type,\r\n xhrFields: {\r\n withCredentials: true,\r\n },\r\n success: successCallback,\r\n error: errorCallback,\r\n });\r\n }\r\n\r\n lastUploadedFeedStatus() {\r\n const getLastUploadedFeedStatus = this.getLastUploadedFeedStatus.bind(this);\r\n // should call getLastUploadedFeedStatus immediately before setup the timer.\r\n getLastUploadedFeedStatus();\r\n this.timer = setInterval(getLastUploadedFeedStatus, this.getLastUploadedFeedStatusInterval);\r\n }\r\n\r\n getLastUploadedFeedStatus() {\r\n const handleResponse = (lastUploadFeedResult, downloadReportResult) => {\r\n const response = _.result(JSON.parse(lastUploadFeedResult), 'ResponseObject') || null;\r\n const downloadReportResponse = _.result(JSON.parse(downloadReportResult), 'ResponseObject', null);\r\n\r\n if (_.isNull(response)) {\r\n // user hasn't uploaded before.\r\n return true;\r\n }\r\n const status = StateCode[_.result(response, 'State')];\r\n const failure = FailureCode[_.result(response, 'FailureCode')];\r\n\r\n const timeStamp = _.result(response, 'CreatedOnUtc');\r\n const timeStampString = this.i18n.formatDate(new Date(timeStamp && endsWith(timeStamp, 'Z') ? timeStamp : `${timeStamp}Z`));\r\n\r\n if (status === 'Completed') {\r\n let uploadStatusText = this.i18n.getString('CPG_LastUploadedStatus_Succeed', {\r\n timeStamp: timeStampString,\r\n });\r\n const downloadReportLink = this.i18n.getString('CPG_Download_ErrorReport_Link', {\r\n link: `${this.i18n.getString('CPG_DownloadFile_ActionLink')}`,\r\n });\r\n uploadStatusText = (downloadReportResponse !== '' ? [uploadStatusText, downloadReportLink] : [uploadStatusText]).join('
');\r\n this.showUploadStatus({\r\n isUploadSuccess: true,\r\n uploadStatusText,\r\n });\r\n return true;\r\n }\r\n\r\n if (status === 'FailedFinal' || (status === 'FailedRetryable' && failure === 'InternalError')) {\r\n const uploadStatusText = this.i18n.getString('CPG_LastUploadedStatus_Failed', {\r\n timeStamp: timeStampString,\r\n });\r\n this.showUploadStatus({\r\n isUploadSuccess: false,\r\n uploadStatusText,\r\n });\r\n return true;\r\n }\r\n\r\n // still processing now\r\n return false;\r\n };\r\n\r\n const success = (lastUploadStatusResult, downloadReportResult) => {\r\n if (handleResponse(lastUploadStatusResult, downloadReportResult)) {\r\n this.stopTracking();\r\n }\r\n };\r\n\r\n const error = () => {\r\n this.retryCount += 1;\r\n\r\n if (this.retryCount === 3) {\r\n // Do nothing. The call is to get last upload status. If the call fails, it will not\r\n // impact user, also user cannot take any action when this happens\r\n this.stopTracking();\r\n }\r\n };\r\n\r\n Promise.all([\r\n this.sendAjaxCall('LastUploadedFeedStatus'),\r\n this.sendAjaxCall('DownloadDetailedReport'),\r\n ])\r\n .then(([uploadStatusResult, downloadReportResult]) => {\r\n success(uploadStatusResult, downloadReportResult);\r\n })\r\n .catch(() => {\r\n error();\r\n });\r\n }\r\n\r\n setUploadedFeedStatus(isError, content) {\r\n if (isError) {\r\n this.showErrors([content]);\r\n } else {\r\n this.showMessasges([content]);\r\n }\r\n }\r\n\r\n stopTracking() {\r\n clearInterval(this.timer);\r\n this.timer = null;\r\n }\r\n\r\n removeLastUploadedStatus() {\r\n this.showUploadStatus({\r\n isUploadSuccess: true,\r\n uploadStatusText: '',\r\n });\r\n }\r\n\r\n showUploadProgress(trackingId) {\r\n this.uploadProgressView = new UploadProgressView({\r\n trackingId,\r\n gridView: this,\r\n deps: this.deps,\r\n }).render();\r\n\r\n this.toggleUploadProgressView(true);\r\n const close = () => {\r\n this.toggleUploadProgressView(false);\r\n this.uploadProgressView = null;\r\n };\r\n\r\n this.uploadProgressView.on('complete', () => {\r\n close();\r\n this.grid.gridView.refresh(true);\r\n });\r\n this.uploadProgressView.on('error', (errors) => {\r\n this.showErrors(errors);\r\n close();\r\n });\r\n this.uploadProgressView.on('hideProgressBar', () => this.toggleUploadProgressView(false));\r\n }\r\n\r\n downloadFeed() {\r\n if (this.downloadBtnDisabled) {\r\n return;\r\n }\r\n this.downloadReport('DownloadCoOpFeed');\r\n }\r\n\r\n downloadReport(api) {\r\n const success = (response) => {\r\n const obj = JSON.parse(response);\r\n\r\n if (!hasError(obj)) {\r\n window.location.href = obj.ResponseObject;\r\n } else {\r\n this.showErrors(getError(obj, this.i18n));\r\n }\r\n };\r\n\r\n const error = () => {\r\n this.showErrors([this.i18n.getString('CPG_Error_DownloadError')]);\r\n };\r\n\r\n this.sendAjaxCall(api, success, error);\r\n }\r\n\r\n get className() { return 'product-feed-grid'; }\r\n\r\n remove() {\r\n if (this.grid) {\r\n if (this.grid.gridView) {\r\n this.grid.gridView.remove();\r\n }\r\n if (this.grid.toolbar && this.grid.toolbar.gridToolbarGroup) {\r\n this.grid.toolbar.gridToolbarGroup.remove();\r\n }\r\n }\r\n if (this.uploadFeedView) {\r\n this.uploadFeedView.remove();\r\n }\r\n if (this.uploadProgressView) {\r\n this.uploadProgressView.remove();\r\n }\r\n\r\n this.stopTracking();\r\n super.remove();\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { CampaignuiBaseColumn } from '@bingads-webui-campaign/campaignui-base-column';\r\nimport { getCategoryOptions, getColumnNames, getLockedColumns } from '../shared/util';\r\n\r\nclass ProductFeedColumn extends CampaignuiBaseColumn {\r\n constructor({ i18n }) {\r\n const title = i18n.getString('CPG_ProductFeed_Column_ProductId');\r\n\r\n super({\r\n name: 'ProductFeed',\r\n property: 'MerchantProductId',\r\n title,\r\n type: 'string',\r\n helpId: 'pop_BA_CAmpaignGrids_ProductFeedID',\r\n helpAriaLabel: i18n.getString('Click to learn more about {{item}}', { item: title }),\r\n });\r\n }\r\n}\r\n\r\nclass TitleColumn extends CampaignuiBaseColumn {\r\n constructor({ i18n }) {\r\n const title = i18n.getString('CPG_ProductFeed_Column_Title');\r\n\r\n super({\r\n name: 'Title',\r\n property: 'Title',\r\n title,\r\n type: 'string',\r\n helpId: 'pop_BA_CampaignGrids_Title',\r\n helpAriaLabel: i18n.getString('Click to learn more about {{item}}', { item: title }),\r\n });\r\n }\r\n}\r\n\r\nclass BrandColumn extends CampaignuiBaseColumn {\r\n constructor({ i18n }) {\r\n const title = i18n.getString('CPG_ProductFeed_Column_Brand');\r\n\r\n super({\r\n name: 'Brand',\r\n property: 'Brand',\r\n title,\r\n type: 'string',\r\n helpId: 'pop_BA_CampaignGrids_Brand',\r\n helpAriaLabel: i18n.getString('Click to learn more about {{item}}', { item: title }),\r\n });\r\n }\r\n}\r\n\r\nclass GTINColumn extends CampaignuiBaseColumn {\r\n constructor({ i18n }) {\r\n const title = i18n.getString('CPG_ProductFeed_Column_GTIN');\r\n\r\n super({\r\n name: 'GTIN',\r\n property: 'Gtin',\r\n title,\r\n type: 'string',\r\n helpId: 'pop_BA_CampaignGrids_GTIN',\r\n helpAriaLabel: i18n.getString('Click to learn more about {{item}}', { item: title }),\r\n });\r\n }\r\n}\r\n\r\nclass MPNColumn extends CampaignuiBaseColumn {\r\n constructor({ i18n }) {\r\n const title = i18n.getString('CPG_ProductFeed_Column_MPN');\r\n\r\n super({\r\n name: 'MPN',\r\n property: 'Mpn',\r\n title,\r\n type: 'string',\r\n helpId: 'pop_BA_CampaignGrids_MPN',\r\n helpAriaLabel: i18n.getString('Click to learn more about {{item}}', { item: title }),\r\n });\r\n }\r\n}\r\n\r\nclass PriceColumn extends CampaignuiBaseColumn {\r\n constructor({ i18n }) {\r\n const title = i18n.getString('CPG_ProductFeed_Column_Price');\r\n\r\n super({\r\n name: 'Price',\r\n property: 'Price',\r\n title,\r\n type: 'number',\r\n helpId: 'pop_BA_CampaignGrids_Price',\r\n helpAriaLabel: i18n.getString('Click to learn more about {{item}}', { item: title }),\r\n });\r\n this.i18n = i18n;\r\n }\r\n\r\n pickProperty(item) {\r\n return item.Price ? this.i18n.formatDecimalToFixed(this.i18n.parseDecimal(item.Price)) : '';\r\n }\r\n}\r\n\r\nclass DescriptionColumn extends CampaignuiBaseColumn {\r\n constructor({ i18n }) {\r\n super({\r\n name: 'Description',\r\n property: 'Description',\r\n title: i18n.getString('CPG_ProductFeed_Column_Description'),\r\n type: 'string',\r\n });\r\n }\r\n}\r\n\r\nclass ImageLinkColumn extends CampaignuiBaseColumn {\r\n constructor({ i18n }) {\r\n const title = i18n.getString('CPG_ProductFeed_Column_ImageLink');\r\n\r\n super({\r\n name: 'ImageLink',\r\n property: 'ImageUrl',\r\n title,\r\n type: 'string',\r\n helpId: 'pop_BA_CampaignGrids_ImageLink',\r\n helpAriaLabel: i18n.getString('Click to learn more about {{item}}', { item: title }),\r\n });\r\n }\r\n}\r\n\r\nexport const columns = {\r\n ProductFeedColumn,\r\n TitleColumn,\r\n BrandColumn,\r\n GTINColumn,\r\n MPNColumn,\r\n PriceColumn,\r\n DescriptionColumn,\r\n ImageLinkColumn,\r\n};\r\n\r\nexport function getColumnChooserPluginConfig(deps) {\r\n const categories = [{\r\n name: deps.i18n.getString('CPG_ColumnChooser_Attributes'),\r\n options: [{\r\n Column: ProductFeedColumn,\r\n selectOption: 'locked',\r\n }, {\r\n Column: TitleColumn,\r\n selectOption: 'locked',\r\n }, {\r\n Column: BrandColumn,\r\n selectOption: 'optional',\r\n }, {\r\n Column: GTINColumn,\r\n selectOption: 'optional',\r\n }, {\r\n Column: MPNColumn,\r\n selectOption: 'optional',\r\n }, {\r\n Column: PriceColumn,\r\n selectOption: 'optional',\r\n }, {\r\n Column: DescriptionColumn,\r\n selectOption: 'optional',\r\n }, {\r\n Column: ImageLinkColumn,\r\n selectOption: 'optional',\r\n }],\r\n }];\r\n\r\n return {\r\n categories: _.map(categories, category => ({\r\n name: category.name,\r\n options: getCategoryOptions(category.options, deps.i18n),\r\n })),\r\n selected: getColumnNames([\r\n ProductFeedColumn,\r\n TitleColumn,\r\n BrandColumn,\r\n GTINColumn,\r\n MPNColumn,\r\n PriceColumn,\r\n DescriptionColumn,\r\n ImageLinkColumn,\r\n ], deps.i18n),\r\n locked: getColumnNames(getLockedColumns(categories), deps.i18n),\r\n patchQuery: false,\r\n Columns: deps.Columns,\r\n SelectedColumns: deps.SelectedColumns,\r\n LegacyColumns: deps.LegacyColumns,\r\n LegacySelectedColumns: deps.LegacySelectedColumns,\r\n i18n: deps.i18n,\r\n };\r\n}\r\n","import $ from 'jquery';\r\nimport _ from 'underscore';\r\nimport { dataSource } from 'projection-grid';\r\nimport Promise from 'bluebird';\r\nimport { columns } from './grid-columns';\r\nimport { hasError, getError, getEndpoint } from '../shared/util';\r\n\r\nexport class CustomizedDataSource extends dataSource.Base {\r\n constructor({ view, deps }) {\r\n super();\r\n this.view = view;\r\n this.deps = deps;\r\n this.hasNextPage = false;\r\n this.gridHasData = false;\r\n }\r\n\r\n query({\r\n skip = 0,\r\n take = 20,\r\n }) {\r\n const pageNumber = this.view.grid.pagination.pageNumber; // eslint-disable-line\r\n const currentToken = this.view.pageToken[pageNumber];\r\n const tokenParam = currentToken ? `&startToken=${currentToken}` : '';\r\n\r\n const customerId = this.deps.pageContext.CurrentCustomer.Id;\r\n const accountId = this.deps.pageContext.CurrentAccount.Id;\r\n const self = this;\r\n\r\n return new Promise((resolve) => {\r\n $.ajax({\r\n url: `${getEndpoint()}/coop/PageByPageProducts?cid=${customerId}&aid=${accountId}&maxResults=${take}&startIndex=0${tokenParam}`,\r\n type: 'GET',\r\n xhrFields: {\r\n withCredentials: true,\r\n },\r\n success: (response) => {\r\n const result = JSON.parse(response);\r\n\r\n if (_.isNull(result.ResponseObject)) {\r\n // Grid is empty\r\n self.hasNextPage = false;\r\n resolve([]);\r\n } else if (!hasError(result)) {\r\n // Grid is not empty and there is no error\r\n const token = result.ResponseObject.ContinuationTokenValue;\r\n self.view.pageToken[pageNumber + 1] = token;\r\n self.hasNextPage = !_.isNull(token);\r\n resolve(result.ResponseObject.CoOpProducts);\r\n } else {\r\n // The call failed\r\n if (self.view && self.view.viewModel) {\r\n self.view.viewModel.errors(getError(result, self.view.i18n));\r\n }\r\n self.hasNextPage = false;\r\n resolve([]);\r\n }\r\n self.view.eventHub.emit(self.view.EVENT_NAMES.GRID_DID_LOAD);\r\n },\r\n error: () => {\r\n if (self.view && self.view.viewModel) {\r\n self.view.viewModel.errors([this.view.i18n.getString('CPG_Error_RequestFailed')]);\r\n }\r\n self.hasNextPage = false;\r\n resolve([]);\r\n },\r\n });\r\n }).then((data) => {\r\n const totalCount = self.hasNextPage ? skip + take + 1 : skip + data.length;\r\n this.gridHasData = totalCount !== 0;\r\n return {\r\n // this is not real total count, just used to enable/disable next button of pagination\r\n totalCount,\r\n items: data,\r\n };\r\n });\r\n }\r\n}\r\n\r\nexport function getProductFeedGridConfig({\r\n view,\r\n deps,\r\n viewport,\r\n customHeaderOffset,\r\n}) {\r\n const headRows = ['column-header-rows'];\r\n const tableName = deps.i18n.getString('CPG_ProductFeed_Grid_Title_Feed');\r\n const gridConfig = {\r\n name: 'productFeedGrid',\r\n legacyGridName: 'productFeedGrid',\r\n dataSource: new CustomizedDataSource({ view, deps }),\r\n tableAttributes: { 'aria-label': tableName },\r\n tableClasses: ['table', 'table-bordered'],\r\n preferenceService: deps.preferenceService,\r\n config: deps.config,\r\n columns: _.chain(columns)\r\n .compact()\r\n .map(Column => (new Column({ i18n: deps.i18n })).toJSON())\r\n .value(),\r\n rows: {\r\n headRows,\r\n },\r\n scrolling: {\r\n virtualized: false,\r\n header: {\r\n type: 'sticky',\r\n offset: customHeaderOffset || (() => $('nav.navbar-default.navbar-fixed-top').height()),\r\n attributes: { 'aria-label': deps.i18n.getString('CPG_ProductFeed_Grid_Header_Feed') },\r\n },\r\n },\r\n };\r\n\r\n if (viewport) {\r\n gridConfig.scrolling.viewport = viewport;\r\n }\r\n\r\n return gridConfig;\r\n}\r\n","import $ from 'jquery';\r\nimport { paginationPlugin } from '@bingads-webui/projection-grid-pagination';\r\nimport { columnChooserPlugin } from '@bingads-webui-campaign/projection-grid-column-chooser';\r\nimport { uiBlockerPlugin } from '@bingads-webui/projection-grid-uiblocker';\r\nimport { performanceLogPlugin, perfMarkerPlugin } from '@bingads-webui-campaign/pgrid-performance-log';\r\nimport { getColumnChooserPluginConfig } from './grid-columns';\r\n\r\nexport function getProductFeedGridPlugins({\r\n deps,\r\n perfMarker,\r\n}) {\r\n const { i18n } = deps;\r\n const columnChooserConfig = getColumnChooserPluginConfig(deps);\r\n\r\n columnChooserConfig.customToolbarIcon = 'ba-TripleColumnSolid';\r\n\r\n return [{\r\n plugin: perfMarkerPlugin,\r\n config: { appConfig: deps.config, marker: perfMarker },\r\n }, {\r\n plugin: uiBlockerPlugin,\r\n config: {\r\n el: $('.product-feed-page'),\r\n },\r\n }, {\r\n plugin: paginationPlugin,\r\n config: {\r\n availablePageSizes: [20, 50, 100, 200],\r\n enableRandomPage: false,\r\n preferenceService: deps.preferenceService,\r\n pageNumberLabelText: i18n.getString('Grid_Page_Number_Label_Text'),\r\n pageSizeText: i18n.getString('Grid_ShowRows'),\r\n totalPageCountText: null,\r\n },\r\n }, {\r\n plugin: performanceLogPlugin,\r\n config: {\r\n appConfig: deps.config,\r\n logger: deps.logger,\r\n },\r\n }, {\r\n plugin: columnChooserPlugin,\r\n config: columnChooserConfig,\r\n }];\r\n}\r\n","import { uncheckedInjectionContext as globalContext } from '@bingads-webui-campaign/injection-context';\r\n\r\nconst i18n = globalContext.require('@bingads-webui/i18n-amd-loader!campaignui/feature/product-feed');\r\nconst edmCampaign = globalContext.requireDefault('component/edm-campaign/index');\r\nconst config = globalContext.require('component/config/index');\r\nconst logger = globalContext.require('module/service/instrumentation/index');\r\nconst { Columns, SelectedColumns } = globalContext.require('component/bingads-grid/service/column-chooser-preferences');\r\nconst { LegacyColumns, LegacySelectedColumns } = globalContext.require('component/bingads-grid/service/legacy-column-chooser-preferences');\r\nconst jsData = globalContext.require('component/js-data-campaign/index');\r\nconst state = globalContext.require('component/state/index');\r\nconst preferenceService = globalContext.requireDefault('component/preference/service/index');\r\nconst s$ProductOffer = globalContext.require('$/schema!campaign/ProductOffer');\r\nconst sessionStore = globalContext.requireDefault('component/js-data-storage/session-storage');\r\nconst preferenceStoreFactory = globalContext.require('component/bingads-grid/service/filter-preferences').getFilters;\r\nconst cacheService = globalContext.require('Services/CacheService');\r\nconst dataContextManager = globalContext.require('SummaryDataContextManager');\r\nconst s$i18n = globalContext.require('$/schema-i18n!campaign');\r\nconst pageContext = globalContext.require('PageContext');\r\nconst UploadService = globalContext.require('component/azure-upload/index');\r\n\r\nconst deps = {\r\n pageContext,\r\n i18n,\r\n edmCampaign,\r\n config,\r\n logger,\r\n Columns,\r\n SelectedColumns,\r\n LegacyColumns,\r\n LegacySelectedColumns,\r\n jsData,\r\n state,\r\n addDateChangeListener: (handler) => {\r\n window.App.views.Summary.bindDateFilterChangeHandler(handler);\r\n },\r\n preferenceService,\r\n s$ProductOffer,\r\n sessionStore,\r\n preferenceStoreFactory,\r\n cacheService,\r\n dataContextManager,\r\n s$i18n,\r\n UploadService,\r\n};\r\n\r\nexport default deps;\r\n","import { ProductFeedGrid } from './product-feed-grid/product-feed-grid';\r\nimport { getProductFeedGridConfig } from './product-feed-grid/grid-config';\r\nimport { getProductFeedGridPlugins } from './product-feed-grid/grid-plugins-config';\r\n\r\nimport deps from './product-feed-grid-deps';\r\n\r\nexport function createProductsGrid({\r\n getAdditionalPlugins,\r\n preferenceConfig,\r\n viewport,\r\n customHeaderOffset,\r\n perfMarker,\r\n}) {\r\n return new ProductFeedGrid({\r\n deps,\r\n getGridConfig: view => getProductFeedGridConfig({\r\n view,\r\n deps,\r\n viewport,\r\n customHeaderOffset,\r\n }),\r\n getPlugins: view => getProductFeedGridPlugins({\r\n deps,\r\n perfMarker,\r\n }).concat(getAdditionalPlugins(view)),\r\n preferenceConfig,\r\n });\r\n}\r\n","import _ from 'underscore';\r\n\r\nexport function getCategoryOptions(options, i18n) {\r\n return _.map(options, (option) => {\r\n const column = new option.Column({\r\n i18n,\r\n scope: {},\r\n });\r\n\r\n return {\r\n key: column.name,\r\n name: column.title,\r\n selectOption: option.selectOption,\r\n };\r\n });\r\n}\r\n\r\nexport function getColumnNames(Cols, i18n) {\r\n return _.map(Cols, Column => new Column({\r\n i18n,\r\n scope: {},\r\n }).name);\r\n}\r\n\r\nexport function getLockedColumns(categories) {\r\n return _.reduce(categories, (memo, category) =>\r\n memo.concat(_.map(_.filter(category.options, option => option.selectOption === 'locked'), value => value.Column)), []);\r\n}\r\n\r\nexport function hasError(data) {\r\n return !_.isEmpty(data.Messages);\r\n}\r\n\r\nexport function getError(data, i18n) {\r\n return _.chain(data.Messages)\r\n .filter(msg => msg.Type === 'Error')\r\n .pluck('Code')\r\n .map(code => i18n.getString(`CPG_Error_${code}`))\r\n .value();\r\n}\r\n\r\n// TODO: (jinrzhan) Currently the Endpoint is hard-code here.\r\n// Need to find some other better ways to handle this.\r\nexport function getEndpoint() {\r\n const url = window.location.href;\r\n const endPointMap = {\r\n 'ads-int.microsoft.com': 'https://merchantcenter.ads-int.microsoft.com',\r\n 'si.bingads.microsoft.com': 'https://merchantcenter.si.bingads.microsoft.com',\r\n 'ads.microsoft.com': 'https://merchantcenter.ads.microsoft.com',\r\n 'bingads.microsoft.com': 'https://merchantcenter.bingads.microsoft.com',\r\n };\r\n let endPoint = 'https://merchantcenter.ads-int.microsoft.com';\r\n _.each(endPointMap, (value, key) => {\r\n if (url.includes(key)) {\r\n endPoint = value;\r\n }\r\n });\r\n return endPoint;\r\n}\r\n\r\nexport function getBmcMtEndpoint() {\r\n const url = window.location.href;\r\n let endPoint = 'https://mmcapi.ads-int.microsoft.com';\r\n if (url.includes('ads.microsoft.com') || url.includes('si.bingads.microsoft.com')) {\r\n endPoint = 'https://mmcapi.ads.microsoft.com';\r\n }\r\n return endPoint;\r\n}\r\n","/* istanbul ignore file */\r\nimport React from 'react';\r\nimport { isFunction } from 'underscore';\r\nimport { Toggle, MessageBar, MessageBarType } from '@fluentui/react';\r\n\r\ndeclare const _TL_;\r\ninterface IProps {\r\n checked: boolean;\r\n i18n: any;\r\n activityLogger: any;\r\n parent: any;\r\n labelTxt: string;\r\n onTxt: string;\r\n offTxt: string;\r\n isAudienceFeedBasedCampaign: boolean;\r\n alwaysDisabled: boolean;\r\n}\r\n\r\nconst getAudienceFeedBasedCampaignPredictiveTargetingText = i18n => (\r\n
\r\n \r\n {i18n.getString(_TL_('Predictive targeting is automatically enabled for feed-based campaigns. Please note that this won’t impact campaign performance, as the audience signals associated with predictive targeting have already been serving with all feed-based campaigns. '))}\r\n \r\n \r\n {i18n.getString(_TL_('Learn more about predictive targeting.'))}\r\n \r\n
\r\n);\r\n\r\nexport class OptTgtToggle extends React.Component {\r\n constructor(props: IProps) {\r\n super(props);\r\n\r\n this.state = {\r\n checked: props.checked,\r\n disable: !this.validate(),\r\n shouldShowTargetExclusionActualDeliveryStatus: false,\r\n };\r\n }\r\n\r\n onChange = (ev: React.MouseEvent, checked?: boolean) => {\r\n const { parent } = this.props;\r\n const { i18n } = this.props;\r\n if (this.props.activityLogger && this.props.activityLogger.signal) {\r\n this.props.activityLogger.signal(`Status change, checked: ${checked}`, 'predictive targeting toogle button');\r\n }\r\n if (checked === false) {\r\n if (!this.validate()) {\r\n parent.errorsView.setErrors([{\r\n message: i18n.getString(_TL_('Predictive targeting cannot be turned off if ad group does not have any target.')),\r\n }]);\r\n return; // Opt Tgt cannot be turned off if there is no effective targets.\r\n }\r\n }\r\n\r\n this.setState({\r\n checked,\r\n }, () => {\r\n parent.handleEstimateUpdates(parent);\r\n if (isFunction(parent.handleAgeGenderExclusion)) {\r\n // in setting page and enable flag\r\n // true means we are delivery actual delivery status wiht PT setting and target type\r\n this.setState({\r\n shouldShowTargetExclusionActualDeliveryStatus: parent.handleAgeGenderExclusion(),\r\n });\r\n }\r\n });\r\n }\r\n\r\n getData = () => this.state.checked\r\n\r\n validate = () => {\r\n const { alwaysDisabled } = this.props;\r\n const effectiveTgts = this.props.parent.currentLevelTargetInfo &&\r\n this.props.parent.currentLevelTargetInfo.getEffectiveCriterions();\r\n return effectiveTgts && effectiveTgts.length > 0 && !alwaysDisabled;\r\n }\r\n\r\n disableByValidation() {\r\n const validate = this.validate();\r\n const { disable } = this.state;\r\n let { checked } = this.state;\r\n\r\n // If change from non-disable to disable,\r\n // set checked to initial value or default to true if it's null\r\n if (validate && disable === true) {\r\n checked = (this.props.checked == null) ? true : checked;\r\n }\r\n\r\n this.setState({\r\n checked,\r\n disable: !validate,\r\n });\r\n\r\n return checked;\r\n }\r\n\r\n render() {\r\n const {\r\n i18n, labelTxt, onTxt, offTxt, isAudienceFeedBasedCampaign,\r\n } = this.props;\r\n const { checked, disable, shouldShowTargetExclusionActualDeliveryStatus } = this.state;\r\n if (isAudienceFeedBasedCampaign) {\r\n return getAudienceFeedBasedCampaignPredictiveTargetingText(i18n);\r\n }\r\n return (\r\n <>\r\n \r\n {disable &&\r\n \r\n {i18n.getString(_TL_('Predictive targeting is required when no audience target is selected. Select an audience target to unlock this control'))}\r\n \r\n }\r\n {shouldShowTargetExclusionActualDeliveryStatus &&\r\n \r\n {i18n.getString(_TL_('Based on your new settings, we’ve modified your age and gender exclusion settings. Please review these settings to ensure that they are accurate.'))}\r\n \r\n }\r\n \r\n );\r\n }\r\n}\r\n","/* eslint-disable max-len */\r\nimport _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport ReactDOM from 'react-dom';\r\nimport React from 'react';\r\nimport { cloneDeep } from '@bingads-webui-universal/primitive-utilities';\r\nimport { BackboneSchema as backboneSchema } from '@bingads-webui/backbone-schema';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport {\r\n CompanyNameCriterionSetting,\r\n JobFunctionCriterionSetting,\r\n IndustryCriterionSetting,\r\n AgeCriterionSetting,\r\n DeviceCriterionSetting,\r\n GenderCriterionSetting,\r\n AudienceCriterionSetting,\r\n LocationCriterionSetting,\r\n PlacementSetting,\r\n} from '@bingads-webui-campaign/audience-criterion-setting';\r\nimport { InputControl } from '@bingads-webui/input-control';\r\nimport { RemainingCharsHint } from '@bingads-webui/remaining-chars-hint';\r\nimport { withUiBlock } from '@bingads-webui/uiblocker';\r\nimport { ReachEstimateControl, EstimateRequestFactory } from '@bingads-webui-campaign/reach-estimate-control';\r\nimport { shouldSupportCashbackSettings } from '@bingads-webui-campaign/personalized-offer-shared';\r\nimport {\r\n AudienceTargetSelector,\r\n AudienceCampaignErrorsView,\r\n AudienceStepBase,\r\n criterionHelper,\r\n getBulkErrorsLogMessage,\r\n BidStrategy,\r\n getFeedInfo,\r\n generateNameSuggestionSuffix,\r\n isFeedBasedAudienceCampaign,\r\n} from '@bingads-webui-campaign/audience-campaign-shared';\r\nimport { getLocationsInfo, showIMAReachModal, getLocationsInfoFromCampaignCriterions } from '@bingads-webui-campaign-react/ima-reach-representation';\r\nimport { getBlackListCriterions } from '@bingads-webui-campaign/audience-advanced-target-settings';\r\nimport { BoostPlacementTarget } from '@bingads-webui-campaign-react/boost-placement-target';\r\nimport { ContextualTargetWithStyle, getSelectionFromCriterions, getContextualTargetInfo } from '@bingads-webui-campaign-react/boost-contextual-target';\r\n\r\nimport template from './template.pug';\r\nimport collapseTemplate from './audience-target-selector-collapse.pug';\r\nimport { OptTgtToggle } from './OptTgt-toggle';\r\n\r\n/**\r\n * CrudAudienceAdgroup class that extends {AudienceStepBase} class\r\n * The class defines the section of the setting AdGroup with the targets\r\n *\r\n * @class CrudAudienceAdgroup\r\n * @extends {AudienceStepBase}\r\n */\r\nexport class CrudAudienceAdgroup extends AudienceStepBase {\r\n /**\r\n * Initializes the {CrudAudienceAdgroup} class.\r\n *\r\n * @param {Object} options - options for initializing the class.\r\n * @param {Object} options.viewContext = viewContext for the View.\r\n * @returns {undefined}\r\n */\r\n initialize(options) {\r\n this.renderMarker;\r\n this.perfMarker = options.perfMarker;\r\n this.perfMarker.willInit();\r\n this.isAdImpressions = options.isAdImpressions;\r\n this.wizardElement = options.wizardElement;\r\n this.viewContext = options.viewContext || {};\r\n this.viewContext.level = 'adGroup';\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.audienceCampaignType = options.audienceCampaignType || 'Audience';\r\n this.scenario = options.scenario || '';\r\n this.currentLevelTargetInfo = options.currentLevelTargetInfo;\r\n this.saveOnce = false;\r\n this.currentCampaign = this.viewContext.currentCampaign;\r\n this.options = options;\r\n\r\n const schema = DependencyResolver.get('$/schema!campaign/AdGroup');\r\n const SchemaModel = backboneSchema(\r\n schema,\r\n this.i18n,\r\n ['Name', 'Medium', 'PricingModel', 'Campaign']\r\n );\r\n this.isSimplifyCampaignCreation = this.scenario === 'simplify-campaign-creation';\r\n\r\n const config = DependencyResolver.get('component/config/index');\r\n this.accountInfo = config.get('CurrentAccount');\r\n this.permissions = config.get('Permissions');\r\n this.isIMAReachRepresentationPhase1Enabled = _.result(this.permissions, 'IsIMAReachRepresentationPhase1Enabled');\r\n this.isAudienceCampaignCollapseTargetSelectionEnable =\r\n _.result(this.permissions, 'IsAudienceCampaignCollapseTargetSelectionEnabled', false);\r\n\r\n this.isMSANRemoveDeviceTargetsEnabled = _.result(this.permissions, 'IsMSANRemoveDeviceTargetsEnabled');\r\n this.IsDomesticSimplifiedChineseEnabled = _.result(this.permissions, 'IsDomesticSimplifiedChineseEnabled');\r\n this.isShowDisclaimerBannerEnabled = _.get(this.permissions, ['dynamic', 'AgeGenderDisclaimer'], false);\r\n this.Enable1PPlacementTargeting = _.get(this.permissions, ['dynamic', 'Enable1PPlacementTargeting'], false);\r\n this.isBoostConversionBasedSegmentEnabled = _.get(this.permissions, ['dynamic', 'BoostConversionBasedSegment'], false) &&\r\n _.get(this.permissions, ['IsAmplifyEnabled'], false);\r\n\r\n this.boostPlacementReactComponent = React.createRef();\r\n this.optTgtReactComponent = React.createRef();\r\n\r\n this.isMSANBoostEnabled = _.result(this.permissions, 'IsAmplifyEnabled', false);\r\n this.isContextualTargetEnabled = this.isMSANBoostEnabled &&\r\n _.result(this.permissions, 'IsContextualTargetEnabled', false);\r\n\r\n this.workflow = options.workflow;\r\n\r\n this.model = new SchemaModel();\r\n this.logScenario = options.logScenario;\r\n this.activityLogger = this.logScenario.createAdGroup.create();\r\n this.applyActivity = options.applyActivity;\r\n this.isOpenCreatePanel = options.isOpenCreatePanel;\r\n this.isLastStep = options.lastStep === 'CrudAudienceAdgroup';\r\n this.isForVNext = options && options.isForVNext;\r\n // Location is selected by default, Device is hidden from the selector\r\n this.audienceTargetSelector = new AudienceTargetSelector({\r\n layout: this.isAudienceCampaignCollapseTargetSelectionEnable ? 'collapse' : 'card',\r\n selectedTypeKeys: [],\r\n blackListKeys: this.IsDomesticSimplifiedChineseEnabled ? getBlackListCriterions({\r\n campaignType: this.audienceCampaignType.toLowerCase(),\r\n permissions: this.permissions || {},\r\n }) : _.compact(['device', this.audienceCampaignType === 'shopping' && 'placement']),\r\n activityLogger: this.activityLogger,\r\n permissions: this.permissions,\r\n });\r\n\r\n // mock\r\n // this.currentCampaign.CampaignCashback = { MonthlyBudget: 1 };\r\n\r\n this.supportCashbackSettings = shouldSupportCashbackSettings(this.currentCampaign, this.permissions);\r\n\r\n const settingOptions = {\r\n viewContext: this.viewContext,\r\n currentLevelTargetInfo: this.currentLevelTargetInfo,\r\n scenario: options.scenario,\r\n isLiveUpdateEnabled: true,\r\n showTargetSelection: true,\r\n showBidAdjustment: this.supportCashbackSettings,\r\n showTargetOrBid: false,\r\n supportCashbackSettings: this.supportCashbackSettings,\r\n activityLogger: this.activityLogger,\r\n };\r\n\r\n this.locationSetting = new LocationCriterionSetting(_.extend({\r\n hideTitleLabel: true,\r\n deps: _.defaults(options.deps, {\r\n isNewUI: options.isForVNext,\r\n ...(this.isIMAReachRepresentationPhase1Enabled ? {\r\n onLocationTargetsChange: locationTargets => this.onLocationTargetsChange(locationTargets),\r\n isAudienceCreationWorkflow: true,\r\n } : {}),\r\n }),\r\n }, settingOptions, {\r\n showBidAdjustment: false,\r\n }));\r\n this.ageSetting = new AgeCriterionSetting(settingOptions);\r\n this.genderSetting = new GenderCriterionSetting(settingOptions);\r\n if (!this.isMSANRemoveDeviceTargetsEnabled) {\r\n this.deviceSetting = new DeviceCriterionSetting(settingOptions);\r\n }\r\n\r\n this.audienceSetting = new AudienceCriterionSetting(settingOptions);\r\n this.companySetting = new CompanyNameCriterionSetting(settingOptions);\r\n this.industrySetting = new IndustryCriterionSetting(settingOptions);\r\n this.jobFunctionSetting = new JobFunctionCriterionSetting(settingOptions);\r\n if (this.Enable1PPlacementTargeting) {\r\n this.placementSetting = new PlacementSetting(settingOptions);\r\n }\r\n this.targetSettingViews = _.compact([\r\n this.locationSetting,\r\n this.ageSetting,\r\n this.genderSetting,\r\n this.audienceSetting,\r\n this.companySetting,\r\n this.industrySetting,\r\n this.jobFunctionSetting,\r\n this.Enable1PPlacementTargeting && this.placementSetting,\r\n ]);\r\n\r\n if (this.deviceSetting) {\r\n this.targetSettingViews.push(this.deviceSetting);\r\n }\r\n\r\n this.reachControl = new ReachEstimateControl({\r\n isSticky: true,\r\n viewContext: this.viewContext,\r\n scenario: options.logScenario.value,\r\n });\r\n this.estimateRequestFactory = new EstimateRequestFactory({\r\n currentLevelTargetInfo: this.currentLevelTargetInfo,\r\n });\r\n\r\n this.errorsView = new AudienceCampaignErrorsView();\r\n\r\n if (this.isIMAReachRepresentationPhase1Enabled) {\r\n this.audienceSetting.setOnAudiencesTargetChangeCallback((audienceTargets) => {\r\n this.activityLogger.signal(`onAudienceTargetsChange: ${JSON.stringify(audienceTargets)}`);\r\n this.onAudienceTargetsChange(audienceTargets);\r\n });\r\n }\r\n\r\n this.isAudienceCampaignCollapseTargetSelectionEnabled =\r\n _.result(this.permissions, 'IsAudienceCampaignCollapseTargetSelectionEnabled', false);\r\n\r\n this.isCopyCampaignSettingsAudienceCampaignEnabled = _.result(this.permissions, 'IsCopyCampaignSettingsAudienceCampaignEnabled', false);\r\n\r\n if (this.isCopyCampaignSettingsAudienceCampaignEnabled) {\r\n const CopyAdgroupSettings = DependencyResolver.get('campaignui/feature/adgroup-create-advanced/view/copy-adgroup-settings');\r\n this.adGroupSettings = new CopyAdgroupSettings();\r\n this.adGroupSettings.on('copy.adgroup', this.adgroupCopyDriver.bind(this));\r\n }\r\n }\r\n\r\n /**\r\n * willShow() gets called from the wizard, and we take the snapshot\r\n * so that we can compare and save the delta\r\n *\r\n * @returns {undefined}\r\n */\r\n willShow() {\r\n // While it's ideal where willInit align with the contructor, it is created with the wizard.\r\n // The perf marker is to measure the user experience perf for the component.\r\n this.perfMarker.willRender();\r\n this.startListeningForEvents();\r\n this.handleEstimateUpdates();\r\n this.originalSnapshot = this.currentLevelTargetInfo.getSnapshot();\r\n this.ageSetting.saveSnapshot();\r\n this.genderSetting.saveSnapshot();\r\n\r\n if (this.deviceSetting) {\r\n this.deviceSetting.saveSnapshot();\r\n }\r\n\r\n if (this.supportCashbackSettings) {\r\n this.targetSettingViews.forEach((criterionEditor) => {\r\n if (criterionEditor.resetSupportCashbackSettings) {\r\n criterionEditor.resetSupportCashbackSettings(true, {\r\n level: 'AdGroup',\r\n value: this.viewContext.currentAdGroup.CashbackPercent,\r\n });\r\n }\r\n });\r\n }\r\n\r\n if (this.isContextualTargetEnabled) {\r\n this.contextualSelection = [];\r\n\r\n const contextualTargetsCriterions = this.currentLevelTargetInfo.getAllByType('ContextualTarget');\r\n this.contextualSelection = getSelectionFromCriterions(contextualTargetsCriterions);\r\n // reference copy is OK enough as the selection change comes as a new array.\r\n this.initialContextualSelection = this.contextualSelection;\r\n }\r\n if (this.options && this.options.perfMarker && this.renderMarker) {\r\n this.renderMarker.done();\r\n }\r\n }\r\n\r\n renderOptTgtSwtich() {\r\n // in campaign creation flow, we do not have campaign type and sub type until campaign created\r\n // so we need to get this info until adgroup creation page.\r\n\r\n ReactDOM.render(\r\n ,\r\n this.$('.optimized-toggle')[0]\r\n );\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 return {\r\n text: this.i18n.getString('Audience_Campaign_Crud_Adgroup_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_Adgroup_PageTitle'),\r\n };\r\n }\r\n\r\n onContextualSelectionChange(data) {\r\n this.contextualSelection = data || [];\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('RenderCrudAdGroup');\r\n this.renderMarker.willInit();\r\n }\r\n // this code should be after campaign is created.\r\n const campaignType = _.get(this.viewContext, 'currentCampaign.CampaignType');\r\n const campaignSubType = _.get(this.viewContext, 'currentCampaign.CampaignSubType');\r\n this.isAudienceFeedBasedCampaign = (campaignType === 8 || campaignType === 'Audience') &&\r\n (campaignSubType === 1 || campaignSubType === 'AudienceFeedBased');\r\n // we are intentionally not changing the above variable name because we do not know all scenarios where it's being used\r\n this.isAudienceFeedBasedCampaignNew = isFeedBasedAudienceCampaign(campaignSubType);\r\n this.isNativeAds = (campaignType === 8 || campaignType === 'Audience') &&\r\n (campaignSubType === 0 || campaignSubType === 'AudienceStatic');\r\n this.$el.html(template(this));\r\n\r\n if (!this.viewContext.currentAdGroup) {\r\n this.nameInput = new InputControl({\r\n entity: this.model,\r\n field: 'Name',\r\n ariaLabelledby: 'adgroupNameLabel',\r\n });\r\n\r\n this.nameInput.on('input-changed', () => {\r\n this.activityLogger.signal('adgroup name change', 'crud audience adgroup');\r\n });\r\n\r\n if (this.isAudienceCampaignCollapseTargetSelectionEnabled) {\r\n this.nameInput.setState({ value: generateNameSuggestionSuffix('Adgroup') });\r\n }\r\n\r\n this.nameInputRemainingCharsHint = new RemainingCharsHint({\r\n i18n: this.i18n,\r\n model: this.model,\r\n field: 'Name',\r\n });\r\n\r\n this.$('.name-input-control-container').prepend(this.nameInput.render().$el);\r\n this.$('.remaining-chars-hint-container').append(this.nameInputRemainingCharsHint.render().$el);\r\n } else {\r\n this.$('.adgroup-name-input-container').hide();\r\n }\r\n\r\n if (this.isMSANBoostEnabled) {\r\n ReactDOM.render(\r\n ,\r\n this.$('.boost-placement-target')[0]\r\n );\r\n }\r\n\r\n if (this.isContextualTargetEnabled) {\r\n ReactDOM.render(\r\n this.onContextualSelectionChange(selection)}\r\n />,\r\n this.$('.contextual-target-container')[0]\r\n );\r\n }\r\n\r\n if (!this.isSimplifyCampaignCreation) {\r\n this.$('.opttgt-setting').append('
');\r\n this.$('.optimized-container').html(collapseTemplate({ isFeedBasedAudienceCampaign: this.isAudienceFeedBasedCampaign, i18n: this.i18n }));\r\n this.$('.optTgt-setting-container').append(this.audienceTargetSelector.render().$el);\r\n\r\n this.$('.optTgt-setting-container .crud-audience-target-selector .crud-audience-target-selector__description').text(this.i18n.getString('OptimizedTargeting_Expand_Description'));\r\n if (!this.isAudienceFeedBasedCampaign) {\r\n this.renderOptTgtSwtich();\r\n this.$('.optimized-targeting-description').html(`${this.i18n.getString('Audience_Campaign_Predictive_Targeting_Description')}${this.i18n.getString('Audiences_GoToAdgroupTab_LearnMore')}`);\r\n }\r\n } else {\r\n this.$('.audience-target-selector-container').append(this.audienceTargetSelector.render().$el);\r\n\r\n if (this.isSimplifyCampaignCreation && !this.isAudienceFeedBasedCampaign) {\r\n this.renderOptTgtSwtich();\r\n }\r\n }\r\n\r\n if (!this.isSimplifyCampaignCreation && !this.isAudienceFeedBasedCampaign) {\r\n this.$('.audience-reach-estimate-container').append(this.reachControl.render().$el);\r\n }\r\n\r\n this.$('.errors-container').append(this.errorsView.render().$el);\r\n\r\n if (this.isAudienceCampaignCollapseTargetSelectionEnabled) {\r\n this.audienceTargetSelector.$('.location-setting-container').append(this.locationSetting.render().$el);\r\n this.audienceTargetSelector.$('.age-setting-container').append(this.ageSetting.render().$el);\r\n this.audienceTargetSelector.$('.gender-setting-container').append(this.genderSetting.render().$el);\r\n this.audienceTargetSelector.$('.audience-setting-container').append(this.audienceSetting.render().$el);\r\n this.audienceTargetSelector.$('.companyName-setting-container').append(this.companySetting.render().$el);\r\n this.audienceTargetSelector.$('.industry-setting-container').append(this.industrySetting.render().$el);\r\n this.audienceTargetSelector.$('.jobFunction-setting-container').append(this.jobFunctionSetting.render().$el);\r\n if (this.Enable1PPlacementTargeting && this.isNativeAds) {\r\n this.audienceTargetSelector.$('.placement-setting-container').append(this.placementSetting.render().$el);\r\n }\r\n // this.audienceTargetSelector.$('.control-label').removeClass();\r\n this.audienceTargetSelector.$('.control-label').removeClass('show');\r\n // end of my changes\r\n } else {\r\n this.$('.location-setting-container').append(this.locationSetting.render().$el).hide();\r\n this.$('.age-setting-container').append(this.ageSetting.render().$el).hide();\r\n this.$('.gender-setting-container').append(this.genderSetting.render().$el).hide();\r\n\r\n // All the device targets are all selected\r\n // this.$('.device-setting-container').append(this.deviceSetting.render().$el).hide();\r\n this.$('.audience-setting-container').append(this.audienceSetting.render().$el).hide();\r\n this.$('.companyName-setting-container').append(this.companySetting.render().$el).hide();\r\n this.$('.industry-setting-container').append(this.industrySetting.render().$el).hide();\r\n this.$('.jobFunction-setting-container').append(this.jobFunctionSetting.render().$el).hide();\r\n if (this.Enable1PPlacementTargeting && this.isNativeAds) {\r\n this.$('.placement-setting-container').append(this.placementSetting.render().$el).hide();\r\n }\r\n }\r\n this.perfMarker.done();\r\n if (this.isCopyCampaignSettingsAudienceCampaignEnabled) {\r\n this.$('.copy-adgroup-settings-container').append(this.adGroupSettings.render().$el);\r\n }\r\n return this;\r\n }\r\n\r\n getAdGroupData() {\r\n let params = null;\r\n let isUpdateScenario = false;\r\n if (this.viewContext.currentAdGroup) {\r\n params = this.viewContext.currentAdGroup;\r\n isUpdateScenario = true;\r\n } else {\r\n params = this.model.toJSON();\r\n params.Campaign = { Id: this.viewContext.currentCampaign.Id };\r\n params.AdScheduleUseSearcherTimeZone = false;\r\n if (this.viewContext.currentCampaign.CampaignSubType === 'AudienceVideoAds') {\r\n params.PricingModel = 'CPV';\r\n } else if (this.isAdImpressions) {\r\n params.PricingModel = 'CPM';\r\n }\r\n }\r\n\r\n if (this.isMSANBoostEnabled) {\r\n params = {\r\n ...params,\r\n ...this.boostPlacementReactComponent.current.getData(),\r\n };\r\n }\r\n\r\n if (this.isAudienceFeedBasedCampaign) {\r\n params.UseOptimizedTargeting = true;\r\n } else {\r\n const useOptimizedTargeting = this.optTgtReactComponent.current.getData();\r\n params.UseOptimizedTargeting = useOptimizedTargeting;\r\n // for adgroup creation scenario, we always set it as true, MT is going to throw error if value is false.\r\n if (this.isSimplifyCampaignCreation || !isUpdateScenario) {\r\n params.UseOptimizedTargeting = true;\r\n }\r\n }\r\n\r\n if (this.Enable1PPlacementTargeting && !this.isAudienceFeedBasedCampaignNew) {\r\n params.BoostAdunitIds = this.placementSetting.getSnapshot();\r\n }\r\n\r\n return params;\r\n }\r\n\r\n /**\r\n * Get the data that is used for the parameter for saving.\r\n *\r\n * @returns {Object} - object representing the data for the adgroup to be saved.\r\n */\r\n getDataAsync() {\r\n const params = this.getAdGroupData();\r\n\r\n // Let the checkbox save changes to the currentLevelTargetInfo\r\n const updateTasks = [\r\n this.ageSetting.updateCriterionDataAsync(),\r\n this.genderSetting.updateCriterionDataAsync(),\r\n ];\r\n\r\n if (this.deviceSetting) {\r\n updateTasks.push(this.deviceSetting.updateCriterionDataAsync());\r\n }\r\n\r\n // Get the audience criterions from the\r\n return Promise.all(updateTasks).then(() => {\r\n // Location and Device are not supported for TargetSetting property\r\n let targetTypes = this.currentLevelTargetInfo.getAllNoneEmptyTypeKeys();\r\n targetTypes = _.reject(\r\n targetTypes,\r\n targetType => targetType === 'Location' ||\r\n targetType === 'Radius' ||\r\n targetType === 'NegativeLocation' ||\r\n targetType === 'Device' ||\r\n targetType === 'ContextualTarget'\r\n );\r\n\r\n params.TargetSetting = targetTypes.join(';');\r\n\r\n const currentSnapshot = this.currentLevelTargetInfo.getSnapshot();\r\n\r\n let targets =\r\n criterionHelper.compareAndGetCriterionsDelta(this.originalSnapshot, currentSnapshot);\r\n\r\n // Do not need to save NegativeAge, Gender and Device\r\n targets = _.reject(targets, target => (\r\n target.CriterionType === 'NegativeAge' ||\r\n target.CriterionType === 'NegativeGender' ||\r\n target.CriterionType === 'NegativeDevice'));\r\n\r\n if (!this.currentLevelTargetInfo.listenToLocationCriterion) {\r\n // use the targets that are returned from the location target setting control\r\n targets = _.reject(targets, target => (\r\n target.CriterionType === 'Location' ||\r\n target.CriterionType === 'Radius' ||\r\n target.CriterionType === 'NegativeLocation'));\r\n\r\n const {\r\n intent = [],\r\n locations = [],\r\n deletedLocations = [],\r\n } = this.locationSetting.getData();\r\n const locationCriterions = intent.concat(locations).concat(deletedLocations);\r\n\r\n targets = targets.concat(locationCriterions);\r\n }\r\n\r\n if (this.isContextualTargetEnabled) {\r\n const contextualTargets = getContextualTargetInfo(\r\n this.initialContextualSelection,\r\n this.contextualSelection\r\n );\r\n\r\n targets = targets.concat(contextualTargets);\r\n }\r\n\r\n const processedTargets = [];\r\n _.each(targets, (target) => {\r\n const campaignName = this.viewContext.currentCampaign.Name;\r\n const adgroupName = this.model.get('Name');\r\n let processedTarget = cloneDeep(target);\r\n\r\n // remove virtual negative IDs\r\n if (parseInt(processedTarget.Id, 10) < 0) {\r\n processedTarget.Id = undefined; // eslint-disable-line\r\n }\r\n\r\n // if no adgroup exist, remove campaign and adgroup property\r\n if (this.viewContext.currentAdGroup) {\r\n processedTarget.AdGroup = { // eslint-disable-line\r\n Id: this.viewContext.currentAdGroup.Id,\r\n };\r\n } else {\r\n processedTarget = _.omit(processedTarget, 'Campaign'); // eslint-disable-line\r\n processedTarget = _.omit(processedTarget, 'AdGroup'); // eslint-disable-line\r\n }\r\n\r\n processedTarget = _.extendOwn(processedTarget, {\r\n CampaignName: campaignName,\r\n AdGroupName: adgroupName,\r\n });\r\n\r\n processedTargets.push(processedTarget);\r\n });\r\n\r\n const adGroupCriterions = _.reject(processedTargets, target => (\r\n target.Criterion.Type === 'Audience'));\r\n const adGroupAudienceCriterions = _.filter(processedTargets, target => (\r\n target.Criterion.Type === 'Audience'));\r\n\r\n params.AdGroupCriterions = adGroupCriterions;\r\n params.AdGroupAudienceCriterions = adGroupAudienceCriterions;\r\n\r\n return params;\r\n });\r\n }\r\n\r\n /**\r\n * It attempts to save and return true if the save is done succefully.\r\n *\r\n * @returns {boolean} - returns true if it is ready to go to the next step.\r\n */\r\n wizardShouldGoNext() {\r\n this.activityLogger.trace('wizard should go next is called');\r\n return this.validateAndSave().then((isSuccess) => {\r\n if (isSuccess) {\r\n this.stopListeningForEvents();\r\n }\r\n\r\n this.activityLogger.trace(`validate and save result: ${isSuccess}`);\r\n this.activityLogger.signal(`clicked next: ${isSuccess}`, 'crud audience adgroup');\r\n return isSuccess;\r\n });\r\n }\r\n\r\n /**\r\n * It prepares to go back to the previous step.\r\n *\r\n * @returns {boolean} - returns true if it is ready to go to the back.\r\n */\r\n wizardShouldGoBack() {\r\n return this.validateAndSave().then((isSuccess) => {\r\n if (isSuccess) {\r\n this.stopListeningForEvents();\r\n }\r\n\r\n this.activityLogger.signal(`clicked back: ${isSuccess}`, 'crud audience adgroup');\r\n\r\n return isSuccess;\r\n });\r\n }\r\n\r\n /**\r\n * Start listening for the events\r\n * @private\r\n *\r\n * @returns {undefined}\r\n */\r\n startListeningForEvents() {\r\n this.listenTo(\r\n this.audienceTargetSelector,\r\n 'selectionChanged',\r\n this.onSelectionChanged\r\n );\r\n this.listenTo(\r\n this.currentLevelTargetInfo,\r\n 'AdGroupCriterionChanged',\r\n this.handleEstimateUpdates\r\n );\r\n\r\n this.listenTo(\r\n this.currentLevelTargetInfo,\r\n 'AdGroupCriterionChanged',\r\n this.disableOptToggle\r\n );\r\n\r\n if (this.isAudienceCampaignCollapseTargetSelectionEnabled) {\r\n this.listenTo(\r\n this.currentLevelTargetInfo,\r\n 'AdGroupCriterionChanged',\r\n this.onReloadTargetSummary\r\n );\r\n }\r\n }\r\n\r\n disableOptToggle() {\r\n if (!this.isAudienceFeedBasedCampaign && this.optTgtReactComponent && this.optTgtReactComponent.current) {\r\n this.optTgtReactComponent.current.disableByValidation.call(this.optTgtReactComponent.current);\r\n }\r\n }\r\n\r\n /**\r\n * Stop listening for the events\r\n * @private\r\n *\r\n * @returns {undefined}\r\n */\r\n stopListeningForEvents() {\r\n this.stopListening(\r\n this.audienceTargetSelector,\r\n 'selectionChanged',\r\n this.onSelectionChanged\r\n );\r\n this.stopListening(\r\n this.currentLevelTargetInfo,\r\n 'AdGroupCriterionChanged',\r\n this.handleEstimateUpdates\r\n );\r\n\r\n this.stopListening(\r\n this.currentLevelTargetInfo,\r\n 'AdGroupCriterionChanged',\r\n this.disableOptToggle\r\n );\r\n\r\n if (this.isAudienceCampaignCollapseTargetSelectionEnabled) {\r\n this.stopListening(\r\n this.currentLevelTargetInfo,\r\n 'AdGroupCriterionChanged',\r\n this.onReloadTargetSummary\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Saves the AdGroup and exits.\r\n * This is only used when 'Save & Exit' button is shown on this step.\r\n *\r\n * @returns {undefined} - returns undefined\r\n */\r\n saveAndExit() {\r\n this.validateAndSave().then((isSuccess) => {\r\n this.activityLogger.signal(`save and exit: ${isSuccess}`, 'crud audience adgroup');\r\n if (isSuccess) {\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 }\r\n });\r\n }\r\n\r\n /**\r\n * Validates controls on page\r\n *\r\n * @returns {boolean} - returns true if succesful\r\n */\r\n validate() {\r\n if (this.nameInput && !this.nameInput.getState().isValid) {\r\n this.nameInput.setState({ showError: true });\r\n this.nameInput.$el[0].scrollIntoView(false);\r\n\r\n this.activityLogger.trace(`validation failed due to name input: ${this.nameInput.getState()}`);\r\n\r\n return false;\r\n }\r\n\r\n if (!this.isAudienceFeedBasedCampaign) {\r\n const isTargetsValid = this.optTgtReactComponent.current && this.optTgtReactComponent.current.validate();\r\n // when target to all set to On\r\n if (!isTargetsValid) {\r\n this.optTgtReactComponent.current.setState({\r\n checked: true,\r\n });\r\n }\r\n }\r\n\r\n if (!this.locationSetting.validate() ||\r\n !this.ageSetting.validate() ||\r\n !this.genderSetting.validate() ||\r\n !(!this.deviceSetting || this.deviceSetting.validate()) ||\r\n !this.audienceSetting.validate() ||\r\n !this.companySetting.validate() ||\r\n !this.industrySetting.validate() ||\r\n !this.jobFunctionSetting.validate()) {\r\n this.activityLogger.trace('validation failed due to one of the target settings');\r\n\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * It validates the reach and privacy of selected targets and then\r\n * attempts to save and return true if the save is done succefully.\r\n *\r\n * @returns {boolean} - returns true if save was succesful\r\n */\r\n validateAndSave() {\r\n if (!this.validate()) {\r\n return Promise.resolve(false);\r\n }\r\n\r\n return this.reachControl.validate().then((isValid) => {\r\n this.activityLogger.trace(`reach control validation result: ${isValid}`);\r\n if (isValid) {\r\n return this.checkIMAReachAndSave();\r\n }\r\n const message = this.reachControl.errorMessage;\r\n\r\n this.errorsView.setErrors([{ message }]);\r\n\r\n return false;\r\n }).catch(() => {\r\n // TODO: log here\r\n });\r\n }\r\n\r\n checkIMAReachAndSave() {\r\n const currentSnapshot = this.currentLevelTargetInfo.getSnapshot();\r\n const audienceIds = [];\r\n const audienceTargets = _.chain(currentSnapshot)\r\n .filter(item => item.CriterionType === 'InMarket')\r\n .reduce((memo, item) => {\r\n const audienceId = item.Criterion.AudienceId;\r\n\r\n if (_.indexOf(audienceIds, audienceId) === -1) {\r\n audienceIds.push(audienceId);\r\n memo.push({\r\n Level: 'AdGroup',\r\n AudienceCriterion: {\r\n AudienceId: item.Criterion.AudienceId,\r\n AudienceName: item.Criterion.AudienceName,\r\n },\r\n });\r\n }\r\n\r\n return memo;\r\n }, [])\r\n .value();\r\n let locationCriterions;\r\n\r\n if (!this.currentLevelTargetInfo.listenToLocationCriterion) {\r\n // use the targets that are returned from the location target setting control\r\n const {\r\n intent = [],\r\n locations = [],\r\n } = this.locationSetting.getAllLocations();\r\n locationCriterions = intent.concat(locations);\r\n locationCriterions = _.filter(locationCriterions, c => c.Status !== 'Deleted');\r\n\r\n const adGroupCriterionsWithoutIntent = _.filter(locationCriterions, c => c.CriterionType !== 'LocationIntentCriterion');\r\n const campaignCriterions = this.locationSetting.getCampaignLocationCriterions();\r\n\r\n // inherit locations\r\n if (adGroupCriterionsWithoutIntent.length === 0 &&\r\n campaignCriterions &&\r\n campaignCriterions.length > 0) {\r\n const overrideInfo = getLocationsInfoFromCampaignCriterions(campaignCriterions);\r\n locationCriterions = overrideInfo.locations.concat(overrideInfo.intent);\r\n }\r\n } else {\r\n locationCriterions = _.filter(currentSnapshot, target => (\r\n target.CriterionType === 'Location' ||\r\n target.CriterionType === 'Radius' ||\r\n target.CriterionType === 'NegativeLocation'));\r\n\r\n locationCriterions = _.filter(locationCriterions, c => c.Status !== 'Deleted');\r\n\r\n const campaignCriterions = this.currentLevelTargetInfo.getCampaignLocationCriterions();\r\n\r\n // inherit locations\r\n if (locationCriterions.length === 0 &&\r\n campaignCriterions &&\r\n campaignCriterions.length > 0) {\r\n locationCriterions = _.filter(campaignCriterions, c => c.Status !== 'Deleted');\r\n }\r\n }\r\n\r\n if (this.isIMAReachRepresentationPhase1Enabled && this.isForVNext &&\r\n locationCriterions.length > 0 && audienceTargets.length > 0) {\r\n return new Promise((resolve) => {\r\n const onYes = () => {\r\n this.saveAsync().then((isSuccess) => {\r\n resolve(isSuccess);\r\n });\r\n };\r\n const onCancel = () => resolve(false);\r\n const locationsInfo = getLocationsInfo(locationCriterions);\r\n showIMAReachModal({\r\n locationsInfo,\r\n onYes,\r\n onCancel,\r\n deliveryChannel: 'AIM',\r\n // this adgroupId is needed to indicate it's ad group level\r\n // we don't care about it's value\r\n adGroupId: this.viewContext.currentAdGroup && this.viewContext.currentAdGroup.Id ?\r\n Number(this.viewContext.currentAdGroup.Id) : 1,\r\n audienceAssociations: { value: audienceTargets },\r\n i18n: this.i18n,\r\n aid: this.accountInfo.Id,\r\n cid: this.accountInfo.AdvertiserCustomerID,\r\n }).then((isIMAReachModalShow) => {\r\n if (!isIMAReachModalShow) {\r\n this.saveAsync().then((isSuccess) => {\r\n resolve(isSuccess);\r\n });\r\n }\r\n });\r\n });\r\n }\r\n return this.saveAsync();\r\n }\r\n\r\n /**\r\n * Save the adgroup with the given setting.\r\n *\r\n * @returns {Promise} - returns promise of returning boolean value indicating\r\n * if the save process is succesful or not.\r\n */\r\n saveAsync() {\r\n const jsdata = DependencyResolver.get('component/js-data-campaign/index');\r\n\r\n this.errorsView.removeErrors();\r\n\r\n let createTask;\r\n\r\n // If saved already\r\n if (this.viewContext.currentAdGroup && this.viewContext.currentAdGroup.Id) {\r\n createTask = Promise.resolve(true);\r\n } else {\r\n const adGroupParams = this.getAdGroupData();\r\n\r\n this.activityLogger.trace(`creating the ad group with the params: ${adGroupParams}`);\r\n\r\n createTask = jsdata.AdGroup.create(\r\n adGroupParams,\r\n { adapter: 'bulk', cacheResponse: false }\r\n ).then((data) => {\r\n if (_.isFinite(data.Id)) {\r\n this.viewContext.currentAdGroup = data;\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n });\r\n }\r\n\r\n return createTask\r\n .then(() =>\r\n this.getDataAsync())\r\n .then(params => jsdata.AdGroup.update(\r\n params.Id,\r\n params,\r\n { adapter: 'bulk', cacheResponse: false }\r\n ))\r\n .then((data) => {\r\n if (_.isFinite(data.Id)) {\r\n this.viewContext.currentAdGroup = data;\r\n\r\n // This will be reused from step4.\r\n this.viewContext.audienceSetting = this.audienceSetting;\r\n\r\n const savedAdGroupCriterions = data.AdGroupCriterions ? data.AdGroupCriterions : [];\r\n const savedAudienceAdGroupCriterions =\r\n data.AdGroupAudienceCriterions ? data.AdGroupAudienceCriterions : [];\r\n\r\n return this.postProcessAfterSaveAsync(\r\n savedAdGroupCriterions,\r\n savedAudienceAdGroupCriterions\r\n );\r\n }\r\n\r\n return Promise.resolve(false);\r\n }).catch((response) => {\r\n this.handleErrors(response);\r\n\r\n return Promise.resolve(false);\r\n })\r\n .finally(withUiBlock(this.wizardElement, this.i18n.getString('Loading')));\r\n }\r\n\r\n handleErrors(response) {\r\n const createAudienceTargetsActivity = this.logScenario.createAudienceTargets.create();\r\n\r\n if (response && response.entity) {\r\n const hasErrors = response && !_.isUndefined(response.errors);\r\n\r\n if (hasErrors) {\r\n if (response.errors.length) {\r\n const bulkApiErrors = this.i18nErrors.getBulkApiErrors(response.errors);\r\n const noMappedErrors = _.every(bulkApiErrors, error => error.code === error.message);\r\n\r\n if (_.isEmpty(bulkApiErrors) || noMappedErrors) {\r\n this.errorsView.setErrors([{ message: this.i18n.getString('GenericErrorMessage_Short') }]);\r\n\r\n createAudienceTargetsActivity.error(`${getBulkErrorsLogMessage(response.errors)}, Entity:${JSON.stringify(response.entity)}`);\r\n } else {\r\n this.errorsView.setErrors(bulkApiErrors);\r\n\r\n createAudienceTargetsActivity.trace(getBulkErrorsLogMessage(response.errors));\r\n _.each(response.errors, (error) => {\r\n this.activityLogger.signal(error.Error, 'audience campaign creation api error');\r\n });\r\n }\r\n }\r\n } else {\r\n // Unexpected case. Log Error.\r\n createAudienceTargetsActivity.error(JSON.stringify(response));\r\n }\r\n } else {\r\n // Ajax error\r\n this.errorsView.setErrors(this.i18nErrors.getODataErrors(response.errors));\r\n }\r\n }\r\n\r\n /**\r\n * Post processing after the save.\r\n * This ensures that updated criterions from the server are saved on the cache\r\n * @private\r\n *\r\n * @param {Array} savedAdGroupCriterions - array of adgroup criterions not including audience\r\n * @param {Array} savedAudienceAdGroupCriterions - array of audience type adgroup criterions\r\n * @returns {Promise} - promise of cache being settled.\r\n */\r\n postProcessAfterSaveAsync(savedAdGroupCriterions = [], savedAudienceAdGroupCriterions = []) {\r\n const targetInfo = this.currentLevelTargetInfo;\r\n if (savedAdGroupCriterions.length > 0 || savedAudienceAdGroupCriterions.length > 0) {\r\n return targetInfo.destroyAllAsync().then(() => {\r\n const updatedCriterions =\r\n criterionHelper.applyCriterionsDelta(\r\n this.originalSnapshot,\r\n _.union(savedAdGroupCriterions, savedAudienceAdGroupCriterions)\r\n );\r\n\r\n return targetInfo.createMultipleAsync(updatedCriterions).then(() => true);\r\n });\r\n }\r\n\r\n // No criterion saved, just move on.\r\n return Promise.resolve(true);\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 name: 'back',\r\n displayText: this.i18n.getString('Audience_Campaign_Crud_Campaign_Back_Label'),\r\n },\r\n {\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\r\n if (this.scenario === 'adgroup-creation' && this.audienceCampaignType === 'shopping') {\r\n // use the actions as is\r\n } else if (this.scenario === 'campaign-creation' || this.scenario === 'adgroup-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 } else {\r\n return super.actions;\r\n }\r\n\r\n return actions;\r\n }\r\n\r\n // private function\r\n // event handler for handling the section changed.\r\n onSelectionChanged(containerId) {\r\n this.$(this.getContainerNameFromId(containerId)).show();\r\n }\r\n\r\n // private function\r\n // returning container name by the given id.\r\n getContainerNameFromId(id) {\r\n return `.${id}-setting-container`;\r\n }\r\n\r\n // private function\r\n // event handler for handling the updating of reach estimates.\r\n handleEstimateUpdates(parent = null) {\r\n const ts = parent == null ? this : parent;\r\n const { currentCampaign } = ts.viewContext;\r\n // This can be undefined if it's first displayed but has value when come from next step\r\n const biddingSchemeType = currentCampaign &&\r\n currentCampaign.BiddingScheme &&\r\n currentCampaign.BiddingScheme.Type;\r\n const bidinfo = BidStrategy[biddingSchemeType];\r\n const subType = currentCampaign &&\r\n currentCampaign.CampaignSubType;\r\n const campaignSetting = _.first(_.get(currentCampaign, 'CampaignSettings')) || {};\r\n const feedInfo = getFeedInfo(campaignSetting);\r\n const useOptimizedTargeting = ts.optTgtReactComponent.current &&\r\n ts.optTgtReactComponent.current.getData();\r\n const targets = ts.estimateRequestFactory.create(bidinfo, subType, feedInfo, useOptimizedTargeting);\r\n const hasAudienceRemarketingList = ts.currentLevelTargetInfo.hasAudienceRemarketingList();\r\n\r\n ts.reachControl.updateEstimate(targets, hasAudienceRemarketingList);\r\n }\r\n\r\n remove() {\r\n this.audienceTargetSelector.remove();\r\n this.locationSetting.remove();\r\n this.ageSetting.remove();\r\n this.genderSetting.remove();\r\n\r\n if (this.deviceSetting) {\r\n this.deviceSetting.remove();\r\n }\r\n\r\n this.audienceSetting.remove();\r\n this.companySetting.remove();\r\n this.industrySetting.remove();\r\n this.jobFunctionSetting.remove();\r\n this.reachControl.remove();\r\n this.errorsView.remove();\r\n if (this.nameInput) {\r\n this.nameInput.remove();\r\n }\r\n if (this.nameInputRemainingCharsHint) {\r\n this.nameInputRemainingCharsHint.remove();\r\n }\r\n super.remove();\r\n }\r\n\r\n onLocationTargetsChange(locationTargets) {\r\n // subscribed location targets changes\r\n const {\r\n locationIntentCriterion,\r\n targetedLocationCriterions,\r\n excludedLocationCriterions,\r\n } = getLocationsInfo(locationTargets);\r\n\r\n // refresh audience association components\r\n return this.audienceSetting.reloadAudienceData({\r\n targetedLocationCriterions,\r\n excludedLocationCriterions,\r\n locationIntentCriterion,\r\n isLocationRestricted: false,\r\n });\r\n }\r\n\r\n onAudienceTargetsChange(audienceTargets) {\r\n // subscrib audienceTargets changes\r\n // refresh location components\r\n this.locationSetting.reloadLocationView(audienceTargets);\r\n }\r\n\r\n deselectAll() {\r\n // eslint-disable-next-line max-len\r\n if (this.locationSetting.targetSelectionView && this.locationSetting.targetSelectionView.locationTargetsView) {\r\n this.locationSetting.targetSelectionView.locationTargetsView.settoSpecificLocation();\r\n }\r\n\r\n const targetTypes = [\r\n 'Radius',\r\n 'Location',\r\n 'NegativeLocation',\r\n 'Audience',\r\n 'CompanyName',\r\n 'NegativeCompanyName',\r\n 'JobFunction',\r\n 'NegativeJobFunction',\r\n 'Industry',\r\n 'NegativeIndustry',\r\n ];\r\n _.each(targetTypes, (targetType) => {\r\n this.currentLevelTargetInfo.destroyTargetTypeAsync(targetType);\r\n });\r\n }\r\n\r\n // isLocation: Locations must be handled seperately.\r\n // locType: True = location, False = Radius\r\n // isIncluded: This is specifically for location use.\r\n criterionFormat(formatted, criterions, isLocation = false, locType = false, isIncluded = false) {\r\n _.each(criterions, (loadedCriterionData) => {\r\n const formattedCriterion = criterionHelper.reformatFetchedCriterion(\r\n loadedCriterionData,\r\n loadedCriterionData.CampaignId,\r\n loadedCriterionData.AdGroupId\r\n );\r\n\r\n // Reassign the name if it was not properly assigned.\r\n if (!formattedCriterion.Criterion.Name) {\r\n formattedCriterion.Criterion.Name = loadedCriterionData.Criterion.AgeRange ||\r\n loadedCriterionData.Criterion.GenderType || loadedCriterionData.Criterion.GenderType ||\r\n loadedCriterionData.Criterion.IntentOption || loadedCriterionData.Criterion.CompanyName ||\r\n loadedCriterionData.Criterion.JobFunction || loadedCriterionData.Criterion.Industry;\r\n }\r\n\r\n if (isLocation && this.locationSetting.targetSelectionView.locationTargetsView) {\r\n // Locations need to be handled with a specific format. Use helper function.\r\n // eslint-disable-next-line max-len\r\n this.locationSetting.targetSelectionView.locationTargetsView.locationManageView.searchView.convertFromCriterionHelperFormat(locType, formattedCriterion, isIncluded);\r\n } else {\r\n // All other criterions are added to this list for later use.\r\n formatted.push({\r\n Criterion: formattedCriterion.Criterion,\r\n CriterionType: formattedCriterion.CriterionType,\r\n });\r\n }\r\n });\r\n }\r\n\r\n copyAdgroupCriterion(source) {\r\n const adgroup = source[0];\r\n this.activityLogger.signal(`Copy setting from setting: ${adgroup.Name} ${adgroup.Id}`, 'Audience Copy Ad Group Setting');\r\n\r\n const criterions = source[1];\r\n // Negative Criterions do not have the CriterionBid field. Use this to check.\r\n const ageKeys = criterions.filter(i => i.Criterion.Type === 'Age' && i.CriterionBid).map(i => i.Criterion.AgeRange);\r\n const genderKeys = criterions.filter(i => i.Criterion.Type === 'Gender' && i.CriterionBid).map(i => i.Criterion.GenderType);\r\n const locations = criterions.filter(i => i.Criterion.Type === 'Location' && i.CriterionBid);\r\n const radiusList = criterions.filter(i => i.Criterion.Type === 'Radius' && i.CriterionBid);\r\n // All location permutations must be handled seperately.\r\n const excludedLocations = criterions.filter(i => i.Criterion.Type === 'Location' && !i.CriterionBid);\r\n const otherCriterions = criterions.filter(i => i.Criterion.Type === 'CompanyName'\r\n || i.Criterion.Type === 'JobFunction' || i.Criterion.Type === 'Industry');\r\n\r\n if (!_.isEmpty(ageKeys)) {\r\n this.ageSetting.targetSelectionView.setKeys(ageKeys);\r\n }\r\n\r\n if (!_.isEmpty(genderKeys)) {\r\n this.genderSetting.targetSelectionView.setKeys(genderKeys);\r\n }\r\n\r\n const formattedCriterions = [];\r\n\r\n // All other non-checkbox Criterion.\r\n this.criterionFormat(formattedCriterions, otherCriterions);\r\n // This adds all non-location criterions to the criterion list.\r\n this.currentLevelTargetInfo.createMultipleAsync(formattedCriterions);\r\n\r\n _.delay(() => {\r\n // Audience Criterions\r\n if (source[2] && source[2].value) {\r\n // const audienceCriterions = [];\r\n this.currentLevelTargetInfo.audienceAssociationView.expandAssociation();\r\n this.currentLevelTargetInfo.audienceAssociationView.expandExclusion();\r\n const { configSettings } = this.currentLevelTargetInfo.audienceAssociationView.doubleListBoxViewModel;\r\n _.each(source[2].value, (criterion) => {\r\n this.audienceSetting.convertAudienceMTCriterion(criterion.AdGroupCriterion, configSettings);\r\n });\r\n }\r\n }, 3000);\r\n\r\n // Included Locations\r\n this.criterionFormat(formattedCriterions, locations, true, true, true);\r\n // Excluded Locations\r\n this.criterionFormat(formattedCriterions, excludedLocations, true, true, false);\r\n // Radius. We do not support Excluded Radius yet.\r\n this.criterionFormat(formattedCriterions, radiusList, true, false, false);\r\n }\r\n\r\n adgroupCopyDriver(source) {\r\n // First clear out the existing settings.\r\n this.deselectAll();\r\n\r\n // Fill in the criterion\r\n this.copyAdgroupCriterion(source);\r\n\r\n _.delay(() => {\r\n // UseOptimizedTargeting\r\n if (source[0] && source[0].UseOptimizedTargeting != null) {\r\n this.optTgtReactComponent.current.onChange(null, source[0].UseOptimizedTargeting);\r\n }\r\n }, 3000);\r\n }\r\n\r\n /* updates the summary under the auidence target selection\r\n when collapse is closed.\r\n */\r\n onReloadTargetSummary() {\r\n const locationTSummary = this.locationSetting.getTargetedSummary();\r\n const locationESummary = this.locationSetting.getExcludedSummary();\r\n const ageSummary = this.ageSetting.getSummary();\r\n const genderSummary = this.genderSetting.getSummary();\r\n const audienceTSummary = this.audienceSetting.getTargetedSummary();\r\n const audienceESummary = this.audienceSetting.getExcludedSummary();\r\n const companyTSummary = this.companySetting.getTargetedSummary();\r\n const companyESummary = this.companySetting.getExcludedSummary();\r\n const industryTSummary = this.industrySetting.getTargetedSummary();\r\n const industryESummary = this.industrySetting.getExcludedSummary();\r\n const jobTSummary = this.jobFunctionSetting.getTargetedSummary();\r\n const jobESummary = this.jobFunctionSetting.getExcludedSummary();\r\n\r\n this.audienceTargetSelector.dataModel.locationSummaryText(`${locationTSummary}\\n${locationESummary}`);\r\n this.audienceTargetSelector.dataModel.ageSummaryText(ageSummary);\r\n this.audienceTargetSelector.dataModel.genderSummaryText(genderSummary);\r\n this.audienceTargetSelector.dataModel.audienceSummaryText(`${audienceTSummary}\\n${audienceESummary}`);\r\n this.audienceTargetSelector.dataModel.companyNameSummaryText(`${companyTSummary}\\n${companyESummary}`);\r\n this.audienceTargetSelector.dataModel.industrySummaryText(`${industryTSummary}\\n${industryESummary}`);\r\n this.audienceTargetSelector.dataModel.jobFunctionSummaryText(`${jobTSummary}\\n${jobESummary}`);\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport Backbone from 'backbone';\r\nimport $ from 'jquery';\r\nimport ko from 'knockout';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport '@bingads-webui-campaign/ko-stop-binding';\r\nimport template from './template.pug';\r\n\r\n/**\r\n * AudienceAdvancedSettings class\r\n * The class defines the Advanced settings for Audience Campaign/Adgroup\r\n * It currently supports and is used by only Audience AdGroups.\r\n *\r\n * @class AudienceAdvancedSettings\r\n */\r\nexport class AudienceAdvancedSettings extends Backbone.View {\r\n /**\r\n * Initializes the {AudienceAdvancedSettings} class.\r\n *\r\n * @param {Object} options - options for initializing the class.\r\n * @returns {undefined}\r\n */\r\n initialize(options) {\r\n this.viewContext = options.viewContext;\r\n this.model = options.viewContext.currentAdGroup;\r\n this.campaign = {};\r\n\r\n this.scenario = options.scenario;\r\n this.level = options.viewContext.level;\r\n this.supportCashbackSettings = options.supportCashbackSettings;\r\n\r\n const config = DependencyResolver.get('component/config/index');\r\n this.isNewUI = config.get('IsNewUI');\r\n\r\n this.i18n = DependencyResolver.get('component/i18n/loader!campaignui/feature/audience-campaign');\r\n\r\n if (this.isNewUI) {\r\n this.isExclusionsExpanded = ko.observable(false);\r\n }\r\n\r\n if (this.scenario === 'adgroup-settings') {\r\n this.initExclusions();\r\n this.initUrlOptions();\r\n this.initAdRotation();\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({\r\n i18n: this.i18n,\r\n isSettings: this.scenario === 'adgroup-settings',\r\n isNewUI: this.isNewUI,\r\n }));\r\n\r\n // delay init (and render) Ad schedule view\r\n const jsdata = DependencyResolver.get('component/js-data-campaign/index');\r\n jsdata.Campaign.find(Number(this.viewContext.currentCampaign.Id))\r\n .then((campaign) => {\r\n this.campaign = campaign;\r\n this.initAdScheduleViewAsync();\r\n });\r\n\r\n if (this.scenario === 'adgroup-settings') {\r\n this.$('.url-options').append(this.upgradedUrlOptions.render().$el);\r\n\r\n this.$('.ad-rotation').append(this.adRotation.render().$el);\r\n\r\n if (this.isNewUI) {\r\n this.$('#setExclusions').collapse('show');\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n get events() {\r\n return {\r\n 'show.bs.collapse': 'showExclusions',\r\n 'hide.bs.collapse': 'hideExclusions',\r\n };\r\n }\r\n\r\n showExclusions(e) {\r\n const sectionName = $(e.target).data('section');\r\n\r\n if (this.isNewUI && sectionName === 'ExclusionsSection') {\r\n this.isExclusionsExpanded(true);\r\n this.$('.camp-adg-shared-exclusions-dropdown .bedded-icon-marker').toggleClass('expanderImage expandedImage');\r\n }\r\n }\r\n\r\n hideExclusions(e) {\r\n const sectionName = $(e.target).data('section');\r\n\r\n if (this.isNewUI && sectionName === 'ExclusionsSection') {\r\n this.isExclusionsExpanded(false);\r\n this.$('.camp-adg-shared-exclusions-dropdown .bedded-icon-marker').toggleClass('expanderImage expandedImage');\r\n }\r\n }\r\n\r\n /**\r\n * Validates the inputs\r\n *\r\n * @returns {bool} returns true if validation succeeded\r\n */\r\n validate() {\r\n return this.adScheduleView.validate()\r\n && (this.upgradedUrlOptions ? this.upgradedUrlOptions.validate() : true);\r\n }\r\n\r\n /**\r\n * Get the data that is used as the parameter for saving.\r\n *\r\n * @returns {Object} - object representing the data for the adgroup to be saved.\r\n */\r\n getData() {\r\n const params = {};\r\n\r\n const dateSettings = this.adScheduleView.getDateSettings();\r\n const adScheduleUseSearcherTimeZone = _.result(this.adScheduleView, 'getAdScheduleUseSearcherTimeZone');\r\n\r\n _.extend(params, dateSettings);\r\n\r\n if (this.scenario === 'adgroup-settings') {\r\n const urlOptions = this.upgradedUrlOptions.toObject();\r\n if (_.isEmpty(urlOptions.TrackingUrlTemplate)) {\r\n urlOptions.TrackingUrlTemplate = null;\r\n }\r\n if (_.isEmpty(urlOptions.FinalUrlSuffix)) {\r\n urlOptions.FinalUrlSuffix = null;\r\n }\r\n if (_.isEmpty(urlOptions.UrlCustomParameters)) {\r\n urlOptions.UrlCustomParameters = null;\r\n }\r\n\r\n const adRotation = this.adRotation.getValues();\r\n\r\n _.extend(params, urlOptions, adRotation);\r\n }\r\n\r\n if (_.isBoolean(adScheduleUseSearcherTimeZone)) {\r\n params.AdScheduleUseSearcherTimeZone = adScheduleUseSearcherTimeZone;\r\n }\r\n\r\n return params;\r\n }\r\n\r\n /**\r\n * Save Exclusions\r\n *\r\n * @returns {undefined}\r\n */\r\n saveExtensions() {\r\n const exclusionRepository = DependencyResolver.get('campaignui/feature/advanced-settings/util/exclusion-repository');\r\n const siteExclusions = this.siteExclusionView.getValues();\r\n\r\n const campaignId = this.viewContext.currentCampaign.Id;\r\n const adgroupId = this.viewContext.currentAdGroup.Id;\r\n\r\n const data = {\r\n AdGroupId: adgroupId,\r\n CampaignId: campaignId,\r\n AdvancedSettings: {\r\n ExcludedSites: siteExclusions,\r\n },\r\n };\r\n\r\n return exclusionRepository.saveExtensions(data, 'adgroup')\r\n .catch((response) => {\r\n if (response.NegativeSitesResult) {\r\n this.siteExclusionView.showErrors(response.NegativeSitesResult);\r\n\r\n if (this.isNewUI) {\r\n this.$('#setExclusions').collapse('show');\r\n }\r\n\r\n throw 'exclusion error'; //eslint-disable-line\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Initialize Ad rotation view\r\n *\r\n * @private\r\n * @returns {undefined}\r\n */\r\n initAdRotation() {\r\n const AdRotationView = DependencyResolver.get('campaignui/feature/advanced-settings/view/ad-rotation');\r\n\r\n this.adRotation = new AdRotationView(_.result(_.result(this.model, 'AdRotation'), 'RotationType'));\r\n }\r\n\r\n /**\r\n * Initialize Exclusions view\r\n *\r\n * @private\r\n * @returns {undefined}\r\n */\r\n initExclusions() {\r\n const exclusionRepository = DependencyResolver.get('campaignui/feature/advanced-settings/util/exclusion-repository');\r\n const BaseExclusionView = DependencyResolver.get('campaignui/feature/advanced-settings/view/base-exclusion');\r\n\r\n const level = 'adgroup';\r\n const campaignId = this.viewContext.currentCampaign.Id;\r\n const adgroupId = this.viewContext.currentAdGroup.Id;\r\n\r\n exclusionRepository.load(campaignId, adgroupId, level)\r\n .then(([campaignExclusions, adgroupExclusions]) => {\r\n this.siteExclusionView = new BaseExclusionView({\r\n exclusions: _.result(adgroupExclusions, 'ExcludedSites'),\r\n exclusionType: 'site',\r\n level,\r\n campaignExclusions: _.result(campaignExclusions, 'ExcludedSites'),\r\n });\r\n this.$('.site-exclusions').append(this.siteExclusionView.render().$el);\r\n });\r\n }\r\n\r\n /**\r\n * Initialize Url Options view\r\n *\r\n * @private\r\n * @returns {undefined}\r\n */\r\n initUrlOptions() {\r\n const urlOptionsTemplate = DependencyResolver.get('campaignui/feature/advanced-settings/template/url-options');\r\n const UpgradedUrlOptions = DependencyResolver.get('component/upgraded-url/view/advancedSettingsUrlOptions');\r\n\r\n this.upgradedUrlOptions = new UpgradedUrlOptions({\r\n editMode: this.scenario === 'adgroup-settings',\r\n entityType: 'adgroup',\r\n trackingTemplate: _.result(this.model, 'TrackingUrlTemplate'),\r\n finalUrlSuffix: _.result(this.model, 'FinalUrlSuffix'),\r\n customParameters: _.isEmpty(this.model.UrlCustomParameters) ?\r\n undefined : this.model.UrlCustomParameters,\r\n urlOptionsTemplate,\r\n showUurlTestTool: true,\r\n isForVNext: this.isNewUI,\r\n adGroupId: this.model.Id,\r\n });\r\n }\r\n\r\n /**\r\n * Initialize Ad Schedule view\r\n *\r\n * @private\r\n * @returns {Promise} - Promise of initializing ad schedule view\r\n */\r\n initAdScheduleViewAsync() {\r\n if (this.scenario === 'adgroup-settings') {\r\n return this.updateAdScheduleViewWithContextAsync();\r\n }\r\n\r\n return new Promise((resolve) => {\r\n resolve(this.renderAdSchedule());\r\n });\r\n }\r\n\r\n /**\r\n * Update Ad Schedule view in adgroup creation\r\n *\r\n * @private\r\n * @returns {Promise} - Promise of initializing ad schedule view\r\n */\r\n updateAdScheduleViewWithContextAsync() {\r\n const campaignId = this.viewContext.currentCampaign.Id;\r\n const adgroupId = this.viewContext.currentAdGroup.Id;\r\n\r\n const criterionLoader = DependencyResolver.get('campaignui/feature/base-targets/util/criterionLoader');\r\n\r\n const adgroupCriterions = criterionLoader.load(campaignId, adgroupId, ['DayTimeCriterion']);\r\n const campaignCriterions = criterionLoader.load(campaignId, '', ['DayTimeCriterion']);\r\n\r\n return Promise.join(adgroupCriterions, campaignCriterions)\r\n .then(([adgroupTargets, campaignTargets]) => {\r\n const adGroupSchedulingRows = this.parseSchedulingRows(adgroupTargets);\r\n const campaignSchedulingRows = this.parseSchedulingRows(campaignTargets, true);\r\n\r\n this.renderAdSchedule(adGroupSchedulingRows, campaignSchedulingRows);\r\n });\r\n }\r\n\r\n /**\r\n * Render Ad Schedule view\r\n * @param {Array} adGroupSchedulingRows adGroupScheduling rows\r\n * @param {Array} campaignSchedulingRows campaignScheduling rows\r\n *\r\n * @private\r\n * @returns {undefined}\r\n */\r\n renderAdSchedule(adGroupSchedulingRows = [], campaignSchedulingRows = []) {\r\n // TODO: add timezone\r\n const isSettings = this.scenario === 'adgroup-settings';\r\n const adScheduleTimeZoneSetting = isSettings && this.model ?\r\n this.model.AdScheduleTimeZoneSetting :\r\n this.campaign.AdScheduleTimeZoneSetting;\r\n const adScheduleUseSearcherTimeZone = isSettings && this.model ?\r\n this.model.AdScheduleUseSearcherTimeZone :\r\n this.campaign.AdScheduleUseSearcherTimeZone;\r\n const model = {\r\n adScheduleTimeZoneSetting,\r\n adScheduleUseSearcherTimeZone,\r\n dayTimeRanges: adGroupSchedulingRows,\r\n startDate: _.result(this.model, 'StartDate'),\r\n endDate: _.result(this.model, 'EndDate'),\r\n adGroupStatus: _.result(this.model, 'Status'),\r\n };\r\n\r\n const AdScheduleView = DependencyResolver.get('campaignui/feature/ad-schedule/view/index');\r\n if (this.adScheduleView) {\r\n this.adScheduleView.remove();\r\n }\r\n this.adScheduleView = new AdScheduleView({\r\n model,\r\n level: 'adgroup',\r\n showDateSettings: true,\r\n campaignDayTimeRanges: campaignSchedulingRows,\r\n campaignAdScheduleUseSearcherTimeZone: this.campaign.AdScheduleUseSearcherTimeZone,\r\n supportCashbackSettings: this.supportCashbackSettings,\r\n });\r\n this.$('.ad-schedule').append(this.adScheduleView.render().$el);\r\n }\r\n\r\n /**\r\n * Parse SchedulingRows\r\n * @param {object} targets targets\r\n * @param {string} resetId reset id optional\r\n *\r\n * @private\r\n\r\n * @returns {undefined}\r\n */\r\n parseSchedulingRows(targets, resetId = false) {\r\n const schedulingRows = [];\r\n\r\n _.each(targets, (target) => {\r\n const criterion = target.Criterion;\r\n const multiplier = target.CriterionBid.Multiplier;\r\n let cashbackPercent = _.chain(target)\r\n .result('CriterionCashback')\r\n .result('CashbackPercent')\r\n .value();\r\n\r\n if (+cashbackPercent === -1) {\r\n cashbackPercent = null;\r\n }\r\n\r\n if (cashbackPercent != null) {\r\n cashbackPercent = this.i18n.formatDecimalToFixed(cashbackPercent, { digits: 2 });\r\n }\r\n\r\n schedulingRows.push({\r\n Id: resetId ? '' : target.Id,\r\n Day: criterion.Day,\r\n StartHour: criterion.FromHour,\r\n StartMinute: criterion.FromMinute,\r\n EndHour: criterion.ToHour,\r\n EndMinute: criterion.ToMinute,\r\n BidAdjustmentType: multiplier < 0 ? -1 : 1,\r\n BidAdjustmentAmount: Math.abs(multiplier),\r\n CashbackPercent: cashbackPercent,\r\n });\r\n });\r\n\r\n return schedulingRows;\r\n }\r\n}\r\n","/* eslint-disable max-len */\r\nimport _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport ko from 'knockout';\r\nimport ReactDOM from 'react-dom';\r\nimport React from 'react';\r\nimport { InputControl } from '@bingads-webui/input-control';\r\nimport { RemainingCharsHint } from '@bingads-webui/remaining-chars-hint';\r\nimport { BackboneSchema as backboneSchema } from '@bingads-webui/backbone-schema';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport {\r\n AudienceCampaignErrorsView,\r\n getBidSchema,\r\n getBulkErrorsLogMessage,\r\n getCampaignType,\r\n CampaignSubTypeTextMapping,\r\n AudienceStepBase,\r\n getBoostSetting,\r\n BiddingStrategyToRangeKey,\r\n PricingModelToBidParam,\r\n BiddingStrategyToPricingModel,\r\n BiddingStrategyValueToRecommendBidKey,\r\n generateNameSuggestionSuffix,\r\n} from '@bingads-webui-campaign/audience-campaign-shared';\r\nimport { CashbackSettings } from '@bingads-webui-campaign/cashback-settings';\r\nimport { withUiBlock } from '@bingads-webui/uiblocker';\r\nimport { FrequencyCapping } from '@bingads-webui-campaign/frequency-capping';\r\nimport { BoostPlacementTarget } from '@bingads-webui-campaign-react/boost-placement-target';\r\nimport { ContextualTargetWithStyle, getSelectionFromCriterions, getContextualTargetInfo } from '@bingads-webui-campaign-react/boost-contextual-target';\r\nimport { shouldSupportCashbackSettings, logAdGroupPersonalizedOffers } from '@bingads-webui-campaign/personalized-offer-shared';\r\nimport { AudienceAdvancedSettings } from '../advanced-settings/view';\r\n\r\nimport template from './template.pug';\r\n/**\r\n * CrudAudienceAdgroupBasic class that extends {AudienceStepBase} class\r\n * The class defines the section of the setting budget and bid\r\n *\r\n * @class CrudAudienceAdgroupBasic\r\n * @extends {AudienceStepBase}\r\n */\r\nexport class CrudAudienceAdgroupBasic extends AudienceStepBase {\r\n /**\r\n * Initializes the {CrudAudienceAdgroupBasic} class.\r\n *\r\n * @param {Object} options - options for initializing the class.\r\n * @param {Object} options.viewContext = viewContext for the View.\r\n * @returns {undefined}\r\n */\r\n initialize(options) {\r\n this.viewContext = options.viewContext;\r\n this.wizardElement = options.wizardElement;\r\n this.currentLevelTargetInfo = options.currentLevelTargetInfo;\r\n this.scenario = options.scenario;\r\n this.currentCampaign = options.viewContext.currentCampaign;\r\n this.currentAdGroup = options.viewContext.currentAdGroup;\r\n this.i18n = DependencyResolver.get('component/i18n/loader!campaignui/feature/audience-campaign');\r\n this.decimal = DependencyResolver.get('component/humanize/decimal');\r\n this.i18nErrors = DependencyResolver.get('component/api-errors-campaign/index');\r\n this.deps = options.deps || {};\r\n this.isNewUI = _.result(this.deps, 'isNewUI', false);\r\n this.isNextButtonEnabled = (\r\n !(this.viewContext.isReadOnlyUser || this.viewContext.CurrentAccountInActive)\r\n );\r\n const config = DependencyResolver.get('component/config/index');\r\n const permissions = config.get('Permissions');\r\n const {\r\n IsAudienceCampaignCollapseTargetSelectionEnabled,\r\n IsAmplifyEnabled,\r\n IsContextualTargetEnabled,\r\n } = permissions;\r\n\r\n const bidStrategyType = this.currentCampaign && this.currentCampaign.BiddingScheme && this.currentCampaign.BiddingScheme.Type;\r\n const autoBidStrategyList = ['MaxClicks', 'MaxConversions', 'TargetCpa', 'TargetRoas', 'MaxConversionValue', 'TargetImpressionShare', 'CostPerSale'];\r\n this.isAutoBidding = _.contains(autoBidStrategyList, bidStrategyType);\r\n\r\n this.workflow = options.workflow;\r\n this.boostPlacementReactComponent = React.createRef();\r\n\r\n this.isAudienceCampaignCollapseTargetSelectionEnabled = IsAudienceCampaignCollapseTargetSelectionEnabled;\r\n this.isMSANBoostEnabled = IsAmplifyEnabled;\r\n this.isContextualTargetEnabled = this.isMSANBoostEnabled && IsContextualTargetEnabled;\r\n this.isFCapEnabled = bidStrategyType === 'ManualCpm';\r\n\r\n this.supportCashbackSettings = shouldSupportCashbackSettings(this.currentCampaign, permissions);\r\n\r\n if (this.supportCashbackSettings) {\r\n this.initCashbackSettings(this.currentAdGroup, this.currentCampaign);\r\n\r\n if (this.cashbackSettingsView) {\r\n this.cashbackSettingsView.viewModel.CashbackPercent\r\n .subscribe((v) => {\r\n if (this.cashbackSettingsView.viewModel.validateCashbackPercent(v)) {\r\n this.onCashbackPercentChange(v);\r\n }\r\n });\r\n }\r\n }\r\n\r\n this.initializeNameInputControl();\r\n\r\n this.initializeBiddingStrategyView();\r\n this.initDefaultBidInput();\r\n\r\n this.initAudienceAdvancedSettings();\r\n\r\n this.errorsView = new AudienceCampaignErrorsView();\r\n\r\n this.logScenario = options.logScenario;\r\n\r\n if (this.isContextualTargetEnabled) {\r\n this.contextualSelection = [];\r\n\r\n const contextualTargetsCriterions = this.currentLevelTargetInfo.getAllByType('ContextualTarget');\r\n this.contextualSelection = getSelectionFromCriterions(contextualTargetsCriterions);\r\n // reference copy is OK enough as the selection change comes as a new array.\r\n this.initialContextualSelection = this.contextualSelection;\r\n }\r\n\r\n this.frequencyCapping = [{}];\r\n\r\n if (this.currentAdGroup && this.currentAdGroup.FrequencyCapSettings) {\r\n this.frequencyCapping = this.currentAdGroup.FrequencyCapSettings;\r\n }\r\n\r\n this.initialFrequencyCapping = _.clone(this.frequencyCapping);\r\n\r\n this.viewmodel = {\r\n isAdvancedAdgroupExpanded: ko.observable(false),\r\n isAutoBidding: this.isAutoBidding,\r\n };\r\n }\r\n\r\n /**\r\n * Define events and event handlers for them.\r\n *\r\n * @readonly\r\n * @returns {Object} returns object defining events\r\n */\r\n get events() {\r\n return {\r\n 'click .audience-advanced-settings-header': 'toggleAdvancedSettings',\r\n };\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 name: 'next',\r\n displayText: this.i18n.getString('Audience_Campaign_Crud_Campaign_Save_Next'),\r\n enabled: this.isNextButtonEnabled,\r\n },\r\n ];\r\n\r\n if (this.viewContext.currentAdGroup) {\r\n actions.push({\r\n name: 'done',\r\n enabled: this.isNextButtonEnabled,\r\n htmlAttributes: {\r\n class: 'btn btn-primary btn-exitWithSave',\r\n },\r\n method: 'saveAndExit',\r\n displayText: this.i18n.getString('Audience_Campaign_Crud_Campaign_Save_Exit'),\r\n });\r\n } else {\r\n actions.push({\r\n name: 'cancel',\r\n displayText: this.i18n.getString('Audience_Campaign_Cancel_Label'),\r\n });\r\n }\r\n\r\n return actions;\r\n }\r\n\r\n onCashbackPercentChange(value) {\r\n const formattedValue = value === '' || value == null ? null : this.decimal.fromLocalToFloat(value);\r\n if (this.advancedSettings &&\r\n this.advancedSettings.adScheduleView) {\r\n this.advancedSettings.adScheduleView\r\n .toggleCashbackPercentColumns(true, {\r\n level: 'AdGroup',\r\n value: formattedValue,\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Saves the AdGroup and exits.\r\n * This is only used when 'Save & Exit' button is shown on this step.\r\n *\r\n * @returns {undefined} - returns undefined\r\n */\r\n saveAndExit() {\r\n return this.save().then((isSuccess) => {\r\n if (isSuccess) {\r\n this.trigger('saveAndExit');\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Toggle Advanced Settings Section\r\n *\r\n * @private\r\n * @returns {undefined}\r\n */\r\n toggleAdvancedSettings() {\r\n this.$('#advancedSettings').toggle();\r\n this.$('.audience-advanced-settings-header .bedded-icon-marker').toggleClass('expanderImage expandedImage');\r\n this.viewmodel.isAdvancedAdgroupExpanded(!this.viewmodel.isAdvancedAdgroupExpanded());\r\n }\r\n\r\n /**\r\n * Initialize Name input control\r\n *\r\n * @private\r\n * @returns {undefined}\r\n */\r\n initializeNameInputControl() {\r\n const schema = DependencyResolver.get('$/schema!campaign/AdGroup');\r\n const SchemaModel = backboneSchema(\r\n schema,\r\n this.i18n,\r\n ['Name']\r\n );\r\n\r\n this.adGroupNameInputModel = new SchemaModel();\r\n\r\n if (this.currentAdGroup) {\r\n this.adGroupNameInputModel.set('Name', this.currentAdGroup.Name);\r\n }\r\n\r\n this.nameInput = new InputControl({\r\n entity: this.adGroupNameInputModel,\r\n field: 'Name',\r\n ariaLabelledby: 'adgroupNameLabel',\r\n });\r\n\r\n if (this.isAudienceCampaignCollapseTargetSelectionEnabled && _.isEmpty(this.adGroupNameInputModel.get('Name'))) {\r\n this.nameInput.setState({ value: generateNameSuggestionSuffix('Adgroup') });\r\n }\r\n\r\n this.nameInputRemainingCharsHint = new RemainingCharsHint({\r\n i18n: this.i18n,\r\n model: this.adGroupNameInputModel,\r\n field: 'Name',\r\n });\r\n }\r\n\r\n /**\r\n * Initialize Bidding Strtegy view\r\n *\r\n * @private\r\n * @returns {undefined}\r\n */\r\n initializeBiddingStrategyView() {\r\n const BiddingStrategyView = DependencyResolver.get('campaignui/feature/bidding-strategy/view/setting');\r\n const campaignType = getCampaignType(this.viewContext.currentCampaign);\r\n const campaignSubType = CampaignSubTypeTextMapping[this.viewContext.currentCampaign && this.viewContext.currentCampaign.CampaignSubType];\r\n // in adgroup setting page\r\n if (this.currentAdGroup && this.currentAdGroup.BiddingScheme) {\r\n this.biddingStrategyView = new BiddingStrategyView({\r\n entityType: 'AdGroup',\r\n biddingStrategyType: this.currentAdGroup.BiddingScheme.Type,\r\n campaignSubType,\r\n campaignType,\r\n });\r\n } else {\r\n // in create adgroup\r\n let biddingStrategyType;\r\n if (\r\n this.viewContext.currentCampaign &&\r\n campaignSubType === 'AudienceVideoAds' &&\r\n this.viewContext.currentCampaign.BiddingScheme &&\r\n this.viewContext.currentCampaign.BiddingScheme.Type\r\n ) {\r\n biddingStrategyType = this.viewContext.currentCampaign.BiddingScheme.Type;\r\n }\r\n this.biddingStrategyView = new BiddingStrategyView({\r\n entityType: 'AdGroup',\r\n isInitialize: true,\r\n biddingStrategyType,\r\n campaignSubType,\r\n campaignType,\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Initialize Default Bid input\r\n *\r\n * @private\r\n * @returns {undefined}\r\n */\r\n initDefaultBidInput() {\r\n const config = DependencyResolver.get('component/config/index');\r\n const bidSchemeType = this.viewContext.currentCampaign &&\r\n this.viewContext.currentCampaign.BiddingScheme &&\r\n this.viewContext.currentCampaign.BiddingScheme.Type;\r\n\r\n const DefaultBidModel = backboneSchema(getBidSchema({\r\n bidCeil: _.result(config.get(BiddingStrategyToRangeKey[bidSchemeType] || 'KeywordBidRange'), 'CeilingValue'),\r\n bidFloor: _.result(config.get(BiddingStrategyToRangeKey[bidSchemeType] || 'KeywordBidRange'), 'FloorValue'),\r\n }), this.i18n, ['Amount']);\r\n\r\n this.defaultBidModel = new DefaultBidModel();\r\n\r\n if (_.get(this.viewContext, 'currentCampaign.CampaignType') === 'Audience'\r\n && _.contains([0, 'AudienceStatic'], _.get(this.viewContext, 'currentCampaign.CampaignSubType'))\r\n && _.contains(['ManualCpc', 'EnhancedCpc'], this.currentCampaign.BiddingScheme.Type)) {\r\n const recommendedValueFromContext = config.get(BiddingStrategyValueToRecommendBidKey[bidSchemeType]);\r\n const recommendedValue = _.isNull(recommendedValueFromContext) || _.isUndefined(recommendedValueFromContext) ? 3.3 : recommendedValueFromContext;\r\n this.defaultBidModel.set(\r\n 'Amount',\r\n this.i18n.formatDecimal(recommendedValue, {\r\n maximumFractionDigits: 2,\r\n minimumFractionDigits: 2,\r\n })\r\n );\r\n }\r\n\r\n if (this.currentAdGroup) {\r\n const bidParam = PricingModelToBidParam[this.currentAdGroup.PricingModel] || 'SearchBid';\r\n const amount = this.currentAdGroup[bidParam];\r\n if (amount) {\r\n this.defaultBidModel.set('Amount', amount.toString());\r\n }\r\n }\r\n\r\n const AutoBidModel = backboneSchema({\r\n name: 'AutoBid',\r\n type: 'object',\r\n properties: {\r\n Amount: {\r\n type: 'string',\r\n },\r\n },\r\n }, this.i18n, ['Amount']);\r\n this.autoBidModel = new AutoBidModel();\r\n this.autoBidModel.set('Amount', 'Auto');\r\n\r\n this.defaultBidInput = new InputControl({\r\n entity: this.isAutoBidding ? this.autoBidModel : this.defaultBidModel,\r\n field: 'Amount',\r\n addonText: this.viewContext.accountCurrencyCode,\r\n ariaLabelledby: 'defaultBidLabel',\r\n readonly: this.isAutoBidding,\r\n });\r\n }\r\n\r\n /**\r\n * Initialize Advanced Settings view\r\n *\r\n * @private\r\n * @returns {undefined}\r\n */\r\n initAudienceAdvancedSettings() {\r\n this.advancedSettings = new AudienceAdvancedSettings({\r\n viewContext: this.viewContext,\r\n scenario: this.scenario,\r\n isNewUI: this.isNewUI,\r\n supportCashbackSettings: this.supportCashbackSettings,\r\n });\r\n }\r\n\r\n initCashbackSettings(adGroup, campaign) {\r\n const CashbackPercent = _.chain(adGroup)\r\n .result('AdGroupCashback')\r\n .result('Percent', null)\r\n .value();\r\n const CashbackScope = _.chain(adGroup)\r\n .result('AdGroupCashback')\r\n .result('Scope')\r\n .value() || 'None';\r\n const CouponsEnabled = _.chain(adGroup)\r\n .result('AdGroupCashback')\r\n .result('CouponsEnabled', 'None')\r\n .value();\r\n const ParentLevelCashbackPercent = _.chain(campaign)\r\n .result('CampaignCashback')\r\n .result('Percent', null)\r\n .value();\r\n const ParentLevelCashbackScope = _.chain(campaign)\r\n .result('CampaignCashback')\r\n .result('Scope')\r\n .value() || 'None';\r\n const ParentCouponsEnabled = _.chain(campaign)\r\n .result('CampaignCashback')\r\n .result('CouponsEnabled', 'None')\r\n .value();\r\n if (this.supportCashbackSettings) {\r\n this.cashbackSettingsView = new CashbackSettings({\r\n CashbackPercent,\r\n CashbackScope,\r\n showEnableCashbackSettingsCheckbox: false,\r\n showCashbackBudget: false,\r\n isCashbackScopeReadonly: false,\r\n showInheritFromParentOption: true,\r\n ParentLevelCashbackPercent,\r\n ParentLevelCashbackScope,\r\n CouponsEnabled,\r\n ParentCouponsEnabled,\r\n deps: {\r\n ...this.deps,\r\n i18n: this.i18n,\r\n },\r\n });\r\n }\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 return {\r\n text: this.i18n.getString('Audience_Campaign_Crud_Adgroup_Basic_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_Adgroup_Basic_PageTitle'),\r\n };\r\n }\r\n\r\n onContextualSelectionChange(data) {\r\n this.contextualSelection = data || [];\r\n }\r\n\r\n onFrequencyCappingChange(data) {\r\n this.frequencyCapping = data.FrequencyCapSettings;\r\n this.renderFrequencyCapping();\r\n }\r\n\r\n renderFrequencyCapping() {\r\n if (this.isFCapEnabled) {\r\n ReactDOM.render(\r\n this.onFrequencyCappingChange(data)}\r\n />,\r\n this.$('.frequency-capping-container')[0]\r\n );\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 ko.applyBindings(this.viewmodel, this.el);\r\n\r\n this.renderFrequencyCapping();\r\n\r\n if (this.isMSANBoostEnabled && this.scenario !== 'adgroup-creation') {\r\n ReactDOM.render(\r\n ,\r\n this.$('.boost-placement-target')[0]\r\n );\r\n }\r\n\r\n if (this.isContextualTargetEnabled && this.scenario !== 'adgroup-creation') {\r\n ReactDOM.render(\r\n this.onContextualSelectionChange(selection)}\r\n />,\r\n this.$('.contextual-target-container')[0]\r\n );\r\n }\r\n\r\n this.$('.name-input-control-container').prepend(this.nameInput.render().$el);\r\n this.$('.remaining-chars-hint-container').append(this.nameInputRemainingCharsHint.render().$el);\r\n\r\n this.$('.bidding-strategy-container').append(this.biddingStrategyView.render().$el);\r\n\r\n this.$('.default-bid-container').append(this.defaultBidInput.render().$el);\r\n\r\n if (this.cashbackSettingsView) {\r\n this.$('.cashback-settings-container').append(this.cashbackSettingsView.render().$el);\r\n }\r\n\r\n this.$('.audience-advanced-settings-container').append(this.advancedSettings.render().$el);\r\n\r\n this.$('.errors-container').append(this.errorsView.render().$el);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Get the object data to save the AdGroup.\r\n *\r\n * @returns {Object} - data representation of the object.\r\n */\r\n getData() {\r\n let pricingModel = 'CPC';\r\n if (\r\n this.viewContext.currentCampaign.BiddingScheme &&\r\n this.viewContext.currentCampaign.BiddingScheme.Type\r\n ) {\r\n pricingModel =\r\n BiddingStrategyToPricingModel[this.viewContext.currentCampaign.BiddingScheme.Type] ||\r\n pricingModel;\r\n }\r\n let params = {\r\n Name: this.adGroupNameInputModel.toJSON().Name,\r\n Medium: 'Search',\r\n PricingModel: pricingModel,\r\n Languages: ['All'],\r\n Campaign: {\r\n Id: this.viewContext.currentCampaign.Id,\r\n },\r\n BiddingScheme: this.biddingStrategyView.getValues(),\r\n [PricingModelToBidParam[pricingModel]]: this.defaultBidModel.toJSON().Amount,\r\n };\r\n\r\n if (this.viewContext.currentAdGroup) {\r\n params.Id = this.viewContext.currentAdGroup.Id;\r\n }\r\n\r\n if (this.isMSANBoostEnabled && this.scenario !== 'adgroup-creation') {\r\n params = {\r\n ...params,\r\n ...this.boostPlacementReactComponent.current.getData(),\r\n };\r\n }\r\n\r\n _.extend(params, this.advancedSettings.getData());\r\n\r\n const scheduling = this.getScheduleInfo();\r\n\r\n params.AdGroupCriterions = this.populateCriterionWithAdGroupInfo(scheduling);\r\n\r\n if (this.isContextualTargetEnabled) {\r\n const contextualTargets = getContextualTargetInfo(\r\n this.initialContextualSelection,\r\n this.contextualSelection\r\n );\r\n this.populateCriterionWithAdGroupInfo(contextualTargets);\r\n\r\n params.AdGroupCriterions = [\r\n ...(_.isArray(params.AdGroupCriterions) ? params.AdGroupCriterions : []),\r\n ...contextualTargets,\r\n ];\r\n }\r\n\r\n if (this.cashbackSettingsView) {\r\n _.extend(params, this.cashbackSettingsView.getValues());\r\n }\r\n\r\n if (this.isFCapEnabled) {\r\n if (JSON.stringify(this.initialFrequencyCapping) !== JSON.stringify(this.frequencyCapping)) {\r\n _.extend(params, { FrequencyCapSettings: [{}] });\r\n\r\n if (this.frequencyCapping) {\r\n params.FrequencyCapSettings = this.frequencyCapping;\r\n }\r\n }\r\n }\r\n\r\n return params;\r\n }\r\n\r\n validate() {\r\n const isAdvancedSettingsValid = this.advancedSettings.validate();\r\n const isCashbackSettingsValid = this.cashbackSettingsView ? this.cashbackSettingsView.validate() : true;\r\n\r\n if (!this.nameInput.getState().isValid\r\n || !this.defaultBidInput.getState().isValid\r\n || !isAdvancedSettingsValid\r\n || !isCashbackSettingsValid) {\r\n this.nameInput.setState({ showError: true });\r\n this.defaultBidInput.setState({ showError: true });\r\n\r\n if (!isAdvancedSettingsValid) {\r\n if (!this.$('#advancedSettings').is(':visible')) {\r\n this.toggleAdvancedSettings();\r\n }\r\n this.$('#advancedSettings')[0].scrollIntoView();\r\n } else {\r\n this.nameInput.$el[0].scrollIntoView(false);\r\n }\r\n\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * It attempts to save and return true if the save is done succefully.\r\n *\r\n * @returns {boolean} - returns true if it is ready to go to the next step.\r\n */\r\n wizardShouldGoNext() {\r\n return this.save();\r\n }\r\n\r\n /**\r\n * Save the adgroup with the given setting.\r\n *\r\n * @returns {Promise} - returns promise of returning boolean value indicating\r\n * if the save process is succesful or not.\r\n */\r\n save() {\r\n if (!this.validate()) {\r\n return Promise.resolve(false);\r\n }\r\n\r\n const jsdata = DependencyResolver.get('component/js-data-campaign/index');\r\n const params = this.getData();\r\n\r\n let updateOrCreateTask = null;\r\n\r\n if (params.Id) {\r\n updateOrCreateTask = jsdata.AdGroup.update(\r\n params.Id,\r\n params,\r\n { adapter: 'bulk', cacheResponse: false }\r\n );\r\n } else {\r\n updateOrCreateTask = jsdata.AdGroup.create(params, { adapter: 'bulk', cacheResponse: false });\r\n }\r\n\r\n this.errorsView.removeErrors();\r\n\r\n const createAdGroupBasicActivity = this.logScenario.createAdGroupBasic.create();\r\n\r\n return updateOrCreateTask.then((data) => {\r\n if (_.isFinite(data.Id)) {\r\n this.viewContext.currentAdGroup = data;\r\n logAdGroupPersonalizedOffers(\r\n this.supportCashbackSettings,\r\n createAdGroupBasicActivity.signal.bind(createAdGroupBasicActivity), params\r\n );\r\n return this.advancedSettings.updateAdScheduleViewWithContextAsync().then(() => true);\r\n }\r\n\r\n return Promise.resolve(false);\r\n })\r\n .catch((response) => {\r\n if (response && response.entity) {\r\n const hasErrors = response && !_.isUndefined(response.errors);\r\n\r\n if (hasErrors) {\r\n if (response.errors.length) {\r\n const adGroupErrors = _.partition(\r\n response.errors,\r\n error => error.Type === 'AdGroup Error'\r\n )[0];\r\n\r\n this.errorsView.setErrors(this.i18nErrors.getBulkApiErrors(adGroupErrors));\r\n\r\n createAdGroupBasicActivity.trace(getBulkErrorsLogMessage(response.errors));\r\n }\r\n } else {\r\n // Unexpected case. Log Error.\r\n createAdGroupBasicActivity.error(getBulkErrorsLogMessage(response.errors));\r\n }\r\n } else {\r\n // Ajax error\r\n this.errorsView.setErrors(this.i18nErrors.getODataErrors(response.errors));\r\n }\r\n\r\n return false;\r\n })\r\n .finally(withUiBlock(this.wizardElement, this.i18n.getString('Loading')));\r\n }\r\n\r\n /**\r\n * Populate AdGroup Criterion\r\n *\r\n * @private\r\n * @param {object} criterions - criterions to populate\r\n * @returns {object} - filtered criterions with AdGroupId\r\n */\r\n /* eslint-disable no-param-reassign */\r\n populateCriterionWithAdGroupInfo(criterions) {\r\n if (this.scenario === 'adgroup-settings') {\r\n _.each(criterions, (criterion) => {\r\n criterion.AdGroup = {\r\n Id: this.viewContext.currentAdGroup.Id,\r\n };\r\n }, this);\r\n } else {\r\n _.each(criterions, (criterion) => {\r\n criterion.CampaignName = this.viewContext.currentCampaign.Name;\r\n criterion.AdGroupName = this.adGroupNameInputModel.toJSON().Name;\r\n }, this);\r\n }\r\n\r\n return criterions;\r\n }\r\n\r\n /**\r\n * Get Ad Schedule info\r\n *\r\n * @private\r\n * @returns {object} scheduling info\r\n */\r\n getScheduleInfo() {\r\n const deletedDayTimeCb = (deletedDayTimeCriterions) => {\r\n _.each(deletedDayTimeCriterions, (criterion) => {\r\n criterion.Status = 'Deleted';\r\n if (this.scenario === 'adgroup-settings') {\r\n criterion.AdGroup = {\r\n Id: this.viewContext.currentAdGroup.Id,\r\n };\r\n } else {\r\n criterion.CampaignName = this.viewContext.currentCampaign.Name;\r\n criterion.AdGroupName = this.adGroupNameInputModel.toJSON().Name;\r\n }\r\n });\r\n };\r\n const scheduling = this.advancedSettings.adScheduleView.getValues(deletedDayTimeCb);\r\n\r\n return scheduling;\r\n }\r\n}\r\n","/* eslint-disable jsx-a11y/label-has-for */\r\nimport _ from 'underscore';\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\nimport { unitValueMap } from '@bingads-webui-campaign/reach-estimate-control';\r\n\r\n/**\r\n * @const {Object} COLUMN_FORMATS The different formats supported by ProjectionGridBaseColumn\r\n * @property {string} PERCENTAGE_VALUE value: 'percentage-value'\r\n * Formats a float as percentage. E.g.: 42.07 => 42.07%, 0.15 => 0.15%\r\n * @property {string} DECIMAL_Original: value: 'decimal-original'\r\n * A number with at most two decimal points.\r\n * @property {string} DECIMAL: value: 'decimal'\r\n * A number with two decimal points.\r\n */\r\nconst COLUMN_FORMATS = {\r\n PERCENTAGE_VALUE: 'percentage-value',\r\n DECIMAL_Original: 'decimal-original',\r\n DECIMAL: 'decimal',\r\n};\r\n\r\nconst getEstimateDataConfig = (pricingModel, isVideo) => _.compact([\r\n {\r\n name: 'impressions',\r\n i18nLabel: 'EstimatedImpressions',\r\n helpTopic: 'pop_BA_CampaignCreate_AudAds_EstImpressions',\r\n ApiDataName: 'EstImpression',\r\n format: COLUMN_FORMATS.DECIMAL_Original,\r\n },\r\n isVideo && {\r\n name: 'views',\r\n i18nLabel: 'EstimatedViews',\r\n helpTopic: 'pop_BA_CampaignCreate_AudAds_EstViews',\r\n ApiDataName: 'EstView',\r\n format: COLUMN_FORMATS.DECIMAL_Original,\r\n },\r\n {\r\n name: 'clicks',\r\n i18nLabel: 'EstimatedClicks',\r\n helpTopic: 'pop_BA_CampaignCreate_AudAds_EstClicks',\r\n ApiDataName: 'EstClick',\r\n format: COLUMN_FORMATS.DECIMAL_Original,\r\n },\r\n {\r\n name: 'CTR',\r\n i18nLabel: 'EstimatedCTR',\r\n helpTopic: 'pop_BA_CampaignCreate_AudAds_EstCTR',\r\n ApiDataName: 'EstCTR',\r\n format: COLUMN_FORMATS.PERCENTAGE_VALUE,\r\n },\r\n {\r\n name: `avg${pricingModel}`,\r\n i18nLabel: `EstimatedAvg${pricingModel}`,\r\n helpTopic: `pop_BA_CampaignCreate_AudAds_Est${pricingModel}`,\r\n ApiDataName: 'EstCPC',\r\n format: COLUMN_FORMATS.DECIMAL,\r\n },\r\n {\r\n name: 'spend',\r\n i18nLabel: 'EstimatedSpend',\r\n helpTopic: 'pop_BA_CampaignCreate_AudAds_EstSpend',\r\n ApiDataName: 'EstSpend',\r\n format: COLUMN_FORMATS.DECIMAL,\r\n },\r\n]);\r\n\r\nconst getFormatter = (i18n, format, value) => {\r\n let formatter = _.identity;\r\n\r\n switch (format) {\r\n case COLUMN_FORMATS.PERCENTAGE_VALUE:\r\n formatter = _.compose(i18n.percentToFixedFormatter({\r\n digits: 2,\r\n }), number => number / 100);\r\n break;\r\n case COLUMN_FORMATS.DECIMAL_Original:\r\n formatter = i18n.decimalFormatter({\r\n minimumFractionDigits: 0,\r\n maximumFractionDigits: 2,\r\n });\r\n break;\r\n case COLUMN_FORMATS.DECIMAL:\r\n formatter = i18n.decimalFormatter({\r\n minimumFractionDigits: 2,\r\n maximumFractionDigits: 2,\r\n });\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n return _.isNull(value) || _.isUndefined(value) ?\r\n '' : formatter(value);\r\n};\r\n\r\nconst getValue = (obj, i18n, format) => {\r\n let result;\r\n let unitShort;\r\n\r\n if (_.isObject(obj)) {\r\n result = obj.Value;\r\n unitShort = unitValueMap[obj.Unit].unit;\r\n } else {\r\n result = obj;\r\n unitShort = '';\r\n }\r\n return `${getFormatter(i18n, format, result)}${unitShort}`;\r\n};\r\n\r\nexport const getRange = (data, i18n, format) => {\r\n if (data === null || data === undefined) {\r\n return ' - ';\r\n }\r\n const { High, Low } = data;\r\n if ((_.isObject(High) && High.Value === 0) || (_.isNumber(High) && High === 0)) {\r\n return `${getValue(High, i18n, format)}`;\r\n }\r\n return `${getValue(Low, i18n, format)} - ${getValue(High, i18n, format)}`;\r\n};\r\n\r\nexport function KPIEstimateReact(props) {\r\n const { pricingModel, isVideo } = props;\r\n const learnMore = props.i18n.getString('LearnMoreLinkText');\r\n const estimateDataConfig = getEstimateDataConfig(pricingModel, isVideo);\r\n\r\n return (\r\n
\r\n
\r\n {props.reqStatus ?\r\n
\r\n {estimateDataConfig.map(item => (\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n {getRange(\r\n props[item.ApiDataName] || {},\r\n props.i18n,\r\n item.format\r\n )}\r\n
\r\n
))}\r\n
:\r\n
\r\n {props.i18n.getString('Audience_Campaign_KPIEstimation_RequestError')}\r\n
\r\n }\r\n
\r\n );\r\n}\r\n\r\nKPIEstimateReact.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n percentToFixedFormatter: PropTypes.func.isRequired,\r\n decimalFormatter: PropTypes.func.isRequired,\r\n }).isRequired,\r\n reqStatus: PropTypes.bool.isRequired,\r\n pricingModel: PropTypes.string.isRequired,\r\n isVideo: PropTypes.bool,\r\n};\r\n\r\nKPIEstimateReact.defaultProps = {\r\n isVideo: false,\r\n};\r\n","/* eslint-disable jsx-a11y/label-has-for */\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\nimport { HelpLink } from '@bingads-webui-react/help-link';\r\nimport { Dropdown } from '@bingads-webui-react/fabric-control';\r\n\r\nexport const BidStrategyReact = (props) => {\r\n const {\r\n i18n,\r\n onStrategyChange,\r\n keys,\r\n defaultSelectedKey,\r\n isDisabled,\r\n } = props;\r\n const options = keys.map(key => ({ key, text: i18n.getString(`BidStrategySetting_Option_${key}`), title: i18n.getString(`BidStrategySetting_Option_${key}`) }));\r\n return (\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n {i18n.getString('BidStrategySetting_OptionQuestion')} \r\n \r\n {i18n.getString('LearnMoreLinkText')}\r\n \r\n \r\n
\r\n onStrategyChange(item)}\r\n />\r\n
);\r\n};\r\n\r\nBidStrategyReact.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n onStrategyChange: PropTypes.func.isRequired,\r\n isDisabled: PropTypes.bool,\r\n keys: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n defaultSelectedKey: PropTypes.string.isRequired,\r\n};\r\n\r\nBidStrategyReact.defaultProps = {\r\n isDisabled: false,\r\n};\r\n","import _ from 'underscore';\r\nimport $ from 'jquery';\r\nimport Promise from 'bluebird';\r\nimport ko from 'knockout';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { cloneDeep } from '@bingads-webui-universal/primitive-utilities';\r\nimport {\r\n CompanyNameCriterionSetting,\r\n JobFunctionCriterionSetting,\r\n IndustryCriterionSetting,\r\n AgeCriterionSetting,\r\n DeviceCriterionSetting,\r\n GenderCriterionSetting,\r\n AudienceCriterionSetting,\r\n LocationCriterionSetting\r\n} from '@bingads-webui-campaign/audience-criterion-setting';\r\nimport { BackboneSchema as backboneSchema } from '@bingads-webui/backbone-schema';\r\nimport { InputControl } from '@bingads-webui/input-control';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport {\r\n AudienceCampaignErrorsView,\r\n AudienceStepBase,\r\n criterionHelper,\r\n getBidSchema,\r\n getBulkErrorsLogMessage,\r\n BidStrategy,\r\n CampaignSubTypes,\r\n getCampaignType,\r\n PricingModelToRangeKey,\r\n getFeedInfo,\r\n DefaultBidCPVWarningThreshold,\r\n BiddingStrategyValueToRecommendBidKey,\r\n} from '@bingads-webui-campaign/audience-campaign-shared';\r\nimport { shouldSupportCashbackSettings } from '@bingads-webui-campaign/personalized-offer-shared';\r\nimport { EstimateRequestFactory } from '@bingads-webui-campaign/reach-estimate-control';\r\nimport { withUiBlock } from '@bingads-webui/uiblocker';\r\nimport { Alert } from '@bingads-webui-react/alert';\r\nimport { GoalSelectorView } from '@bingads-webui-campaign-react/goal-selector';\r\nimport BiddingStrategyView from '@bingads-webui-campaign-legacy/bidding-strategy/view/setting';\r\nimport { FrequencyCapping } from '@bingads-webui-campaign/frequency-capping';\r\nimport template from './template.pug';\r\nimport { KPIEstimateReact } from './kpi-estimate-react';\r\nimport { BidStrategyReact } from './bid-strategy-react';\r\n\r\n/**\r\n * CrudAudienceBudgetBid class that extends {AudienceStepBase} class\r\n * The class defines the section of the setting budget and bid\r\n *\r\n * @class CrudAudienceBudgetBid\r\n * @extends {AudienceStepBase}\r\n */\r\nexport class CrudAudienceBudgetBid extends AudienceStepBase {\r\n initialize(options = {}) {\r\n this.renderMarker;\r\n this.perfMarker = options.perfMarker;\r\n this.perfMarker.willInit();\r\n this.wizardElement = options.wizardElement;\r\n this.options = options;\r\n this.deps = options.deps || {};\r\n this.audienceCampaignType = options.audienceCampaignType || '';\r\n this.viewContext = options.viewContext;\r\n this.currentCampaign = this.viewContext.currentCampaign;\r\n this.currentLevelTargetInfo = this.options.currentLevelTargetInfo;\r\n this.isAdImpressions = this.options.isAdImpressions;\r\n this.estimateRequestFactory = new EstimateRequestFactory({\r\n currentLevelTargetInfo: this.currentLevelTargetInfo,\r\n });\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.odata = DependencyResolver.get('component/http/channel/odata');\r\n this.targetBidAdjustment = {};\r\n this.defaultBidUpdatedByUser = false;\r\n this.IsSuggestedBidShowedOnUI = false;\r\n this.showDefaultBidWarning = false;\r\n this.isDefaultBidCPVWarningRendered = false;\r\n this.logScenario = options.logScenario;\r\n this.activityLogger = this.logScenario.createBudgetBids.create();\r\n\r\n const config = DependencyResolver.get('component/config/index');\r\n this.permissions = config.get('Permissions');\r\n this.config = config;\r\n\r\n const {\r\n IsManualCpmEnabled,\r\n IsManualCpcForVideoAdsEnabled,\r\n IsAudienceCampaignSwapAdsBudgetAndBidsEnabled,\r\n IsKPIEstimateForAudienceFeedBasedEnabled,\r\n IsEnabledDeprecateManualCpcForAudienceCampaign,\r\n IsHideCpmForFeedbasedCampaginEnabled,\r\n dynamic: {\r\n AgeGenderDisclaimer,\r\n } = {},\r\n } = this.permissions;\r\n\r\n const bidStrategyType = this.currentCampaign && this.currentCampaign.BiddingScheme && this.currentCampaign.BiddingScheme.Type;\r\n this.isCpmEnabled = IsManualCpmEnabled;\r\n this.isManualCpcForVideoAdsEnabled = IsManualCpcForVideoAdsEnabled;\r\n this.isSwapStepsEnabled = IsAudienceCampaignSwapAdsBudgetAndBidsEnabled &&\r\n this.audienceCampaignType !== 'shopping';\r\n this.isHideCpmForFeedbasedCampaginEnabled = IsHideCpmForFeedbasedCampaginEnabled;\r\n this.IsAIMBidSuggestionEnabled = this.options.audienceCampaignType !== 'shopping' || IsKPIEstimateForAudienceFeedBasedEnabled;\r\n this.isEnabledDeprecateManualCpcForAudienceCampaign = IsEnabledDeprecateManualCpcForAudienceCampaign;\r\n this.isShowDisclaimerBannerEnabled = AgeGenderDisclaimer;\r\n this.isFCapEnabled = bidStrategyType === 'ManualCpm';\r\n\r\n this.CampaignGoalSelectionView = GoalSelectorView;\r\n\r\n this.isVideo = options.isVideo;\r\n this.isFeedBased = options.audienceCampaignType === 'shopping';\r\n // eslint-disable-next-line no-nested-ternary\r\n this.pricingModel = this.isVideo ? 'CPV' : (this.isCpmEnabled || this.isAdImpressions ? 'CPM' : 'CPC');\r\n this.pricingModels = ['CPC', 'CPV', 'CPM'];\r\n this.pricingModelToBidTypeString = {\r\n CPC: 'ManualCpc',\r\n CPV: 'ManualCpv',\r\n CPM: 'ManualCpm',\r\n EnhancedCPC: 'EnhancedCpc',\r\n MaxConversions: 'MaxConversions',\r\n };\r\n this.pricingModelToBidTypeEnum = {\r\n CPC: BidStrategy.ManualCpc,\r\n EnhancedCPC: BidStrategy.EnhancedCpc,\r\n CPV: BidStrategy.ManualCpv,\r\n CPM: BidStrategy.ManualCpm,\r\n };\r\n this.pricingModelAdgroupBidAttributeMapping = {\r\n CPC: 'SearchBid',\r\n CPV: 'CpvBid',\r\n CPM: 'CpmBid',\r\n EnhancedCPC: 'SearchBid',\r\n MaxConversions: 'SearchBid',\r\n };\r\n this.suggestedBidMapping = {};\r\n\r\n this.initDefaultBidInput();\r\n this.initAdScheduleView();\r\n\r\n this.errorsView = new AudienceCampaignErrorsView();\r\n\r\n this.frequencyCapping = [{}];\r\n\r\n if (this.currentAdGroup && this.currentAdGroup.FrequencyCapSettings) {\r\n this.frequencyCapping = this.currentAdGroup.FrequencyCapSettings;\r\n }\r\n\r\n this.initialFrequencyCapping = _.clone(this.frequencyCapping);\r\n\r\n this.viewmodel = {\r\n isAdScheduleExpanded: ko.observable(false),\r\n isBidAdjustmentsExpanded: ko.observable(false),\r\n };\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 let title = this.i18n.getString('Audience_Campaign_Settings_BudgetBidsTitle');\r\n\r\n if (this.isSwapStepsEnabled) {\r\n title = this.i18n.getString('Audience_Campaign_Settings_BudgetBidsTitle_Step3');\r\n }\r\n\r\n if (this.options.audienceCampaignType === 'shopping') {\r\n title = this.i18n.getString('Audience_ShoppingCampaign_BudgetBidsTitle_Step3');\r\n }\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 let text = this.i18n.getString('BudgetBidsStep_PageTitle');\r\n\r\n if (this.options.audienceCampaignType === 'shopping') {\r\n text = this.i18n.getString('Audience_ShoppingCampaign_BudgetBidsTitle_Step3_PageTitle');\r\n }\r\n\r\n return {\r\n text,\r\n };\r\n }\r\n\r\n /**\r\n * Define events and event handlers for them.\r\n *\r\n * @readonly\r\n * @returns {Object} returns object defining events\r\n */\r\n get events() {\r\n return {\r\n 'click .adschedule-section': 'toggleAdSchedule',\r\n 'click .bid-adjustments-section': 'toggleBidAdjustments',\r\n };\r\n }\r\n\r\n toggleAdSchedule() {\r\n this.$('#adScheduleTargets').toggle();\r\n this.$('.adschedule-section .bedded-icon-marker').toggleClass('expanderImage expandedImage');\r\n this.viewmodel.isAdScheduleExpanded(!this.viewmodel.isAdScheduleExpanded());\r\n }\r\n\r\n toggleBidAdjustments() {\r\n this.$('#bidAdjustmentTargets').toggle();\r\n this.$('.bid-adjustments-section .bedded-icon-marker').toggleClass('expanderImage expandedImage');\r\n this.viewmodel.isBidAdjustmentsExpanded(!this.viewmodel.isBidAdjustmentsExpanded());\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\r\n get actions() {\r\n const actions = [];\r\n\r\n if (this.isSwapStepsEnabled) {\r\n actions.push({\r\n name: 'next',\r\n displayText: this.i18n.getString('Audience_Campaign_Crud_Campaign_Save_Next'),\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\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 } else {\r\n actions.push({\r\n name: 'save',\r\n htmlAttributes: {\r\n class: 'btn-primary',\r\n },\r\n displayText: this.i18n.getString('Save'),\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 }\r\n\r\n return actions;\r\n }\r\n\r\n /**\r\n * Get the data that is used for the parameter for saving.\r\n * @param {bool} skipAdScheduling - skip to save the adscheduling data when click back button.\r\n *\r\n * @returns {Object} - object representing the data for the campaign to be saved.\r\n */\r\n getData(skipAdScheduling) {\r\n this.campaignId = this.viewContext.currentCampaign.Id;\r\n this.campaignName = this.viewContext.currentCampaign.Name;\r\n this.adGroupId = this.viewContext.currentAdGroup.Id;\r\n\r\n const adGroup = {\r\n Campaign: { Id: this.campaignId },\r\n Id: this.adGroupId,\r\n Medium: 'Search',\r\n // eslint-disable-next-line max-len\r\n [this.pricingModelAdgroupBidAttributeMapping[this.pricingModel]]: this.defaultBidModel.toJSON().Amount,\r\n PricingModel: this.pricingModel,\r\n Status: 'Active',\r\n };\r\n\r\n const currentSnapshot = this.currentLevelTargetInfo.getSnapshot(this.supportCashbackSettings);\r\n\r\n let targets =\r\n criterionHelper.compareAndGetCriterionsDelta(this.originalSnapshot, currentSnapshot);\r\n\r\n // Audience Targeting goes to AdGroupAudienceCriterions not AdGroupCriterions\r\n const audienceTargets = _.filter(targets, target => target.Criterion.Type === 'Audience');\r\n\r\n targets = _.reject(targets, target => target.Criterion.Type === 'Audience');\r\n\r\n adGroup.AdGroupCriterions = this.populateCriterionWithAdGroupIds(targets);\r\n adGroup.AdGroupAudienceCriterions = this.populateCriterionWithAdGroupIds(audienceTargets);\r\n\r\n const params = {};\r\n\r\n params.Id = this.campaignId;\r\n params.Name = this.campaignName;\r\n params.AdGroups = [adGroup];\r\n params.Budget = this.budgetPanelView.getValues();\r\n\r\n if (this.isAudienceCampaignAutoBiddingV2Enabled) {\r\n params.BiddingScheme = this.biddingStrategyView.getValues();\r\n } else {\r\n params.BiddingScheme = {\r\n Type: this.pricingModelToBidTypeString[this.pricingModel],\r\n };\r\n }\r\n\r\n const dateSettings = this.adScheduleView.getDateSettings();\r\n _.extend(adGroup, dateSettings);\r\n\r\n if (JSON.stringify(this.initialFrequencyCapping) !== JSON.stringify(this.frequencyCapping)) {\r\n _.extend(adGroup, { FrequencyCapSettings: [{}] });\r\n\r\n if (this.frequencyCapping) {\r\n adGroup.FrequencyCapSettings = this.frequencyCapping;\r\n }\r\n }\r\n\r\n if (!skipAdScheduling) {\r\n const scheduling = this.getScheduleInfo();\r\n\r\n // Add Campaign Criterions\r\n this.populateCriterionCampaignIds(scheduling);\r\n params.CampaignCriterions = scheduling;\r\n }\r\n\r\n if (this.goalSelectionView) {\r\n params.CampaignConversionGoalAssociations =\r\n this.goalSelectionView.convertToMTFormat(this.campaignId);\r\n }\r\n\r\n return params;\r\n }\r\n\r\n isDefaultBidUsed() {\r\n return this.pricingModel !== 'MaxConversions';\r\n }\r\n\r\n /**\r\n * Validate inputs\r\n *\r\n * @private\r\n * @returns {bool} are inputs valid\r\n */\r\n validate() {\r\n this.defaultBidInput.setState({ showError: true });\r\n\r\n return this.budgetPanelView.validate() &&\r\n (this.isDefaultBidUsed() ? this.defaultBidInput.getState().isValid : true) &&\r\n this.adScheduleView.validate() &&\r\n _.every(this.targetBidAdjustment, targetBidAdjustment =>\r\n targetBidAdjustment.validate());\r\n }\r\n\r\n /**\r\n * Update the Campaign with the given setting.\r\n * @param {bool} skipAdScheduling - skip to save the adscheduling data when click back button.\r\n * @returns {Promise} - returns promise of returning boolean value indicating\r\n * if the update process is succesful or not.\r\n */\r\n updateCampaign(skipAdScheduling) {\r\n const jsdata = DependencyResolver.get('component/js-data-campaign/index');\r\n const params = this.getData(skipAdScheduling);\r\n\r\n this.errorsView.removeErrors();\r\n\r\n\r\n if (this.adScheduleView) {\r\n params.AdScheduleUseSearcherTimeZone =\r\n _.result(this.adScheduleView, 'getAdScheduleUseSearcherTimeZone');\r\n }\r\n\r\n return jsdata.Campaign.update(this.campaignId, params, { adapter: 'bulk' }).then((data) => {\r\n if (_.isFinite(data.Id)) {\r\n if (this.IsAIMBidSuggestionEnabled) {\r\n // log for ad insight team to analyze suggestion bid usage.\r\n const logdata = {\r\n CampaignId: params.Id,\r\n AdGroupId: params.AdGroups[0].Id,\r\n SuggestedBid: this.viewContext.SuggestedBid,\r\n SearchBid: params.AdGroups[0].SearchBid,\r\n IsSuggestedBidShowedOnUI: this.IsSuggestedBidShowedOnUI,\r\n AccountCurrencyCode: this.viewContext.accountCurrencyCode,\r\n };\r\n this.activityLogger.trace(logdata);\r\n }\r\n\r\n const originalCurrentCampaign = this.viewContext.currentCampaign;\r\n this.viewContext.currentCampaign = {\r\n CampaignType: originalCurrentCampaign.CampaignType,\r\n CampaignSubType: originalCurrentCampaign.CampaignSubType,\r\n CampaignSettings: originalCurrentCampaign.CampaignSettings,\r\n ...data,\r\n };\r\n\r\n if (this.permissions.IsPersonalizedOffersEnabled) {\r\n // the cashback settings in return data is missing\r\n // we need to add this back\r\n const cashbackSettings = _.chain(originalCurrentCampaign)\r\n .result('CampaignCashback')\r\n .value();\r\n this.viewContext.currentCampaign.CampaignCashback = cashbackSettings;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n })\r\n .catch((response) => {\r\n if (response && response.entity) {\r\n const hasErrors = response && !_.isUndefined(response.errors);\r\n\r\n if (hasErrors) {\r\n // TODO: handle error types\r\n this.errorsView.setErrors(this.i18nErrors.getBulkApiErrors(response.errors));\r\n\r\n this.activityLogger.trace(getBulkErrorsLogMessage(response.errors));\r\n _.each(response.errors, (error) => {\r\n this.activityLogger.signal(error.Error, 'audience budget bid api error');\r\n });\r\n } else {\r\n // Unexpected case. Log Error.\r\n this.activityLogger.error(getBulkErrorsLogMessage(response.errors));\r\n }\r\n } else {\r\n // Ajax Error\r\n this.errorsView.setErrors(this.i18nErrors.getODataErrors(response.errors));\r\n _.each(response.errors, (error) => {\r\n this.activityLogger.signal(error.Error, 'audience budget bid api error');\r\n });\r\n }\r\n\r\n return false;\r\n })\r\n .finally(withUiBlock(this.wizardElement, this.i18n.getString('Loading')));\r\n }\r\n\r\n getEstimatePromise(data) {\r\n return this.odata.post('Customers()/Accounts()/Default.AudienceEstimationV2', {\r\n host: 'adinsight.odata.url',\r\n path: 'AdInsight/V2/',\r\n data: { request: data },\r\n customHeader: {\r\n name: 'x-ms-scenarioname',\r\n value: this.logScenario.value,\r\n },\r\n });\r\n }\r\n\r\n getCPCRecommendedBidPromise(targetsData) {\r\n if (_.get(this.viewContext, 'currentCampaign.CampaignType') === 'Audience'\r\n && _.get(this.viewContext, 'currentCampaign.CampaignSubType') === 'AudienceStatic') {\r\n const config = DependencyResolver.get('component/config/index');\r\n const recommendedValueFromContext = config.get(BiddingStrategyValueToRecommendBidKey.ManualCpc);\r\n const recommendedValue = _.isUndefined(recommendedValueFromContext) || _.isNull(recommendedValueFromContext) ? 3.3 : recommendedValueFromContext;\r\n return { SuggestedBid: recommendedValue };\r\n }\r\n return this.getEstimatePromise(targetsData);\r\n }\r\n\r\n updateKPIEstimateAsync(e) {\r\n // Empty data passed in updatePanel function to initialize kpi estimate table\r\n const estimateDataMock = {\r\n '@odata.context': 'http://int.adinsight-mt.trafficmanager.net:823/AdInsightMT/V2/oData/$metadata#Microsoft.Advertiser.AdInsight.MT.Interfaces.AIM.AudienceInsight.GetAudienceKPIEstimationV2Response',\r\n ClicksLostToBid: null,\r\n ClicksLostToBudget: null,\r\n Currency: null,\r\n ErrorCode: 'Success',\r\n ErrorMessage: null,\r\n EstAudienceSize: null,\r\n EstCPC: null,\r\n EstCTR: null,\r\n EstClick: null,\r\n EstCostPerEvent: null,\r\n EstImpression: null,\r\n EstSpend: null,\r\n EstView: null,\r\n EventsLostToBid: null,\r\n EventsLostToBudget: null,\r\n IsMinSuggestedBudget: false,\r\n RequestFulfilledByHost: 'CO01EAP00004131',\r\n SuggestedBid: null,\r\n SuggestedBudget: null,\r\n };\r\n this.showDefaultBidWarning = false;\r\n // if default bid is changed, set this.defaultBidUpdatedByUser = true.\r\n if (e && e.target && e.target.className && $(e.target).hasClass('Amount-value')) {\r\n this.defaultBidUpdatedByUser = true;\r\n }\r\n if (!this.budgetPanelView.validate() ||\r\n !this.defaultBidInput.getState().isValid ||\r\n !this.defaultBidModel.toJSON().Amount ||\r\n _.isNaN(this.defaultBidModel.toJSON().Amount)\r\n ) {\r\n this.updateDefaultBidWarning();\r\n this.updatePanel(estimateDataMock, true);\r\n return;\r\n }\r\n this.showDefaultBidWarning = this.pricingModel === 'CPV' && this.defaultBidModel.toJSON().Amount > DefaultBidCPVWarningThreshold;\r\n this.updateDefaultBidWarning();\r\n\r\n const subType = this.viewContext.currentCampaign &&\r\n this.viewContext.currentCampaign.CampaignSubType;\r\n const campaignSetting = _.first(_.get(this.viewContext.currentCampaign, 'CampaignSettings')) || {};\r\n const feedInfo = getFeedInfo(campaignSetting);\r\n const { UseOptimizedTargeting } = this.viewContext.currentAdGroup;\r\n // eslint-disable-next-line max-len\r\n const targetsData = this.estimateRequestFactory.create(this.pricingModelToBidTypeEnum[this.pricingModel], subType, feedInfo, UseOptimizedTargeting);\r\n targetsData.DailyBudget = this.budgetPanelView.getValues().Amount;\r\n targetsData.Bid = this.defaultBidModel.toJSON().Amount;\r\n\r\n // Create AudienceEstimation Promise\r\n if (_.isEmpty(targetsData)) {\r\n this.updatePanel(estimateDataMock, true);\r\n return;\r\n }\r\n\r\n const audienceEstimationUrl = 'Customers()/Accounts()/Default.AudienceKPIEstimationV2';\r\n\r\n this.odata.post(audienceEstimationUrl, {\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.logScenario.value,\r\n },\r\n }).then((estimateData) => {\r\n this.updatePanel(estimateData, estimateData && estimateData.ErrorCode === 'Success');\r\n }).catch((response) => {\r\n const hasErrors = response && !_.isUndefined(response.error);\r\n\r\n if (hasErrors) {\r\n this.updatePanel({ ErrorCode: JSON.stringify(response.error) }, false);\r\n } else {\r\n this.updatePanel({ ErrorCode: JSON.stringify(response) }, false);\r\n }\r\n }).finally(withUiBlock($('.kpiestimation-result'), this.i18n.getString('Loading')));\r\n }\r\n\r\n updatePanel(estimateData, reqStatus) {\r\n this.estimateData = estimateData || {};\r\n this.estimateData.reqStatus = reqStatus;\r\n\r\n ReactDOM.render(\r\n ,\r\n this.$('.kpiestimation-result')[0]\r\n );\r\n }\r\n\r\n /**\r\n * Triggers event 'saveAndExit', otherwise it displays an error.\r\n * @private\r\n *\r\n * @returns {Promise} - returns promise of returning boolean value indicating\r\n * if the save was succesful or not.\r\n * */\r\n saveAndExit() {\r\n if (!this.validate()) {\r\n this.activityLogger.signal('save and exit: false', 'crud audience budget bid');\r\n return false;\r\n }\r\n return this.updateCampaign(false).then((isSuccessful) => {\r\n if (!isSuccessful) {\r\n this.activityLogger.signal(`save and exit: ${isSuccessful}`, 'crud audience budget bid');\r\n return Promise.reject();\r\n }\r\n\r\n this.trigger('saveAndExit');\r\n\r\n this.activityLogger.signal('save and exit: true', 'crud audience budget bid');\r\n return true;\r\n });\r\n }\r\n\r\n /**\r\n * Save the Campaign setting updates.\r\n *\r\n * @returns {Promise} - returns promise of returning boolean value indicating\r\n * if the save was succesful or not.\r\n */\r\n save() {\r\n if (!this.validate()) {\r\n this.activityLogger.signal('clicked save: false', 'crud audience budget bid');\r\n return false;\r\n }\r\n\r\n return this.updateCampaign(false).then((isSuccessful) => {\r\n this.activityLogger.signal(`clicked save: ${isSuccessful}`, 'crud audience budget bid');\r\n\r\n if (isSuccessful) {\r\n this.trigger('saveAndExit');\r\n }\r\n });\r\n }\r\n\r\n onFrequencyCappingChange(data) {\r\n this.frequencyCapping = data.FrequencyCapSettings;\r\n this.renderFrequencyCapping();\r\n }\r\n\r\n renderFrequencyCapping() {\r\n if (this.isFCapEnabled) {\r\n ReactDOM.render(\r\n this.onFrequencyCappingChange(data)}\r\n />,\r\n this.$('.frequency-capping-container')[0]\r\n );\r\n } else {\r\n ReactDOM.unmountComponentAtNode(this.$('.frequency-capping-container')[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 if (this.options && this.options.perfMarker) {\r\n this.renderMarker = this.perfMarker.createChild('RenderBudgetBid');\r\n this.renderMarker.willInit();\r\n }\r\n\r\n // Update pricingModel based on context\r\n if (this.viewContext.currentAdGroup) {\r\n this.pricingModel = this.viewContext.currentAdGroup.PricingModel;\r\n }\r\n\r\n this.$el.html(template(this));\r\n\r\n ko.applyBindings(this.viewmodel, this.el);\r\n\r\n this.renderFrequencyCapping();\r\n\r\n // Delay initialize control as it needs data from other steps\r\n this.initDailyBudgetView();\r\n\r\n this.$('.budget').append(this.budgetPanelView.render().$el);\r\n this.$('.default-bid').append(this.defaultBidInput.render().$el);\r\n this.$('.adschedule-targets').append(this.adScheduleView.render().$el);\r\n this.$('.errors-container').append(this.errorsView.render().$el);\r\n if (this.IsAIMBidSuggestionEnabled) {\r\n this.$('.default-bid').change(this.updateKPIEstimateAsync.bind(this));\r\n this.$('.budget').change(this.updateKPIEstimateAsync.bind(this));\r\n }\r\n\r\n this.initTargetBidAdjustmentsAndRender();\r\n\r\n const { CampaignSubType } = this.viewContext.currentCampaign;\r\n\r\n this.isMSANeCPCAutoBiddingEnabled =\r\n getCampaignType(this.viewContext.currentCampaign) === 'audience' &&\r\n [\r\n CampaignSubTypes.AudienceStatic,\r\n CampaignSubTypes.AudienceFeedBased,\r\n CampaignSubTypes.AudienceDynamicFeedBased,\r\n ].includes(CampaignSubType);\r\n this.isAudienceCampaignAutoBiddingV2Enabled =\r\n this.permissions.IsAudienceCampaignAutoBiddingV2Enabled &&\r\n getCampaignType(this.viewContext.currentCampaign) === 'audience' &&\r\n [\r\n CampaignSubTypes.AudienceStatic,\r\n CampaignSubTypes.AudienceFeedBased,\r\n CampaignSubTypes.AudienceDynamicFeedBased,\r\n ].includes(CampaignSubType);\r\n\r\n if (this.isAudienceCampaignAutoBiddingV2Enabled) {\r\n this.biddingStrategyView = new BiddingStrategyView({\r\n biddingStrategyType: 'EnhancedCPC',\r\n isInitialize: true,\r\n isCreation: true,\r\n campaignType: 'audience',\r\n activityLogger: this.activityLogger,\r\n i18nNewDesign: this.options.newI18n,\r\n campaignLanguage: 'English',\r\n campaignSubType: CampaignSubType,\r\n });\r\n this.biddingStrategyView.viewModel.selectedBidStrategy.subscribe((strategy) => {\r\n if (strategy === 'EnhancedCpc') {\r\n strategy = 'EnhancedCPC';\r\n }\r\n this.onBidStrategyChanged({ key: strategy });\r\n });\r\n this.$('.bidding-strategy__container').empty().html(this.biddingStrategyView.render().$el);\r\n } else {\r\n this.initBidStrategy();\r\n }\r\n\r\n this.perfMarker.done();\r\n return this;\r\n }\r\n\r\n /**\r\n * Update bid input control based on the bid strategy user selects\r\n * as well as the suggested bid.\r\n * @param {object} item selected option item\r\n *\r\n * @return {undefined}\r\n */\r\n onBidStrategyChanged = (item) => {\r\n this.pricingModel = item.key;\r\n this.isFCapEnabled = this.pricingModel === 'ManualCpm';\r\n this.renderFrequencyCapping();\r\n this.initDefaultBidInput();\r\n if (this.IsAIMBidSuggestionEnabled && this.suggestedBidMapping[this.pricingModel]) {\r\n const localized = this.i18n.formatDecimal(this.suggestedBidMapping[this.pricingModel], {\r\n maximumFractionDigits: 2,\r\n minimumFractionDigits: 2,\r\n });\r\n this.defaultBidInput.setState({\r\n value: localized,\r\n });\r\n this.updateKPIEstimateAsync();\r\n }\r\n\r\n // Do not show the default bid on maxConversion\r\n if (this.isDefaultBidUsed()) {\r\n this.$('.bid__container').show();\r\n this.$('.default-bid').html(this.defaultBidInput.render().$el);\r\n } else {\r\n this.$('.bid__container').hide();\r\n }\r\n };\r\n\r\n /**\r\n * render Conversion Goal Selection View\r\n * @param {object} campaign campaign that is use to update goalSelection View\r\n * @returns {undefined}\r\n */\r\n renderConversionGoalSelection = (campaign) => {\r\n const isSPA = campaign.CampaignSubType === 'ShoppingSponsoredProductAd';\r\n // Cashback CPS Campaign:\r\n const isCPS = campaign.CampaignCashback != null &&\r\n (campaign.CampaignCashback.PersonalizedOffersEnabled === true\r\n || campaign.CampaignCashback.MonthlyBudget > 0);\r\n\r\n const isSelectorEnabled = !isSPA && !isCPS;\r\n if (isSelectorEnabled) {\r\n const jsdata = DependencyResolver.get('component/js-data-campaign/index');\r\n const state = DependencyResolver.get('component/state/index');\r\n this.goalSelectionView = new this.CampaignGoalSelectionView({\r\n i18n: this.i18n,\r\n pageSize: 10,\r\n isMultiMode: true,\r\n isHideSaveBar: true,\r\n campaign,\r\n jsdata,\r\n state,\r\n activityLogger: this.activityLogger,\r\n });\r\n this.$('.conversion-goal-selection').empty().html(this.goalSelectionView.render().el);\r\n } else {\r\n this.$('.conversion-goal-section').empty();\r\n }\r\n };\r\n\r\n getCampaignPromise = () => {\r\n const campaign = this.viewContext.currentCampaign;\r\n const jsdata = DependencyResolver.get('component/js-data-campaign/index');\r\n\r\n const params = {\r\n queryParameters: {\r\n entitySet: campaign,\r\n expand: ['CampaignConversionGoal/Goals'],\r\n },\r\n bypassCache: true,\r\n };\r\n\r\n return jsdata.Campaign.find(Number(campaign.Id), params);\r\n };\r\n\r\n /**\r\n * WillShow is called when the view is shown.\r\n * To support navigating back and forth with the targeting change,\r\n * we reinitialize the target and bid adjustment.\r\n *\r\n * @return {undefined}\r\n */\r\n willShow() {\r\n // While it's ideal where willInit align with the contructor, it is created with the wizard.\r\n // The perf marker is to measure the user experience perf for the component.\r\n this.perfMarker.willRender();\r\n this.toggleTargetsCashbackPercentColumns();\r\n // refresh suggested bid for all possible bid strategies since user may update\r\n // targets.\r\n const subType = _.get(this.viewContext.currentCampaign, 'CampaignSubType');\r\n const campaignSetting = _.first(_.get(this.viewContext.currentCampaign, 'CampaignSettings')) || {};\r\n const feedInfo = getFeedInfo(campaignSetting);\r\n const { UseOptimizedTargeting } = this.viewContext.currentAdGroup;\r\n const targetsData =\r\n this.estimateRequestFactory.create(\r\n this.isEnabledDeprecateManualCpcForAudienceCampaign ? BidStrategy.EnhancedCpc :BidStrategy.ManualCpc,\r\n subType, feedInfo, UseOptimizedTargeting\r\n );\r\n const targetsCPVData =\r\n this.estimateRequestFactory.create(\r\n BidStrategy.ManualCpv,\r\n subType, feedInfo, UseOptimizedTargeting\r\n );\r\n const targetsCPMData =\r\n this.estimateRequestFactory.create(\r\n BidStrategy.ManualCpm,\r\n subType, feedInfo, UseOptimizedTargeting\r\n );\r\n // Use mock promise for video/non-video case to keep the read logic direct and clean.\r\n // video case doesn't need Cpc estimation and non-video case doesn't need Cpv.\r\n const mockEstimateData = { SuggestedBid: 0 };\r\n const promises = [\r\n this.getCampaignPromise(),\r\n this.isVideo ? Promise.resolve(mockEstimateData) : this.getCPCRecommendedBidPromise(targetsData),\r\n this.isVideo ? this.getEstimatePromise(targetsCPVData) : Promise.resolve(mockEstimateData),\r\n this.getEstimatePromise(targetsCPMData),\r\n ];\r\n\r\n Promise\r\n .all(promises)\r\n .then(([campaign, cpcEstimateData, cpvEstimateData, cpmEstimateData]) => {\r\n // duplicate suggested bid mapping as there are currently 2 separate controls\r\n this.suggestedBidMapping.CPC = cpcEstimateData.SuggestedBid;\r\n this.suggestedBidMapping.ManualCpc = cpcEstimateData.SuggestedBid;\r\n this.suggestedBidMapping.CPV = cpvEstimateData.SuggestedBid;\r\n this.suggestedBidMapping.CPM = cpmEstimateData.SuggestedBid;\r\n this.suggestedBidMapping.ManualCpm = cpmEstimateData.SuggestedBid;\r\n this.suggestedBidMapping.EnhancedCPC = cpcEstimateData.SuggestedBid;\r\n this.suggestedBidMapping.EnhancedCpc = cpcEstimateData.SuggestedBid;\r\n\r\n // save the snapshot to make the diff later.\r\n this.originalSnapshot = this.currentLevelTargetInfo.getSnapshot();\r\n if (this.viewContext.currentCampaign && this.viewContext.currentCampaign.Budget) {\r\n this.budgetPanelView.update({ Amount: this.viewContext.currentCampaign.Budget.Amount });\r\n }\r\n if (this.IsAIMBidSuggestionEnabled && this.suggestedBidMapping[this.pricingModel]) {\r\n if (this.defaultBidUpdatedByUser === false) {\r\n const localized = this.i18n.formatDecimal(this.suggestedBidMapping[this.pricingModel], {\r\n maximumFractionDigits: 2,\r\n minimumFractionDigits: 2,\r\n });\r\n this.defaultBidInput.setState({\r\n value: localized,\r\n });\r\n this.IsSuggestedBidShowedOnUI = true;\r\n } else {\r\n this.IsSuggestedBidShowedOnUI = false;\r\n }\r\n this.updateKPIEstimateAsync();\r\n } else if (this.IsAIMBidSuggestionEnabled && !this.suggestedBidMapping[this.pricingModel]) {\r\n if (this.defaultBidUpdatedByUser === false) {\r\n this.defaultBidInput.setState({\r\n value: '',\r\n });\r\n this.IsSuggestedBidShowedOnUI = true;\r\n }\r\n this.updateKPIEstimateAsync();\r\n }\r\n this.renderConversionGoalSelection(campaign);\r\n }).finally(withUiBlock($('.crud-audience-budget-bid'), this.i18n.getString('Loading')));\r\n if (this.options && this.options.perfMarker && this.renderMarker) {\r\n this.renderMarker.done();\r\n }\r\n }\r\n\r\n toggleTargetsCashbackPercentColumns() {\r\n if (this.permissions.IsPersonalizedOffersEnabled) {\r\n const { currentCampaign } = this.viewContext;\r\n const supportCashbackSettings = shouldSupportCashbackSettings(\r\n currentCampaign,\r\n this.permissions\r\n );\r\n this.supportCashbackSettings = supportCashbackSettings;\r\n\r\n const cashbackPercent = _.chain(currentCampaign)\r\n .result('CampaignCashback')\r\n .result('Percent', null)\r\n .value();\r\n\r\n _.forEach(this.targetBidAdjustment, (criterionEditor) => {\r\n if (criterionEditor.resetSupportCashbackSettings) {\r\n criterionEditor.resetSupportCashbackSettings(supportCashbackSettings, {\r\n level: 'Campaign',\r\n value: cashbackPercent,\r\n });\r\n }\r\n this.adScheduleView.toggleCashbackPercentColumns(supportCashbackSettings, {\r\n level: 'Campaign',\r\n value: cashbackPercent,\r\n });\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Checks if wizard can go to the next step\r\n *\r\n * @returns {Promise} - returns promise of returning boolean value indicating\r\n * if the save was succesful or not.\r\n */\r\n wizardShouldGoNext() {\r\n if (!this.validate()) {\r\n this.activityLogger.signal('clicked next: false', 'crud audience budget bid');\r\n return false;\r\n }\r\n\r\n return this.updateCampaign(false).then((isSuccessful) => {\r\n if (!isSuccessful) {\r\n this.activityLogger.signal(`clicked next: ${isSuccessful}`, 'crud audience budget bid');\r\n return Promise.reject();\r\n }\r\n\r\n this.activityLogger.signal('clicked next: true', 'crud audience budget bid');\r\n return isSuccessful;\r\n });\r\n }\r\n\r\n /**\r\n * wizardShouldGoBack is called when the step goes backi\r\n * To support navigating back and persist, we save.\r\n *\r\n * @return {Promise} - Promise of saving.\r\n */\r\n wizardShouldGoBack() {\r\n if (!this.validate()) {\r\n this.activityLogger.signal('clicked back: false', 'crud audience budget bid');\r\n return Promise.resolve(false);\r\n }\r\n\r\n return this.updateCampaign(true).then((isSuccess) => {\r\n this.activityLogger.signal(`clicked back: ${isSuccess}`, 'crud audience budget bid');\r\n\r\n return isSuccess;\r\n });\r\n }\r\n\r\n initBidStrategy() {\r\n if (this.isVideo || this.isCpmEnabled) {\r\n const { CampaignSubType } = this.viewContext.currentCampaign;\r\n const shouldDeprecateManualCpc = this.isEnabledDeprecateManualCpcForAudienceCampaign &&\r\n getCampaignType(this.viewContext.currentCampaign) === 'audience' &&\r\n [\r\n CampaignSubTypes.AudienceStatic,\r\n CampaignSubTypes.AudienceFeedBased,\r\n CampaignSubTypes.AudienceDynamicFeedBased,\r\n ].includes(CampaignSubType);\r\n let keys = this.pricingModels.slice();\r\n const isHideCpmForFeedbasedEnabled = this.isFeedBased\r\n && this.isHideCpmForFeedbasedCampaginEnabled;\r\n const pricingModelControls = {\r\n CPC: {\r\n disabled: (this.isVideo && !this.isManualCpcForVideoAdsEnabled) || shouldDeprecateManualCpc,\r\n },\r\n CPV: {\r\n disabled: !this.isVideo,\r\n },\r\n CPM: {\r\n disabled: !this.isCpmEnabled || isHideCpmForFeedbasedEnabled,\r\n },\r\n };\r\n this.pricingModels.forEach((pModel) => {\r\n if (pricingModelControls[pModel].disabled) {\r\n keys = keys.filter(key => key !== pModel);\r\n }\r\n });\r\n\r\n if (this.isMSANeCPCAutoBiddingEnabled) {\r\n keys.unshift('EnhancedCPC');\r\n this.pricingModel = 'EnhancedCPC';\r\n }\r\n\r\n // refresh bid model with latest bid strategy\r\n // make sure price model don't change after render bid input\r\n this.onBidStrategyChanged({ key: this.pricingModel });\r\n\r\n ReactDOM.render(\r\n ,\r\n this.$('.bid-strategy')[0]\r\n );\r\n }\r\n }\r\n\r\n updateDefaultBidWarning() {\r\n const defaultBidWarningSelector = '.default-bid-warning';\r\n if (this.showDefaultBidWarning) {\r\n if (!this.isDefaultBidCPVWarningRendered) {\r\n ReactDOM.render(\r\n ,\r\n this.$(defaultBidWarningSelector)[0]\r\n );\r\n this.isDefaultBidCPVWarningRendered = true;\r\n }\r\n this.$(defaultBidWarningSelector).show();\r\n } else {\r\n this.$(defaultBidWarningSelector).hide();\r\n }\r\n }\r\n\r\n /**\r\n * Initialize Target Bid Adjustments view\r\n *\r\n * @private\r\n * @returns {undefined}\r\n */\r\n initTargetBidAdjustmentsAndRender() {\r\n const criterions = cloneDeep(this.currentLevelTargetInfo.getAll());\r\n\r\n // Normalize location type criterions\r\n const criterionTypesGrouped = _.groupBy(criterions, (criterion) => {\r\n if (criterion.Criterion.Type === 'Radius' ||\r\n criterion.Criterion.Type === 'NegativeLocation') {\r\n return 'Location';\r\n }\r\n\r\n return criterion.Criterion.Type;\r\n });\r\n\r\n this.$('.bid-adjustment-targets-container').empty();\r\n\r\n const criterionSettingOptions = {\r\n currentLevelTargetInfo: this.currentLevelTargetInfo,\r\n showTargetSelection: false,\r\n showBidAdjustment: true,\r\n showTargetOrBid: false,\r\n activityLogger: this.activityLogger,\r\n };\r\n\r\n // Initialize and Render CriterionSetting control for each criterion type.\r\n _.each(criterionTypesGrouped, (criterionTypeGroup) => {\r\n let criterionType = _.take(criterionTypeGroup).Criterion.Type;\r\n\r\n if (criterionType === 'Radius' || criterionType === 'NegativeLocation') {\r\n criterionType = 'Location';\r\n }\r\n\r\n if (criterionType === 'ContextualTarget') {\r\n return;\r\n }\r\n\r\n switch (criterionType) {\r\n case 'CompanyName':\r\n this.targetBidAdjustment[criterionType] =\r\n new CompanyNameCriterionSetting(criterionSettingOptions);\r\n break;\r\n\r\n case 'JobFunction':\r\n this.targetBidAdjustment[criterionType] =\r\n new JobFunctionCriterionSetting(criterionSettingOptions);\r\n break;\r\n\r\n case 'Industry':\r\n this.targetBidAdjustment[criterionType] =\r\n new IndustryCriterionSetting(criterionSettingOptions);\r\n break;\r\n\r\n case 'Age':\r\n this.targetBidAdjustment[criterionType] =\r\n new AgeCriterionSetting(criterionSettingOptions);\r\n break;\r\n\r\n case 'Gender':\r\n this.targetBidAdjustment[criterionType] =\r\n new GenderCriterionSetting(criterionSettingOptions);\r\n break;\r\n\r\n case 'Device':\r\n this.targetBidAdjustment[criterionType] =\r\n new DeviceCriterionSetting(criterionSettingOptions);\r\n break;\r\n\r\n case 'Audience':\r\n this.targetBidAdjustment[criterionType] =\r\n new AudienceCriterionSetting(criterionSettingOptions);\r\n break;\r\n\r\n case 'Location':\r\n this.targetBidAdjustment[criterionType] =\r\n new LocationCriterionSetting(criterionSettingOptions);\r\n break;\r\n\r\n default:\r\n throw new Error('unsupported type');\r\n }\r\n\r\n this.$('.bid-adjustment-targets-container').append(this.targetBidAdjustment[criterionType].render().$el);\r\n }, this);\r\n }\r\n\r\n /**\r\n * Initialize Daily Budget view\r\n *\r\n * @private\r\n * @returns {undefined}\r\n */\r\n initDailyBudgetView() {\r\n const BudgetPanelView = DependencyResolver.get('campaignui/feature/budget/view/budget-panel');\r\n\r\n this.budgetPanelView = new BudgetPanelView({\r\n model: this.viewContext.currentCampaign.Budget,\r\n activityLogger: this.activityLogger,\r\n });\r\n }\r\n\r\n /**\r\n * Initialize Default Bid input\r\n *\r\n * @private\r\n * @returns {undefined}\r\n */\r\n initDefaultBidInput() {\r\n let currentPricingModel = this.pricingModel;\r\n // share same bid range with CPC\r\n if (this.pricingModel === 'EnhancedCPC') {\r\n currentPricingModel = 'CPC';\r\n }\r\n\r\n const DefaultBidModel = backboneSchema(getBidSchema({\r\n bidCeil: _.result(this.config.get(PricingModelToRangeKey[currentPricingModel]), 'CeilingValue'),\r\n bidFloor: _.result(this.config.get(PricingModelToRangeKey[currentPricingModel]), 'FloorValue'),\r\n }), this.i18n, ['Amount']);\r\n\r\n this.defaultBidModel = new DefaultBidModel();\r\n this.defaultBidInput = new InputControl({\r\n entity: this.defaultBidModel,\r\n field: 'Amount',\r\n addonText: this.viewContext.accountCurrencyCode,\r\n ariaLabelledby: 'defaultBidLabel',\r\n });\r\n this.defaultBidInput.on('input-changed', () => {\r\n this.activityLogger.signal('default bid change', 'crud audience budget bid');\r\n });\r\n }\r\n\r\n /**\r\n * Initialize Ad Schedule view\r\n *\r\n * @private\r\n * @returns {undefined}\r\n */\r\n initAdScheduleView() {\r\n const AdScheduleView = DependencyResolver.get('campaignui/feature/ad-schedule/view/index');\r\n\r\n this.adScheduleView = new AdScheduleView({\r\n model: {},\r\n level: 'campaign',\r\n showDateSettings: 'true',\r\n activityLogger: this.activityLogger,\r\n });\r\n }\r\n\r\n /**\r\n * Get Ad Schedule info\r\n *\r\n * @private\r\n * @returns {object} scheduling info\r\n */\r\n getScheduleInfo() {\r\n const deletedDayTimeCb = (deletedDayTimeCriterions) => {\r\n _.each(deletedDayTimeCriterions, (criterion) => {\r\n criterion.Status = 'Deleted';\r\n criterion.Campaign = {\r\n Id: this.campaignId,\r\n };\r\n });\r\n };\r\n const scheduling = this.adScheduleView.getValues(deletedDayTimeCb);\r\n\r\n return scheduling;\r\n }\r\n\r\n /**\r\n * Populate Campaign Criterion\r\n *\r\n * @private\r\n * @param {object} criterions criterions to populate\r\n * @returns {undefined}\r\n */\r\n populateCriterionCampaignIds(criterions) {\r\n _.each(criterions, (criterion) => {\r\n criterion.Status = _.isEmpty(criterion.Status) ? 'Active' : criterion.Status;\r\n criterion.Campaign = {\r\n Id: this.campaignId,\r\n };\r\n }, this);\r\n }\r\n\r\n /**\r\n * Populate AdGroup Criterion\r\n *\r\n * @private\r\n * @param {object} criterions - criterions to populate\r\n * @returns {object} - filtered criterions with AdGroupId\r\n */\r\n populateCriterionWithAdGroupIds(criterions) {\r\n _.each(criterions, (criterion) => {\r\n criterion.AdGroup = {\r\n Id: this.adGroupId,\r\n };\r\n }, this);\r\n\r\n return criterions;\r\n }\r\n\r\n remove() {\r\n _.each(this.targetBidAdjustment, (view) => {\r\n view.remove();\r\n });\r\n if (this.budgetPanelView) {\r\n this.budgetPanelView.remove();\r\n }\r\n if (this.goalSelectionView) {\r\n this.goalSelectionView.remove();\r\n }\r\n this.defaultBidInput.remove();\r\n this.adScheduleView.remove();\r\n this.errorsView.remove();\r\n super.remove();\r\n }\r\n}\r\n","/* eslint-disable */\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { mapObject, constant } from 'underscore';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { HelpLink } from '@bingads-webui-react/help-link';\r\nimport { getAlertStyle } from './alert-react-style';\r\n\r\nconst Alert = (props) => {\r\n const [visible, setVisible] = React.useState(true);\r\n const { i18n, alertKey, learnMoreId } = props;\r\n\r\n return (\r\n visible &&\r\n
\r\n
\r\n
\r\n \r\n {`${i18n.getString(alertKey)} `}\r\n \r\n {i18n.getString('LearnMoreLinkText')}\r\n \r\n \r\n { setVisible(false); }}\r\n />\r\n
\r\n
);\r\n};\r\n\r\nAlert.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n percentToFixedFormatter: PropTypes.func.isRequired,\r\n decimalFormatter: PropTypes.func.isRequired,\r\n }).isRequired,\r\n classes: PropTypes.shape(mapObject(\r\n getAlertStyle(),\r\n constant(PropTypes.string.isRequired)\r\n )).isRequired,\r\n alertKey: PropTypes.string.isRequired,\r\n learnMoreId: PropTypes.string.isRequired,\r\n};\r\n\r\nexport const AlertReact = withDefaultStyles(Alert, getAlertStyle);\r\n","export const getAlertStyle = () => ({\r\n root: {\r\n marginTop: 20,\r\n marginBottom: 12,\r\n '& .alert-image': {\r\n marginTop: 3,\r\n },\r\n '& .alert-info-inline': {\r\n width: '100%',\r\n '& a': {\r\n marginTop: 2,\r\n textDecoration: 'none',\r\n },\r\n '& a:hover': {\r\n textDecoration: 'none',\r\n },\r\n '& .glyphicon': {\r\n float: 'right',\r\n top: 4,\r\n color: '#605E5C',\r\n fontSize: 16,\r\n },\r\n },\r\n\r\n },\r\n});\r\n","import $ from 'jquery';\r\nimport _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { BackboneSchema as backboneSchema } from '@bingads-webui/backbone-schema';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport {\r\n AudienceCampaignErrorsView,\r\n AudienceStepBase,\r\n getBulkErrorsLogMessage,\r\n ImpressionTrackingUrlOptions,\r\n generateNameSuggestionSuffix,\r\n} from '@bingads-webui-campaign/audience-campaign-shared';\r\nimport { InputControl } from '@bingads-webui/input-control';\r\nimport { RemainingCharsHint } from '@bingads-webui/remaining-chars-hint';\r\nimport { withUiBlock } from '@bingads-webui/uiblocker';\r\nimport template from './template.pug';\r\nimport { AlertReact } from './alert-react';\r\n\r\nconst ImpressionTrackingUrlsMaxCount = 2;\r\n/**\r\n * saveAndExit event.\r\n *\r\n * @event CrudAudienceCampaign#saveAndExit\r\n * @type {Object}\r\n */\r\n\r\n/**\r\n * CrudAudienceCampaign class that extends {AudienceStepBase} class\r\n * The class defines the section of the setting Campaign\r\n *\r\n * @fires CrudAudienceCampaign#saveAndExit\r\n * @class CrudAudienceCampaign\r\n * @extends {AudienceStepBase}\r\n */\r\nexport class CrudAudienceCampaign extends AudienceStepBase {\r\n /**\r\n * Initializes the {CrudAudienceCampaign} class.\r\n *\r\n * @param {Object} options - options for initializing the class.\r\n * @param {Object} options.viewContext - viewContext for the View.\r\n * @param {Object} options.perfMarker - perfMarker\r\n * @returns {undefined}\r\n */\r\n initialize(options) {\r\n if (options && options.perfMarker) {\r\n options.perfMarker.willInit();\r\n }\r\n this.renderMarker;\r\n this.perfMarker = options.perfMarker;\r\n this.isAdImpressions = options.isAdImpressions;\r\n this.options = options;\r\n this.viewContext = options.viewContext;\r\n this.wizardElement = options.wizardElement;\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.isNextButtonEnabled = (\r\n !(this.viewContext.isReadOnlyUser || this.viewContext.CurrentAccountInActive)\r\n );\r\n\r\n const schema = DependencyResolver.get('$/schema!campaign/Campaign');\r\n const SchemaModel = backboneSchema(\r\n schema,\r\n this.i18n,\r\n ['Name']\r\n );\r\n\r\n this.model = new SchemaModel();\r\n this.logScenario = options.logScenario;\r\n this.activityLogger = this.logScenario.createCampaignSettings.create();\r\n this.isVideo = options.isVideo;\r\n this.isEnabledForVerifiedImpressionTrackingAtCampaignLevel =\r\n options.isEnabledForVerifiedImpressionTrackingAtCampaignLevel && this.isVideo;\r\n\r\n const config = DependencyResolver.get('component/config/index');\r\n this.permissions = config.get('Permissions');\r\n\r\n this.isCopyCampaignSettingsAudienceCampaignEnabled = _.result(this.permissions, 'IsCopyCampaignSettingsAudienceCampaignEnabled', false);\r\n this.isEnabledDeprecateManualCpcForAudienceCampaign = _.result(this.permissions, 'IsEnabledDeprecateManualCpcForAudienceCampaign', false);\r\n\r\n if (this.isCopyCampaignSettingsAudienceCampaignEnabled) {\r\n const CopyCampaignSettings = DependencyResolver.get('crud-campaign/view/copy-campaign-settings');\r\n this.copySettings = new CopyCampaignSettings({\r\n scenario: 'copy-audience-campaign-settings',\r\n activityLogger: this.activityLogger,\r\n });\r\n this.copySettings.on('copy.campaign', this.copyFromCampaign.bind(this));\r\n }\r\n\r\n this.initControls();\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 return {\r\n text: this.i18n.getString('Audience_Campaign_Crud_Campaign_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_Campaign_PageTitle'),\r\n };\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 name: 'next',\r\n displayText: this.i18n.getString('Audience_Campaign_Crud_Campaign_Save_Next'),\r\n enabled: this.isNextButtonEnabled,\r\n },\r\n ];\r\n\r\n if (this.viewContext.currentCampaign) {\r\n actions.push({\r\n name: 'done',\r\n enabled: this.isNextButtonEnabled,\r\n htmlAttributes: {\r\n class: 'btn btn-primary btn-exitWithSave',\r\n },\r\n method: 'saveAndExit',\r\n displayText: this.i18n.getString('Audience_Campaign_Crud_Campaign_Save_Exit'),\r\n });\r\n } else {\r\n actions.push({\r\n name: 'cancel',\r\n displayText: this.i18n.getString('Audience_Campaign_Cancel_Label'),\r\n });\r\n }\r\n\r\n return actions;\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 // View can be inherited, this only needs to use perfMarker of its own.\r\n if (this.options && this.options.perfMarker) {\r\n this.renderMarker =\r\n this.perfMarker.createChild('RenderCampaignCrud');\r\n\r\n this.renderMarker.willInit();\r\n }\r\n if (this.perfMarker.name === 'CampaignCrud') {\r\n this.perfMarker.willRender();\r\n }\r\n\r\n this.$el.html(template(this));\r\n\r\n if (this.isVideo) {\r\n this.updateVideoAlert();\r\n }\r\n if (this.isAdImpressions) {\r\n this.updateAdImpressionAlert();\r\n }\r\n this.$('.name-input-control-container').append(this.nameInput.render().$el);\r\n this.$('.remaining-chars-hint-container').append(this.nameInputRemainingCharsHint.render().$el);\r\n this.$('.errors-container').append(this.errorsView.render().$el);\r\n\r\n if (this.isCopyCampaignSettingsAudienceCampaignEnabled) {\r\n this.$('.copy-campaign-settings-container').append(this.copySettings.render().$el);\r\n }\r\n\r\n if (this.isEnabledForVerifiedImpressionTrackingAtCampaignLevel) {\r\n this.$('.impression-tracking-url-options-container').append(this.impressionTrackingUrlOptions.render().$el);\r\n }\r\n\r\n if (this.budget) {\r\n this.$('.budget').empty().append(this.budget.$el);\r\n this.budget.render();\r\n }\r\n\r\n return this;\r\n }\r\n\r\n updateVideoAlert() {\r\n ReactDOM.render(\r\n ,\r\n this.$('.video-alert')[0]\r\n );\r\n }\r\n\r\n updateAdImpressionAlert() {\r\n ReactDOM.render(\r\n ,\r\n this.$('.adimpression-alert')[0]\r\n );\r\n }\r\n\r\n /**\r\n * WillShow is called when the view is shown.\r\n * To support navigating back\r\n * we reinitialize the budget.\r\n *\r\n * @return {undefined}\r\n */\r\n willShow() {\r\n if (this.viewContext.currentCampaign\r\n && this.viewContext.currentCampaign.Budget\r\n && this.budget\r\n && this.budget.viewModel.isIndividualBudgetSelected()) {\r\n this.budget.budgetView.update({ Amount: this.viewContext.currentCampaign.Budget.Amount });\r\n }\r\n if (this.perfMarker.name === 'CampaignCrud') {\r\n this.perfMarker.done();\r\n // As we show the first section of the wizard, we consider the whole wizard done rendered.\r\n if (this.perfMarker.parentMarker) {\r\n this.perfMarker.parentMarker.done();\r\n }\r\n if (this.options && this.options.perfMarker && this.renderMarker) {\r\n this.renderMarker.done();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * It attempts to save and return true if the save is done succefully.\r\n *\r\n * @returns {boolean} - returns true if it is ready to go to the next step.\r\n */\r\n wizardShouldGoNext() {\r\n return this.save().then((isSuccessful) => {\r\n this.activityLogger.signal(`clicked next: ${isSuccessful}`, 'crud audience campaign');\r\n return isSuccessful;\r\n });\r\n }\r\n\r\n /**\r\n * Get the data that is used for the parameter for saving.\r\n *\r\n * @returns {Object} - object representing the data for the campaign to be saved.\r\n */\r\n getData() {\r\n const timeZoneMapper = DependencyResolver.get('component/timezonemapper/index');\r\n\r\n const params = this.model.toJSON();\r\n\r\n // TODO: (youngim) somehow model.set does not work with extra properties\r\n // ['Name', 'TimeZone', 'CampaignType', 'LanguageCode']);\r\n // This should be set with the model.\r\n params.TimeZone = timeZoneMapper.getAccountTimeZone();\r\n params.CampaignType = 'Audience';\r\n params.Languages = ['All'];\r\n params.CampaignSubType = this.isVideo ? 'AudienceVideoAds' : undefined;\r\n\r\n if (this.isEnabledForVerifiedImpressionTrackingAtCampaignLevel && this.IASTrackingInfo) {\r\n // eslint-disable-next-line max-len\r\n params.VerifiedTrackingData = this.IASTrackingInfo;\r\n }\r\n\r\n if (this.budget) {\r\n params.Budget = this.budget.getValues(params);\r\n }\r\n\r\n if (!this.viewContext.currentCampaign) {\r\n params.AdScheduleUseSearcherTimeZone = false;\r\n }\r\n\r\n return params;\r\n }\r\n\r\n /**\r\n * Save the campaign with the given setting.\r\n *\r\n * @returns {Promise} - returns promise of returning boolean value indicating\r\n * if the save process is succesful or not.\r\n */\r\n save() {\r\n if (!this.validate()) {\r\n return Promise.resolve(false);\r\n }\r\n\r\n const jsdata = DependencyResolver.get('component/js-data-campaign/index');\r\n const params = this.getData();\r\n\r\n let createOrUpdateTask;\r\n\r\n if (this.viewContext.currentCampaign) {\r\n params.Id = this.viewContext.currentCampaign.Id;\r\n createOrUpdateTask =\r\n jsdata.Campaign.update(params.Id, params, { adapter: 'bulk', cacheResponse: false });\r\n } else {\r\n if (this.isAdImpressions) {\r\n params.BiddingScheme = {\r\n Type: 'ManualCpm',\r\n };\r\n } else if (!this.isVideo && this.isEnabledDeprecateManualCpcForAudienceCampaign) {\r\n // when isEnabledDeprecateManualCpcForAudienceCampaign is enabled, we create the campaign with BiddingScheme eCpc\r\n // because we want to deprecate mCpc for audience campaign\r\n // the default BiddingScheme will be eCpc for audience campaign except for video/brandawareness audience campaigns\r\n // if UI pass mCpc to MT, MT will convert it into eCpc\r\n params.BiddingScheme = {\r\n Type: 'EnhancedCpc',\r\n };\r\n }\r\n createOrUpdateTask =\r\n jsdata.Campaign.create(params, { adapter: 'bulk', cacheResponse: false });\r\n }\r\n\r\n this.errorsView.removeErrors();\r\n\r\n return createOrUpdateTask.then((data) => {\r\n if (_.isFinite(data.Id)) {\r\n this.activityLogger.signal(`is simplify piloting account: ${this.permissions.IsNewStaticAudienceCampaignCreationEnabled} campaign Id: ${data.Id}, campaign Type: ${data.CampaignType}, campaign SubType: ${data.CampaignSubType}`, 'default campaign creation');\r\n // Market team ask ui to trigger an event when customer create a new audience ads campaign\r\n $(document).trigger('analytic_campaign_created', data);\r\n // for audience campaign, we need to get the bidding scheme information\r\n if (data.CampaignType === 'Audience') {\r\n return jsdata.Campaign.find(data.Id, {\r\n queryParameters: {\r\n query: {\r\n // Must select Id for jsdata cache\r\n $select: 'Id, BiddingScheme, CampaignType, CampaignSubType, CampaignSettings',\r\n },\r\n },\r\n bypassCache: false,\r\n cacheResponse: true,\r\n }).then((rawResponse) => {\r\n const campaign = {\r\n ...data,\r\n ...rawResponse,\r\n };\r\n this.viewContext.currentCampaign = campaign;\r\n return true;\r\n });\r\n }\r\n this.viewContext.currentCampaign = data;\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }).catch((response) => {\r\n if (response && response.entity) {\r\n const hasErrors = response && !_.isUndefined(response.errors);\r\n\r\n if (hasErrors) {\r\n const campaignErrors = _.partition(\r\n response.errors,\r\n error => error.Type === 'Campaign Error'\r\n )[0];\r\n\r\n if (campaignErrors.length) {\r\n this.errorsView.setErrors(this.i18nErrors.getBulkApiErrors(campaignErrors));\r\n\r\n this.activityLogger.trace(getBulkErrorsLogMessage(campaignErrors));\r\n\r\n _.each(campaignErrors, (error) => {\r\n this.activityLogger.signal(error.Error, 'audience campaign creation api error');\r\n });\r\n }\r\n } else {\r\n // Unexpected case. Log Error.\r\n this.activityLogger.error(JSON.stringify(response));\r\n }\r\n } else {\r\n // Ajax errors\r\n this.errorsView.setErrors(this.i18nErrors.getODataErrors(response.errors));\r\n _.each(response.errors, (error) => {\r\n this.activityLogger.signal(error.Error, 'audience campaign creation api error');\r\n });\r\n }\r\n\r\n return false;\r\n }).finally(withUiBlock(this.wizardElement, this.i18n.getString('Loading')));\r\n }\r\n\r\n /**\r\n * Save the campaign and then exit the wizard.\r\n *\r\n * @fires CrudAudienceCampaign#saveAndExit\r\n * @returns {Promise} - returns promise of returning boolean value indicating\r\n * if the save process is succesful or not.\r\n */\r\n saveAndExit() {\r\n return this.save().then((isSuccessful) => {\r\n this.activityLogger.signal(`save and exit: ${isSuccessful}`, 'crud audience campaign');\r\n if (isSuccessful) {\r\n this.trigger('saveAndExit');\r\n }\r\n });\r\n }\r\n\r\n validate() {\r\n if (!this.nameInput.getState().isValid) {\r\n this.nameInput.setState({ showError: true });\r\n\r\n return false;\r\n }\r\n\r\n if (this.impressionTrackingUrlOptions && this.IASTrackingInfo === 'error') {\r\n this.impressionTrackingUrlOptions.setErrors([this.i18n.getString('IASImpressionTracking_Invalid')], 'VerifiedImpressionTracking_IAS');\r\n return false;\r\n }\r\n\r\n return this.budget.validate();\r\n }\r\n\r\n // private function\r\n // it initailizes the name input view, errors view and budget view\r\n initControls() {\r\n this.nameInput = new InputControl({\r\n entity: this.model,\r\n field: 'Name',\r\n required: true,\r\n ariaLabelledby: 'campaignNameLabel',\r\n });\r\n\r\n this.nameInput.on('input-changed', () => {\r\n this.activityLogger.signal('campaign name change', 'crud audience campaign');\r\n });\r\n\r\n const isAudienceCampaignCollapseTargetSelectionEnabled =\r\n _.result(this.permissions, 'IsAudienceCampaignCollapseTargetSelectionEnabled', false);\r\n\r\n if (isAudienceCampaignCollapseTargetSelectionEnabled && _.isEmpty(this.model.get('Name'))) {\r\n this.nameInput.setState({ value: generateNameSuggestionSuffix('Campaign') });\r\n }\r\n\r\n this.nameInputRemainingCharsHint = new RemainingCharsHint({\r\n i18n: this.i18n,\r\n model: this.model,\r\n field: 'Name',\r\n });\r\n\r\n if (this.isEnabledForVerifiedImpressionTrackingAtCampaignLevel) {\r\n this.impressionTrackingUrlOptions = new ImpressionTrackingUrlOptions({\r\n i18n: this.i18n,\r\n initialIASImpressionTrackingUrlValue: '',\r\n maxImpressionTrackingUrlsCount: ImpressionTrackingUrlsMaxCount,\r\n isImpressionTrackingUrlSectionVisible: false,\r\n isIASSectionVisible: true,\r\n isEnabledForVerifiedImpressionTrackingAtCampaignLevel:\r\n this.isEnabledForVerifiedImpressionTrackingAtCampaignLevel,\r\n });\r\n\r\n this.impressionTrackingUrlOptions.on('IASInputChange', (value) => {\r\n if ((_.isString(value) && value.length === 0)) {\r\n // update scenario\r\n if (this.viewContext.currentCampaign &&\r\n this.viewContext.currentCampaign.VerifiedTrackingData) {\r\n this.IASTrackingInfo = 'delete_value';\r\n } else {\r\n // create scenario\r\n this.IASTrackingInfo = undefined;\r\n }\r\n } else {\r\n this.IASTrackingInfo = value;\r\n }\r\n });\r\n }\r\n\r\n this.errorsView = new AudienceCampaignErrorsView();\r\n\r\n this.initBudgetView();\r\n }\r\n\r\n // private function\r\n // it initailizes the instance of the budget view.\r\n initBudgetView() {\r\n const SharedBudgetView = DependencyResolver.get('campaignui/feature/shared-budget/view/shared-budget-switch-editor');\r\n const Budget = DependencyResolver.get('campaignui/feature/budget/view/budget');\r\n\r\n const budgetFactory = SharedBudgetView.newFactory(Budget);\r\n\r\n this.budget = budgetFactory({\r\n model: _.isObject(this.model) ? this.model.budget : {},\r\n accountCurrencyCode: this.viewContext.accountCurrencyCode,\r\n activityLogger: this.activityLogger,\r\n });\r\n }\r\n\r\n copyFromCampaign(source) {\r\n const campaign = _.first(source);\r\n this.activityLogger.signal(`Copy setting from campaign: ${campaign.Name} ${campaign.Id}`, 'Audience Copy Campaign Setting');\r\n\r\n // copy budget setting\r\n const budget = _.result(campaign, 'Budget');\r\n if (_.isObject(budget) && this.budget &&\r\n (budget.Type === 'DailyStandard' || budget.Type === 'DailyAccelerated' || budget.Id > 0)\r\n ) {\r\n this.budget.update(budget);\r\n }\r\n\r\n // video audience campaign\r\n if (_.result(this.options, 'isVideo')) {\r\n // copy video impression tracking url\r\n if (this.isEnabledForVerifiedImpressionTrackingAtCampaignLevel) {\r\n const IASImpressionTrackingUrlValue = _.chain(campaign).result('CampaignSettings').first().result('VerifiedTrackingSettings')\r\n .first()\r\n .result('VerifiedTrackingData')\r\n .first()\r\n .result('Data')\r\n .result('Values')\r\n .value();\r\n\r\n if (_.isArray(IASImpressionTrackingUrlValue) && !_.isEmpty(IASImpressionTrackingUrlValue)) {\r\n this.impressionTrackingUrlOptions\r\n .setIASImpressionTrackingUrlValue(IASImpressionTrackingUrlValue);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport { isPersonalizedOfferAvailable, logCampaignPersonalizedOffers } from '@bingads-webui-campaign/personalized-offer-shared';\r\nimport { CashbackSettings } from '@bingads-webui-campaign/cashback-settings';\r\nimport { BackboneSchema as backboneSchema } from '@bingads-webui/backbone-schema';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport { getBulkErrorsLogMessage, getProductData, CampaignSubTypes } from '@bingads-webui-campaign/audience-campaign-shared';\r\nimport { withUiBlock } from '@bingads-webui/uiblocker';\r\nimport { queryify } from '@bingads-webui/url-util';\r\nimport { CrudAudienceCampaign } from './view';\r\n\r\n/**\r\n * CrudAudienceShoppingCampaign class that extends {CrudAudienceCampaign} class\r\n * The class defines the section of the setting Campaign\r\n *\r\n * @class CrudAudienceShoppingCampaign\r\n * @extends {CrudAudienceCampaign}\r\n */\r\nexport class CrudAudienceShoppingCampaign extends CrudAudienceCampaign {\r\n /**\r\n * Initializes the {CrudAudienceShoppingCampaign} class.\r\n *\r\n * @param {Object} options - options for initializing the class.\r\n * @param {Object} options.viewContext = viewContext for the View.\r\n * @returns {undefined}\r\n */\r\n initialize(options) {\r\n if (options && options.perfMarker) {\r\n options.perfMarker.willInit();\r\n }\r\n this.renderMarker;\r\n this.viewContext = options.viewContext;\r\n this.wizardElement = options.wizardElement;\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.productData = options.data;\r\n this.feedData = options.feedData;\r\n this.isNextButtonEnabled = (\r\n !(this.viewContext.isReadOnlyUser || this.viewContext.CurrentAccountInActive)\r\n );\r\n\r\n const config = DependencyResolver.get('component/config/index');\r\n this.permissions = config.get('Permissions') || {};\r\n this.isEnabledDynamicFeedCampaign = this.permissions.IsEnabledForDynamicFeedCampaign;\r\n this.isEnhancedPAFilterP2Enabled = Boolean(_.result(config.get('Permissions'), 'IsEnhancedPAFilterP2Enabled'));\r\n\r\n const schema = DependencyResolver.get('$/schema!dynamicdb/ShoppingCampaign');\r\n const SchemaModel = backboneSchema(\r\n schema,\r\n this.i18n,\r\n ['Name', 'CampaignType', 'TimeZone', 'Languages', 'ProviderId']\r\n );\r\n\r\n this.model = new SchemaModel();\r\n this.logScenario = options.logScenario;\r\n this.activityLogger = this.logScenario.createCampaignSettings.create();\r\n this.perfMarker = options.perfMarker;\r\n\r\n super.initControls();\r\n this.initShoppingSettingsView();\r\n\r\n this.shouldShowCashbackSettings = options.isForVNext && isPersonalizedOfferAvailable(\r\n this.permissions,\r\n options.audienceCampaignType,\r\n options.audienceCampaignSubType\r\n );\r\n this.options = options;\r\n\r\n this.isCopyCampaignSettingsAudienceCampaignEnabled = _.result(this.permissions, 'IsCopyCampaignSettingsAudienceCampaignEnabled', false);\r\n if (this.isCopyCampaignSettingsAudienceCampaignEnabled) {\r\n const CopyCampaignSettings = DependencyResolver.get('crud-campaign/view/copy-campaign-settings');\r\n this.copySettings = new CopyCampaignSettings({\r\n scenario: 'copy-audience-campaign-settings',\r\n activityLogger: this.activityLogger,\r\n });\r\n this.copySettings.on('copy.campaign', this.copyFromCampaign.bind(this));\r\n }\r\n\r\n this.initCashbackSettingsView();\r\n }\r\n\r\n initCashbackSettingsView() {\r\n if (this.shouldShowCashbackSettings && this.options.deps) {\r\n this.cashbackSettingsView = new CashbackSettings({\r\n deps: { ...this.options.deps, i18n: this.i18n },\r\n isCreationScenario: true,\r\n });\r\n\r\n this.shoppingSettingsView.on('feedChanged', (feedId) => {\r\n if (feedId) {\r\n this.cashbackSettingsView.viewModel.isEnablePersonalizedOffersDisabled(true);\r\n this.cashbackSettingsView.viewModel.isEnablePersonalizedOffersChecked(false);\r\n } else {\r\n this.cashbackSettingsView.viewModel.isEnablePersonalizedOffersDisabled(false);\r\n }\r\n });\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 if (this.options && this.options.perfMarker) {\r\n this.renderMarker = this.perfMarker.createChild('RenderShoppingCampaignCrud');\r\n this.renderMarker.willInit();\r\n }\r\n this.perfMarker.willRender();\r\n\r\n super.render();\r\n\r\n this.$('.shopping-settings-container').append(this.shoppingSettingsView.render().$el);\r\n\r\n if (this.cashbackSettingsView) {\r\n this.$('.cashback-settings-container').empty().append(this.cashbackSettingsView.render().$el);\r\n }\r\n return this;\r\n }\r\n\r\n validate() {\r\n const isCashbackSettingsValid = !this.cashbackSettingsView ||\r\n this.cashbackSettingsView.validate();\r\n\r\n return this.shoppingSettingsView.validate() && super.validate() && isCashbackSettingsValid;\r\n }\r\n\r\n /**\r\n * Get the data that is used for the parameter for saving.\r\n *\r\n * @returns {Object} - object representing the data for the campaign to be saved.\r\n */\r\n getData() {\r\n const params = super.getData();\r\n\r\n if (this.isEnabledDynamicFeedCampaign) {\r\n params.FeedId = this.shoppingSettingsView.viewModel.FeedId();\r\n if (!params.FeedId) {\r\n params.ProviderId = this.shoppingSettingsView.viewModel.ProviderId();\r\n }\r\n } else {\r\n params.ProviderId = this.shoppingSettingsView.viewModel.ProviderId();\r\n }\r\n\r\n params.CampaignSubType = params.FeedId\r\n ? CampaignSubTypes.AudienceDynamicFeedBased\r\n : CampaignSubTypes.AudienceFeedBased;\r\n\r\n if (this.shoppingSettingsView.hasFilteredProducts()) {\r\n params.Priority = 'Low';\r\n params.LocalInventoryAdsEnabled = false;\r\n\r\n params.CampaignProductScope = _.defaults(this.shoppingSettingsView.getProductScope(), {\r\n CampaignName: params.Name,\r\n });\r\n\r\n if (this.productData.CampaignCriterionsData && this.productData.CampaignCriterionsData.Id) {\r\n params.CampaignProductScope.Id = this.productData.CampaignCriterionsData.Id;\r\n }\r\n }\r\n\r\n if (!this.viewContext.currentCampaign) {\r\n params.AdScheduleUseSearcherTimeZone = false;\r\n }\r\n\r\n if (this.cashbackSettingsView) {\r\n _.extend(params, this.cashbackSettingsView.getValues());\r\n }\r\n\r\n return params;\r\n }\r\n\r\n /**\r\n * Save the campaign with the given setting.\r\n *\r\n * @returns {Promise} - returns promise with a return boolean value indicating\r\n * if the save is succesful or not.\r\n */\r\n save() {\r\n if (this.shoppingSettingsView.hasFilteredProducts() &&\r\n this.shoppingSettingsView.filterDataComesFrom === 'NewComponent') {\r\n this.shoppingSettingsView.clickApplyButton();\r\n }\r\n\r\n if (!this.validate()) {\r\n return Promise.resolve(false);\r\n }\r\n\r\n const params = this.getData();\r\n\r\n let createOrUpdateTask;\r\n\r\n const jsdata = DependencyResolver.get('component/js-data-campaign/index');\r\n\r\n if (this.viewContext.currentCampaign) {\r\n params.Id = this.viewContext.currentCampaign.Id;\r\n createOrUpdateTask =\r\n jsdata.ShoppingCampaign.update(params.Id, params, { adapter: 'bulk', cacheResponse: false });\r\n } else {\r\n // when isEnabledDeprecateManualCpcForAudienceCampaign is enabled, we create the campaign with BiddingScheme eCpc\r\n // because we want to deprecate mCpc for audience campaign\r\n // the default BiddingScheme will be eCpc for audience campaign except for video/brandawareness audience campaigns\r\n // if UI pass mCpc to MT, MT will convert it into eCpc\r\n if (params.CampaignType === 'Audience' && _.result(this.permissions, 'IsEnabledDeprecateManualCpcForAudienceCampaign', false)) {\r\n params.BiddingScheme = {\r\n Type: 'EnhancedCpc',\r\n };\r\n }\r\n createOrUpdateTask =\r\n jsdata.ShoppingCampaign.create(params, { adapter: 'bulk', cacheResponse: false });\r\n }\r\n\r\n this.errorsView.removeErrors();\r\n\r\n return createOrUpdateTask.then(data => getProductData({\r\n campaignId: data.Id,\r\n getCampaignCriterionsOnly: true,\r\n }).then((productData) => {\r\n if (productData && this.productData) {\r\n this.productData.CampaignCriterionsData = productData.CampaignCriterionsData;\r\n }\r\n\r\n if (_.isFinite(data.Id)) {\r\n const campaign = data;\r\n campaign.CampaignCashback = {\r\n MonthlyBudget: campaign.CashbackMonthlyBudget,\r\n Percent: campaign.CashbackPercent,\r\n Scope: campaign.CashbackScope,\r\n CouponsEnabled: campaign.CouponsEnabled,\r\n PersonalizedOffersEnabled: campaign.PersonalizedOffersEnabled,\r\n };\r\n\r\n logCampaignPersonalizedOffers(\r\n this.cashbackSettingsView,\r\n this.activityLogger.signal.bind(this.activityLogger),\r\n data\r\n );\r\n\r\n campaign.CampaignSettings = [{\r\n ProviderId: campaign.ProviderId,\r\n FeedId: campaign.FeedId,\r\n }];\r\n\r\n this.viewContext.currentCampaign = campaign;\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }))\r\n .catch((response) => {\r\n if (response && response.entity) {\r\n const hasErrors = response && !_.isUndefined(response.errors);\r\n\r\n if (hasErrors) {\r\n if (response.errors.length) {\r\n this.errorsView.setErrors(this.i18nErrors.getBulkApiErrors(response.errors));\r\n\r\n this.activityLogger.trace(getBulkErrorsLogMessage(response.errors));\r\n _.each(response.errors, (error) => {\r\n this.activityLogger.signal(error.Error, 'audience campaign creation api error');\r\n });\r\n }\r\n } else {\r\n // Unexpected case. Log Error.\r\n this.activityLogger.error(JSON.stringify(response));\r\n }\r\n } else {\r\n // Ajax error [400] - RowCountExceeded\r\n this.errorsView.setErrors(this.i18nErrors.getODataErrors(response.errors));\r\n _.each(response.errors, (error) => {\r\n this.activityLogger.signal(error.Error, 'audience campaign creation api error');\r\n });\r\n }\r\n\r\n return false;\r\n })\r\n .finally(withUiBlock(this.wizardElement, this.i18n.getString('Loading')));\r\n }\r\n\r\n willShow() {\r\n super.willShow();\r\n if (this.viewContext.currentCampaign) {\r\n if (this.isEnabledDynamicFeedCampaign) {\r\n this.shoppingSettingsView.renderCatagrizedOptionsList({\r\n disabled: true,\r\n });\r\n } else {\r\n this.shoppingSettingsView.disableStoreSelection();\r\n }\r\n }\r\n this.perfMarker.done();\r\n // As we show the first section of the wizard, we consider the whole wizard done rendered.\r\n\r\n if (this.perfMarker.parentMarker) {\r\n this.perfMarker.parentMarker.done();\r\n }\r\n if (this.options && this.options.perfMarker && this.renderMarker) {\r\n this.renderMarker.done();\r\n }\r\n }\r\n\r\n /**\r\n * Initialize shopping settings view\r\n *\r\n * @private\r\n * @returns {undefined}\r\n */\r\n initShoppingSettingsView() {\r\n const ShoppingSettingsView = DependencyResolver.get('campaignui/feature/shopping-campaign/view/campaign-creation/shopping-settings');\r\n\r\n this.shoppingSettingsView = new ShoppingSettingsView({\r\n data: this.productData,\r\n feedData: this.feedData,\r\n model: this.setting,\r\n campaignType: 'Audience',\r\n campaignSubType: 'AudienceFeedBased',\r\n activityLogger: this.activityLogger,\r\n });\r\n }\r\n\r\n copyFromCampaign(source) {\r\n const noExistingCampaign = !this.viewContext.currentCampaign;\r\n super.copyFromCampaign(source);\r\n const campaign = _.first(source);\r\n this.activityLogger.signal(`Copy setting from campaign: ${campaign.Name} ${campaign.Id}`, 'Audience Copy Campaign Setting');\r\n\r\n // copy Personalized promotions(cashback setting)\r\n const cashBackSettings = _.result(campaign, 'CampaignCashback');\r\n if (cashBackSettings) {\r\n this.cashbackSettingsView.setValues({\r\n PersonalizedOffersEnabled: cashBackSettings.PersonalizedOffersEnabled,\r\n CashbackMonthlyBudget: cashBackSettings.MonthlyBudget,\r\n CashbackPercent: cashBackSettings.Percent,\r\n CashbackScope: cashBackSettings.Scope,\r\n CouponsEnabled: cashBackSettings.CouponsEnabled,\r\n });\r\n }\r\n\r\n const copyWhiteList = [\r\n 'AudienceDynamicFeedBased',\r\n 'AudienceFeedBased',\r\n ];\r\n\r\n if (_.contains(copyWhiteList, campaign.CampaignSubType) && noExistingCampaign) {\r\n let feedId;\r\n const getTreeInfo = this.isEnhancedPAFilterP2Enabled && (campaign.CampaignSubType === 'AudienceFeedBased');\r\n if (campaign.CampaignSubType === 'AudienceDynamicFeedBased') {\r\n feedId = _.result(campaign.CampaignSettings[0], 'FeedId');\r\n } else {\r\n feedId = _.result(campaign.CampaignSettings[0], 'ProviderId');\r\n }\r\n this.shoppingSettingsView.refreshCategorizedOptionsList(feedId);\r\n this.getProductData(_.result(campaign, 'Id'), _.first(campaign.CampaignSettings[0]), getTreeInfo)\r\n .then((productData) => {\r\n this.shoppingSettingsView.refreshData(campaign, productData);\r\n })\r\n .finally(withUiBlock());\r\n } else if (noExistingCampaign) {\r\n this.shoppingSettingsView.viewModel.selectAllProducts(true);\r\n }\r\n }\r\n\r\n // todo: private\\campaign-legacy\\packages\\shopping-campaign\\view\\campaign-creation\\index.js\r\n // Move getProductData's code there and this code to common area after permissions modifications.\r\n getProductData(campaignId, setting, getTreeInfo) {\r\n const jsdata = DependencyResolver.get('component/js-data-campaign/index');\r\n const state = DependencyResolver.get('component/state/index');\r\n\r\n let url = queryify('/Campaign/NewCampaign/GetProductScope', {\r\n aid: state.get('account_id'),\r\n cid: state.get('customer_id'),\r\n uid: state.get('user_id'),\r\n });\r\n\r\n const urlQueryStringObject = {\r\n campaignId,\r\n salesCountry: _.result(setting, 'SalesCountry'),\r\n };\r\n\r\n url = queryify(url, urlQueryStringObject);\r\n\r\n if (this.shouldShowPlaceholderStoreIfExists) {\r\n url = `${url}&storeTypes=placeholder`;\r\n }\r\n\r\n if (getTreeInfo) {\r\n url = queryify(url, {\r\n getCategoryFullData: true,\r\n getProductTypeFullData: true,\r\n });\r\n }\r\n\r\n const params = {\r\n url,\r\n adapter: 'legacy',\r\n bypassCache: true,\r\n cacheResponse: false,\r\n };\r\n\r\n return jsdata.Product.find('MetaData', params)\r\n // Ui blocker is added by caller function\r\n .catch(() => {\r\n this.viewModel.errors.add();\r\n });\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { DeterministicView } from '@bingads-webui/deterministic-view';\r\nimport { CampaignsDatePicker } from '@bingads-webui-campaign/campaigns-date-picker';\r\nimport { customizedInlineEditTemplate, convertMachineDateToUTCDate } from '@bingads-webui-campaign/summary-grid-helper';\r\n\r\nexport class DateInlineEditView extends DeterministicView {\r\n initialize({\r\n minDate, maxDate, selectedDate, allowNoDate, i18n, fieldName,\r\n }) {\r\n this.i18n = i18n;\r\n this.fieldName = fieldName;\r\n this.datePicker = new CampaignsDatePicker({\r\n minDate,\r\n maxDate,\r\n selectedDate,\r\n allowNoDate,\r\n noDateLabel: i18n.getString('noEndDate'),\r\n dateLabel: i18n.getString('EndBy'),\r\n });\r\n this.setChild('subEditView', this.datePicker);\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 'click input[type=radio]': 'removeError',\r\n };\r\n }\r\n\r\n get template() {\r\n return ({ model }) => customizedInlineEditTemplate({ model, i18n: this.i18n });\r\n }\r\n\r\n save() {\r\n const date = this.datePicker.getSelectedDate();\r\n const isSelectCustomEndDate = this.$el.find('.date input[type=radio]').is(':checked');\r\n\r\n if (isSelectCustomEndDate && _.isNull(date)) {\r\n this.setErrors({\r\n EndDate: this.i18n.getString('Campaign_Validation_EndDateInvalid'),\r\n StartDate: this.i18n.getString('Campaign_Validation_StartDateInvalid'),\r\n });\r\n return;\r\n }\r\n\r\n this.trigger('save', {\r\n newSelectedDate: date ? convertMachineDateToUTCDate(date, this.i18n) : null,\r\n });\r\n }\r\n\r\n cancel() {\r\n this.trigger('close');\r\n }\r\n\r\n removeError() {\r\n this.setErrors({});\r\n }\r\n\r\n setErrors(errorMapping) {\r\n const errorContent = errorMapping && errorMapping[this.fieldName] ?\r\n errorMapping[this.fieldName] :\r\n '';\r\n if (errorContent.length > 0) {\r\n document.querySelectorAll('.grid-error-list').forEach(el => el.classList.remove('hide'));\r\n } else {\r\n document.querySelectorAll('.grid-error-list').forEach(el => el.classList.add('hide'));\r\n }\r\n // eslint-disable-next-line no-param-reassign\r\n document.querySelectorAll('.grid-error-message').forEach((el) => { el.innerHTML = errorContent; });\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { GridCustomizedPopupEditor } from '@bingads-webui-campaign/grid-customized-popup-editor';\r\nimport { DateInlineEditView } from './date-inline-edit-view';\r\n\r\nexport function DateInlineEditableColumnPrompt({\r\n position,\r\n isForVNext,\r\n item,\r\n allowNoDate,\r\n selectedDate,\r\n minDate,\r\n maxDate,\r\n view,\r\n i18n,\r\n fieldName,\r\n customClass = 'grid-group-other',\r\n updater = null,\r\n}) {\r\n const dateEditorView = new DateInlineEditView({\r\n minDate,\r\n maxDate,\r\n allowNoDate,\r\n selectedDate,\r\n i18n,\r\n fieldName,\r\n });\r\n\r\n dateEditorView.on('save', ({ newSelectedDate }) => {\r\n const updated = _.extendOwn({}, item);\r\n\r\n updated[fieldName] = newSelectedDate ?\r\n newSelectedDate.toISOString() :\r\n newSelectedDate;\r\n\r\n if (view && view.instrumentation) {\r\n const sn = view.instrumentation.datepicker;\r\n const adsActivity = sn && sn.create().inlineDateChange.create();\r\n if (adsActivity && adsActivity.signal) {\r\n adsActivity.signal(`${fieldName} date changed: ${newSelectedDate}`);\r\n }\r\n }\r\n\r\n return updater({\r\n view,\r\n i18n,\r\n fieldName,\r\n updated,\r\n editorView: dateEditorView,\r\n editorViewCallbackAfterUpdate: () => {\r\n dateEditorView.trigger('close');\r\n },\r\n isDateType: true,\r\n });\r\n });\r\n\r\n const editorView = new GridCustomizedPopupEditor({\r\n editorView: dateEditorView.render(),\r\n cellPosition: position,\r\n renderBelow: false,\r\n className: `adgroup-grid-inline-edit-popup grid-popupeditor ${customClass}`,\r\n parentContainerSelector: isForVNext ? '.grid-and-disclaim-container' : null,\r\n });\r\n\r\n return editorView.render();\r\n}\r\n","import _ from 'underscore';\r\nimport { RANGES, getDateRanges } from '@bingads-webui/date-ranges';\r\n\r\nconst dateRangeMapping = {\r\n Yesterday: RANGES.YESTERDAY,\r\n LastSevenDays: RANGES.LAST_SEVEN_DAYS,\r\n Today: RANGES.TODAY,\r\n LastThirtyDays: RANGES.LAST_THIRTY_DAYS,\r\n LastFourteenDays: RANGES.LAST_FOURTEEN_DAYS,\r\n ThisMonth: RANGES.THIS_MONTH,\r\n LastMonth: RANGES.LAST_MONTH,\r\n LastThreeMonths: RANGES.LAST_THREE_MONTHS,\r\n LastSixMonths: RANGES.LAST_SIX_MONTHS,\r\n ThisYear: RANGES.THIS_YEAR,\r\n LastYear: RANGES.LAST_YEAR,\r\n AllTime: RANGES.ALL_TIME,\r\n ThisWeekFromSun: RANGES.THIS_WEEK_SUNDAY,\r\n ThisWeekFromMon: RANGES.THIS_WEEK_MONDAY,\r\n LastWeekStartingSun: RANGES.LAST_WEEK_SUNDAY,\r\n LastWeekStartingMon: RANGES.LAST_WEEK_MONDAY,\r\n LastBusinessWeek: null,\r\n LastFourWeeksStartingSun: null,\r\n};\r\n\r\nexport function getStateDateRangePreset(DateRangePreset) {\r\n return DateRangePreset ? dateRangeMapping[DateRangePreset] : RANGES.CUSTOM;\r\n}\r\n\r\nconst getRanges = _.once(() =>\r\n getDateRanges({\r\n today: new Date(),\r\n i18n: {\r\n getString: _.identity,\r\n },\r\n }));\r\n\r\nexport function convertDateRangePresetToRangeId(DateRangePreset) {\r\n const ranges = getRanges();\r\n const rangeKey = getStateDateRangePreset(DateRangePreset);\r\n\r\n return _.result(ranges[rangeKey], 'grain');\r\n}\r\n\r\n\r\nexport const grains = {\r\n Yesterday: 1,\r\n LastSevenDays: 2,\r\n Today: 3,\r\n Custom: 4,\r\n LastThirtyDays: 5,\r\n LastFourteenDays: 6,\r\n ThisWeekFromSun: 7,\r\n ThisWeekFromMon: 8,\r\n LastWeekStartingSun: 9,\r\n ThisMonth: 10,\r\n LastMonth: 11,\r\n LastThreeMonths: 12,\r\n LastSixMonths: 13,\r\n LastWeekStartingMon: 14,\r\n LastBusinessWeek: 15,\r\n ThisYear: 20,\r\n LastYear: 21,\r\n AllTime: 22,\r\n};\r\n\r\nexport function getSelectionDateRangePreset(statePreset, grain) {\r\n // For LastSevenDays, it's last7Days in CampaignUI, but lastSevenDays in HotelCenter\r\n // For LastFourteenDays, it's last14Days in CampaignUI, but lastFourteenDays in HotelCenter\r\n // The magic grain is same in both pages\r\n let preset;\r\n\r\n if (!_.isUndefined(statePreset)) {\r\n preset = _.findKey(dateRangeMapping, value => value === statePreset);\r\n }\r\n if (!preset) {\r\n preset = _.findKey(grains, value => value === grain);\r\n }\r\n return preset;\r\n}\r\n","import _ from 'underscore';\r\n\r\nconst options = {\r\n raw: 'yyyy-MM-dd',\r\n timeZone: null,\r\n};\r\n\r\nexport function getSelectionDateFormatter(i18n) {\r\n return i18n.dateFormatter(options);\r\n}\r\n\r\nexport function getSelectionDateParser(i18n) {\r\n const parser = i18n.dateParser(options);\r\n\r\n return date => (_.isString(date) ? parser(date.substr(0, 10)) : undefined);\r\n}\r\n","import { getDateRanges } from '@bingads-webui/date-ranges';\r\nimport { getStateDateRangePreset } from './date-range-preset';\r\nimport { getSelectionDateParser } from './selection-date';\r\n\r\nexport default function getStateDateRange({\r\n today,\r\n i18n,\r\n DateRange,\r\n}) {\r\n const parser = getSelectionDateParser(i18n);\r\n\r\n return getDateRanges({\r\n today,\r\n i18n,\r\n customStart: parser(DateRange.StartDate),\r\n customEnd: parser(DateRange.EndDate),\r\n })[getStateDateRangePreset(DateRange.DateRangePreset)];\r\n}\r\n","import _ from 'underscore';\r\nimport { COMPARISON_RANGES } from '@bingads-webui/date-ranges';\r\n\r\nconst comparisonOptionMapping = {\r\n PreviousPeriod: COMPARISON_RANGES.PREVIOUS_PERIOD,\r\n SamePeriodLastYear: COMPARISON_RANGES.SAME_PERIOD_LAST_YEAR,\r\n LastMonth: COMPARISON_RANGES.LAST_MONTH, // new ui has this\r\n};\r\n\r\nexport function getStateComparisonDateRangeOption(ComparisonDateRangeOption) {\r\n return ComparisonDateRangeOption ?\r\n comparisonOptionMapping[ComparisonDateRangeOption] :\r\n COMPARISON_RANGES.CUSTOM;\r\n}\r\n\r\nexport function getSelectionComparisonDateRangeOption(stateOption) {\r\n return _.findKey(comparisonOptionMapping, value => value === stateOption);\r\n}\r\n","import {\r\n getComparedDateRanges\r\n} from '@bingads-webui/date-ranges';\r\nimport { getStateComparisonDateRangeOption } from './comparison-date-range-option';\r\nimport { getSelectionDateParser } from './selection-date';\r\n\r\nexport default function getStateComparedDateRange({\r\n today,\r\n i18n,\r\n primaryRange,\r\n ComparisonDateRange,\r\n}) {\r\n const parser = getSelectionDateParser(i18n);\r\n\r\n return ComparisonDateRange ? getComparedDateRanges({\r\n today,\r\n i18n,\r\n primaryRange,\r\n comparedCustomStart: parser(ComparisonDateRange.StartDate),\r\n comparedCustomEnd: parser(ComparisonDateRange.EndDate),\r\n })[getStateComparisonDateRangeOption(ComparisonDateRange.ComparisonDateRangeOption)] : null;\r\n}\r\n","import { withoutTime } from '@bingads-webui-universal/primitive-utilities';\r\nimport _ from 'underscore';\r\nimport getStateDateRange from './util/get-state-date-range';\r\nimport getStateComparedDateRange from './util/get-state-compared-date-range';\r\n\r\nexport default function convertSelectionDateRangeToState({\r\n Selection: {\r\n DateRange,\r\n ComparisonDateRange,\r\n },\r\n i18n,\r\n}) {\r\n const primaryRange = getStateDateRange({\r\n today: withoutTime(new Date()),\r\n i18n,\r\n DateRange,\r\n });\r\n\r\n return _.extend({}, primaryRange, {\r\n compared: getStateComparedDateRange({\r\n today: withoutTime(new Date()),\r\n i18n,\r\n primaryRange,\r\n ComparisonDateRange,\r\n }),\r\n });\r\n}\r\n","import { RANGES, COMPARISON_RANGES } from '@bingads-webui/date-ranges';\r\nimport { getSelectionDateRangePreset, grains } from './util/date-range-preset';\r\nimport { getSelectionComparisonDateRangeOption } from './util/comparison-date-range-option';\r\nimport { getSelectionDateFormatter } from './util/selection-date';\r\n\r\nfunction isRangeNotPreset($daterange) {\r\n const {\r\n grain,\r\n RangeIndex,\r\n } = $daterange;\r\n // Only if we have this RangeIndex, we can tell if it is a preset or not.\r\n if (RangeIndex == null) {\r\n return false;\r\n }\r\n switch (grain) {\r\n case grains.Today:\r\n case grains.ThisWeekFromSun:\r\n case grains.ThisWeekFromMon:\r\n case grains.LastSevenDays:\r\n case grains.LastFourteenDays:\r\n case grains.ThisMonth:\r\n case grains.LastThirtyDays:\r\n case grains.AllTime:\r\n if (RangeIndex === 0) {\r\n return false; // is preset\r\n }\r\n return true;\r\n case grains.Yesterday:\r\n case grains.LastWeekStartingSun:\r\n case grains.LastWeekStartingMon:\r\n case grains.LastMonth:\r\n if (RangeIndex === 1) {\r\n return false; // is preset\r\n }\r\n return true;\r\n default:\r\n return false;\r\n }\r\n}\r\n\r\nexport default function convertStateDateRangeToSelection({\r\n $daterange,\r\n i18n,\r\n}) {\r\n if (!$daterange) {\r\n return {\r\n DateRange: null,\r\n ComparisonDateRange: null,\r\n };\r\n }\r\n\r\n const formatAPIDate = getSelectionDateFormatter(i18n);\r\n\r\n const {\r\n start,\r\n end,\r\n key,\r\n grain,\r\n compared,\r\n } = $daterange;\r\n\r\n const startdate = formatAPIDate(start);\r\n const enddate = formatAPIDate(end);\r\n\r\n // use grain when there is no key, such as in new ui.\r\n const DateRange = (key === RANGES.CUSTOM || grain === grains.Custom\r\n || isRangeNotPreset($daterange)) ?\r\n {\r\n StartDate: startdate,\r\n EndDate: enddate,\r\n } : {\r\n DateRangePreset: getSelectionDateRangePreset(key, grain),\r\n };\r\n\r\n if (!compared) {\r\n return {\r\n DateRange,\r\n ComparisonDateRange: null,\r\n };\r\n }\r\n\r\n const ComparisonDateRange = compared.key === COMPARISON_RANGES.CUSTOM ? {\r\n StartDate: formatAPIDate(compared.start),\r\n EndDate: formatAPIDate(compared.end),\r\n } : {\r\n ComparisonDateRangeOption: getSelectionComparisonDateRangeOption(compared.key),\r\n };\r\n\r\n return {\r\n DateRange,\r\n ComparisonDateRange,\r\n };\r\n}\r\n","import _ from 'underscore';\r\nimport getStateDateRange from './util/get-state-date-range';\r\nimport getStateComparedDateRange from './util/get-state-compared-date-range';\r\nimport { getSelectionDateFormatter } from './util/selection-date';\r\n\r\nexport default function lockDownSelectionDateRange({\r\n Selection,\r\n today,\r\n i18n,\r\n}) {\r\n const {\r\n DateRange,\r\n ComparisonDateRange,\r\n } = Selection;\r\n\r\n const primaryDateRange = getStateDateRange({\r\n today,\r\n i18n,\r\n DateRange,\r\n });\r\n\r\n const comparedDateRange = getStateComparedDateRange({\r\n today,\r\n i18n,\r\n primaryRange: primaryDateRange,\r\n ComparisonDateRange,\r\n });\r\n\r\n const selectionDateFormatter = getSelectionDateFormatter(i18n);\r\n\r\n return _.defaults({\r\n DateRange: {\r\n StartDate: selectionDateFormatter(primaryDateRange.start),\r\n EndDate: selectionDateFormatter(primaryDateRange.end),\r\n },\r\n ComparisonDateRange: comparedDateRange ? {\r\n StartDate: selectionDateFormatter(comparedDateRange.start),\r\n EndDate: selectionDateFormatter(comparedDateRange.end),\r\n } : null,\r\n }, Selection);\r\n}\r\n","import _ from 'underscore';\r\nimport { SchemaI18n } from '@bingads-webui-universal/schema-i18n';\r\n\r\nfunction customDateRangeFormatter(i18n) {\r\n const formatter = i18n.dateFormatter({ skeleton: 'yMd' });\r\n const parser = i18n.dateParser({ raw: 'yyyy-MM-dd' });\r\n\r\n const formatDate = _.compose(formatter, parser, str => str.substr(0, 10));\r\n return (start, end) => `${formatDate(start)} - ${formatDate(end)}`;\r\n}\r\n\r\nexport class DateRangeFormat {\r\n constructor({\r\n i18n,\r\n }) {\r\n this.s$i18n = new SchemaI18n({ i18n });\r\n this.i18n = i18n;\r\n this.formatCustomDateRange = customDateRangeFormatter(i18n);\r\n }\r\n\r\n format(dateRange) {\r\n if (!dateRange) {\r\n return this.i18n.getString('None');\r\n }\r\n\r\n const {\r\n DateRangePreset,\r\n StartDate,\r\n EndDate,\r\n } = dateRange;\r\n\r\n if (DateRangePreset) {\r\n return this.formatPreset(DateRangePreset);\r\n }\r\n\r\n return this.formatCustomDateRange(StartDate, EndDate);\r\n }\r\n\r\n formatPreset(preset) {\r\n return preset ?\r\n this.s$i18n.enum('DateRangePreset', preset) :\r\n this.i18n.getString('Custom');\r\n }\r\n}\r\n\r\nexport class ComparisonDateRangeFormat {\r\n constructor({\r\n i18n,\r\n noneStringKey = 'None',\r\n }) {\r\n this.s$i18n = new SchemaI18n({ i18n });\r\n this.i18n = i18n;\r\n this.formatCustomDateRange = customDateRangeFormatter(i18n);\r\n this.noneStringKey = noneStringKey;\r\n }\r\n\r\n format(comparisonDateRange) {\r\n if (!comparisonDateRange) {\r\n return this.i18n.getString(this.noneStringKey);\r\n }\r\n\r\n const {\r\n ComparisonDateRangeOption,\r\n StartDate,\r\n EndDate,\r\n } = comparisonDateRange;\r\n\r\n if (ComparisonDateRangeOption) {\r\n return this.s$i18n.enum('ComparisonDateRangeOption', ComparisonDateRangeOption);\r\n }\r\n\r\n return this.formatCustomDateRange(StartDate, EndDate);\r\n }\r\n\r\n formatPreset(preset) {\r\n if (preset) {\r\n if (preset === 'None') {\r\n return this.i18n.getString(this.noneStringKey);\r\n }\r\n return this.s$i18n.enum('ComparisonDateRangeOption', preset);\r\n }\r\n return this.i18n.getString('Custom');\r\n }\r\n}\r\n","/* eslint-disable no-param-reassign */\r\nimport { extend } from 'underscore';\r\nimport React, { useEffect, useRef } from 'react';\r\nimport classnames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport DateSettings from '@bingads-webui-campaign-legacy/ad-schedule/view/date-settings';\r\nimport { datePickerStyle, advancedSettingsSectionStyle, toggleButtonStyle } from '@bingads-webui-campaign-react/common-styles';\r\nimport { creationCommonStyle } from '@bingads-webui-campaign-react/campaign-adgroup-settings-shared-styles';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\n\r\nconst globalLegacyI18n = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/campaign-creation-advanced');\r\n\r\nconst getStyles = (__, core) =>\r\n ({\r\n '@global': {\r\n ...datePickerStyle(core),\r\n },\r\n dateSettingContainer: {\r\n '& .advanced-scheduling-grid': {\r\n width: '918px',\r\n },\r\n ...creationCommonStyle(core),\r\n ...advancedSettingsSectionStyle(core),\r\n '& .radio-inline': {\r\n display: 'block',\r\n },\r\n '& .adschedule-targets-container': {\r\n borderTop: 'unset',\r\n paddingTop: '0px',\r\n },\r\n '& .toggle-campaign-settings-switch.form-control-static[data-bind]': {\r\n display: 'inline-block',\r\n textDecoration: 'none',\r\n paddingRight: '8px',\r\n float: 'left',\r\n },\r\n ...toggleButtonStyle(core),\r\n '& .date-settings-intro': {\r\n paddingLeft: 0,\r\n },\r\n '& .date-settings': {\r\n '& .col-sm-12': {\r\n paddingLeft: 0,\r\n },\r\n '& table': {\r\n width: '500px',\r\n '& td': {\r\n width: '100%',\r\n display: 'block',\r\n },\r\n },\r\n },\r\n '& .alert-danger': {\r\n backgroundColor: 'unset',\r\n color: '#A80000',\r\n },\r\n '& table tbody .col-sm-9': {\r\n width: 'unset',\r\n },\r\n '& table tbody .item-label.schedule-item-label.form-control-static': {\r\n fontWeight: '600',\r\n color: '#323130',\r\n paddingTop: '10px',\r\n display: 'block',\r\n },\r\n '& .adschedule-targets-container .advanced-scheduling-grid .ad-scheduling-panel table tr:nth-child(3) td .radio-inline:nth-child(2)': {\r\n top: 'unset',\r\n },\r\n '& .form-control-static': {\r\n margin: '3px 0',\r\n padding: 0,\r\n minHeight: 'fit-content',\r\n color: core.palette.neutralSecondary,\r\n marginBottom: '3px !important',\r\n width: 'unset',\r\n },\r\n '& td>.col-sm-9': {\r\n padding: 0,\r\n },\r\n },\r\n });\r\n\r\n// reference: private/campaign-legacy/packages/campaign-targeting/view/campaign-targeting.js\r\nexport const LegacyDateSetting = React.memo((props) => {\r\n const {\r\n data,\r\n onChange,\r\n activityLogger,\r\n allowNoEndDateSelection,\r\n allowStartDateSelection,\r\n allowEndDateSelection,\r\n } = props;\r\n const view = useRef();\r\n let container;\r\n const classes = useDefaultStyles(getStyles);\r\n\r\n useEffect(() => {\r\n view.current = new DateSettings(extend(\r\n {\r\n callOnChangeCb: onChange,\r\n },\r\n {\r\n startDate: data.StartDate ? globalLegacyI18n.formatDate(data.StartDate, {\r\n raw: 'yyyy-MM-dd',\r\n }) : null,\r\n endDate: data.EndDate ? globalLegacyI18n.formatDate(data.EndDate, {\r\n raw: 'yyyy-MM-dd',\r\n }) : null,\r\n timeZone: data.TimeZone,\r\n isCreate: data.isCreate,\r\n activityLogger,\r\n allowNoEndDateSelection,\r\n allowStartDateSelection,\r\n allowEndDateSelection,\r\n }\r\n ));\r\n\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 // We will refresh the view if data changes\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [data]);\r\n\r\n useEffect(() => {\r\n if (view.current) {\r\n // Populate default value. If user did not specify StartDate, it will be set to current date.\r\n if (!data.StartDate) {\r\n onChange(view.current.viewModel.getRawValues());\r\n }\r\n }\r\n });\r\n\r\n return (\r\n \r\n
\r\n
{ container = ref; }} />\r\n
\r\n
\r\n );\r\n});\r\n\r\nLegacyDateSetting.propTypes = {\r\n data: PropTypes.shape({\r\n StartDate: PropTypes.string,\r\n EndDate: PropTypes.string,\r\n TimeZone: PropTypes.string,\r\n isCreate: PropTypes.bool,\r\n }).isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n activityLogger: PropTypes.shape({\r\n signal: PropTypes.func,\r\n }),\r\n allowNoEndDateSelection: PropTypes.bool,\r\n allowStartDateSelection: PropTypes.bool,\r\n allowEndDateSelection: PropTypes.bool,\r\n};\r\n\r\nLegacyDateSetting.defaultProps = {\r\n activityLogger: null,\r\n allowNoEndDateSelection: true,\r\n allowStartDateSelection: true,\r\n allowEndDateSelection: true,\r\n};\r\n","import _ from 'underscore';\r\n\r\nconst globalLegacyI18n = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/campaign-creation-advanced');\r\n\r\nexport const getDateSettingDetails = (i18n, startDate, endDate, isUseCampaignLevelDates = false, isDateLevelDisplayed = false) => {\r\n const start = startDate ? i18n.getString(_TL_('Starting from {{startDate}}'), { startDate: i18n.dateFormatter({ skeleton: 'yMd' })(startDate) }) : '';\r\n\r\n const end = endDate ? i18n.getString(_TL_('to {{endDate}}'), { endDate: i18n.dateFormatter({ skeleton: 'yMd' })(endDate) }) : '';\r\n\r\n if (isDateLevelDisplayed) {\r\n const managementLevel = isUseCampaignLevelDates ? _TL_('managed at campaign level') : _TL_('managed at ad group level');\r\n const dateRange = endDate\r\n ? i18n.getString(_TL_('{{startFromDate}} {{endToDate}}'), { startFromDate: start, endToDate: end })\r\n : i18n.getString(_TL_('{{startFromDate}}'), { startFromDate: start });\r\n\r\n return i18n.getString(_TL_('{{dateRange}}, {{managementLevel}}'), { dateRange, managementLevel });\r\n }\r\n\r\n return i18n.getString(_TL_('{{startFromDate}} {{endToDate}}'), { startFromDate: start, endToDate: end });\r\n};\r\n\r\nexport const convertDateBetweenTimeZones = (date, {\r\n from,\r\n to,\r\n} = {}) => {\r\n const dateString = globalLegacyI18n.formatDate(date, {\r\n timeZone: from,\r\n raw: 'yyyy-MM-dd',\r\n });\r\n\r\n return globalLegacyI18n.parseDate(dateString, {\r\n timeZone: to,\r\n raw: 'yyyy-MM-dd',\r\n });\r\n};\r\n\r\nexport const getCurrentDate = () => convertDateBetweenTimeZones(new Date());\r\n\r\nexport const validateDate = ({\r\n StartDate,\r\n EndDate,\r\n hasFixedStartDate = false,\r\n}, i18n) => {\r\n const validationErrors = [];\r\n\r\n const currentDate = getCurrentDate();\r\n\r\n // check wether date is valid\r\n if (_.isNull(StartDate) && !hasFixedStartDate) {\r\n validationErrors.push(i18n.getString(_TL_('Invalid start date')));\r\n } else if (StartDate < currentDate && !hasFixedStartDate) {\r\n validationErrors.push(i18n.getString(_TL_(\"Your start date must be after today. Today's date is calculated using your campaign time zone setting, not your actual local time.\")));\r\n } else if (!_.isNull(EndDate) && StartDate > EndDate) {\r\n validationErrors.push(StartDate > EndDate ? i18n.getString(_TL_('End date must be later than start date')) : '');\r\n }\r\n return validationErrors;\r\n};\r\n\r\nexport const numberOfDaysBetweenDates = (startDate, endDate) => {\r\n const ONE_DAY = 24 * 60 * 60 * 1000;\r\n\r\n const startDateUTC = Date.UTC(startDate.getFullYear(), startDate.getMonth(), startDate.getDate());\r\n const endDateUTC = Date.UTC(endDate.getFullYear(), endDate.getMonth(), endDate.getDate());\r\n\r\n return Math.floor(Math.abs((endDateUTC - startDateUTC) / ONE_DAY));\r\n};\r\n\r\nexport const getLaterDate = (startDate, numberOfDaysLater) =>\r\n convertDateBetweenTimeZones(new Date(new Date().setDate(startDate.getDate() + numberOfDaysLater)));\r\n","import _ from 'underscore';\r\nimport React, { useState, useCallback, useContext, useMemo, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { withCustomValidation, withError } from '@bingads-webui-react/validation';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { LegacyDateSetting } from './legacy-date-setting';\r\nimport { getCurrentDate, validateDate as validateDateUtil } from './utils';\r\n\r\nconst LegacyDateSettingWithCustomValidation = ({\r\n validationProps, updateValidation, ...restProps\r\n}) => {\r\n const { data: dataSettings } = validationProps;\r\n const i18n = useContext(I18nContext);\r\n const activity = useContext(ActivityContext);\r\n const currentDate = getCurrentDate();\r\n\r\n const [updatedDateSettings, setUpdatedDateSettings] = useState(dataSettings);\r\n\r\n const validateDate = useCallback(data => validateDateUtil(data, i18n), [i18n]);\r\n\r\n const onChange = useCallback((newData) => {\r\n const validationError = validateDate(newData);\r\n updateValidation(validationError, newData);\r\n\r\n if (activity) {\r\n activity.signal(`onLegacyDateSettingChange - ${JSON.stringify(newData)}`);\r\n }\r\n }, [validateDate, updateValidation, activity]);\r\n\r\n const dateSettingWithDefaultStartDate = useMemo(() => _.defaults(dataSettings, {\r\n StartDate: currentDate,\r\n }), [currentDate, dataSettings]);\r\n\r\n useEffect(() => {\r\n setUpdatedDateSettings(_.clone(dateSettingWithDefaultStartDate));\r\n }, [dateSettingWithDefaultStartDate]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nLegacyDateSettingWithCustomValidation.propTypes = {\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({}),\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n activity: PropTypes.shape({\r\n signal: PropTypes.func,\r\n }),\r\n};\r\n\r\nLegacyDateSettingWithCustomValidation.defaultProps = {\r\n activity: null,\r\n};\r\n\r\nexport const ValidatedLegacyDateSetting = withError(withCustomValidation(LegacyDateSettingWithCustomValidation));\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\n\r\nexport default function Spin({\r\n i18n,\r\n}) {\r\n return {i18n.getString('Loading')};\r\n}\r\n\r\nSpin.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n};\r\n","import classnames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport _ from 'underscore';\r\nimport { include } from 'underscore.string';\r\nimport { Checkbox, CheckboxGroup } from '@bingads-webui-react/checkbox';\r\nimport { ReactTemplate } from '@bingads-webui-react/react-template';\r\nimport { SearchBox } from '@bingads-webui-react/search-box';\r\nimport { SearchBox as SearchBoxControl } from '@bingads-webui-react/search-box-control';\r\nimport Spin from './spin';\r\n\r\nconst OnlyCurrentUser = 'OnlyCurrentUser';\r\nconst AllAccountUsers = 'AllAccountUsers';\r\nconst Custom = 'Custom';\r\nconst CustomerUsers = 'CustomerUsers';\r\n\r\nconst AllUsersEmailOption = {\r\n Customer: CustomerUsers,\r\n Account: AllAccountUsers,\r\n};\r\n\r\nconst Loading = 'Loading';\r\nconst Succeeded = 'Succeeded';\r\nconst Failed = 'Failed';\r\n\r\nfunction getUserIds(users) {\r\n return _.map(users, user => user.Id);\r\n}\r\n\r\nfunction getCheckedUsers({\r\n EmailOption,\r\n CustomUserIds,\r\n currentUserId,\r\n users,\r\n AllUsers,\r\n}) {\r\n if (EmailOption === AllUsers) {\r\n return users;\r\n } else if (EmailOption === OnlyCurrentUser) {\r\n return _.filter(users, { Id: currentUserId });\r\n }\r\n\r\n return _.filter(users, ({ Id }) => _.contains(CustomUserIds, Id));\r\n}\r\n\r\nexport class EmailNotificationDeliveryOptionEditor extends React.PureComponent {\r\n static propTypes = {\r\n model: PropTypes.shape({ // eslint-disable-line\r\n CustomUserIds: PropTypes.arrayOf(PropTypes.number),\r\n EmailOption: PropTypes.string,\r\n }),\r\n onChange: PropTypes.func.isRequired,\r\n currentUserId: PropTypes.number.isRequired,\r\n allUsersType: PropTypes.oneOf(['Customer', 'Account']),\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n loadUsers: PropTypes.func.isRequired,\r\n isForVNext: PropTypes.bool.isRequired,\r\n ariaLabel: PropTypes.string,\r\n }\r\n\r\n static defaultProps = {\r\n model: undefined,\r\n allUsersType: 'Account',\r\n ariaLabel: '',\r\n }\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n users: null,\r\n query: '',\r\n loadUsersStatus: Loading,\r\n };\r\n\r\n this.loadUsers();\r\n }\r\n\r\n onAllUsersChange = (event) => {\r\n if (event.target.checked) {\r\n this.onChange({\r\n EmailOption: this.getAllUsersEmailOption(),\r\n });\r\n } else {\r\n this.onChange({\r\n EmailOption: Custom,\r\n });\r\n }\r\n }\r\n\r\n onCheckedChange = (users) => {\r\n if (users.length === 1 && users[0].Id === this.props.currentUserId) {\r\n this.onChange({\r\n EmailOption: OnlyCurrentUser,\r\n CustomUserIds: [],\r\n });\r\n } else if (users.length === this.state.users.length) {\r\n this.onChange({\r\n EmailOption: this.getAllUsersEmailOption(),\r\n CustomUserIds: [],\r\n });\r\n } else {\r\n this.onChange({\r\n EmailOption: Custom,\r\n CustomUserIds: getUserIds(users),\r\n });\r\n }\r\n }\r\n\r\n onChange = ({\r\n CustomUserIds,\r\n EmailOption,\r\n }) => {\r\n const model = _.defaults({ CustomUserIds, EmailOption }, this.props.model);\r\n\r\n this.props.onChange(model.EmailOption === Custom && _.isEmpty(model.CustomUserIds) ? null : {\r\n CustomUserIds: model.CustomUserIds,\r\n EmailOption: model.EmailOption,\r\n });\r\n }\r\n\r\n onSearch = (query) => {\r\n this.setState({\r\n query,\r\n });\r\n }\r\n\r\n getAllUsersEmailOption() {\r\n return AllUsersEmailOption[this.props.allUsersType];\r\n }\r\n\r\n geEmailOptionAndCustomerIds() {\r\n const EmailOption = this.props.model ? this.props.model.EmailOption : 'Custom';\r\n const CustomUserIds = this.props.model && this.props.model.EmailOption === 'Custom' ? this.props.model.CustomUserIds : [];\r\n return { EmailOption, CustomUserIds };\r\n }\r\n\r\n loadUsers() {\r\n this.props.loadUsers()\r\n .then((users) => {\r\n this.setState({ users: _.sortBy(users, ({ Email }) => Email), loadUsersStatus: Succeeded });\r\n })\r\n .catch(() => {\r\n this.setState({ loadUsersStatus: Failed });\r\n });\r\n }\r\n\r\n renderUserEmail = ({ Id, Email }) => {\r\n if (Id === this.props.currentUserId) {\r\n return (\r\n {this.props.i18n.getString('InlineDownloadReports_EmailAndScheduling_Email_Me')},\r\n }}\r\n template={this.props.i18n.getString('InlineDownloadReports_EmailAndScheduling_Email_Template_Me')}\r\n />\r\n );\r\n }\r\n\r\n // TODO\r\n // emailaddress@domain.com (readonly)\r\n // https://msasg.visualstudio.com/DefaultCollection/Bing_Ads/_git/AdsAppUI?path=%2Fprivate%2FUI%2FCommon%2FMicrosoft.ClientCenter.Repository%2FProxy%2FClientCenterProxyEnums.cs&version=GBmaster&_a=contents&line=215&lineStyle=plain&lineEnd=240&lineStartColumn=1&lineEndColumn=6\r\n\r\n return Email;\r\n }\r\n\r\n renderUser = ({ Id, Email, Name }) => (\r\n \r\n )\r\n\r\n renderUsers = () => {\r\n const {\r\n loadUsersStatus,\r\n users,\r\n query,\r\n } = this.state;\r\n\r\n const { EmailOption, CustomUserIds } = this.geEmailOptionAndCustomerIds();\r\n\r\n switch (loadUsersStatus) {\r\n case Loading:\r\n return ;\r\n case Succeeded:\r\n return (\r\n include(Email, query))}\r\n renderItem={this.renderUser}\r\n onChange={this.onCheckedChange}\r\n checked={getCheckedUsers({\r\n EmailOption,\r\n CustomUserIds,\r\n currentUserId: this.props.currentUserId,\r\n users,\r\n AllUsers: this.getAllUsersEmailOption(),\r\n })}\r\n getItemId={user => user.Id}\r\n />\r\n );\r\n case Failed:\r\n return (\r\n
\r\n {this.props.i18n.getString('InlineDownloadReports_EmailAndScheduling_FailedToLoadUsers')}\r\n
\r\n );\r\n default:\r\n return null;\r\n }\r\n }\r\n\r\n render() {\r\n const {\r\n i18n,\r\n isForVNext,\r\n } = this.props;\r\n const {\r\n query,\r\n } = this.state;\r\n\r\n const { EmailOption } = this.geEmailOptionAndCustomerIds();\r\n\r\n const searchBoxElement = isForVNext\r\n ? (\r\n )\r\n : (\r\n );\r\n\r\n return (\r\n
\r\n
\r\n {searchBoxElement}\r\n
\r\n
\r\n
\r\n \r\n {i18n.getString('InlineDownloadReports_EmailAndScheduling_AllUsers')}\r\n \r\n
\r\n {\r\n this.renderUsers()\r\n }\r\n
\r\n
\r\n );\r\n }\r\n}\r\n","import { DeterministicView } from '@bingads-webui/deterministic-view';\r\nimport template from './template.pug';\r\n\r\nexport function getExperimentBudgetAlert({\r\n i18n,\r\n jsdata,\r\n appState,\r\n legacyRouter,\r\n}) {\r\n return class ExperimentBudgetAlert extends DeterministicView {\r\n initialize({\r\n experimentId,\r\n campaignId,\r\n }) {\r\n this.i18n = i18n;\r\n this.appState = appState;\r\n\r\n if (experimentId) {\r\n // current campaign is an experiment\r\n this.setState({\r\n isLoading: true,\r\n });\r\n jsdata.Experiment.find(experimentId, {\r\n bypassCache: false,\r\n cacheResponse: true,\r\n }).then((response) => {\r\n this.setState({\r\n isLoading: false,\r\n baseCampaign: {\r\n Id: response.BaseCampaignId,\r\n Name: response.BaseCampaignName,\r\n },\r\n });\r\n });\r\n } else if (campaignId) {\r\n // current campaign has active or scheduled experiments\r\n this.setState({\r\n campaignId,\r\n });\r\n }\r\n }\r\n\r\n get template() {\r\n return template;\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click .base-campaign-settings-link': () => legacyRouter.navigateToRoute('campaign_edit', { campaign_id: this.getState().baseCampaign.Id }),\r\n 'click .all-experiments-link': () => legacyRouter.navigateToRoute('campaign_experiments', { campaign_id: this.getState().campaignId }),\r\n };\r\n }\r\n };\r\n}\r\n","import * as timeZoneConverter from '@bingads-webui-universal/time-zone-converter';\r\n\r\nlet initialized = false;\r\nlet i18n;\r\n\r\nclass OneDay {\r\n constructor(date) {\r\n this.date = (date instanceof Date) ?\r\n date :\r\n new Date();\r\n }\r\n\r\n /**\r\n * Get givin time zone - UTC offset in millisecond\r\n * @param {string|null} timeZone -\r\n * i.e. PacificTimeUSCanadaTijuana, or null for local time zone\r\n * @param {Date} date -\r\n * A time zone may have different offsets to UTC because of daylight saving time\r\n *\r\n * @returns {number} - offset in millisecond\r\n */\r\n static getOffset(timeZone, date) {\r\n if (!timeZone) {\r\n // local - UTC offset\r\n return (date).getTimezoneOffset() * -1 * 60 * 1000;\r\n }\r\n\r\n // IANA time zone, i.e. US/Pacific\r\n const ianaTimeZone = timeZoneConverter.toIANATimeZone(timeZone);\r\n // i.e. -07:00\r\n const offsetString = i18n.formatDate(date, { timeZone: ianaTimeZone, raw: 'xxx' });\r\n const offsetFactor = offsetString[0] === '-' ? -1 : 1;\r\n const offsetHour = Number(offsetString.substr(1, 2));\r\n const offsetMinute = Number(offsetString.substr(4, 2));\r\n const offsetMilliSecond = ((offsetHour * 60) + offsetMinute) * 60 * 1000 * offsetFactor;\r\n\r\n return offsetMilliSecond;\r\n }\r\n\r\n /**\r\n * Convert from source time zone to target time zone\r\n * @param {Date} date - date at source time zone\r\n * @param {string|null} sourceTimeZone - source time zone\r\n * @param {string|null} targetTimeZone - target time zone\r\n *\r\n * @returns {Date} - date at target time zone\r\n */\r\n static convert(date, sourceTimeZone, targetTimeZone) {\r\n const totalOffset =\r\n OneDay.getOffset(sourceTimeZone, date) - OneDay.getOffset(targetTimeZone, date);\r\n\r\n return new Date(date.getTime() - totalOffset);\r\n }\r\n\r\n /**\r\n * Add some offset for the target time zone\r\n * @param {string|null} targetTimeZone - target time zone\r\n *\r\n * @returns {object} - this\r\n */\r\n zone(targetTimeZone) {\r\n this.date = OneDay.convert(this.date, null, targetTimeZone);\r\n return this;\r\n }\r\n\r\n add(numOfDay) {\r\n this.date.setDate(this.date.getDate() + numOfDay);\r\n return this;\r\n }\r\n\r\n firstSecond() {\r\n this.date.setHours(0, 0, 0, 0);\r\n return this;\r\n }\r\n\r\n lastSecond() {\r\n this.date.setHours(23, 59, 59, 998);\r\n return this;\r\n }\r\n\r\n /**\r\n * Convert to Date instance\r\n *\r\n * @returns {Date} date\r\n */\r\n toDate() {\r\n return new Date(this.date);\r\n }\r\n\r\n /**\r\n * Format to date string, to communicate with middle tier\r\n *\r\n * @returns {string} - date string\r\n */\r\n toServer() {\r\n return i18n.formatDate(this.date, { timeZone: null, raw: 'yyyy-MM-dd' });\r\n }\r\n}\r\n\r\nfunction oneDay(date) {\r\n return new OneDay(date);\r\n}\r\n\r\n/**\r\n * Parse datetime string from middle tier to Date instance\r\n * @param {string|null} datetime - datetime string, or null for no end date\r\n *\r\n * @returns {Date|null} - Date instance, or null for no end date\r\n */\r\nfunction parseDate(datetime) {\r\n if (!datetime) {\r\n return null;\r\n }\r\n\r\n const date = datetime.substr(0, 10).replace(/-/g, '/');\r\n\r\n return new Date(date);\r\n}\r\n\r\n/**\r\n * Re-format datetime string from middle tier to user-friendly date string\r\n * @param {string|null} datetime - datetime string, or null for no end date\r\n *\r\n * @returns {string} - user-friendly date string\r\n */\r\nfunction reformatDate(datetime) {\r\n const date = parseDate(datetime);\r\n\r\n if (!date) {\r\n return i18n.getString('None');\r\n }\r\n\r\n return i18n.formatDate(date, { timeZone: null });\r\n}\r\n\r\nconst utils = {\r\n oneDay,\r\n reformatDate,\r\n parseDate,\r\n};\r\n\r\nexport function getDateUtils(deps) {\r\n if (!initialized) {\r\n ({ i18n } = deps);\r\n initialized = true;\r\n }\r\n\r\n return utils;\r\n}\r\n","\r\nimport _ from 'underscore';\r\nimport { lazy } from 'react';\r\nimport { DefaultHeaderDropdown } from '@bingads-webui-campaign-react/overview-card';\r\n\r\nimport {\r\n cardWelcomeTipsId,\r\n cardPerformanceId,\r\n cardRecommendationsId,\r\n cardTopCampaignsId,\r\n cardTopAccountsId,\r\n cardTopKeywordsId,\r\n cardDeviceId,\r\n cardSearchTermsId,\r\n cardCompetitionId,\r\n cardTopAdGroupsId,\r\n cardConversionTrackingId,\r\n cardTopLocationsId,\r\n cardTopChangesAccountId,\r\n cardTopChangesCampaignId,\r\n cardTopChangesAdGroupId,\r\n cardDiagnosticId,\r\n cardAssetPerformanceId,\r\n cardNavigateToFullProductId,\r\n} from '@bingads-webui-campaign/fluent-page-consts';\r\nimport {\r\n getHeaderPropsFromPreferenceForPerformanceTable,\r\n getTablePropsFromPreferenceForPerformanceTable,\r\n getPropsFromPreferenceForPerformanceChart,\r\n getPropsFromPreferenceForTopLocations,\r\n getTablePropsFromPreferenceForDevices,\r\n getPropsFromPreferenceForConversionTracking,\r\n getHeaderPropsFromPreferenceForConversionTracking,\r\n getPropsForRecommendations,\r\n getPropsForTopChanges,\r\n getHeaderPropsFromPreferenceForTopChanges,\r\n} from '@bingads-webui-campaign/fluent-page-data';\r\n\r\nconst PerformanceCardContainer = lazy(() => import(/* webpackMode: \"eager\" */'./performance-chart-card/container').then(module => ({ default: module.PerformanceCardContainer })));\r\nconst OverviewRecommendationsCard = lazy(() => import(/* webpackMode: \"eager\" */'@bingads-webui-campaign-react/overview-recommendations-card').then(module => ({ default: module.OverviewRecommendationsCard })));\r\nconst OverviewCampaignTable = lazy(() => import(/* webpackMode: \"eager\" */'@bingads-webui-campaign-react/overview-grid-card-fluent').then(module => ({ default: module.OverviewCampaignTable })));\r\nconst OverviewAccountTable = lazy(() => import(/* webpackMode: \"eager\" */'@bingads-webui-campaign-react/overview-grid-card-fluent').then(module => ({ default: module.OverviewAccountTable })));\r\nconst OverviewKeywordTable = lazy(() => import(/* webpackMode: \"eager\" */'@bingads-webui-campaign-react/overview-grid-card-fluent').then(module => ({ default: module.OverviewKeywordTable })));\r\nconst OverviewSearchTermTable = lazy(() => import(/* webpackMode: \"eager\" */'@bingads-webui-campaign-react/overview-grid-card-fluent').then(module => ({ default: module.OverviewSearchTermTable })));\r\nconst OverviewAdGroupTable = lazy(() => import(/* webpackMode: \"eager\" */'@bingads-webui-campaign-react/overview-grid-card-fluent').then(module => ({ default: module.OverviewAdGroupTable })));\r\nconst ConversionTrackingCardFluent = lazy(() => import(/* webpackMode: \"eager\" */'@bingads-webui-campaign/overview-conversion-tracking-card').then(module => ({ default: module.ConversionTrackingCardFluent })));\r\nconst DeviceCard = lazy(() => import(/* webpackMode: \"eager\" */'@bingads-webui-campaign/overview-device-card-fluent').then(module => ({ default: module.DeviceCard })));\r\nconst TopLocationsCard = lazy(() => import(/* webpackMode: \"eager\" */'@bingads-webui-campaign-react/top-locations-card').then(module => ({ default: module.TopLocationsCard })));\r\nconst TopLocationViewSelector = lazy(() => import(/* webpackMode: \"eager\" */'@bingads-webui-campaign-react/top-locations-card').then(module => ({ default: module.TopLocationViewSelector })));\r\nconst CompetitionCardWithData = lazy(() => import(/* webpackMode: \"eager\" */'@bingads-webui-campaign-react/overview-competition-card').then(module => ({ default: module.CompetitionCardWithData })));\r\nconst CompetitionFilterWithData = lazy(() => import(/* webpackMode: \"eager\" */'@bingads-webui-campaign-react/overview-competition-card').then(module => ({ default: module.CompetitionFilterWithData })));\r\nconst TopChangesCard = lazy(() => import(/* webpackMode: \"eager\" */'@bingads-webui-campaign/overview-top-changes-card-fluent').then(module => ({ default: module.TopChangesCard })));\r\nconst WelcomeTipsCard = lazy(() => import(/* webpackMode: \"eager\" */'@bingads-webui-campaign/overview-welcome-tips-card').then(module => ({ default: module.WelcomeTipsCard })));\r\nconst AssetPerformanceCard = lazy(() => import(/* webpackMode: \"eager\" */'@bingads-webui-campaign-react/asset-performance-card').then(module => ({ default: module.AssetPerformanceCardWithAssetData })));\r\nconst AssetPerformanceCardHeader = lazy(() => import(/* webpackMode: \"eager\" */'@bingads-webui-campaign-react/asset-performance-card').then(module => ({ default: module.AssetPerformanceFilterWithAssetGroupsData })));\r\nconst DiagnosticCard = lazy(() => import(/* webpackMode: \"eager\" */'@bingads-webui-campaign/overview-diagnostic-card').then(module => ({ default: module.OverviewDiagnosticCard })));\r\nconst NavigateToFullProductCard = lazy(() => import(/* webpackMode: \"eager\" */'@bingads-webui-campaign-react/sdk-campaign-overview-page').then(module => ({ default: module.NavigateToFullProductCard })));\r\n\r\nexport const getCardViewConstructor = ({\r\n config,\r\n instrumentation,\r\n constants,\r\n campaignType,\r\n}) => {\r\n switch (config.typeId) {\r\n case cardPerformanceId:\r\n return {\r\n CardView: PerformanceCardContainer,\r\n getCardViewProps: ({ cardPreference, patchPreference, permissions }) => getPropsFromPreferenceForPerformanceChart({\r\n cardPreference, patchPreference, permissions, campaignType,\r\n }),\r\n config,\r\n };\r\n case cardRecommendationsId:\r\n return {\r\n CardView: OverviewRecommendationsCard,\r\n getCardViewProps: getPropsForRecommendations,\r\n config,\r\n };\r\n case cardTopCampaignsId:\r\n return {\r\n CardView: OverviewCampaignTable,\r\n getCardViewProps: ({\r\n cardPreference, patchPreference, permissions, navigationLevel, i18n,\r\n }) =>\r\n getTablePropsFromPreferenceForPerformanceTable({\r\n cardPreference, patchPreference, permissions, navigationLevel, i18n, campaignType,\r\n }),\r\n CardHeaderContent: DefaultHeaderDropdown,\r\n getCardHeaderContentProps: getHeaderPropsFromPreferenceForPerformanceTable,\r\n config,\r\n };\r\n case cardTopKeywordsId:\r\n return {\r\n CardView: OverviewKeywordTable,\r\n getCardViewProps: getTablePropsFromPreferenceForPerformanceTable,\r\n CardHeaderContent: DefaultHeaderDropdown,\r\n getCardHeaderContentProps: getHeaderPropsFromPreferenceForPerformanceTable,\r\n config,\r\n };\r\n case cardSearchTermsId:\r\n return {\r\n CardView: OverviewSearchTermTable,\r\n getCardViewProps: getTablePropsFromPreferenceForPerformanceTable,\r\n config,\r\n };\r\n case cardTopAdGroupsId:\r\n return {\r\n CardView: OverviewAdGroupTable,\r\n getCardViewProps: getTablePropsFromPreferenceForPerformanceTable,\r\n CardHeaderContent: DefaultHeaderDropdown,\r\n getCardHeaderContentProps: getHeaderPropsFromPreferenceForPerformanceTable,\r\n config,\r\n };\r\n case cardConversionTrackingId:\r\n return {\r\n CardView: ConversionTrackingCardFluent,\r\n CardHeaderContent: DefaultHeaderDropdown,\r\n getCardViewProps: getPropsFromPreferenceForConversionTracking,\r\n getCardHeaderContentProps: getHeaderPropsFromPreferenceForConversionTracking,\r\n config,\r\n };\r\n case cardDeviceId:\r\n return {\r\n CardView: DeviceCard,\r\n getCardViewProps: getTablePropsFromPreferenceForDevices,\r\n config,\r\n };\r\n case cardTopLocationsId:\r\n return {\r\n CardView: TopLocationsCard,\r\n getCardViewProps: getPropsFromPreferenceForTopLocations,\r\n CardHeaderContent: TopLocationViewSelector,\r\n config,\r\n };\r\n case cardCompetitionId:\r\n return {\r\n CardView: CompetitionCardWithData,\r\n CardHeaderContent: CompetitionFilterWithData,\r\n config,\r\n };\r\n case cardTopChangesCampaignId:\r\n case cardTopChangesAccountId:\r\n case cardTopChangesAdGroupId:\r\n return {\r\n CardView: TopChangesCard,\r\n getCardViewProps: getPropsForTopChanges,\r\n CardHeaderContent: DefaultHeaderDropdown,\r\n getCardHeaderContentProps: getHeaderPropsFromPreferenceForTopChanges,\r\n config,\r\n };\r\n case cardWelcomeTipsId:\r\n return {\r\n CardView: WelcomeTipsCard,\r\n config,\r\n };\r\n case cardTopAccountsId:\r\n return {\r\n CardView: OverviewAccountTable,\r\n getCardViewProps: ({\r\n cardPreference, patchPreference, permissions, navigationLevel, i18n,\r\n }) =>\r\n getTablePropsFromPreferenceForPerformanceTable({\r\n cardPreference, patchPreference, permissions, navigationLevel, i18n,\r\n }),\r\n CardHeaderContent: DefaultHeaderDropdown,\r\n getCardHeaderContentProps: getHeaderPropsFromPreferenceForPerformanceTable,\r\n config,\r\n };\r\n case cardDiagnosticId:\r\n return {\r\n CardView: DiagnosticCard,\r\n getCardViewProps: ({ campaignType }) => ({ campaignType }),\r\n config,\r\n };\r\n case cardAssetPerformanceId:\r\n return {\r\n CardView: AssetPerformanceCard,\r\n CardHeaderContent: AssetPerformanceCardHeader,\r\n getCardViewProps: ({ campaignType }) => ({ campaignType }),\r\n getCardHeaderContentProps: ({ isSDK }) => ({ isSDK }),\r\n config,\r\n };\r\n case cardNavigateToFullProductId:\r\n return {\r\n CardView: NavigateToFullProductCard,\r\n config,\r\n };\r\n default:\r\n instrumentation.logMessage([constants.LOGCATEGORY.ERROR], constants.LOGLEVEL.INFO, 'dashboard/dashboard-view', `Unknown card content: ${config.contentType}`);\r\n return null;\r\n }\r\n};\r\n","import _ from 'underscore';\r\nimport { defaultMetrics } from '@bingads-webui-campaign-legacy/dashboard-cards/performance-card/defaultMetrics';\r\nimport config from '@bingads-webui-component-legacy/config/index';\r\nimport { allMetrics } from '@bingads-webui-campaign/overview-cards-common';\r\nimport {\r\n setPreferenceForCard,\r\n getPreferenceForDashboard,\r\n getCardPreferenceOptions\r\n} from '@bingads-webui-campaign/fluent-page-data';\r\n\r\nconst permissions = config.get('Permissions');\r\nconst validMetricIndexes = [0, 1, 2, 3];\r\nconst defaultSelectedMetricIndexes = [0, 1];\r\nconst availableMetricKeys = allMetrics(permissions);\r\n\r\nexport function getPreference({\r\n preferenceService,\r\n preferenceName,\r\n dashboardPreferenceKey,\r\n cardId,\r\n activity,\r\n}) {\r\n const get = () => {\r\n const boardPreference = getPreferenceForDashboard({ preference: preferenceService, preferenceName, dashboardPreferenceKey });\r\n let cardPreferenceOptions = getCardPreferenceOptions(boardPreference, cardId);\r\n\r\n if (!cardPreferenceOptions\r\n || !_.isArray(cardPreferenceOptions.metrics)\r\n || _.some(cardPreferenceOptions.metrics, metric => !availableMetricKeys.includes(metric))\r\n || cardPreferenceOptions.metrics.length !== 4\r\n || !_.isArray(cardPreferenceOptions.selectedMetricIndexes)\r\n || cardPreferenceOptions.selectedMetricIndexes.length > 4\r\n || _.some(cardPreferenceOptions.selectedMetricIndexes, index => !validMetricIndexes.includes(index))\r\n ) {\r\n activity.trace(`Error preference format for perf chart: ${JSON.stringify(cardPreferenceOptions)}`);\r\n cardPreferenceOptions = null;\r\n }\r\n\r\n return cardPreferenceOptions || {\r\n selectedMetricIndexes: defaultSelectedMetricIndexes,\r\n // Expert account mode is 1\r\n metrics: defaultMetrics(permissions, 1),\r\n };\r\n };\r\n const set = (data) => {\r\n setPreferenceForCard({\r\n preference: preferenceService,\r\n preferenceName,\r\n dashboardPreferenceKey,\r\n cardId,\r\n cardOptions: data,\r\n });\r\n };\r\n\r\n return {\r\n get,\r\n set,\r\n };\r\n}\r\n","import _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport React, { useCallback, useMemo, useContext } from 'react';\r\n\r\nimport { PerformanceCard, PerformanceCardFluent } from '@bingads-webui-campaign-react/performance-card';\r\nimport { PerfMarkerFactory } from '@bingads-webui/performance-marker';\r\nimport { InstrumentationContext } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { cardPerformanceId } from '@bingads-webui-campaign/fluent-page-consts';\r\n\r\nimport { useData } from './use-data';\r\nimport { getPreference } from './preference';\r\n\r\nexport const preferenceName = 'dashboard/preferences';\r\nexport const dashboardPreferenceKey = 'default-campaign-performancemax';\r\nconst defaultGetCardsConfig = () => [{ id: cardPerformanceId }];\r\n\r\nconst perfMarker = PerfMarkerFactory.createMarker('Overview_PerformanceCard');\r\nperfMarker.willInit();\r\n\r\nexport const PerformanceCardContainer = (props) => {\r\n const {\r\n dateRange,\r\n filter,\r\n serverContext,\r\n perfMarkerUtils,\r\n sesId,\r\n i18n,\r\n preferenceService,\r\n selectedMetricIndexes,\r\n metrics,\r\n patchPreference,\r\n getCardsConfig,\r\n responsiveSize,\r\n shellContentElement,\r\n campaignType,\r\n constructOptions,\r\n } = props;\r\n const {\r\n CurrentAccount: {\r\n TimeZone,\r\n },\r\n } = serverContext;\r\n const instrumentation = useContext(InstrumentationContext);\r\n const { activity } = useMemo(() => instrumentation.createScenarioAndActivity({\r\n scenarioName: 'Fluent2OverviewPage',\r\n activityName: 'FluentPerformanceCard',\r\n }), [instrumentation]);\r\n const {\r\n willFetchData,\r\n willRender,\r\n done,\r\n } = perfMarkerUtils;\r\n\r\n const {\r\n initialSelectedMetricIndexesFromPreference,\r\n initialMetricsFromPreference,\r\n preferencePatch,\r\n } = useMemo(() => {\r\n // non pmax single campaign overview page is using new preference structure.\r\n if (selectedMetricIndexes && metrics && patchPreference) {\r\n return {\r\n initialSelectedMetricIndexesFromPreference: selectedMetricIndexes,\r\n initialMetricsFromPreference: metrics,\r\n preferencePatch: patchPreference,\r\n };\r\n }\r\n\r\n // in pmax single campaign overview page, we reuse the old preference structure from legacy overview page.\r\n // we may want to remove this after all the single campaign overview pages are migrated to new preference structure.\r\n const {\r\n get,\r\n set,\r\n } = getPreference({\r\n preferenceService,\r\n preferenceName,\r\n dashboardPreferenceKey,\r\n cardId: cardPerformanceId,\r\n activity,\r\n });\r\n const { selectedMetricIndexes: selectedMetricIndexesFromLegacy, metrics: metricsFromLegacy } = get();\r\n return {\r\n initialSelectedMetricIndexesFromPreference: selectedMetricIndexesFromLegacy,\r\n initialMetricsFromPreference: metricsFromLegacy,\r\n preferencePatch: set,\r\n };\r\n }, [activity, metrics, patchPreference, preferenceService, selectedMetricIndexes]);\r\n\r\n const {\r\n selectedMetricIndexes: selectedMetricIndexesFromDataHook,\r\n setSelectedMetricIndexes,\r\n visibleMetrics,\r\n setVisibleMetrics,\r\n performanceData,\r\n aggregatedMetricPickerData,\r\n hideCurrency,\r\n granularity,\r\n isLoading,\r\n isFirstDataLoaded,\r\n hasError,\r\n } = useData({\r\n dateRange,\r\n filter,\r\n i18n,\r\n initialSelectedMetricIndexesFromPreference,\r\n initialMetricsFromPreference,\r\n getCardsConfig,\r\n sesId,\r\n activity,\r\n willRender,\r\n willFetchData,\r\n campaignType,\r\n constructOptions,\r\n });\r\n\r\n const onMetricUpdate = useCallback((newSelectedMetricIndexes, newVisibleMetrics) => {\r\n setSelectedMetricIndexes(newSelectedMetricIndexes);\r\n setVisibleMetrics(newVisibleMetrics);\r\n\r\n preferencePatch({\r\n metrics: newVisibleMetrics,\r\n selectedMetricIndexes: newSelectedMetricIndexes,\r\n });\r\n }, [setSelectedMetricIndexes, setVisibleMetrics, preferencePatch]);\r\n\r\n if (isFirstDataLoaded) {\r\n done();\r\n }\r\n\r\n const Card = useMemo(() => (_.get(serverContext, ['Permissions', 'IsFluentPerformanceLinechartEnabled'], false) ? PerformanceCardFluent : PerformanceCard), [serverContext]);\r\n return (\r\n \r\n );\r\n};\r\n\r\nPerformanceCardContainer.propTypes = {\r\n dateRange: PropTypes.shape({\r\n start: PropTypes.instanceOf(Date).isRequired,\r\n end: PropTypes.instanceOf(Date).isRequired,\r\n compared: PropTypes.shape({\r\n start: PropTypes.instanceOf(Date).isRequired,\r\n end: PropTypes.instanceOf(Date).isRequired,\r\n }),\r\n }).isRequired,\r\n filter: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n serverContext: PropTypes.shape({\r\n Urls: PropTypes.shape({\r\n ClientCenterBaseUrl: PropTypes.string.isRequired,\r\n }).isRequired,\r\n CurrentAccount: PropTypes.shape({\r\n TimeZone: PropTypes.number.isRequired,\r\n }),\r\n }).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n sesId: PropTypes.number,\r\n preferenceService: PropTypes.shape({}),\r\n selectedMetricIndexes: PropTypes.arrayOf(PropTypes.number),\r\n metrics: PropTypes.arrayOf(PropTypes.string),\r\n patchPreference: PropTypes.func,\r\n getCardsConfig: PropTypes.func,\r\n responsiveSize: PropTypes.string.isRequired,\r\n perfMarkerUtils: PropTypes.shape({\r\n willFetchData: PropTypes.func.isRequired,\r\n willRender: PropTypes.func.isRequired,\r\n done: PropTypes.func.isRequired,\r\n }).isRequired,\r\n shellContentElement: PropTypes.instanceOf(Element),\r\n campaignType: PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.number,\r\n ]).isRequired,\r\n};\r\n\r\nPerformanceCardContainer.defaultProps = {\r\n sesId: -1,\r\n selectedMetricIndexes: null,\r\n metrics: null,\r\n patchPreference: null,\r\n getCardsConfig: defaultGetCardsConfig,\r\n shellContentElement: document.querySelector('body'),\r\n preferenceService: undefined,\r\n};\r\n","import { useState, useEffect, useMemo, useContext } from 'react';\r\nimport stringify from 'json-stable-stringify';\r\nimport _ from 'underscore';\r\n\r\n// Move legacy deps and data reading out from UI component\r\nimport edm from '@bingads-webui-component-legacy/edm-campaign/index';\r\nimport {\r\n getFilteredTotalsMetrics,\r\n availableGranularities,\r\n fetchAggregatedData,\r\n allMetrics,\r\n metricToDisplayNameMap,\r\n AccountsMode,\r\n} from '@bingads-webui-campaign/overview-cards-common';\r\n\r\nimport dateUtil from '@bingads-webui-component-legacy/humanize/date';\r\nimport { fetchPerformanceTimeSeries } from '@bingads-webui-campaign-legacy/performance-graph/data-fetch';\r\nimport jsdata from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport config from '@bingads-webui-component-legacy/config/index';\r\nimport { formatMetric } from '@bingads-webui-campaign-legacy/performance-metric-formatter/index';\r\nimport legacyPreference from '@bingads-webui-component-legacy/preference/service/index';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { cardPerformanceId } from '@bingads-webui-campaign/fluent-page-consts';\r\n\r\nimport {\r\n getNavigationLevel,\r\n NavigationLevel,\r\n useIsPreferenceInitialized,\r\n} from '@bingads-webui-campaign/fluent-page-data';\r\n\r\n\r\nexport function useData({\r\n dateRange,\r\n filter,\r\n i18n,\r\n initialSelectedMetricIndexesFromPreference,\r\n initialMetricsFromPreference,\r\n getCardsConfig,\r\n sesId,\r\n activity,\r\n willRender,\r\n willFetchData,\r\n campaignType,\r\n constructOptions,\r\n}) {\r\n const [selectedMetricIndexes, setSelectedMetricIndexes] = useState([]);\r\n const [visibleMetrics, setVisibleMetrics] = useState([]);\r\n const [performanceData, setPerformanceData] = useState([]);\r\n const [aggregatedMetricPickerData, setAggregatedMetricPickerData] = useState([]);\r\n const [hideCurrency, setHideCurrency] = useState(false);\r\n const [isChartLoading, setIsChartLoading] = useState(false);\r\n const [isMetricLoading, setIsMetricLoading] = useState(false);\r\n const [isFirstDataLoaded, setIsFirstDataLoaded] = useState(false);\r\n const [hasError, setHasError] = useState(false);\r\n const { scope } = useContext(ScopeContext);\r\n\r\n const navigationLevel = useMemo(() => getNavigationLevel(scope.values), [scope.values]);\r\n const granularity = useMemo(() => availableGranularities(dateRange, dateUtil)[0], [dateRange]);\r\n const isPreferenceInitialized = useIsPreferenceInitialized(legacyPreference);\r\n useEffect(() => {\r\n if (isPreferenceInitialized && _.isEmpty(visibleMetrics)) {\r\n setSelectedMetricIndexes(initialSelectedMetricIndexesFromPreference);\r\n setVisibleMetrics(initialMetricsFromPreference);\r\n }\r\n }, [isPreferenceInitialized, visibleMetrics, initialSelectedMetricIndexesFromPreference, initialMetricsFromPreference]);\r\n\r\n const isLoading = isChartLoading || isMetricLoading;\r\n const dateString = stringify(dateRange);\r\n const filterString = stringify(filter);\r\n\r\n const entitySet = useMemo(() => {\r\n if (constructOptions) {\r\n return constructOptions({\r\n campaignType,\r\n navigationLevel,\r\n }).entitySet;\r\n }\r\n\r\n // Now Pmax Campaign Overview page is using this path without constructOptions\r\n // After we merge Pmax Campaign Overview page into our new page, we can remove this.\r\n return edm.currentAccount.Campaigns;\r\n }, [campaignType, constructOptions, navigationLevel]);\r\n\r\n const params = new URLSearchParams(document.location.search);\r\n const campaignId = params.get('campaignId');\r\n const extendedFilter = useMemo(() => {\r\n let extraFilter = [];\r\n if (constructOptions) {\r\n ({ extraFilter = [] } = constructOptions({\r\n campaignType,\r\n navigationLevel,\r\n }));\r\n // Now Pmax Campaign Overview page is using this path without constructOptions\r\n // After we merge Pmax Campaign Overview page into our new page, we can remove this.\r\n } else if (campaignId) {\r\n extraFilter = [{\r\n filter: {\r\n key: 'CampaignId',\r\n value: {\r\n query: {\r\n Id: Number(campaignId),\r\n },\r\n },\r\n },\r\n }];\r\n }\r\n\r\n let baseFilter = filter || [];\r\n if (campaignId) {\r\n // If we have campaign Id in query, we should not apply any campaign status filter anymore.\r\n baseFilter = baseFilter.filter(item => _.isEmpty(_.result(item, ['filter', 'value', 'query', 'CampaignStatus'])));\r\n }\r\n return [\r\n ...baseFilter,\r\n ...extraFilter,\r\n ];\r\n // we cannot check object filter here, because it will always be a different object\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [campaignId, constructOptions, filterString]);\r\n const fetchSingleTile = navigationLevel === NavigationLevel.Campaign;\r\n\r\n useEffect(() => {\r\n if (dateRange && filter && !isLoading) {\r\n setIsChartLoading(true);\r\n setIsMetricLoading(true);\r\n setHasError(false);\r\n setAggregatedMetricPickerData([]);\r\n activity.trace(`Load fluent perf chart data with new date and filter value: date: ${dateString} filter: ${filterString}`);\r\n willFetchData();\r\n fetchPerformanceTimeSeries({\r\n entitySet,\r\n movingAverage: false,\r\n period: dateRange,\r\n filter: extendedFilter,\r\n campaignType,\r\n granularity,\r\n navigationLevel,\r\n // TODO: this is used for account level call, we need to handle this in the future\r\n getCardsConfig,\r\n fetchSingleTile,\r\n accountsMode: 1,\r\n dfmCacheKey: `${cardPerformanceId}-time-series`,\r\n }).then((data) => {\r\n // This interface is weird, it still resolves if there is an error\r\n if (!data || !data.performanceTimeSeries) {\r\n setHasError(true);\r\n activity.error(`Load fluent perf chart data error: ${JSON.stringify(data)}`);\r\n return;\r\n }\r\n\r\n setPerformanceData(data.performanceTimeSeries);\r\n }).finally(() => {\r\n setIsChartLoading(false);\r\n setIsFirstDataLoaded(true);\r\n willRender();\r\n }).catch((e) => {\r\n setHasError(true);\r\n activity.error(`Load fluent perf chart data error: ${JSON.stringify(e)}`);\r\n });\r\n\r\n const permissions = config.get('Permissions');\r\n fetchAggregatedData({\r\n entitySet,\r\n dateRange,\r\n filter: extendedFilter,\r\n jsdata,\r\n dateUtil,\r\n navigationLevel,\r\n getCardsConfig,\r\n fetchSingleTile,\r\n accountsMode: 1,\r\n permissions,\r\n dfmCacheKey: `${cardPerformanceId}-aggregated-data`,\r\n campaignType,\r\n }).then((data) => {\r\n // This interface is weird, it still resolves if there is an error\r\n if (!data || (!data.raw && !data.OverallTotals)) {\r\n setHasError(true);\r\n activity.error(`Load fluent perf chart aggregated data error: ${JSON.stringify(data)}`);\r\n return;\r\n }\r\n const totalMetrics = getFilteredTotalsMetrics({\r\n data,\r\n metric: 'PerformanceMetrics',\r\n }) || {};\r\n const availableMetricKeys = allMetrics(permissions, AccountsMode.Expert, campaignType);\r\n const availableTotalMetrics = _.pick(totalMetrics, availableMetricKeys);\r\n setHideCurrency(data.AccountsHaveDifferentCurrencies);\r\n const metricPickerData = Object.keys(availableTotalMetrics).map((key) => {\r\n const metric = totalMetrics[key];\r\n return {\r\n key,\r\n total: formatMetric(\r\n key,\r\n metric || 0,\r\n { hideCurrency: data.AccountsHaveDifferentCurrencies }\r\n ),\r\n displayName: i18n.getString(metricToDisplayNameMap[key]),\r\n };\r\n });\r\n setAggregatedMetricPickerData(metricPickerData);\r\n }).finally(() => {\r\n setIsMetricLoading(false);\r\n }).catch((e) => {\r\n setHasError(true);\r\n activity.error(`Load fluent perf chart aggregated data error: ${JSON.stringify(e)}`);\r\n });\r\n }\r\n\r\n // we only update when dateString, filterString, sesId change\r\n // we cannot check object dateRange and filter here, because they will always be a different object\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [dateString, filterString, sesId, campaignType]);\r\n\r\n return {\r\n selectedMetricIndexes,\r\n setSelectedMetricIndexes,\r\n visibleMetrics,\r\n setVisibleMetrics,\r\n performanceData,\r\n aggregatedMetricPickerData,\r\n hideCurrency,\r\n granularity,\r\n isLoading,\r\n isFirstDataLoaded,\r\n hasError,\r\n };\r\n}\r\n","import _ from 'underscore';\r\nimport React, { useState, useMemo, useCallback, useContext } from 'react';\r\nimport classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport { Toggle } from '@fluentui/react';\r\nimport { Dropdown, TextField } from '@bingads-webui-react/fabric-with-signal';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { withCustomValidation, withValidation, withError } from '@bingads-webui-react/validation';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { mergeI18n } from '@bingads-webui-campaign-react/i18n-merger';\r\n\r\nconst ValidatedTextField = withValidation(TextField);\r\n\r\nconst FrequencyIntervals = {\r\n Hour: 'HOUR',\r\n Day: 'DAY',\r\n Week: 'WEEK',\r\n Month: 'MONTH',\r\n Lifetime: 'LIFETIME',\r\n};\r\n\r\nconst FrequencyCapUnit = 'IMPRESSION';\r\n\r\nconst getKeyStringMap = i18n => [\r\n { key: FrequencyIntervals.Hour, text: i18n.getString(_TL_('hour')) },\r\n { key: FrequencyIntervals.Day, text: i18n.getString(_TL_('day')) },\r\n { key: FrequencyIntervals.Week, text: i18n.getString(_TL_('week')) },\r\n];\r\n\r\nexport const formatFrequencyCapping = ({ CapValue, TimeGranularity, i18n }) => {\r\n let interval;\r\n if (TimeGranularity === undefined || TimeGranularity === null) {\r\n return i18n.getString(_TL_('No limit to how often people see your ads'));\r\n }\r\n if (TimeGranularity === '') {\r\n interval = '';\r\n } else {\r\n interval = getKeyStringMap(i18n).find(({ key }) => key === TimeGranularity).text;\r\n }\r\n return i18n.getString(_TL_('{{count}} times per {{interval}}'), { count: CapValue, interval });\r\n};\r\n\r\nconst textWidth = 100;\r\nconst textStyles = { root: { width: textWidth } };\r\n\r\nconst dropdownWidth = 100;\r\nconst dropDownStyles = { dropdown: { width: dropdownWidth } };\r\n\r\nconst getStyle = () => ({\r\n inputContainer: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n frequency: {\r\n margin: '0 10px',\r\n },\r\n});\r\n\r\nconst ValueAndInterval = ({\r\n i18n,\r\n TimeGranularity,\r\n onIntervalChanged,\r\n timeOptions,\r\n validationProps,\r\n}) => {\r\n const classes = useDefaultStyles(getStyle);\r\n\r\n return (\r\n
\r\n \r\n {formatFrequencyCapping({ CapValue: '', TimeGranularity: '', i18n })}\r\n \r\n
\r\n );\r\n};\r\n\r\nValueAndInterval.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n TimeGranularity: PropTypes.string,\r\n onIntervalChanged: PropTypes.func.isRequired,\r\n timeOptions: PropTypes.shape({}).isRequired,\r\n validationProps: PropTypes.shape({}).isRequired,\r\n};\r\n\r\nValueAndInterval.defaultProps = {\r\n TimeGranularity: '',\r\n};\r\n\r\nconst ValidatedValueAndInterval = withError(ValueAndInterval);\r\n\r\nconst FrequencyCapping = (props) => {\r\n const {\r\n i18n: newI18n,\r\n legacyI18n,\r\n validationProps,\r\n updateValidation,\r\n } = props;\r\n\r\n const i18n = useMemo(() => mergeI18n(legacyI18n, newI18n), [legacyI18n, newI18n]);\r\n const activity = useContext(ActivityContext);\r\n const { FrequencyCapSettings } = validationProps;\r\n const { CapValue = null, TimeGranularity } = FrequencyCapSettings[0] || {};\r\n const [errorMessage, setErrorMessage] = useState([]);\r\n\r\n const onIntervalChanged = useCallback((e, value) => {\r\n updateValidation(errorMessage, {\r\n FrequencyCapSettings: [{\r\n CapValue,\r\n TimeGranularity: value.key,\r\n FrequencyCapUnit,\r\n }],\r\n });\r\n\r\n if (activity) {\r\n activity.signal(`onFrequencyIntervalChanged - ${JSON.stringify(value)})}`);\r\n }\r\n }, [updateValidation, errorMessage, CapValue, activity]);\r\n\r\n const timeOptions = useMemo(() => getKeyStringMap(i18n), [i18n]);\r\n\r\n const onToggle = useCallback((e, checked) => {\r\n if (checked) {\r\n updateValidation([], {\r\n FrequencyCapSettings: [{\r\n CapValue: undefined,\r\n TimeGranularity: TimeGranularity || FrequencyIntervals.Hour,\r\n FrequencyCapUnit,\r\n }],\r\n });\r\n } else {\r\n updateValidation([], { FrequencyCapSettings: [{}] });\r\n }\r\n\r\n if (activity) {\r\n activity.signal(`onFrequencyCapToggleChanged - toggleStatus: ${checked}`);\r\n }\r\n }, [TimeGranularity, activity, updateValidation]);\r\n\r\n const onCountValidate = useCallback((result) => {\r\n const { messages = [], data: { capValue } } = result;\r\n if (!_.isEqual(messages, errorMessage) || capValue !== CapValue) {\r\n setErrorMessage(messages);\r\n\r\n updateValidation(messages, {\r\n FrequencyCapSettings: [{\r\n CapValue: capValue,\r\n TimeGranularity,\r\n FrequencyCapUnit,\r\n }],\r\n });\r\n }\r\n }, [errorMessage, CapValue, updateValidation, TimeGranularity]);\r\n\r\n const customErrors = {\r\n decimalLength: i18n.getString(_TL_('Field requires integer value')),\r\n };\r\n\r\n const errorProcessor = errors => _.map(\r\n errors,\r\n (oldError, key) => customErrors[key] || oldError\r\n );\r\n\r\n return (\r\n \r\n \r\n { TimeGranularity && (\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nFrequencyCapping.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n legacyI18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n classes: PropTypes.shape({\r\n inputContainer: PropTypes.string.isRequired,\r\n frequency: PropTypes.string.isRequired,\r\n }).isRequired,\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n CapValue: PropTypes.string,\r\n TimeGranularity: PropTypes.string,\r\n }),\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n};\r\n\r\nconst ValidatedFrequencyCapping = withCustomValidation(FrequencyCapping);\r\n\r\nexport {\r\n FrequencyCapping,\r\n ValidatedFrequencyCapping,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withLock, keyVault } from '@bingads-webui-react/popup-manager';\r\nimport { Callout } from '@bingads-webui-react/callout';\r\n\r\nexport const CalloutWithLock = ({ lockKey, ...props }) => {\r\n const CalloutWithLockInner = withLock(Callout, {\r\n lockKey,\r\n force: true,\r\n });\r\n\r\n return ();\r\n};\r\n\r\nCalloutWithLock.propTypes = {\r\n lockKey: PropTypes.string,\r\n};\r\n\r\nCalloutWithLock.defaultProps = {\r\n lockKey: keyVault.hoveringPopup,\r\n};\r\n","import React, { useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { keyVault } from '@bingads-webui-react/popup-manager';\r\nimport { CalloutWithLock } from './callout-with-lock';\r\n\r\nexport const GridTooltip = (props) => {\r\n const { onClose, onMouseLeave, parentView } = props;\r\n\r\n useEffect(() => {\r\n if (parentView) {\r\n parentView.on('closePopup', onClose);\r\n }\r\n\r\n return () => {\r\n if (parentView) {\r\n parentView.off('closePopup');\r\n }\r\n };\r\n }, [onClose, parentView]);\r\n\r\n useEffect(() => {\r\n document.querySelector('.table-page-container')?.addEventListener('scroll.actionCallout', onClose);\r\n document.querySelector('.table-page-container .scrollbars-view')?.addEventListener('scroll.actionCallout', onClose);\r\n\r\n return () => {\r\n document.querySelector('.table-page-container')?.removeEventListener('scroll.actionCallout', onClose);\r\n document.querySelector('.table-page-container .scrollbars-view')?.removeEventListener('scroll.actionCallout', onClose);\r\n };\r\n }, [onClose]);\r\n\r\n return (\r\n
\r\n \r\n
);\r\n};\r\n\r\nGridTooltip.propTypes = {\r\n parentView: PropTypes.shape(),\r\n onClose: PropTypes.func.isRequired,\r\n onMouseLeave: PropTypes.func.isRequired,\r\n};\r\n\r\nGridTooltip.defaultProps = {\r\n parentView: null,\r\n};\r\n","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (view) {pug_html = pug_html + \"\\u003Cdiv class=\\\"panel-footer\\\"\\u003E\\u003Cdiv data-bind=\\\"html: changeText\\\" role=\\\"alert\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"previewTable grid\\\" data-bind=\\\"if: results().length > 0, visible: results().length > 0\\\"\\u003E\\u003Ctable\\u003E\\u003Cthead\\u003E\\u003Ctr class=\\\"grid-header-row\\\"\\u003E\";\n// iterate view.viewModel.columns\n;(function(){\n var $$obj = view.viewModel.columns;\n if ('number' == typeof $$obj.length) {\n for (var pug_index0 = 0, $$l = $$obj.length; pug_index0 < $$l; pug_index0++) {\n var column = $$obj[pug_index0];\npug_html = pug_html + \"\\u003Cth class=\\\"grid-header-cell grid-disabledsort\\\"\\u003E\\u003Cdiv class=\\\"grid-header-textcontainer\\\"\\u003E\\u003Ca class=\\\"grid-header-text\\\"\\u003E\" + (pug.escape(null == (pug_interp = column) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fth\\u003E\";\n }\n } else {\n var $$l = 0;\n for (var pug_index0 in $$obj) {\n $$l++;\n var column = $$obj[pug_index0];\npug_html = pug_html + \"\\u003Cth class=\\\"grid-header-cell grid-disabledsort\\\"\\u003E\\u003Cdiv class=\\\"grid-header-textcontainer\\\"\\u003E\\u003Ca class=\\\"grid-header-text\\\"\\u003E\" + (pug.escape(null == (pug_interp = column) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fth\\u003E\";\n }\n }\n}).call(this);\n\npug_html = pug_html + \"\\u003C\\u002Ftr\\u003E\\u003C\\u002Fthead\\u003E\\u003Ctbody data-bind=\\\"foreach: results\\\"\\u003E\\u003Ctr class=\\\"grid-row\\\" data-bind=\\\"foreach: $data.data\\\"\\u003E\\u003Ctd class=\\\"grid-cell\\\"\\u003E\\u003C!-- ko if: $data.isHtml--\\u003E\\u003Cdiv class=\\\"grid-content-container\\\" data-bind=\\\"html: $data.value\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C!-- \\u002Fko--\\u003E\\u003C!-- ko if: !$data.isHtml--\\u003E\\u003Cdiv class=\\\"grid-content-container\\\" data-bind=\\\"text: $data.value\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C!-- \\u002Fko--\\u003E\\u003C\\u002Ftd\\u003E\\u003C\\u002Ftr\\u003E\\u003C\\u002Ftbody\\u003E\\u003C\\u002Ftable\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"view\" in locals_for_with?locals_for_with.view:typeof view!==\"undefined\"?view: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 (campaignRemarketingAssociated, fromAudienceLibrary, i18n, isCustomInMarketEnabled) {if ((fromAudienceLibrary)) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"alert alert-warning\\\"\\u003E\" + (null == (pug_interp = isCustomInMarketEnabled ? i18n.getString('Audiences_GoToCampaignTab_Custom_InMarket_Message') : i18n.getString('Audiences_GoToCampaignTab_Message')) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\";\n}\nif ((campaignRemarketingAssociated)) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"alert alert-warning\\\"\\u003E\\u003Cspan\\u003E\" + (null == (pug_interp = isCustomInMarketEnabled ? i18n.getString('Audiences_AssociationSuccess_Message_CustomInMarket_Campaign').replace('{0}', '' + i18n.getString('Remarketing_Tutorial_Step3_Desc_AudienceTabLink') + '') : i18n.getString('Audiences_AssociationSuccess_Message_Campaign').replace('{0}', '' + i18n.getString('Remarketing_Tutorial_Step3_Desc_AudienceTabLink') + '')) ? \"\" : pug_interp) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\";\n}}.call(this,\"campaignRemarketingAssociated\" in locals_for_with?locals_for_with.campaignRemarketingAssociated:typeof campaignRemarketingAssociated!==\"undefined\"?campaignRemarketingAssociated:undefined,\"fromAudienceLibrary\" in locals_for_with?locals_for_with.fromAudienceLibrary:typeof fromAudienceLibrary!==\"undefined\"?fromAudienceLibrary:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"isCustomInMarketEnabled\" in locals_for_with?locals_for_with.isCustomInMarketEnabled:typeof isCustomInMarketEnabled!==\"undefined\"?isCustomInMarketEnabled: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 (budgetId, budgetType, enabledBidlandscape, hasBidlandscapeIcon, i18n, targetCpaValue) {if (targetCpaValue) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"status-column\\\"\\u003E\" + (pug.escape(null == (pug_interp = targetCpaValue) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\nif (hasBidlandscapeIcon&&budgetType) {\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"status-column\",\"iconba\",\"iconba-Financial\",\"bidlandscape_icon\",\"spritedimagealign\",\"spritedimage\",\"clickable\",enabledBidlandscape?'enabled':'disabled'], [false,false,false,false,false,false,false,true]), false, true)+\" tabindex=\\\"0\\\" role=\\\"button\\\"\"+pug.attr(\"id\", `campainBidLandscape${budgetId}`, true, true)+pug.attr(\"aria-label\", i18n.getString('Campaign_BidLandscape_Title'), true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\n}\nelse {\npug_html = pug_html + (pug.escape(null == (pug_interp = ' ') ? \"\" : pug_interp));\n}}.call(this,\"budgetId\" in locals_for_with?locals_for_with.budgetId:typeof budgetId!==\"undefined\"?budgetId:undefined,\"budgetType\" in locals_for_with?locals_for_with.budgetType:typeof budgetType!==\"undefined\"?budgetType:undefined,\"enabledBidlandscape\" in locals_for_with?locals_for_with.enabledBidlandscape:typeof enabledBidlandscape!==\"undefined\"?enabledBidlandscape:undefined,\"hasBidlandscapeIcon\" in locals_for_with?locals_for_with.hasBidlandscapeIcon:typeof hasBidlandscapeIcon!==\"undefined\"?hasBidlandscapeIcon:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"targetCpaValue\" in locals_for_with?locals_for_with.targetCpaValue:typeof targetCpaValue!==\"undefined\"?targetCpaValue: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 (budgetId, budgetType, enabledBidlandscape, hasBidlandscapeIcon, i18n, targetRoasValue) {if (targetRoasValue) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"status-column\\\"\\u003E\" + (pug.escape(null == (pug_interp = targetRoasValue) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\nif (hasBidlandscapeIcon&&budgetType) {\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"status-column\",\"iconba\",\"iconba-Financial\",\"bidlandscape_icon\",\"spritedimagealign\",\"spritedimage\",\"clickable\",enabledBidlandscape?'enabled':'disabled'], [false,false,false,false,false,false,false,true]), false, true)+\" tabindex=\\\"0\\\" role=\\\"button\\\"\"+pug.attr(\"id\", `campainBidLandscape${budgetId}`, true, true)+pug.attr(\"aria-label\", i18n.getString('Campaign_BidLandscape_Title'), true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\n}\nelse {\npug_html = pug_html + (pug.escape(null == (pug_interp = ' ') ? \"\" : pug_interp));\n}}.call(this,\"budgetId\" in locals_for_with?locals_for_with.budgetId:typeof budgetId!==\"undefined\"?budgetId:undefined,\"budgetType\" in locals_for_with?locals_for_with.budgetType:typeof budgetType!==\"undefined\"?budgetType:undefined,\"enabledBidlandscape\" in locals_for_with?locals_for_with.enabledBidlandscape:typeof enabledBidlandscape!==\"undefined\"?enabledBidlandscape:undefined,\"hasBidlandscapeIcon\" in locals_for_with?locals_for_with.hasBidlandscapeIcon:typeof hasBidlandscapeIcon!==\"undefined\"?hasBidlandscapeIcon:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"targetRoasValue\" in locals_for_with?locals_for_with.targetRoasValue:typeof targetRoasValue!==\"undefined\"?targetRoasValue: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 (model) {if (model) {\npug_html = pug_html + \"\\u003Cdiv\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = model.budgetName) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cdiv\\u003E\";\nif (model.isBudgetCenterEntryEnabled) {\npug_html = pug_html + \"\\u003Cspan\" + (\" class=\\\"combinedBudgetGridCellValue budgetCenterEntry\\\"\"+pug.attr(\"data-budgetamount\", model.budgetAmount, true, true)+pug.attr(\"data-budgettype\", model.budgetType, true, true)+\" tabindex=\\\"0\\\" role=\\\"button\\\"\") + \"\\u003E\" + (pug.escape(null == (pug_interp = model.budgetAmount) ? \"\" : pug_interp)) + \"\\u002F\" + (pug.escape(null == (pug_interp = model.budgetTypeText) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cspan\" + (\" class=\\\"combinedBudgetGridCellValue\\\"\"+pug.attr(\"data-budgetamount\", model.budgetAmount, true, true)+pug.attr(\"data-budgettype\", model.budgetType, true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = model.budgetAmount) ? \"\" : pug_interp)) + \"\\u002F\" + (pug.escape(null == (pug_interp = model.budgetTypeText) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\n}\nif (model.AssociatedExperiment) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"status_icon gridDetailsImage spritedimagealign experiment-budget-ellipsis\\\" tabindex=\\\"0\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nif (model.hasBidlandscapeIcon&&model.budgetType) {\npug_html = pug_html + \"\\u003Cbr\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"iconba\",\"iconba-Financial\",\"bidlandscape_icon\",\"spritedimagealign\",\"spritedimage\",\"clickable\",model.enabledBidlandscape?'enabled':'disabled'], [false,false,false,false,false,false,true]), false, true)+\" tabindex=\\\"0\\\" role=\\\"button\\\"\"+pug.attr(\"id\", `campainBidLandscape${model.budgetId}`, true, true)+pug.attr(\"aria-label\", model.i18n.getString('Campaign_BidLandscape_Title'), true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + (pug.escape(null == (pug_interp = ' ') ? \"\" : pug_interp));\n}}.call(this,\"model\" in locals_for_with?locals_for_with.model:typeof model!==\"undefined\"?model: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 (Languages, i18n) {if (Languages && Languages.length > 0) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"languages-list\\\"\\u003E\";\n// iterate Languages\n;(function(){\n var $$obj = Languages;\n if ('number' == typeof $$obj.length) {\n for (var index = 0, $$l = $$obj.length; index < $$l; index++) {\n var language = $$obj[index];\nvar joiner = index > 0 ? ', ': '';\npug_html = pug_html + \"\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = joiner + i18n.getString('Language_'+Languages[index])) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\n }\n } else {\n var $$l = 0;\n for (var index in $$obj) {\n $$l++;\n var language = $$obj[index];\nvar joiner = index > 0 ? ', ': '';\npug_html = pug_html + \"\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = joiner + i18n.getString('Language_'+Languages[index])) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\n }\n }\n}).call(this);\n\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + (pug.escape(null == (pug_interp = ' ') ? \"\" : pug_interp));\n}}.call(this,\"Languages\" in locals_for_with?locals_for_with.Languages:typeof Languages!==\"undefined\"?Languages: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 (CampaignMigrationStatus, CampaignType, i18n) {if (CampaignType) {\npug_html = pug_html + \"\\u003Cdiv\\u003E\\u003Cdiv\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('CampaignType_'+CampaignType)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\nif (CampaignMigrationStatus) {\npug_html = pug_html + \"\\u003Cdiv\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('CampaignMigrationStatus_'+CampaignMigrationStatus)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + (pug.escape(null == (pug_interp = ' ') ? \"\" : pug_interp));\n}}.call(this,\"CampaignMigrationStatus\" in locals_for_with?locals_for_with.CampaignMigrationStatus:typeof CampaignMigrationStatus!==\"undefined\"?CampaignMigrationStatus:undefined,\"CampaignType\" in locals_for_with?locals_for_with.CampaignType:typeof CampaignType!==\"undefined\"?CampaignType: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 (value) {if (value.$total) {\npug_html = pug_html + \"\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = value.$total.text) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cdiv class=\\\"campaign-column-name\\\"\\u003E\";\nif (value.BaseCampaignName) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"base-campaign-name\\\"\\u003E\" + (pug.escape(null == (pug_interp = value.BaseCampaignName) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\n}\nvar skipNavigation = value.skipScopeNavigation ? 'true' : 'false';\nif (value.isForVNext) {\npug_html = pug_html + \"\\u003Ca\" + (pug.attr(\"class\", pug.classes([\"scope-navigator\",value.className], [false,true]), false, true)+pug.attr(\"href\", value.href, true, true)+pug.attr(\"data-campaignid\", value.Id, true, true)+pug.attr(\"data-skipscopenavigation\", skipNavigation, true, true)+pug.attr(\"aria-label\", value.ariaLabel, true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = value.name) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Ca\" + (\" class=\\\"campaign_link\\\"\"+pug.attr(\"href\", value.href, true, true)+pug.attr(\"id\", value.Id, true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = value.name) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\n}}.call(this,\"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 (ariaLabel, cpid, display, pathname, value) {if (display) {\nif (value) {\npug_html = pug_html + \"\\u003Ca\" + (\" class=\\\"scope-navigator\\\"\"+pug.attr(\"data-campaignid\", cpid, true, true)+pug.attr(\"data-pathname\", pathname, true, true)+pug.attr(\"aria-label\", ariaLabel, true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = value) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cspan class=\\\"clickable optimization_score_with_popover\\\" role=\\\"button\\\"\\u003E\" + (pug.escape(null == (pug_interp = ' - ') ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\n}\n}\nelse {\npug_html = pug_html + (pug.escape(null == (pug_interp = ' ') ? \"\" : pug_interp));\n}}.call(this,\"ariaLabel\" in locals_for_with?locals_for_with.ariaLabel:typeof ariaLabel!==\"undefined\"?ariaLabel:undefined,\"cpid\" in locals_for_with?locals_for_with.cpid:typeof cpid!==\"undefined\"?cpid:undefined,\"display\" in locals_for_with?locals_for_with.display:typeof display!==\"undefined\"?display:undefined,\"pathname\" in locals_for_with?locals_for_with.pathname:typeof pathname!==\"undefined\"?pathname: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 (issue, recommendation, status) {pug_html = pug_html + \"\\u003Cdiv\\u003E\";\nif (issue > 0) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"performance-insights-status\\\"\\u003E\\u003Cspan class=\\\"iconba iconba-Warning\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = status) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse\nif (recommendation > 0) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"performance-insights-status\\\"\\u003E\\u003Cspan class=\\\"iconba iconba-Lightbulb\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = status) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cdiv class=\\\"performance-insights-null-status\\\"\\u003E\" + (pug.escape(null == (pug_interp = status) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";}.call(this,\"issue\" in locals_for_with?locals_for_with.issue:typeof issue!==\"undefined\"?issue:undefined,\"recommendation\" in locals_for_with?locals_for_with.recommendation:typeof recommendation!==\"undefined\"?recommendation:undefined,\"status\" in locals_for_with?locals_for_with.status:typeof status!==\"undefined\"?status: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, scope) {var linkText = i18n.getString('CampaignsLandscapeProgress_Footer_Link');\nvar closeText = i18n.getString('CampaignsLandscapeProgress_Footer_Close');\nvar link = `${linkText}`;\nvar close = `${closeText}`;\npug_html = pug_html + \"\\u003Cdiv class=\\\"campaign-landscape-progress\\\"\\u003E\\u003Cspan class=\\\"loading-image\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cdiv class=\\\"title\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('CampaignsLandscapeProgress_Title')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"footer\\\"\\u003E\" + (null == (pug_interp = i18n.getString('CampaignsLandscapeProgress_Footer').replace('{0}', link).replace('{1}', close)) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"scope\" in locals_for_with?locals_for_with.scope:typeof scope!==\"undefined\"?scope: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=\\\"campaign-languages-inline-editor\\\"\\u003E\\u003Cdiv class=\\\"display-inline\\\"\\u003E\\u003Cdiv class=\\\"campaign-language-editor\\\"\\u003E\\u003C\\u002Fdiv\\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\";}.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 (accountCurrencyCode, budgetAmountPlaceholder, getHelpId, i18n, inheritOptionText, isCashbackScopeReadonly, isPersonalizedOffersV2Enabled, isPersonalizedOffersV3Enabled, showCashbackBudget, showCoupon, showEnableCashbackSettingsCheckbox, showInheritFromParentOption) {pug_mixins[\"popupHelp\"] = pug_interp = function(popupId, ariaLabelContext, i18n){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\nvar templateString = (i18n && i18n.get && i18n.getString('Click to learn more about {{item}}')) || (i18n && i18n.getString && i18n.getString('Click to learn more about {{item}}')) || null\npug_html = pug_html + \"\\u003Ca\" + (\" class=\\\"helpbutton\\\"\"+\" type=\\\"helppopup\\\" role=\\\"button\\\"\"+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\", templateString ? templateString.replace('{{item}}', ariaLabelContext) : ariaLabelContext, true, true)) + \"\\u003E\\u003C\\u002Fa\\u003E\";\n};\n\n\n\n\nif (showEnableCashbackSettingsCheckbox) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"enable-po-checkbox-container\\\"\\u003E\\u003Cdiv class=\\\"form-group enable-po-form-group\\\"\\u003E\\u003Ch5 class=\\\"col-sm-2 control-label\\\"\\u003E\\u003Clabel\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Campaign_Personalized_Promotions_Title')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\";\npug_mixins[\"popupHelp\"](getHelpId('Campaign_Personalized_Promotions_Title'), i18n.getString('Campaign_Personalized_Promotions_Title'), i18n);\npug_html = pug_html + \"\\u003C\\u002Fh5\\u003E\\u003Cdiv class=\\\"col-sm-8 mixed-model-dsa-settings-panel\\\"\\u003E\\u003Cdiv class=\\\"po-switch-container\\\"\\u003E\\u003Cdiv class=\\\"form-control-static description\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString(showCoupon ? 'Campaign_Personalized_Promotions_Description' : 'Campaign_Personalized_Promotions_Description_noCoupon')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Clabel class=\\\"checkbox-inline\\\"\\u003E\\u003Cinput class=\\\"po-switch\\\" type=\\\"checkbox\\\" data-bind=\\\"checked: isEnablePersonalizedOffersChecked, enable: !isEnablePersonalizedOffersDisabled(), disable: isReadOnly\\\"\\u003E\\u003Cdiv class=\\\"text\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Campaign_Enable_Personalized_Offers_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003Cdiv class=\\\"cashback-settings\\\" data-bind=\\\"visible:isEnablePersonalizedOffersChecked\\\"\\u003E\";\nif (showCashbackBudget && !isPersonalizedOffersV2Enabled) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Ch5 class=\\\"col-sm-2 control-label\\\"\\u003E\\u003Clabel id=\\\"Campaign_Maximum_Cashback_Spend_Label\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Campaign_Maximum_Cashback_Spend')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C\\u002Fh5\\u003E\\u003Cdiv class=\\\"col-sm-4\\\"\\u003E\\u003Cdiv class=\\\"input-group\\\"\\u003E\\u003Cinput\" + (\" class=\\\"cashback-budget-cap-input form-control\\\"\"+\" data-bind=\\\"value:CashbackMonthlyBudget\\\" aria-labelledby=\\\"Campaign_Maximum_Cashback_Spend_Label\\\"\"+pug.attr(\"placeholder\", budgetAmountPlaceholder, true, true)+\" maxlength=\\\"20\\\"\") + \"\\u003E\\u003Cspan class=\\\"input-group-addon\\\"\\u003E\" + (pug.escape(null == (pug_interp = accountCurrencyCode) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"error cashback-budget-error\\\" data-bind=\\\"visible: cashbackBudgetError() != null, html: cashbackBudgetError\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Ch5 class=\\\"col-sm-2 control-label\\\"\\u003E\\u003Clabel id=\\\"Campaign_Maximum_Cashback_Offer_Label\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Campaign_Maximum_Cashback_Offer')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\";\npug_mixins[\"popupHelp\"](getHelpId('Campaign_Maximum_Cashback_Offer'), i18n.getString('Campaign_Maximum_Cashback_Offer'), i18n);\npug_html = pug_html + \"\\u003C\\u002Fh5\\u003E\\u003Cdiv class=\\\"col-sm-6\\\"\\u003E\\u003Cdiv class=\\\"cashback-percent-container input-group\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"alert-div\\\"\\u003E\\u003Cdiv class=\\\"alert alert-info\\\" role=\\\"alert\\\"\\u003E\\u003Cdiv class=\\\"alert-image\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"alert__content\\\"\\u003E\\u003Cspan class=\\\"alert__message\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BulkEdit_Campaign_CashbackPercentMessage')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Ch5 class=\\\"col-sm-2 control-label\\\"\\u003E\\u003Clabel id=\\\"Campaign_Cashback_Offer_Scope_Label\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Campaign_Cashback_Offer_Scope')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\";\npug_mixins[\"popupHelp\"](getHelpId('Campaign_Cashback_Offer_Scope'), i18n.getString('Campaign_Cashback_Offer_Scope'), i18n);\npug_html = pug_html + \"\\u003C\\u002Fh5\\u003E\\u003Cdiv class=\\\"col-sm-4\\\"\\u003E\";\nif (isCashbackScopeReadonly) {\npug_html = pug_html + (pug.escape(null == (pug_interp = i18n.getString('Campaign_Cashback_Offer_Scope_Store')) ? \"\" : pug_interp));\n}\nelse {\nif (showInheritFromParentOption) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"radio\\\"\\u003E\\u003Clabel\\u003E\\u003Cinput type=\\\"radio\\\" name=\\\"cashbackScope\\\" data-bind=\\\"value: ScopeOptions.None, checked: CashbackScope\\\"\\u003E\" + (pug.escape(null == (pug_interp = inheritOptionText) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003Cdiv class=\\\"radio\\\"\\u003E\\u003Clabel\\u003E\\u003Cinput type=\\\"radio\\\" name=\\\"cashbackScope\\\" data-bind=\\\"value: ScopeOptions.Store, checked: CashbackScope\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Campaign_Cashback_Offer_Scope_Store')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\";\nif (!isCashbackScopeReadonly) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"radio\\\"\\u003E\\u003Clabel\\u003E\\u003Cinput type=\\\"radio\\\" name=\\\"cashbackScope\\\" data-bind=\\\"value: ScopeOptions.Product, checked: CashbackScope\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Campaign_Cashback_Offer_Scope_Product')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\nif (isPersonalizedOffersV3Enabled && showCoupon) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Ch5 class=\\\"col-sm-2 control-label\\\"\\u003E\\u003Clabel id=\\\"Campaign_Coupon_Label\\\"\\u003E\" + (pug.escape(null == (pug_interp = 'Coupon') ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\";\npug_mixins[\"popupHelp\"](getHelpId('Campaign_Cashback_Coupon'), i18n.getString('Campaign_Cashback_Coupon'), i18n);\npug_html = pug_html + \"\\u003C\\u002Fh5\\u003E\\u003Cdiv class=\\\"col-sm-6\\\"\\u003E\\u003Cdiv class=\\\"coupon-container input-group\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";}.call(this,\"accountCurrencyCode\" in locals_for_with?locals_for_with.accountCurrencyCode:typeof accountCurrencyCode!==\"undefined\"?accountCurrencyCode:undefined,\"budgetAmountPlaceholder\" in locals_for_with?locals_for_with.budgetAmountPlaceholder:typeof budgetAmountPlaceholder!==\"undefined\"?budgetAmountPlaceholder:undefined,\"getHelpId\" in locals_for_with?locals_for_with.getHelpId:typeof getHelpId!==\"undefined\"?getHelpId:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"inheritOptionText\" in locals_for_with?locals_for_with.inheritOptionText:typeof inheritOptionText!==\"undefined\"?inheritOptionText:undefined,\"isCashbackScopeReadonly\" in locals_for_with?locals_for_with.isCashbackScopeReadonly:typeof isCashbackScopeReadonly!==\"undefined\"?isCashbackScopeReadonly:undefined,\"isPersonalizedOffersV2Enabled\" in locals_for_with?locals_for_with.isPersonalizedOffersV2Enabled:typeof isPersonalizedOffersV2Enabled!==\"undefined\"?isPersonalizedOffersV2Enabled:undefined,\"isPersonalizedOffersV3Enabled\" in locals_for_with?locals_for_with.isPersonalizedOffersV3Enabled:typeof isPersonalizedOffersV3Enabled!==\"undefined\"?isPersonalizedOffersV3Enabled:undefined,\"showCashbackBudget\" in locals_for_with?locals_for_with.showCashbackBudget:typeof showCashbackBudget!==\"undefined\"?showCashbackBudget:undefined,\"showCoupon\" in locals_for_with?locals_for_with.showCoupon:typeof showCoupon!==\"undefined\"?showCoupon:undefined,\"showEnableCashbackSettingsCheckbox\" in locals_for_with?locals_for_with.showEnableCashbackSettingsCheckbox:typeof showEnableCashbackSettingsCheckbox!==\"undefined\"?showEnableCashbackSettingsCheckbox:undefined,\"showInheritFromParentOption\" in locals_for_with?locals_for_with.showInheritFromParentOption:typeof showInheritFromParentOption!==\"undefined\"?showInheritFromParentOption: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, isCampaign, options, selectedOption) {pug_html = pug_html + \"\\u003Cdiv class=\\\"coupon-options\\\"\\u003E\";\nif (isCampaign) {\npug_html = pug_html + \"\\u003Clabel class=\\\"checkbox-inline\\\"\\u003E\\u003Cinput\" + (\" class=\\\"coupon-switch\\\"\"+\" type=\\\"checkbox\\\"\"+pug.attr(\"checked\", selectedOption === 'Enabled', true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Campaign_Enable_Personalized_Coupons_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\";\n}\nelse {\n// iterate options\n;(function(){\n var $$obj = options;\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 + \"\\u003Cdiv class=\\\"radio\\\"\\u003E\\u003Clabel\\u003E\\u003Cinput\" + (\" type=\\\"radio\\\"\"+pug.attr(\"name\", item.text, true, true)+pug.attr(\"value\", item.value, true, true)+pug.attr(\"checked\", item.value === selectedOption, true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = item.text) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\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 + \"\\u003Cdiv class=\\\"radio\\\"\\u003E\\u003Clabel\\u003E\\u003Cinput\" + (\" type=\\\"radio\\\"\"+pug.attr(\"name\", item.text, true, true)+pug.attr(\"value\", item.value, true, true)+pug.attr(\"checked\", item.value === selectedOption, true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = item.text) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\";\n }\n }\n}).call(this);\n\n}\npug_html = pug_html + \"\\u003Cdiv class=\\\"coupon-error-container error\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"isCampaign\" in locals_for_with?locals_for_with.isCampaign:typeof isCampaign!==\"undefined\"?isCampaign:undefined,\"options\" in locals_for_with?locals_for_with.options:typeof options!==\"undefined\"?options: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 (actionClass, actionText, brandName, isReadOnly) {if (isReadOnly) {\npug_html = pug_html + \"\\u003Cp class=\\\"read-only-link\\\"\\u003E\" + (pug.escape(null == (pug_interp = actionText) ? \"\" : pug_interp)) + \"\\u003C\\u002Fp\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Ca\" + (pug.attr(\"class\", pug.classes([actionClass ? actionClass : '',\"clickable\"], [true,false]), false, true)+\" href=\\\"javascript:void(0);\\\"\"+pug.attr(\"aria-label\", `${actionText} ${brandName}`, true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = actionText) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\";\n}}.call(this,\"actionClass\" in locals_for_with?locals_for_with.actionClass:typeof actionClass!==\"undefined\"?actionClass:undefined,\"actionText\" in locals_for_with?locals_for_with.actionText:typeof actionText!==\"undefined\"?actionText:undefined,\"brandName\" in locals_for_with?locals_for_with.brandName:typeof brandName!==\"undefined\"?brandName:undefined,\"isReadOnly\" in locals_for_with?locals_for_with.isReadOnly:typeof isReadOnly!==\"undefined\"?isReadOnly: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 (view) {pug_mixins[\"koValidationError\"] = pug_interp = function(item, id){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Cul\" + (pug.attr(\"data-bind\", `visible: !${item}.isValid(), foreach: ${item}.errors, attr: {\"aria-hidden\": ${item}.isValid()}`, true, true)+pug.attr(\"id\", id ? id : `${item}ValidationError`, true, true)+\" role=\\\"alert\\\"\") + \"\\u003E\\u003Cli\\u003E\\u003Cdiv class=\\\"error\\\" data-bind=\\\"html: $data\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fli\\u003E\\u003C\\u002Ful\\u003E\";\n};\npug_mixins[\"helpButton\"] = pug_interp = function(helpId){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Ca\" + (\" class=\\\"helpbutton\\\"\"+\" onclick=\\\"PopupController.PopupJsClick(this);\\\" type=\\\"helppopup\\\"\"+pug.attr(\"topic\", helpId, true, true)+\" href=\\\"javascript:void(0);\\\"\") + \"\\u003E\\u003C\\u002Fa\\u003E\";\n};\npug_mixins[\"learnMoreHelpTopic\"] = pug_interp = function(helpId, i18n){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Ca\" + (\" class=\\\"HelpTopic\\\"\"+pug.attr(\"query\", `help:${helpId}`, true, true)+\" href=\\\"javascript:void(0);\\\"\") + \"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Control_PaneHelp_LearnMore')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\";\n};\n\n\n\n\n\n\n\n\npug_mixins[\"koErrors\"] = pug_interp = function(id, cssClass){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Cul\" + (pug.attr(\"class\", pug.classes([cssClass ? cssClass : 'alert alert-danger'], [true]), false, true)+\" data-bind=\\\"visible: errors().length > 0, foreach: errors, attr: {"aria-hidden": errors().length == 0}\\\"\"+pug.attr(\"id\", id ? id : 'KoErrors', true, true)+\" role=\\\"alert\\\"\") + \"\\u003E\\u003Cli data-bind=\\\"html: $data\\\"\\u003E\\u003C\\u002Fli\\u003E\\u003C\\u002Ful\\u003E\";\n};\n\n\n\n\npug_html = pug_html + \"\\u003Cdiv class=\\\"link-store-container form-inline\\\"\\u003E\\u003Cdiv class=\\\"panel\\\"\\u003E\\u003Cdiv class=\\\"panel-heading\\\"\\u003E\\u003Cdiv class=\\\"panel-title\\\"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('CPG_LinkToolbar_Title')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"panel-body\\\"\\u003E\\u003Cdiv class=\\\"section-desc\\\"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('CPG_LinkToolbar_Desc')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\npug_mixins[\"learnMoreHelpTopic\"]('app54616', view.i18n);\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\npug_mixins[\"koErrors\"]('linkToStoreErrors');\npug_html = pug_html + \"\\u003Cdiv class=\\\"section-body form-horizontal\\\"\\u003E\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Cspan class=\\\"grid-header-text\\\"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('CPG_LinkToolbar_StoreId')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\npug_mixins[\"helpButton\"]('pop_BA_CampaignGrids_Store_ID');\npug_html = pug_html + \"\\u003Cinput class=\\\"store-id-input form-control\\\" type=\\\"text\\\" data-bind=\\\"value: storeId, valueUpdate: 'input', css: { 'validation-error': !storeId.isValid() }\\\"\\u003E\";\npug_mixins[\"koValidationError\"]('storeId');\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"panel-footer\\\"\\u003E\\u003Cinput\" + (\" class=\\\"btn btn-primary btn-sendReq\\\"\"+\" type=\\\"button\\\"\"+pug.attr(\"value\", view.i18n.getString('CPG_LinkToolbar_ButtonSendReq'), true, true)+\" data-bind=\\\"attr: { disabled: !isValid() }\\\"\") + \"\\u003E\\u003Cinput\" + (\" class=\\\"btn btn-default btn-cancel\\\"\"+\" type=\\\"button\\\"\"+pug.attr(\"value\", view.i18n.getString('CPG_LinkToolbar_ButtonCancel'), true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"view\" in locals_for_with?locals_for_with.view:typeof view!==\"undefined\"?view: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 (actionClass, actionText, isReadOnly, storeName) {if (isReadOnly) {\npug_html = pug_html + \"\\u003Cp class=\\\"read-only-link\\\"\\u003E\" + (pug.escape(null == (pug_interp = actionText) ? \"\" : pug_interp)) + \"\\u003C\\u002Fp\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Ca\" + (pug.attr(\"class\", pug.classes([actionClass ? actionClass : '',\"clickable\"], [true,false]), false, true)+\" href=\\\"javascript:void(0);\\\"\"+pug.attr(\"aria-label\", `${actionText} ${storeName}`, true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = actionText) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\";\n}}.call(this,\"actionClass\" in locals_for_with?locals_for_with.actionClass:typeof actionClass!==\"undefined\"?actionClass:undefined,\"actionText\" in locals_for_with?locals_for_with.actionText:typeof actionText!==\"undefined\"?actionText:undefined,\"isReadOnly\" in locals_for_with?locals_for_with.isReadOnly:typeof isReadOnly!==\"undefined\"?isReadOnly:undefined,\"storeName\" in locals_for_with?locals_for_with.storeName:typeof storeName!==\"undefined\"?storeName: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 (statusString) {pug_html = pug_html + \"\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = statusString) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";}.call(this,\"statusString\" in locals_for_with?locals_for_with.statusString:typeof statusString!==\"undefined\"?statusString: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 (model, view) {\n\n\n\n\n\n\n\npug_mixins[\"learnMoreHelpTopic\"] = pug_interp = function(helpId, i18n){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Ca\" + (\" class=\\\"HelpTopic\\\"\"+pug.attr(\"query\", `help:${helpId}`, true, true)+\" href=\\\"javascript:void(0);\\\"\") + \"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Control_PaneHelp_LearnMore')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\";\n};\n\n\n\n\n\n\n\n\npug_mixins[\"koErrors\"] = pug_interp = function(id, cssClass){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Cul\" + (pug.attr(\"class\", pug.classes([cssClass ? cssClass : 'alert alert-danger'], [true]), false, true)+\" data-bind=\\\"visible: errors().length > 0, foreach: errors, attr: {"aria-hidden": errors().length == 0}\\\"\"+pug.attr(\"id\", id ? id : 'KoErrors', true, true)+\" role=\\\"alert\\\"\") + \"\\u003E\\u003Cli data-bind=\\\"html: $data\\\"\\u003E\\u003C\\u002Fli\\u003E\\u003C\\u002Ful\\u003E\";\n};\n\n\n\n\npug_html = pug_html + \"\\u003Cdiv class=\\\"upload-feed-container form-inline\\\" aria-labelledby=\\\"upload-toolbar-title\\\"\\u003E\\u003Cdiv class=\\\"panel\\\"\\u003E\\u003Cdiv class=\\\"panel-heading\\\"\\u003E\\u003Cdiv class=\\\"panel-title\\\" id=\\\"upload-toolbar-title\\\"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('CPG_UploadToolbar_Title')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"panel-body\\\"\\u003E\\u003Cdiv class=\\\"upload-desc\\\"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('CPG_UploadToolbar_Desc')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\npug_mixins[\"learnMoreHelpTopic\"]('app54616', view.i18n);\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"upload-container\\\"\\u003E\\u003Cdiv class=\\\"file-picker\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"file-desc\\\"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('CPG_UploadToolbar_TemplateText')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Ca class=\\\"download-template\\\" tabindex=\\\"0\\\"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('CPG_UploadToolbar_TemplateDownload')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\";\npug_mixins[\"koErrors\"]('uploadFeedErrors');\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"panel-footer\\\"\\u003E\\u003Cbutton\" + (\" class=\\\"btn btn-primary btn-upload\\\"\"+pug.attr(\"disabled\", !model.isFeedReady, true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('CPG_UploadToolbar_ButtonUpload')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fbutton\\u003E\\u003Cbutton class=\\\"btn btn-default btn-cancel\\\"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('CPG_UploadToolbar_ButtonCancel')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fbutton\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"model\" in locals_for_with?locals_for_with.model:typeof model!==\"undefined\"?model:undefined,\"view\" in locals_for_with?locals_for_with.view:typeof view!==\"undefined\"?view: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 (model, view) {pug_html = pug_html + \"\\u003Cdiv class=\\\"upload-progress-container\\\"\\u003E\\u003Cdiv class=\\\"panel\\\"\\u003E\\u003Cdiv class=\\\"panel-heading\\\"\\u003E\\u003Cdiv class=\\\"panel-title\\\"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('CPG_UploadToolbar_Title')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"panel-body\\\"\\u003E\\u003Cdiv class=\\\"progress-desc\\\"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('CPG_UploadProgress_Desc')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"progress-container\\\"\\u003E\\u003Cdiv class=\\\"progress\\\"\\u003E\\u003Cdiv\" + (\" class=\\\"progress-bar\\\"\"+pug.attr(\"style\", pug.style(`width:${model.percentage}`), true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"panel-footer\\\"\\u003E\\u003Cdiv class=\\\"btn btn-primary btn-return\\\"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('CPG_UploadProgress_ButtonReturn')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"model\" in locals_for_with?locals_for_with.model:typeof model!==\"undefined\"?model:undefined,\"view\" in locals_for_with?locals_for_with.view:typeof view!==\"undefined\"?view: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, isNewUI, isSettings) {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_html = pug_html + \"\\u003Cdiv class=\\\"audience-advanced-settings form-horizontal\\\"\\u003E\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Cdiv class=\\\"col-sm-2 control-label crud-adgroup-schedule-label\\\"\\u003E\\u003Clabel\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Settings_AdSchedule')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-4 form-control-static\\\"\\u003E\\u003Cdiv class=\\\"ad-schedule\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"form-group\",\"exclusions-section\",isSettings === false ? 'hide' : ''], [false,false,true]), false, true)) + \"\\u003E\";\nif (isNewUI) {\npug_html = pug_html + \"\\u003Ca class=\\\"camp-adg-shared-exclusions-dropdown\\\" data-toggle=\\\"collapse\\\" data-target=\\\"#setExclusions\\\" href=\\\"javascript:void(0);\\\" data-bind=\\\"attr: {"aria-expanded": isExclusionsExpanded() ? "true" : "false"}\\\" role=\\\"button\\\"\\u003E\\u003Cspan class=\\\"bedded-icon-marker spritedimagealign expanderImage\\\"\\u003E\\u003C\\u002Fspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('AdvancedSetting_ExclusionText')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\";\npug_mixins[\"popupHelp\"]('pop_BA_Settings_Exclusions', i18n.getString('AdvancedSetting_ExclusionText'), i18n.getString('LearnMoreLinkText'));\npug_html = pug_html + \"\\u003Cdiv class=\\\"collapse\\\" id=\\\"setExclusions\\\" data-section=\\\"ExclusionsSection\\\"\\u003E\\u003Cdiv class=\\\"col-sm-10\\\"\\u003E\\u003Cdiv class=\\\"camp-adg-shared-text-under-dropdown\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('AdvancedSetting_WebSiteExclusionDesc')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"site-exclusions\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cdiv class=\\\"col-sm-2 control-label\\\"\\u003E\\u003Clabel\\u003E\" + (pug.escape(null == (pug_interp = 'Exclusions') ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-10\\\"\\u003E\\u003Cdiv class=\\\"site-exclusions\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"form-group\",\"url-options\",isSettings === false ? 'hide' : ''], [false,false,true]), false, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"form-group\",\"ad-rotation-section\",isSettings === false ? 'hide' : ''], [false,false,true]), false, true)) + \"\\u003E\\u003Cdiv class=\\\"col-sm-2 control-label\\\"\\u003E\\u003Clabel\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('AdvancedSetting_AdRotationText')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-4\\\"\\u003E\\u003Cdiv class=\\\"ad-rotation\\\"\\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,\"isNewUI\" in locals_for_with?locals_for_with.isNewUI:typeof isNewUI!==\"undefined\"?isNewUI:undefined,\"isSettings\" in locals_for_with?locals_for_with.isSettings:typeof isSettings!==\"undefined\"?isSettings: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 (_TL_, i18n, isFeedBasedAudienceCampaign, optTgt) {\n\n\n\npug_html = pug_html + \"\\u003Cdiv class=\\\"crud-audience-target-selector form-horizontal layout-collapse\\\"\\u003E\";\nif (!isFeedBasedAudienceCampaign) {\npug_html = pug_html + \"\\u003Ch3\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString(_TL_('Predictive targeting'))) ? \"\" : pug_interp)) + \"\\u003C\\u002Fh3\\u003E\";\n}\npug_html = pug_html + \"\\u003Cp class=\\\"optimized-targeting-description\\\"\\u003E\\u003C\\u002Fp\\u003E\\u003Cdiv class=\\\"optimized-selector-container optimized-selector-container\\\"\\u003E\";\nvar itemClass = 'optTgt-collapse-header';\nvar itemClassSelect = 'optTgt-setting-container';\nvar collapseId= 'optTgt-collapse';\nvar summaryId = 'optTgt-summary';\nvar shouldExpand = isFeedBasedAudienceCampaign ? 'true':'false';\nvar shouldCollapseClassName = isFeedBasedAudienceCampaign ? 'collapse in collapse-container':'collapse collapse-container';\n{\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([itemClass], [true]), false, true)) + \"\\u003E\\u003Cbutton\" + (\" class=\\\"btn btn-primary expand-btn\\\"\"+\" type=\\\"button\\\"\"+pug.attr(\"id\", optTgt, true, true)+\" role=\\\"button\\\" data-toggle=\\\"collapse\\\"\"+pug.attr(\"data-target\", '#'+collapseId, true, true)+pug.attr(\"aria-expanded\", shouldExpand, true, true)+pug.attr(\"aria-controls\", collapseId, true, true)) + \"\\u003E\\u003Cdiv class=\\\"target-header selection-item-button\\\"\\u003E\\u003Cp class=\\\"target-selection-title\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('OptimizedTargeting_Expand_Title')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fp\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fbutton\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([shouldCollapseClassName], [true]), false, true)+pug.attr(\"id\", collapseId, true, true)) + \"\\u003E\\u003Cdiv\" + (\" class=\\\"item-container\\\"\"+pug.attr(\"id\", itemClassSelect, true, true)) + \"\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([itemClassSelect], [true]), false, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"_TL_\" in locals_for_with?locals_for_with._TL_:typeof _TL_!==\"undefined\"?_TL_:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"isFeedBasedAudienceCampaign\" in locals_for_with?locals_for_with.isFeedBasedAudienceCampaign:typeof isFeedBasedAudienceCampaign!==\"undefined\"?isFeedBasedAudienceCampaign:undefined,\"optTgt\" in locals_for_with?locals_for_with.optTgt:typeof optTgt!==\"undefined\"?optTgt: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, supportCashbackSettings) {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_html = pug_html + \"\\u003Cdiv class=\\\"adgroup-creation-step1-container\\\"\\u003E\\u003Cdiv class=\\\"form-horizontal\\\"\\u003E\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Cdiv class=\\\"col-sm-2 control-label\\\"\\u003E\\u003Clabel class=\\\"adgroup-name-label\\\" id=\\\"adgroupNameLabel\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_AdGroup_Label_Name')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\";\npug_mixins[\"popupHelp\"]('pop_BA_CampaignCreate_AudTargets_AdGroupName', i18n.getString('Audience_Campaign_AdGroup_Label_Name'), i18n.getString('LearnMoreLinkText'));\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-4\\\"\\u003E\\u003Cdiv class=\\\"name-input-control-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"remaining-chars-hint-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"copy-adgroup-setting-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"bidding-strategy-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group\\\" data-bind=\\\"visible: !isAutoBidding\\\"\\u003E\\u003Cdiv class=\\\"col-sm-2 control-label\\\"\\u003E\\u003Clabel class=\\\"default-bid-label\\\" id=\\\"defaultBidLabel\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Settings_SetBid')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-4\\\"\\u003E\\u003Cdiv class=\\\"default-bid-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"frequency-capping-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\nif (supportCashbackSettings) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"cashback-settings-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003Cdiv class=\\\"audience-advanced-settings-section\\\"\\u003E\\u003Ca class=\\\"audience-advanced-settings-header col-sm-12\\\" href=\\\"javascript:void(0);\\\" data-bind=\\\"attr: {"aria-expanded": isAdvancedAdgroupExpanded() ? "true" : "false"}\\\"\\u003E\\u003Cspan class=\\\"bedded-icon-marker spritedimagealign expanderImage\\\"\\u003E\\u003C\\u002Fspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_AdGroup_AdvancedSettings')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003Cdiv class=\\\"collapse\\\" id=\\\"advancedSettings\\\"\\u003E\\u003Cdiv class=\\\"audience-advanced-settings-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"boost-placement-target\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"contextual-target-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"errors-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"supportCashbackSettings\" in locals_for_with?locals_for_with.supportCashbackSettings:typeof supportCashbackSettings!==\"undefined\"?supportCashbackSettings: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 (Enable1PPlacementTargeting, _TL_, i18n, isAudienceFeedBasedCampaign, isNativeAds, isShowDisclaimerBannerEnabled, optTgtTgBtn) {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_html = pug_html + \"\\u003Cdiv class=\\\"crud-audience-adgroup form-horizontal adgroup-settings__container\\\"\\u003E\\u003Cdiv class=\\\"adgroup-name-input-container\\\"\\u003E\\u003Clabel class=\\\"adgroup-name-label\\\" id=\\\"adgroupNameLabel\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_AdGroup_Label_Name')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\";\npug_mixins[\"popupHelp\"]('pop_BA_CampaignCreate_AudTargets_AdGroupName', i18n.getString('Audience_Campaign_AdGroup_Label_Name'), i18n.getString('LearnMoreLinkText'));\npug_html = pug_html + \"\\u003Cdiv class=\\\"row\\\"\\u003E\\u003Cdiv class=\\\"name-input-control-container col-sm-4\\\"\\u003E\\u003Cdiv class=\\\"remaining-chars-hint-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"copy-adgroup-settings-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"opttgt-setting\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"audience-target-selector-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"boost-placement-target\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"contextual-target-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Chr\\u003E\\u003Cdiv class=\\\"target-setting-and-estimate-container\\\"\\u003E\\u003Cdiv class=\\\"audience-target-settings-container col-sm-8\\\"\\u003E\\u003Cdiv class=\\\"location-setting-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"age-setting-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"gender-setting-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"device-setting-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"audience-setting-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"companyName-setting-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"industry-setting-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"jobFunction-setting-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\nif (Enable1PPlacementTargeting && isNativeAds) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"placement-setting-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nvar itemClassSelect = 'optTgt-setting-container';\nvar collapseId= 'optTgt-collapse';\nif (!isAudienceFeedBasedCampaign) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"optimized-toggle-container\\\"\\u003E\\u003Cbutton\" + (\" class=\\\"btn btn-primary expand-btn\\\"\"+\" type=\\\"button\\\"\"+pug.attr(\"id\", optTgtTgBtn, true, true)+\" role=\\\"button\\\" data-toggle=\\\"collapse\\\"\"+pug.attr(\"data-target\", '#'+collapseId+'-toggle', true, true)+\" aria-expanded=\\\"true\\\"\"+pug.attr(\"aria-controls\", collapseId+'-toggle', true, true)) + \"\\u003E\\u003Cdiv class=\\\"target-header selection-item-button\\\"\\u003E\\u003Cp class=\\\"target-selection-title\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('OptimizedTargeting_Expand_AdvancedTitle')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fp\\u003E\";\npug_mixins[\"popupHelp\"]('pop_BA_PredictiveTargeting_OptimizedDisabled', i18n.getString(_TL_('Predictive targeting')), i18n);\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fbutton\\u003E\\u003Cdiv\" + (\" class=\\\"collapse in collapse-container\\\"\"+pug.attr(\"id\", collapseId+'-toggle', true, true)+\" aria-expanded=\\\"true\\\"\") + \"\\u003E\\u003Cdiv\" + (\" class=\\\"item-container\\\"\"+pug.attr(\"id\", itemClassSelect+'-toggle', true, true)) + \"\\u003E\\u003Cdiv class=\\\"optimized-toggle\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"audience-reach-estimate-container col-sm-3 col-sm-offset-1\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"errors-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\nif (isShowDisclaimerBannerEnabled) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"alert alert-info\\\" style=\\\"margin-left: 32px\\\"\\u003E\\u003Cdiv class=\\\"alert-image\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"alert-info-inline\\\"\\u003E\" + (null == (pug_interp = i18n.getString('Targeting_Disclaimer')) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}}.call(this,\"Enable1PPlacementTargeting\" in locals_for_with?locals_for_with.Enable1PPlacementTargeting:typeof Enable1PPlacementTargeting!==\"undefined\"?Enable1PPlacementTargeting:undefined,\"_TL_\" in locals_for_with?locals_for_with._TL_:typeof _TL_!==\"undefined\"?_TL_:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"isAudienceFeedBasedCampaign\" in locals_for_with?locals_for_with.isAudienceFeedBasedCampaign:typeof isAudienceFeedBasedCampaign!==\"undefined\"?isAudienceFeedBasedCampaign:undefined,\"isNativeAds\" in locals_for_with?locals_for_with.isNativeAds:typeof isNativeAds!==\"undefined\"?isNativeAds:undefined,\"isShowDisclaimerBannerEnabled\" in locals_for_with?locals_for_with.isShowDisclaimerBannerEnabled:typeof isShowDisclaimerBannerEnabled!==\"undefined\"?isShowDisclaimerBannerEnabled:undefined,\"optTgtTgBtn\" in locals_for_with?locals_for_with.optTgtTgBtn:typeof optTgtTgBtn!==\"undefined\"?optTgtTgBtn: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 (IsAIMBidSuggestionEnabled, i18n, isShowDisclaimerBannerEnabled) {pug_html = pug_html + \"\\u003Cdiv class=\\\"crud-audience-budget-bid form-horizontal campaign-settings__container\\\"\\u003E\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Cdiv class=\\\"col-sm-2 control-label\\\"\\u003E\\u003Clabel\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Budget_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"budget col-sm-8\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"bidding-strategy__container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"bid-strategy\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\nif (IsAIMBidSuggestionEnabled) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"bid__container\\\"\\u003E\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Cdiv class=\\\"col-sm-2 control-label\\\"\\u003E\\u003Clabel id=\\\"defaultBidLabel\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Settings_DefaultBid')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-10 form-control-static\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Bid_Description')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"default-bid col-sm-2 form-group-subset\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"default-bid-warning col-sm-12\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"frequency-capping-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"kpiestimation-result\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Cdiv class=\\\"col-sm-2 control-label\\\"\\u003E\\u003Clabel id=\\\"defaultBidLabel\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Settings_DefaultBid')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"default-bid col-sm-2\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"frequency-capping-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003Cdiv class=\\\"conversion-goal-section\\\"\\u003E\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Cdiv class=\\\"col-sm-2 control-label\\\"\\u003E\\u003Clabel\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Campaign_Goals_Section_Title')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-10 form-control-static\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Campaign_Goals_Help_Text')) ? \"\" : pug_interp)) + (pug.escape(null == (pug_interp = ' ') ? \"\" : pug_interp)) + \"\\u003Ca class=\\\"HelpTopic\\\" href=\\\"javascript:void(0);\\\" query=\\\"help:app54814\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('LearnMoreLinkText')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"conversion-goal-selection\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Cdiv class=\\\"bid-adjustments-container\\\"\\u003E\\u003Ca class=\\\"bid-adjustments-section col-sm-12\\\" href=\\\"javascript:void(0);\\\" data-bind=\\\"attr: {"aria-expanded": isBidAdjustmentsExpanded() ? "true" : "false"}\\\"\\u003E\\u003Cspan class=\\\"bedded-icon-marker spritedimagealign expanderImage\\\"\\u003E\\u003C\\u002Fspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Settings_BidAdjustment')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003Cdiv class=\\\"collapse\\\" id=\\\"bidAdjustmentTargets\\\"\\u003E\\u003Cdiv class=\\\"bid-adjustment-targets-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Cdiv class=\\\"adschedule-targets-container\\\"\\u003E\\u003Ca class=\\\"adschedule-section col-sm-12\\\" href=\\\"javascript:void(0);\\\" data-bind=\\\"attr: {"aria-expanded": isAdScheduleExpanded() ? "true" : "false"}\\\"\\u003E\\u003Cspan class=\\\"bedded-icon-marker spritedimagealign expanderImage\\\"\\u003E\\u003C\\u002Fspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Settings_AdSchedule')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003Cdiv class=\\\"collapse\\\" id=\\\"adScheduleTargets\\\"\\u003E\\u003Cdiv class=\\\"adschedule-targets\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"errors-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\nif (isShowDisclaimerBannerEnabled) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"alert alert-info\\\" style=\\\"margin-left: 32px\\\"\\u003E\\u003Cdiv class=\\\"alert-image\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"alert-info-inline\\\"\\u003E\" + (null == (pug_interp = i18n.getString('Targeting_Disclaimer')) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}}.call(this,\"IsAIMBidSuggestionEnabled\" in locals_for_with?locals_for_with.IsAIMBidSuggestionEnabled:typeof IsAIMBidSuggestionEnabled!==\"undefined\"?IsAIMBidSuggestionEnabled:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"isShowDisclaimerBannerEnabled\" in locals_for_with?locals_for_with.isShowDisclaimerBannerEnabled:typeof isShowDisclaimerBannerEnabled!==\"undefined\"?isShowDisclaimerBannerEnabled: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_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\npug_html = pug_html + \"\\u003Cdiv class=\\\"crud-audience-campaign form-horizontal campaign-settings__container\\\"\\u003E\\u003Cdiv class=\\\"video-alert\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"adimpression-alert\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"description\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Crud_Campaign_Description')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Cdiv class=\\\"col-sm-2 control-label\\\"\\u003E\\u003Clabel class=\\\"campaign-name-label\\\" id=\\\"campaignNameLabel\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Campaign_Name')) ? \"\" : pug_interp)) + \"\\u003Cspan style=\\\"color:rgb(164, 38, 44);\\\"\\u003E\" + (pug.escape(null == (pug_interp = ' *') ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Flabel\\u003E\";\npug_mixins[\"popupHelp\"]('pop_BA_CampaignCreate_Settings_CampaignName', i18n.getString('Audience_Campaign_Campaign_Name'), i18n.getString('LearnMoreLinkText'));\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-4\\\"\\u003E\\u003Cdiv class=\\\"name-input-control-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"remaining-chars-hint-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Cdiv class=\\\"col-sm-4\\\"\\u003E\\u003Cdiv class=\\\"copy-campaign-settings-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Cdiv class=\\\"col-sm-2 control-label\\\"\\u003E\\u003Clabel\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Budget_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\";\npug_mixins[\"popupHelp\"]('pop_BA_CampaignCreate_Budget_SharedBudget', i18n.getString('Audience_Campaign_Budget_Label'), i18n.getString('LearnMoreLinkText'));\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"budget col-sm-8\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"shopping-settings-container\\\" style=\\\"margin-bottom:10px;\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"cashback-settings-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"impression-tracking-url-options-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"errors-container\\\"\\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 (model, view) {var i18n = view.i18n\nvar appState = view.appState\nvar customerId = appState.get('customer_id')\nvar accountId = appState.get('account_id')\nif (!model.isLoading) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"experiment-budget-alert\\\"\\u003E\\u003Cdiv class=\\\"alert alert-info form-group page-alert\\\"\\u003E\\u003Cdiv class=\\\"alert-image\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"alert-info-inline\\\" style=\\\"overflow: hidden; text-overflow: ellipsis;\\\"\\u003E\";\nvar baseCampaign = model.baseCampaign\nif (baseCampaign) {\npug_html = pug_html + ((pug.escape(null == (pug_interp = i18n.getString('Experiment_BudgetReadonlyAlert').split('{{name}}')[0]) ? \"\" : pug_interp)) + \"\\u003Ca class=\\\"base-campaign-settings-link\\\" href=\\\"javascript:void(0);\\\"\\u003E\" + (pug.escape(null == (pug_interp = baseCampaign.Name) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Experiment_BudgetReadonlyAlert').split('{{name}}')[1]) ? \"\" : pug_interp)));\n}\nelse\nif (model.campaignId) {\npug_html = pug_html + (pug.escape(null == (pug_interp = i18n.getString('Experiment_BudgetAlert_BaseCampaign1')) ? \"\" : pug_interp)) + (pug.escape(null == (pug_interp = ' ') ? \"\" : pug_interp)) + \"\\u003Ca class=\\\"all-experiments-link\\\" href=\\\"javascript:void(0);\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Experiment_BudgetAlert_BaseCampaign2')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}}.call(this,\"model\" in locals_for_with?locals_for_with.model:typeof model!==\"undefined\"?model:undefined,\"view\" in locals_for_with?locals_for_with.view:typeof view!==\"undefined\"?view:undefined));;return pug_html;};\nmodule.exports = template;"],"names":["backbone","capValue","value","_","length","substring","toRuleDescription","filter","acrossAllPages","idsCount","FilterExpressions","expressions","result","idBased","Values","expressionsToMap","resultFilter","expr","mappedResult","SelectedColumn","SelectedOperator","SelectedNames","push","Filter","JSON","stringify","numericActionTypes","changeByPercent","changeByAmount","setAmount","ViewModel","_createClass","_ref","_this","_ref$results","results","_ref$columns","columns","totalCount","i18n","_classCallCheck","this","ko","currentPageChangeCount","changeText","getString","replace","updateResult","resultsToUse","totalResultCount","PreviewResultView","_PureKnockoutView","_callSuper","arguments","_inherits","key","options","_superPropGet","get","template","viewModel","PureKnockoutView","adTypes","getGenericAdPreview","entityValues","AdTitle","getResponsiveSearchAdPreview","previewValue","values","parseSync","AdHeadlines","getTitlePreview","getResponsiveAdPreview","responsiveAdPreviewTemplate","itemViewModel","LandscapeImageMediaUrl","OriginalImageMediaUrl","Headline","AdHeadline","LongHeadline","AdLongHeadline","Text","AdText","BusinessName","AdBusinessName","convertedDisplayUrl","AdDisplayUrl","withContainer","getDynamicSearchAdPreview","dynamicSearchAdPreviewTemplate","DisplayUrl","Path1","AdPath1","Path2","AdPath2","getAdEntityPreviewCell","adType","AdTitle2","getAdType","isHtml","formatValueToFixed","formatDecimalToFixed","parseFloat","formatEntityValue","item","entityKeys","defaultEntityValue","entity","EntityKey","it","indexOf","Key","Value","formatStatus","rows","data","entityItem","Changes","concat","OriginalValue","NewValue","formatBidBudget","formatEmail","getEl","gridView","$el","closest","find","onSuccess","isCustomInMarketEnabled","audiencesPath","audienceLink","info","window","App","views","alertCenter","toastInfo","campaignBulkEdit","status","ChangeStatusView","ChangeStatusModel","ChangeBudgetView","ChangeBudgetModel","ChangeCashbackBudgetView","ChangeCashbackBudgetModel","ChangeCashbackPercentView","ChangeCashbackPercentModel","ChangeBidStrategyModel","ChangeBidStrategyView","ChangeLanguageView","ChangeLanguageModel","BulkCampaignExclusionsView","AudienceAssociationView","AudienceAssociationModel","ChangeRsaAutoAssetsView","ChangeRsaAutoAssetsModel","CopyPaste","config","filterService","i18nNewDesign","router","scope","isForVNext","bulkEditUrl","qualtricsSurveyCallback","importNotificationCallback","importBudgetBidNotificationCallback","_options$disableDesel","disableDeselectAll","getCampaignTypeGlobalFilter","perfMarker","campaignUpgradeProps","isFilterByPerformanceMaxCampaigns","CampaignType","PerformanceMax","isFilterByAppAdsCampaigns","isFilterByAllCampaigns","All","onCopyClicked","_ref10","viewConfig","copy","Object","assign","grid","permissions","items","text","dynamic","CampaignLifetimeBudget","classes","createView","selectedRowCount","model","selectedEntityCount","budgetType","_ref2","IsPersonalizedOffersEnabled","IsPersonalizedOffersV4Enabled","IsPersonalizedOffersV2Enabled","IsPersonalizedOffersV3Enabled","_ref4","_ref3","_ref5","Entity","entityType","biddingStrategyType","isValid","_ref6","_ref7","pgridPlugins","crossPageSelectAll","isAllSelected","confirm","inlineError","campaignType","IsCustomAudienceAllowed","IsInMarketAudienceAllowed","_ref8","audienceAssociationPerfMarker","_config$get","createChild","willInit","listener","done","off","on","newI18n","onSuccessCallback","onAudienceAssociationSuccess","getRoutePathById","location","search","isFallbackEnabled","campaignUpgradeItem","pathname","repos","Shopping","frontItems","IsCampaignAdGroupCopyPasteEnabled","hotkeys","win","mac","_ref11","paste","noSelectionRequired","_ref9","Default","projectionGridBulkEdit","DeleteConfirmation","gridDecorationCallback","stateData","state","fromAudienceLibrary","html","show","container","campaignRemarketingAssociated","click","navigate","campaignAudienceAssociationDecoration","store","DS","CustomerAdapter","mockData","raw","Promise","registerAdapter","default","dummyDataSource","type","defineResource","name","idAttribute","primaryKey","schema","required","properties","Id","filterable","skipLocalization","Name","Status","enum","Budget","nullable","Amount","chooseType","Languages","DeliveryStatus","PerformanceMetrics","Impressions","Clicks","CTR","Conversions","Spend","AverageCPC","AveragePosition","AverageCPM","CPA","WebsiteCoverage","AuctionWonPercent","sovcolumn","isPercentValue","AuctionLostToBudgetPercent","AuctionLostToRankPercent","AuctionLostToLandingPercent","AuctionLostToAdQualityPercent","AuctionLostToBidPercent","ClickSharePercent","RevenueOnAdSpend","AdvertiserReportedRevenue","ConversionRate","alias","legacy","Labels","maxLength","Description","ColorCode","AssociationCounts","CampaignCount","AdGroupCount","AdCount","KeywordCount","isRelatedEntity","PhonePerformanceMetrics","$schema","QualityScore","UpdatedOnLastImport","HasAuctionInsight","TrackingUrlTemplate","UrlCustomParameters","BiddingScheme","NativeBidAdjustment","DisplayBiddingStrategyType","DisplayBiddingStrategyMaxCpc","DisplayBiddingStrategyTargetCpa","DsaTargets","DomainCategorys","NegativeAdGroupDsaTargets","Categories","DsaSearchTerms","entitySet","toJSON","noop","getCampaignsGridFactory","ProgressView","_Backbone$View","trigger","Backbone","globalLegacyI18n","dialog","dialogProgress","bulkEditChange","ACTION_TYPE","CampaignWideBid","BidScaling","TROAS","TCPA","currencyCode","appConfig","instrumentation","addScenario","scenario","setting","activity","senario","campaignLandscapeEditBid","create","applyError","response","error","msg","unexpectedError","errors","i18nErrors","message","AlertHelper","showError","getParams","timeFormat","timeZone","end","Date","start","now","startDate","formatDate","endDate","QueryString","actionType","Property","newValue","BatchAction","Actions","ActionType","Limit","Selection","CampaignId","AdGroupId","PreviewCompositeIds","defaultApply","campaign","campaignBidLandscapeView","noWidBidData","trackingId","valueToApply","landscapeType","campaignSelectMode","hash","additionalBuget","keepCurrentBudget","currentBudget","startDateString","endDateString","isCustomBid","currentSelectedId","landscapePointsLength","selectedData","dataArray","curValue","Type","campaignData","remove","toUpdated","_objectSpread","jsdataCampaign","Campaign","update","adapter","cacheResponse","finally","withUiBlock","then","refresh","catch","progressView","Dialog","backdrop","keyboard","showCloseButton","setContent","$","document","body","append","el","paramsAdGroup","params","paramsKeyword","completeCB","res","progressCB","bulkEdit","setTimeout","failedCB","callback","cid","customerId","aid","accountId","url","odata","post","path","host","Request","Hash","campaignBidLandscapeTrack","IsBidLandscapeAvailable","updated","trace","impressions","mlImpressions","clicks","cost","conversion","conversionValue","additionalBugetNeeds","onCallReturnedForBidLandscape","event","dataToShow","Nodata","forEach","val","BidLandscapePoints","CampaignBidLandscapeType","formatRes","generateGuid","currentTargetValue","CampaignBidLandscape","parentItem","CurrentValue","toString","CurrentTargetValue","EntityName","CurrencyCode","markInputValueInvalid","newBidStr","bidRange","floorPrice","FloorValue","ceilingPrice","CeilingValue","floorPriceStr","ceilingPriceStr","validateSearchBid","once","showActivity","FetchedCampaignBidLandscape","ariaData","ActionName","UIData","selectMode","bidList","render","hasData","setState","addClass","showPopup","positioningMethod","positioningOptions","anchorPosition","top","clientY","left","clientX","width","target","height","contentView","anchor","openCampaignBidLandscape","bulkChange","uiBlocker","parent","willFetchData","willRender","mccPerfFluxPopupContainerId","dismissFlucCallout","calloutElement","getElementById","ReactDOM","budgetCenterHelpContainerId","dismissBudgetCenterHelpCallout","isEnglishOnlyChatSupportedLocale","locale","lowerLocale","toLocaleLowerCase","includes","conversionDeliveryStatusContainerId","dismissConversionStatusCallout","filterEnterKeyDown","eventHandler","keyCode","Enter","_len","args","Array","_key","apply","legacyRouter","BingAdsWebUIComponentLegacyRouterIndex","commonI18n","legacyGlobalI18n","locationTargeti18n","IsExperimentsOpenBetaEnabled","IsSmartShoppingCampaignEnabled","IsAccountLabelsEnabled","IsDeferredHoveringPopupEnabled","budgetLimit","autobiddingLimitedStatus","linkedInPermissionRequired","customTemplateDeliveryStatus","disclaimerEditorialStatus","popupContentKey","keyVault","hoveringPopup","CampaignsGrid","_DeterministicWrapper","preferenceConfig","gridConfig","serverContext","_ref$isForVNext","getPlugins","getGridConfig","_ref$enableCopyPaste","enableCopyPaste","pageName","_ref$preexecuteFlag","preexecuteFlag","theme","azureUrlRewrite","preferenceService","gridRemoved","internalConfig","merge","gridName","validateOrder","pgridFactory","plugins","disclaimerRepos","SharedRepository","DisclaimerAdExtension","afterChangeComitted","appealAggregator","rejectionPopupContainerSelector","popoverId","conversionActivity","createScenarioAndActivity","scenarioName","activityName","getCombinedFilter","updateGridQuery","bulkEditGridOptions","Hotkeys","bind","onClick","setup","changes","_isRendered","handleSortChange","PageReady","pageIsReady","pagination","pageNumber","setPageNumberToState","eventDispatcher","listenTo","onWunderbarChange","deliveryStatusPopupFactory","CampaignDeliveryStatusPopupFactory","inlineEditCashbackSetting","_this2","initializeCombinedFilterPromise","CampaignCashback","Percent","MonthlyBudget","Scope","CouponsEnabled","PersonalizedOffersEnabled","inlineEdit","TopPanelCashbackSettings","CashbackPercent","CashbackMonthlyBudget","CashbackScope","deps","decimal","pageContext","view","campaignName","showTopPanelCashbackSettingEditor","_this3","editorView","overrideWith","scrollTo","_this4","events","targetEntity","getTargetEntity","filterOnLabelClick","navigateToManagePage","handleShowRejectionReasonEnter","showLandscapeDisabledHelpInfo","handleShowRejectionReasonLeave","hideRejectionReason","relatedTarget","hideFluctuationInsightsTooltip","hideBudgetCenterHelpTooltip","e","showBudgetCenterHelpInfo","showConversionDeliveryStatusWarning","showRejectionReason","showPerformanceInsightsPopup","toolbar","gridToolbarGroup","reset","number","set","_defineProperty","containerDOM","querySelector","styles","mergeStyleSets","callout","padding","fontSize","title","marginBottom","_jsxs","Callout","className","directionalHint","DirectionalHint","rightCenter","role","children","_jsx","block","variant","optimizationScorePopoverShown","campaignId","goalDeliveryStatus","GoalStatusDetails","isConnectWithExpertEnabled","content","marginTop","rowGap","display","flexDirection","ctaButton","ctaFooter","paddingTop","borderTop","color","placement","getBoundingClientRect","right","innerWidth","textStrings","NoEligibleGoal","_TL_","description","learnMoreHref","learnMoreText","TagUnverified","TagInactive","NoRecentOfflineConversion","ConsentModeWarning","goalStatus","GoalDeliveryStatus","insertPopoverContainer","tooltipProps","parentView","currentTarget","onClose","onMouseLeave","closeButton","focusLockContent","_Fragment","classnames","DefaultButton","open","customEvent","CopilotToggleCustomEvent","detail","eventType","eventSource","eventData","ActionId","liveAgentParameters","queue","LiveAgentQueue","ShoppingAndUET","problemDescription","uetStatus","dispatchEvent","getLocale","Link","GridTooltip","renderConversionDeliveryStatusTooltip","AdsCopilotConversionTrackingLiveAgent","conversionDeliveryStatusPopoverShown","budgetSplitView","BudgetSplitView","GridCustomizedPopupEditor","editorPositionFactory","getEditorPositionAsideAnchor","renderBelow","bidLandscapePerfMarker","showLabelsPopup","labels","entityName","isMCCLabelEnabled","_this5","keyOfElement","selectedItem","itemWithKey","editorialStatus","attributeId","valueLevel","editorial","toggleCountryList","showRejectionReasons","registerCountryListEvent","deliveryStatusDetails","getCustomTemplate","getEditorialReasonsTemplate","ajaxOptions","oDataToken","campaign_id","account_id","customer_id","sessionId","SessionId","deliveryStatus","useCustomTemplate","afterRender","popup","id","adsGrid","AppealAggregatorClass","AppealAggregator","controller","submit","menuToFollow","requestExceptionFromPopup","openBulkEditor","bulkEditor","hide","deselectAll","selectRow","appealView","RequestDisclaimerExceptionCallBack","_this6","actionLinks","DeliveryStatusDetails","uri","URI","appendScopeParameter","addQuery","NoEligibleAdGroups","ShoppingCampaignNoOffersPresent","DeliveryStatusPopupFactory","showRejectionPopup","containerSelector","isSmartShoppingCampaignEnabled","percentSymbol","DecimalFormatter","AdExtensionInlineAppeal","index","getRequestPermission","association","findAll","where","disclaimerData","errI18n","locationI18n","extension","resolve","cmpid","adExtensionId","version","Version","queryify","http","__RequestVerificationToken","contentType","RejectionReasons","IsAppealable","reasonTemplates","getEditorialTemplates","reasons","Reason","ReasonCode","Location","LanguageToCountries","PublisherCountries","RejectionCountries","editorialRejection","ENTITY","EXTENSION","isAppealable","getReasonTemplates","getBudgetLandscapeHelpInfoTemplate","getAutobiddingLimitedHelpInfoTemplate","popupView","RequestDisclaimerExceptionCallBackFromPopup","showBudgetLandscape","clickEvent","deliveryStatusList","classList","applyAutobiddingSuggestion","stopPropagation","preventDefault","inContextRepairRecommedationType","errorMessage","notificationApi","showWarning","suggestedValue","_this7","MaxCpc","showInfo","processErrors","_this8","SharedBudgetModel","_this9","TargetRoas","TargetCpa","CampaignDeliveryStatusDetails","detailStatus","RecommendedValue","applyDeliveryStatus","currentValue","applyAutobiddingSuggestionForMaxCPCRestriction","applyAutobiddingSuggestionForBudgetRestriction","applyAutobiddingSuggestionForUnAttainableTarget","stopImmediatePropagation","showBudgetLandscapePopup","showInlineOpportunityPanel","showBudgetLandscapeHelpInfo","showQualityScoreDetail","monitorViewportChange","bidlandscapeDisabled","destroyAll","renderFluctuationInsightsTooltip","_this10","dateRange","dateFilter","getCurrentDateRange","createElementBasedFluctuationPopupFactory","getFluctuationPopupStyle","palette","core","triggerButton","onFlucDismiss","isLastFluc","forceCampaignsGridRefresh","context","CurrentCampaign","azure","metrics","getAttribute","fromScenario","canViewAllInsights","asyncLoadFluctuationConfig","fluctuationTypeIds","onDismiss","focus","getFluctuationPopupStyles","toIANATimeZone","fromLegacyTimeZone","monthString","skeleton","actionLink","monthlyBudgetAmount","formatCurrency","budgetAmount","href","renderBudgetCenterHelpTooltip","closePerformanceInsightsPopup","PerformanceInsightsToolTipCard","popupManager","releaseLock","forceAcquireLock","renderPerformanceInsightsPopup","DeterministicWrapperView","CampaignIdColumn","_CampaignuiBaseColumn","property","sortable","CampaignuiBaseColumn","handleErrors","CampaignLanguageInlineEditor","_ref$languages","languages","_ref$i18n","x","languageSelector","MultiLanguageSelector","inEditMode","selectedLanguages","getSelectedLanguages","SelectedLanguages","getLanguageSetForSelector","languagesSet","AdGroup","Language","IsSimplifiedChineseLanguageEnabledInMultipleLanguage","IsAdsGlobalizationPhase1Enabled","IsAdsGlobalizationPhase2Enabled","IsAdsGlobalizationPhase2JapanEnabled","IsAdsGlobalizationPhase6Enabled","IsDomesticSimplifiedChineseEnabled","IsAdsGlobalizationPhase9Enabled","IsAdsGlobalizationPhase9VIEnabled","sort","CampaignLanguagesColumn","editable","helpId","enableEdit","helpAriaLabel","position","newPosition","languageInlineEditorView","updatedItem","inlineEditSave","fieldName","resource","jsData","editorViewCallbackAfterUpdate","customBlockerTarget","groupClass","cellPosition","parentContainerSelector","CampaignTypeColumn","IsRenameHotelToLodgingEnabled","CampaignMigrationStatus","CampaignColumn","IsBAACompetitionBSCAuctionInsightsEnabled","IsExperimentsEnabled","bodyClasses","group","_this$scope","$total","BaseCampaignName","isSmartCampaign","isPMaxCampaign","isAppCampaign","ariaLabel","experimentName","skipScopeNavigation","campaignTemplate","is","InlineEditableColumnPrompt","saveModel","itemArray","rowItem","updatedRowItem","StatusIconColumn","_BaseStatusIconColumn","statusOptions","campaignStatus","showPausedCampaignNotifications","campaignItemList","updateStatus","BaseStatusIconColumn","BidStrategyTargetCPAColumn","_options$helpId","CampaignSubType","isAutoBiddingLimited","_getBidLandscapeConfi","getBidLandscapeConfigs","enabledBidLandscape","hasBidLandscapeIcon","targetCpaValue","fromFloatToString","budgetId","enabledBidlandscape","hasBidlandscapeIcon","BidStrategyName","cloneDeep","flattenedSchema","minValue","NumberRange","targetCpa","maxValue","control","targetCpaInlineEditorView","curTargetCpa","currencySymbol","getCurrencySymbol","PageContext","AccountCurrencyCode","currencySymbolClassName","bidObject","setErrors","BidStrategyTargetROASColumn","targetRoasValue","fromFloatToPercentString","fromLocalToFloat","targetRoasInlineEditorView","curTargetRoas","toFixed","BidStrategyManualCPIColumn","_ref$helpId","ManualCPI","ManualCpi","manualCpi","manualCpiInlineEditorView","curTargetCpi","BidStrategyManualCPCColumn","ManualCPC","ManualCpc","manualCpc","manualCpcInlineEditorView","curTargetCpc","getDateSaveAction","props","isDateType","refreshGrid","save","StartDateColumn","UseCampaignLevelDates","StartDate","getCurrentDate","saveDate","allowNoDate","selectedDate","convertUTCDateToMachineDate","updater","EndDate","maxDate","DateInlineEditableColumnPrompt","EndDateColumn","displayDate","getLaterDate","_item$Budget","_item$Budget2","localizedStartDate","minDate","getMaxDate","customClass","BidStrategyTargetImpressionShareColumn","TargetImpressionShare","TargetAdPosition","fields","valueProperty","targetImpressionShareInlineEditorView","curTargetImpressionShare","curTargetAdPosition","targetAdPositionInlineEditorView","PopupEditor","hasLabels","OptimizationScoreColumn","cpid","OptimizationScore","newProps","formatter","OptimizationScoreTemplate","cached","percentToFixedFormatter","digits","Number","PerformanceInsightsColumn","performanceInsights","issue","recommendation","n","PerformanceInsightsTemplate","Permissions","DeliveryColumnForCampaign","_DeliveryColumn","DeliveryColumn","IsViewThroughConversionEnabled","IsAudienceSOVEnabled","IsAvgPositionDeprecationPhase1Enabled","IsAvgPositionDeprecationPhase2Enabled","IsViewThroughConversionsRevenueEnabled","IsOptimizationScoreInCampaignsGridEnabled","_Permissions$dynamic","IsPerformanceInsightsEnabled","IsPartialConversionsEnabled","PartialConversions","IsColumnConversionEnabled","ColumnConversion","CPSReporting","InstallPerformanceColumns","ConvValueRules","IsCampaignLifetimeBudgetEnabled","usePartialConversions","isPortfolioBidStrategyEnabled","isAppAdsCampaignPhaseOneEnabled","isUnifiedAppAdsEnabled","isCampaignTypeAllowed","IsEnhancedShoppingCampaignAllowed","IsDynamicSearchAdsV1Enabled","IsAIMCampaignEnabled","getBuilder","builder","ColumnsConfigBuilder","addCategory","category","addColumns","BudgetColumn","LifetimeBudgetColumn","BidStrategyNameColumn","BidStrategyTypeColumn","QualityScoreColumn","LabelsColumn","CampaignCashbackScopeColumn","CashbackBudgetColumn","CampaignCashbackPercentColumn","CampaignCouponColumn","addPerformanceCategoryForCampaign","withFluctuations","addConversionsCategory","withPartialConversions","isCPSEnabled","isInstallColumnsEnabled","isConversionValueRuleColumnsEnabled","addCompetitiveCategoryForCampaignOrAdGroups","IsCallMeteringAllowed","addCallDetailsCategoryForCampaigns","setLockedColumns","setSelectedColumns","ColumnClicksWithFluctuation","ColumnImpressionsWithFluctuation","ColumnCTR","ColumnAverageCPC","ColumnSpendWithFluctuation","ColumnConversionsCredit","ColumnConversions","ColumnViewThroughConversionsCredit","ColumnViewThroughConversions","ColumnAveragePosition","ColumnTopImpressionRate","ColumnAbsoluteTopImpressionRate","schemaI18n","getConfig","dataSource","customHeaderOffset","addDateChangeListener","viewport","_ref$isDataFetchManag","isDataFetchManagerSource","_ref$gridName","getGridName","tableName","_permissions$dynamic","enableGridFlexLayout","scrolling","header","offset","attributes","virtualized","InlineSharedBudgetEditor","InlineBudgetEditor","budgetTemplate","isCampaign","showExperiment","getColumnsConfig","legacyGridName","tableClasses","tableAttributes","selection","headRows","crossPageSelectHeadRow","popColumns","sortableHeader","sortableHeaderTemplate","layout","navigation","source","$call","parameters","mockEdm","root","identifyEntitySet","s$i18n","jsdataRawDataPlugin","commonJsdataRawDataPlugin","getRawData","rawDataAccessor","ds","_rawData","dfmRawData","getCampaignsPlugins","p$daterange","campaignTabPerfMarker","processReportRule","gridId","aggregatedRowsPlugin","aggregatedRowsPluginBuilder","keys","overallI18nKey","filteredI18nKey","waterfallFilterI18nKey","customConfig","showPmaxRow","showLinkedInRow","columnChooserConfig","customColumnConfig","IsCustomColumnsInCampaignsSupported","_campaignMetricCatego","campaignMetricCategoriesFactory","enabled","metricCategories","segmentCategories","getColumnChooserConfig","patchQuery","Columns","SelectedColumns","LegacyColumns","LegacySelectedColumns","LegacyGridFlag","CustomColumns","AdCustomizerAttribute","CampaignAdCustomizerAttribute","RSAAdCustomizerAttributeColumn","enableRSAAdCustomizer","ReportEmailRule","appState","unset","inlineDownloadConfig","DownloadView","isAvailable","customToolbarIcon","plugin","perfMarkerPlugin","marker","paginationPlugin","availablePageSizes","enableRandomPage","pageNumberLabelText","pageSizeText","totalPageCountText","resetPageNumberOnSort","auctionInsightPlugin","route","crossPageSelectNotAllowedI18nKey","shouldNavigateToCompetitionTab","IsBAACompetitionEnabled","sessionStore","inlineDownloadWithoutFilterstatePlugin","segmentPlugin","isOdataActionSource","edm","getSegType","setSegType","cultureShortDatePattern","ShortDatePattern","cellTemplates","segmentationTypes","IsVerticalAdsReportingPhase1Enabled","_toConsumableArray","campaignSegmentationTypeEnum","segmentationType","bidStrategy","ChangeBiddingStrategyView","ChangeBiddingStrategyModel","IsReadOnlyUser","editablePlugin","uiBlockerPlugin","performanceLogPlugin","logger","periodOverPeriodPlugin","columnChooserPlugin","dateFilterPlugin","inlineErrorPlugin","errorIconClasses","assistedSelectionPlugin","a11yPlugin","createCampaignsGrid","_ref$getAdditionalPlu","getAdditionalPlugins","setupDataSourceErrorHandling","setUpErrorHandling","CouponControlView","ParentCouponsEnabled","currentLevel","_ref$deps","a","parentOption","option","errorMsg","initOptions","handleOption","setValue","checked","None","Enabled","Disabled","getI18n","keyMap","getI18nKeyMap","map","textData","empty","validate","selectedOption","hideError","_ref$CashbackPercent","_ref$CashbackMonthlyB","_ref$CashbackScope","_ref$isEnablePersonal","isEnablePersonalizedOffersDisabled","_ref$showEnableCashba","showEnableCashbackSettingsCheckbox","_ref$showCashbackBudg","showCashbackBudget","_ref$ParentLevelCashb","ParentLevelCashbackScope","cashbackPercentControlView","couponControlView","isPersonalizedOffersV2Enabled","isPersonalizedOffersV3Enabled","isReadOnly","enablePersonalizedOffersByDefault","isEnablePersonalizedOffersChecked","ScopeOptions","Store","Product","InheritCashbackScope","cashbackBudgetError","subscribe","v","validateCashbackMonthlyBudget","cashbackPercentValid","validateCashbackPercent","cashbackBudgetValid","couponValid","validateCoupon","CashbackSettings","_ref$PersonalizedOffe","_ref$isCashbackScopeR","isCashbackScopeReadonly","_ref$showInheritFromP","showInheritFromParentOption","ParentLevelCashbackPercent","_ref$ParentLevel","ParentLevel","isCreationScenario","_ref$showCoupon","showCoupon","_ref$CouponsEnabled","_ref$isReadOnly","budgetAmountPlaceholder","fromLocalToString","getDefaultBudget","accountCurrencyCode","CashbackPercentControlView","viewContext","currentCampaign","allowEmptyCashbackPercent","useSelect","USDefaultBudget","IsDefaultBudgetExperimentationEnabled","budgetRange","BudgetRange","DailyRange","Error","inheritOptionText","tmpl","getHelpId","validated","cashbackPercent","undefined","setValues","getCashbackPercentValue","getValue","getProductFeedGridFactory","globalContext","define","pkg","getLinkedStoreGridFactory","getBrandGridFactory","BrandGrid","eventHub","Events","EVENT_NAMES","SHOW_ADD_BRAND_PANEL","SHOW_ERRORS","DATA_REFRESHED","fetchGridData","getBmcMtEndpoint","hasError","CurrentCustomer","CurrentAccount","userId","CurrentUser","displayName","searchText","setQueryString","trim","dropdown","getElementsByClassName","style","unblock","itemOfElement","MmcBrandId","xhrFields","withCredentials","success","showErrors","emit","StatusMap","ColumnsName","SubBrands","BrandNameColumn","BrandWebsiteColumn","_CampaignuiBaseColumn2","SubBrandsColumn","_CampaignuiBaseColumn3","join","BrandStatusColumn","_CampaignuiBaseColumn4","MatchedProductCountColumn","_CampaignuiBaseColumn5","updatedValue","ActionColumn","_CampaignuiBaseColumn6","DropdownColumnTemplate","actionText","actionClass","brandName","BrandName","CustomizedDataSource","_dataSource$Base","fetchDataCallback","gridData","queryString","sourceData","filterData","toLowerCase","getFilterData","obj","getError","ResponseObject","Base","getSortReturn","value1","value2","v1","v2","require","edmCampaign","requireDefault","_globalContext$requir","_globalContext$requir2","s$ProductOffer","preferenceStoreFactory","getFilters","cacheService","dataContextManager","handler","Summary","bindDateFilterChangeHandler","createBrandGrid","hideSubBrand","_ref2$hideSubBrand","compact","Column","getBrandGridConfig","clientSideSortPlugin","compareMaker","sortIteratee","direction","item1","item2","setTopToMax","clientSidePaginationPlugin","getPGridColumnResizePlugin","getBrandGridPlugins","LinkStoreViewModel","storeId","pattern","KoSchema","LinkStoreView","_KnockoutView","KnockoutView","LinkedStoreGrid","SHOW_LINK_TO_STORE_PANEL","getEndpoint","isSPAv2Enabled","IsSPAv2Enabled","customerEmail","Email","customerName","IsUsePreferencesServiceEnabled","orderby","query","preferencesService","setAtUserLevel","Data","sortInfo","CampaignStateManager","setItem","toolbarWithName","constants","DEFAULT_TOOLBAR_NAME","ProviderId","parse","updateStoreLink","RetailerProviderId","unlinkLegacy","linkToStore","shouldLink","retailerId","action","showTopOfGridPanel","linkStoreView","toolbarEditor","providerId","removeToolbar","restoreToolbar","fromToolbar","ActionText","Pending","Approved","Rejected","Expired","Cancelled","ActionClass","StoreIdColumn","StoreNameColumn","StatusColumn","StatusColumnTemplate","statusString","ActionColumnTemplate","storeName","RetailerName","ProviderName","filterParams","editableFilter","$eq","getFilterParams","getQueryUrl","createLinkedStoreGrid","col","getLinkedStoreGridConfig","getLinkedStoreGridPlugins","hostname","UploadFeedViewModel","UploadFeedView","isFeedReady","filePicker","FilePicker","allowedFileExtensions","displayFilePath","validator","file","size","newFilePath","removeUiBlocker","sasUrl","BlobSasUrl","securityToken","SecurityToken","uploadToAzure","_ref$sasUrl","_ref$securityToken","UploadService","fileObject","blobSetting","SasUrl","blobName","uploadToBMC","_ref2$securityToken","FileName","TemplatesPathUrl","StateCode","FailureCode","UploadProgressView","_DeterministicView","retryCount","percentage","trackProgress","State","failure","removeLastUploadedStatus","stopTracking","showConfirmation","Progress","isUploadingFinished","timer","setInterval","makeRequest","setUploadedFeedStatus","clearInterval","DeterministicView","ProductFeedGrid","_ref$getLastUploadedF","getLastUploadedFeedStatusInterval","pageToken","downloadBtnDisabled","SHOW_TOP_OF_GRID_PANEL","SHOW_UPLOAD_STATUS","SHOW_MESSAGES","GRID_DID_LOAD","lastUploadedFeedStatus","refreshDownloadButtonStatus","gridHasData","$buttonDownload","prop","visible","uploadFeedView","uploadProgressView","messages","uploadStatus","showMessasges","closeUploadView","toggleUploadView","showUploadProgress","successCallback","errorCallback","getLastUploadedFeedStatus","lastUploadStatusResult","downloadReportResult","lastUploadFeedResult","downloadReportResponse","timeStamp","timeStampString","endsWith","uploadStatusText","downloadReportLink","link","showUploadStatus","isUploadSuccess","handleResponse","sendAjaxCall","_slicedToArray","uploadStatusResult","isError","toggleUploadProgressView","close","downloadReport","api","ProductFeedColumn","TitleColumn","BrandColumn","GTINColumn","MPNColumn","PriceColumn","Price","parseDecimal","DescriptionColumn","_CampaignuiBaseColumn7","ImageLinkColumn","_CampaignuiBaseColumn8","hasNextPage","_ref2$skip","skip","_ref2$take","take","currentToken","tokenParam","self","token","ContinuationTokenValue","CoOpProducts","getProductFeedGridPlugins","categories","selectOption","getCategoryOptions","selected","getColumnNames","locked","getLockedColumns","getColumnChooserPluginConfig","createProductsGrid","getProductFeedGridConfig","column","Cols","memo","Messages","pluck","code","endPoint","OptTgtToggle","constructor","super","onChange","ev","activityLogger","signal","handleEstimateUpdates","isFunction","handleAgeGenderExclusion","shouldShowTargetExclusionActualDeliveryStatus","errorsView","getData","alwaysDisabled","effectiveTgts","currentLevelTargetInfo","getEffectiveCriterions","disable","disableByValidation","labelTxt","onTxt","offTxt","isAudienceFeedBasedCampaign","getAudienceFeedBasedCampaignPredictiveTargetingText","Toggle","onText","offText","inlineLabel","label","disabled","MessageBar","messageBarType","warning","isMultiline","dismissButtonAriaLabel","CrudAudienceAdgroup","_AudienceStepBase","renderMarker","isAdImpressions","wizardElement","level","DependencyResolver","audienceCampaignType","saveOnce","SchemaModel","backboneSchema","isSimplifyCampaignCreation","accountInfo","isIMAReachRepresentationPhase1Enabled","isAudienceCampaignCollapseTargetSelectionEnable","isMSANRemoveDeviceTargetsEnabled","isShowDisclaimerBannerEnabled","Enable1PPlacementTargeting","isBoostConversionBasedSegmentEnabled","boostPlacementReactComponent","React","optTgtReactComponent","isMSANBoostEnabled","isContextualTargetEnabled","workflow","logScenario","createAdGroup","applyActivity","isOpenCreatePanel","isLastStep","lastStep","audienceTargetSelector","AudienceTargetSelector","selectedTypeKeys","blackListKeys","getBlackListCriterions","supportCashbackSettings","shouldSupportCashbackSettings","settingOptions","isLiveUpdateEnabled","showTargetSelection","showBidAdjustment","showTargetOrBid","locationSetting","LocationCriterionSetting","hideTitleLabel","isNewUI","onLocationTargetsChange","locationTargets","isAudienceCreationWorkflow","ageSetting","AgeCriterionSetting","genderSetting","GenderCriterionSetting","deviceSetting","DeviceCriterionSetting","audienceSetting","AudienceCriterionSetting","companySetting","CompanyNameCriterionSetting","industrySetting","IndustryCriterionSetting","jobFunctionSetting","JobFunctionCriterionSetting","placementSetting","PlacementSetting","targetSettingViews","reachControl","ReachEstimateControl","isSticky","estimateRequestFactory","EstimateRequestFactory","AudienceCampaignErrorsView","setOnAudiencesTargetChangeCallback","audienceTargets","onAudienceTargetsChange","isAudienceCampaignCollapseTargetSelectionEnabled","isCopyCampaignSettingsAudienceCampaignEnabled","CopyAdgroupSettings","adGroupSettings","adgroupCopyDriver","startListeningForEvents","originalSnapshot","getSnapshot","saveSnapshot","criterionEditor","resetSupportCashbackSettings","currentAdGroup","contextualSelection","contextualTargetsCriterions","getAllByType","getSelectionFromCriterions","initialContextualSelection","ref","campaignSubType","isAudienceFeedBasedCampaignNew","isFeedBasedAudienceCampaign","isNativeAds","nameInput","InputControl","field","ariaLabelledby","generateNameSuggestionSuffix","nameInputRemainingCharsHint","RemainingCharsHint","prepend","BoostPlacementTarget","ContextualTargetWithStyle","onContextualSelectionChange","renderOptTgtSwtich","collapseTemplate","removeClass","isUpdateScenario","AdScheduleUseSearcherTimeZone","PricingModel","current","UseOptimizedTargeting","useOptimizedTargeting","BoostAdunitIds","getAdGroupData","updateTasks","updateCriterionDataAsync","targetTypes","getAllNoneEmptyTypeKeys","targetType","TargetSetting","currentSnapshot","targets","criterionHelper","compareAndGetCriterionsDelta","CriterionType","listenToLocationCriterion","_this4$locationSettin","_this4$locationSettin2","intent","_this4$locationSettin3","locations","_this4$locationSettin4","deletedLocations","locationCriterions","contextualTargets","getContextualTargetInfo","processedTargets","adgroupName","processedTarget","parseInt","CampaignName","AdGroupName","adGroupCriterions","Criterion","adGroupAudienceCriterions","AdGroupCriterions","AdGroupAudienceCriterions","validateAndSave","isSuccess","stopListeningForEvents","onSelectionChanged","disableOptToggle","onReloadTargetSummary","call","stopListening","mes","DeliveryStatusType","getState","scrollIntoView","checkIMAReachAndSave","audienceIds","reduce","audienceId","AudienceId","Level","AudienceCriterion","AudienceName","c","campaignCriterions","getCampaignLocationCriterions","_this$locationSetting","getAllLocations","_this$locationSetting2","_this$locationSetting3","adGroupCriterionsWithoutIntent","overrideInfo","getLocationsInfoFromCampaignCriterions","locationsInfo","getLocationsInfo","showIMAReachModal","onYes","saveAsync","onCancel","deliveryChannel","adGroupId","audienceAssociations","AdvertiserCustomerID","isIMAReachModalShow","createTask","jsdata","removeErrors","adGroupParams","getDataAsync","savedAdGroupCriterions","savedAudienceAdGroupCriterions","postProcessAfterSaveAsync","_this11","createAudienceTargetsActivity","createAudienceTargets","bulkApiErrors","getBulkApiErrors","noMappedErrors","getBulkErrorsLogMessage","getODataErrors","_this12","targetInfo","destroyAllAsync","updatedCriterions","applyCriterionsDelta","createMultipleAsync","actions","displayText","htmlAttributes","class","method","unshift","containerId","getContainerNameFromId","ts","biddingSchemeType","bidinfo","BidStrategy","subType","campaignSetting","feedInfo","getFeedInfo","hasAudienceRemarketingList","updateEstimate","_getLocationsInfo","locationIntentCriterion","targetedLocationCriterions","excludedLocationCriterions","reloadAudienceData","isLocationRestricted","reloadLocationView","_this13","targetSelectionView","locationTargetsView","settoSpecificLocation","destroyTargetTypeAsync","formatted","criterions","_this14","isLocation","locType","isIncluded","loadedCriterionData","formattedCriterion","reformatFetchedCriterion","AgeRange","GenderType","IntentOption","CompanyName","JobFunction","Industry","locationManageView","searchView","convertFromCriterionHelperFormat","_this15","adgroup","ageKeys","i","CriterionBid","genderKeys","radiusList","excludedLocations","otherCriterions","setKeys","formattedCriterions","criterionFormat","audienceAssociationView","expandAssociation","expandExclusion","configSettings","doubleListBoxViewModel","criterion","convertAudienceMTCriterion","AdGroupCriterion","_this16","copyAdgroupCriterion","locationTSummary","getTargetedSummary","locationESummary","getExcludedSummary","ageSummary","getSummary","genderSummary","audienceTSummary","audienceESummary","companyTSummary","companyESummary","industryTSummary","industryESummary","jobTSummary","jobESummary","dataModel","locationSummaryText","ageSummaryText","genderSummaryText","audienceSummaryText","companyNameSummaryText","industrySummaryText","jobFunctionSummaryText","AudienceStepBase","AudienceAdvancedSettings","isExclusionsExpanded","initExclusions","initUrlOptions","initAdRotation","isSettings","initAdScheduleViewAsync","upgradedUrlOptions","adRotation","collapse","sectionName","toggleClass","adScheduleView","dateSettings","getDateSettings","adScheduleUseSearcherTimeZone","urlOptions","toObject","FinalUrlSuffix","getValues","exclusionRepository","siteExclusions","siteExclusionView","AdvancedSettings","ExcludedSites","saveExtensions","NegativeSitesResult","AdRotationView","BaseExclusionView","adgroupId","load","campaignExclusions","adgroupExclusions","exclusions","exclusionType","urlOptionsTemplate","UpgradedUrlOptions","editMode","trackingTemplate","finalUrlSuffix","customParameters","showUurlTestTool","updateAdScheduleViewWithContextAsync","renderAdSchedule","criterionLoader","adgroupCriterions","adgroupTargets","campaignTargets","adGroupSchedulingRows","parseSchedulingRows","campaignSchedulingRows","adScheduleTimeZoneSetting","AdScheduleTimeZoneSetting","dayTimeRanges","adGroupStatus","AdScheduleView","showDateSettings","campaignDayTimeRanges","campaignAdScheduleUseSearcherTimeZone","resetId","schedulingRows","multiplier","Multiplier","Day","StartHour","FromHour","StartMinute","FromMinute","EndHour","ToHour","EndMinute","ToMinute","BidAdjustmentType","BidAdjustmentAmount","Math","abs","CrudAudienceAdgroupBasic","isNextButtonEnabled","isReadOnlyUser","CurrentAccountInActive","IsAudienceCampaignCollapseTargetSelectionEnabled","IsAmplifyEnabled","IsContextualTargetEnabled","bidStrategyType","isAutoBidding","isFCapEnabled","initCashbackSettings","cashbackSettingsView","onCashbackPercentChange","initializeNameInputControl","initializeBiddingStrategyView","initDefaultBidInput","initAudienceAdvancedSettings","frequencyCapping","FrequencyCapSettings","initialFrequencyCapping","viewmodel","isAdvancedAdgroupExpanded","formattedValue","advancedSettings","toggleCashbackPercentColumns","toggle","adGroupNameInputModel","BiddingStrategyView","getCampaignType","CampaignSubTypeTextMapping","biddingStrategyView","isInitialize","bidSchemeType","DefaultBidModel","getBidSchema","bidCeil","BiddingStrategyToRangeKey","bidFloor","defaultBidModel","recommendedValueFromContext","BiddingStrategyValueToRecommendBidKey","recommendedValue","formatDecimal","maximumFractionDigits","minimumFractionDigits","bidParam","PricingModelToBidParam","amount","AutoBidModel","autoBidModel","defaultBidInput","addonText","readonly","adGroup","renderFrequencyCapping","FrequencyCapping","legacyI18n","validationProps","updateValidation","onFrequencyCappingChange","boostSetting","getBoostSetting","pricingModel","BiddingStrategyToPricingModel","Medium","scheduling","getScheduleInfo","populateCriterionWithAdGroupInfo","isAdvancedSettingsValid","isCashbackSettingsValid","toggleAdvancedSettings","updateOrCreateTask","createAdGroupBasicActivity","createAdGroupBasic","logAdGroupPersonalizedOffers","adGroupErrors","deletedDayTimeCriterions","COLUMN_FORMATS","format","unitShort","unitValueMap","Unit","unit","decimalFormatter","getFormatter","getRange","High","Low","KPIEstimateReact","isVideo","learnMore","estimateDataConfig","i18nLabel","helpTopic","ApiDataName","getEstimateDataConfig","reqStatus","HelpPopup","topic","defaultProps","BidStrategyReact","onStrategyChange","defaultSelectedKey","isDisabled","HelpLink","Dropdown","CrudAudienceBudgetBid","onBidStrategyChanged","IsAIMBidSuggestionEnabled","suggestedBidMapping","localized","updateKPIEstimateAsync","isDefaultBidUsed","renderConversionGoalSelection","isSPA","isCPS","goalSelectionView","CampaignGoalSelectionView","pageSize","isMultiMode","isHideSaveBar","getCampaignPromise","queryParameters","expand","bypassCache","targetBidAdjustment","defaultBidUpdatedByUser","IsSuggestedBidShowedOnUI","showDefaultBidWarning","isDefaultBidCPVWarningRendered","createBudgetBids","_this$permissions","IsManualCpmEnabled","IsManualCpcForVideoAdsEnabled","IsAudienceCampaignSwapAdsBudgetAndBidsEnabled","IsKPIEstimateForAudienceFeedBasedEnabled","IsEnabledDeprecateManualCpcForAudienceCampaign","IsHideCpmForFeedbasedCampaginEnabled","_this$permissions$dyn","AgeGenderDisclaimer","isCpmEnabled","isManualCpcForVideoAdsEnabled","isSwapStepsEnabled","isHideCpmForFeedbasedCampaginEnabled","isEnabledDeprecateManualCpcForAudienceCampaign","GoalSelectorView","isFeedBased","pricingModels","pricingModelToBidTypeString","CPC","CPV","CPM","EnhancedCPC","MaxConversions","pricingModelToBidTypeEnum","EnhancedCpc","ManualCpv","ManualCpm","pricingModelAdgroupBidAttributeMapping","initAdScheduleView","isAdScheduleExpanded","isBidAdjustmentsExpanded","skipAdScheduling","populateCriterionWithAdGroupIds","AdGroups","budgetPanelView","isAudienceCampaignAutoBiddingV2Enabled","populateCriterionCampaignIds","CampaignCriterions","CampaignConversionGoalAssociations","convertToMTFormat","logdata","SuggestedBid","SearchBid","originalCurrentCampaign","CampaignSettings","cashbackSettings","request","customHeader","targetsData","getEstimatePromise","estimateDataMock","ClicksLostToBid","ClicksLostToBudget","Currency","ErrorCode","ErrorMessage","EstAudienceSize","EstCPC","EstCTR","EstClick","EstCostPerEvent","EstImpression","EstSpend","EstView","EventsLostToBid","EventsLostToBudget","IsMinSuggestedBudget","RequestFulfilledByHost","SuggestedBudget","hasClass","updateDefaultBidWarning","updatePanel","DefaultBidCPVWarningThreshold","DailyBudget","Bid","estimateData","updateCampaign","isSuccessful","initDailyBudgetView","change","initTargetBidAdjustmentsAndRender","isMSANeCPCAutoBiddingEnabled","CampaignSubTypes","AudienceStatic","AudienceFeedBased","AudienceDynamicFeedBased","IsAudienceCampaignAutoBiddingV2Enabled","isCreation","campaignLanguage","selectedBidStrategy","strategy","initBidStrategy","toggleTargetsCashbackPercentColumns","targetsCPVData","targetsCPMData","mockEstimateData","promises","getCPCRecommendedBidPromise","cpcEstimateData","cpvEstimateData","cpmEstimateData","shouldDeprecateManualCpc","slice","isHideCpmForFeedbasedEnabled","pricingModelControls","pModel","defaultBidWarningSelector","Alert","getAll","criterionTypesGrouped","criterionSettingOptions","criterionTypeGroup","criterionType","BudgetPanelView","currentPricingModel","PricingModelToRangeKey","AlertReact","withDefaultStyles","_React$useState","_React$useState2","setVisible","alertKey","learnMoreId","textDecoration","float","CrudAudienceCampaign","createCampaignSettings","isEnabledForVerifiedImpressionTrackingAtCampaignLevel","CopyCampaignSettings","copySettings","copyFromCampaign","initControls","updateVideoAlert","updateAdImpressionAlert","impressionTrackingUrlOptions","budget","isIndividualBudgetSelected","budgetView","parentMarker","timeZoneMapper","TimeZone","getAccountTimeZone","IASTrackingInfo","VerifiedTrackingData","createOrUpdateTask","IsNewStaticAudienceCampaignCreationEnabled","$select","rawResponse","campaignErrors","ImpressionTrackingUrlOptions","initialIASImpressionTrackingUrlValue","maxImpressionTrackingUrlsCount","isImpressionTrackingUrlSectionVisible","isIASSectionVisible","initBudgetView","SharedBudgetView","budgetFactory","newFactory","IASImpressionTrackingUrlValue","first","setIASImpressionTrackingUrlValue","CrudAudienceShoppingCampaign","_CrudAudienceCampaign","productData","feedData","isEnabledDynamicFeedCampaign","IsEnabledForDynamicFeedCampaign","isEnhancedPAFilterP2Enabled","Boolean","initShoppingSettingsView","shouldShowCashbackSettings","isPersonalizedOfferAvailable","audienceCampaignSubType","initCashbackSettingsView","shoppingSettingsView","feedId","FeedId","hasFilteredProducts","Priority","LocalInventoryAdsEnabled","CampaignProductScope","getProductScope","CampaignCriterionsData","filterDataComesFrom","clickApplyButton","ShoppingCampaign","getProductData","getCampaignCriterionsOnly","logCampaignPersonalizedOffers","renderCatagrizedOptionsList","disableStoreSelection","ShoppingSettingsView","noExistingCampaign","cashBackSettings","getTreeInfo","refreshCategorizedOptionsList","refreshData","selectAllProducts","uid","urlQueryStringObject","salesCountry","shouldShowPlaceholderStoreIfExists","getCategoryFullData","getProductTypeFullData","add","DateInlineEditView","datePicker","CampaignsDatePicker","noDateLabel","dateLabel","setChild","customizedInlineEditTemplate","date","getSelectedDate","newSelectedDate","convertMachineDateToUTCDate","errorMapping","errorContent","querySelectorAll","innerHTML","_ref$customClass","_ref$updater","dateEditorView","toISOString","sn","datepicker","adsActivity","inlineDateChange","dateRangeMapping","Yesterday","RANGES","YESTERDAY","LastSevenDays","LAST_SEVEN_DAYS","Today","TODAY","LastThirtyDays","LAST_THIRTY_DAYS","LastFourteenDays","LAST_FOURTEEN_DAYS","ThisMonth","THIS_MONTH","LastMonth","LAST_MONTH","LastThreeMonths","LAST_THREE_MONTHS","LastSixMonths","LAST_SIX_MONTHS","ThisYear","THIS_YEAR","LastYear","LAST_YEAR","AllTime","ALL_TIME","ThisWeekFromSun","THIS_WEEK_SUNDAY","ThisWeekFromMon","THIS_WEEK_MONDAY","LastWeekStartingSun","LAST_WEEK_SUNDAY","LastWeekStartingMon","LAST_WEEK_MONDAY","LastBusinessWeek","LastFourWeeksStartingSun","getStateDateRangePreset","DateRangePreset","CUSTOM","getRanges","getDateRanges","today","convertDateRangePresetToRangeId","ranges","rangeKey","grains","Custom","getSelectionDateRangePreset","statePreset","grain","preset","getSelectionDateFormatter","dateFormatter","getSelectionDateParser","parser","dateParser","substr","getStateDateRange","DateRange","customStart","customEnd","comparisonOptionMapping","PreviousPeriod","COMPARISON_RANGES","PREVIOUS_PERIOD","SamePeriodLastYear","SAME_PERIOD_LAST_YEAR","getStateComparisonDateRangeOption","ComparisonDateRangeOption","getStateComparedDateRange","primaryRange","ComparisonDateRange","getComparedDateRanges","comparedCustomStart","comparedCustomEnd","convertSelectionDateRangeToState","_ref$Selection","withoutTime","compared","convertStateDateRangeToSelection","$daterange","stateOption","formatAPIDate","startdate","enddate","RangeIndex","isRangeNotPreset","lockDownSelectionDateRange","primaryDateRange","comparedDateRange","selectionDateFormatter","customDateRangeFormatter","str","DateRangeFormat","SchemaI18n","formatCustomDateRange","formatPreset","ComparisonDateRangeFormat","_ref2$noneStringKey","noneStringKey","comparisonDateRange","getStyles","__","datePickerStyle","dateSettingContainer","creationCommonStyle","advancedSettingsSectionStyle","paddingRight","toggleButtonStyle","paddingLeft","backgroundColor","fontWeight","margin","minHeight","neutralSecondary","LegacyDateSetting","allowNoEndDateSelection","allowStartDateSelection","allowEndDateSelection","useRef","useDefaultStyles","useEffect","DateSettings","extend","callOnChangeCb","isCreate","appendTo","getRawValues","getDateSettingDetails","isUseCampaignLevelDates","isDateLevelDisplayed","managementLevel","startFromDate","endToDate","convertDateBetweenTimeZones","from","to","dateString","parseDate","validateDate","_ref2$hasFixedStartDa","hasFixedStartDate","validationErrors","currentDate","numberOfDaysBetweenDates","startDateUTC","UTC","getFullYear","getMonth","getDate","endDateUTC","floor","numberOfDaysLater","setDate","LegacyDateSettingWithCustomValidation","restProps","_objectWithoutProperties","_excluded","dataSettings","useContext","I18nContext","ActivityContext","_useState","useState","_useState2","updatedDateSettings","setUpdatedDateSettings","useCallback","validateDateUtil","newData","validationError","dateSettingWithDefaultStartDate","useMemo","ValidatedLegacyDateSetting","withError","withCustomValidation","Spin","OnlyCurrentUser","AllUsersEmailOption","Customer","Account","Loading","Succeeded","Failed","getUserIds","users","user","getCheckedUsers","EmailOption","CustomUserIds","currentUserId","AllUsers","EmailNotificationDeliveryOptionEditor","_React$PureComponent","onAllUsersChange","getAllUsersEmailOption","onCheckedChange","onSearch","renderUserEmail","ReactTemplate","email","me","renderUser","firstName","FirstName","lastName","LastName","renderUsers","_this$state","loadUsersStatus","_this$geEmailOptionAn","geEmailOptionAndCustomerIds","CheckboxGroup","include","renderItem","getItemId","loadUsers","allUsersType","_this$props","searchBoxElement","SearchBoxControl","onQueryChange","placeholder","SearchBox","Checkbox","getExperimentBudgetAlert","ExperimentBudgetAlert","experimentId","isLoading","Experiment","baseCampaign","BaseCampaignId","navigateToRoute","initialized","OneDay","targetTimeZone","convert","numOfDay","setHours","getTimezoneOffset","ianaTimeZone","timeZoneConverter","offsetString","offsetFactor","sourceTimeZone","totalOffset","getOffset","getTime","datetime","utils","oneDay","reformatDate","getDateUtils","PerformanceCardContainer","lazy","module","OverviewRecommendationsCard","OverviewCampaignTable","OverviewAccountTable","OverviewKeywordTable","OverviewSearchTermTable","OverviewAdGroupTable","ConversionTrackingCardFluent","DeviceCard","TopLocationsCard","TopLocationViewSelector","CompetitionCardWithData","CompetitionFilterWithData","TopChangesCard","WelcomeTipsCard","AssetPerformanceCard","AssetPerformanceCardWithAssetData","AssetPerformanceCardHeader","AssetPerformanceFilterWithAssetGroupsData","DiagnosticCard","OverviewDiagnosticCard","NavigateToFullProductCard","getCardViewConstructor","typeId","cardPerformanceId","CardView","getCardViewProps","cardPreference","patchPreference","getPropsFromPreferenceForPerformanceChart","cardRecommendationsId","getPropsForRecommendations","cardTopCampaignsId","navigationLevel","getTablePropsFromPreferenceForPerformanceTable","CardHeaderContent","DefaultHeaderDropdown","getCardHeaderContentProps","getHeaderPropsFromPreferenceForPerformanceTable","cardTopKeywordsId","cardSearchTermsId","cardTopAdGroupsId","cardConversionTrackingId","getPropsFromPreferenceForConversionTracking","getHeaderPropsFromPreferenceForConversionTracking","cardDeviceId","getTablePropsFromPreferenceForDevices","cardTopLocationsId","getPropsFromPreferenceForTopLocations","cardCompetitionId","cardTopChangesCampaignId","cardTopChangesAccountId","cardTopChangesAdGroupId","getPropsForTopChanges","getHeaderPropsFromPreferenceForTopChanges","cardWelcomeTipsId","cardTopAccountsId","cardDiagnosticId","cardAssetPerformanceId","isSDK","cardNavigateToFullProductId","logMessage","LOGCATEGORY","ERROR","LOGLEVEL","INFO","validMetricIndexes","defaultSelectedMetricIndexes","availableMetricKeys","allMetrics","preferenceName","dashboardPreferenceKey","PerfMarkerFactory","createMarker","perfMarkerUtils","sesId","selectedMetricIndexes","getCardsConfig","responsiveSize","shellContentElement","constructOptions","InstrumentationContext","_useMemo2","initialSelectedMetricIndexesFromPreference","initialMetricsFromPreference","preferencePatch","_getPreference","cardId","boardPreference","getPreferenceForDashboard","preference","cardPreferenceOptions","getCardPreferenceOptions","metric","defaultMetrics","setPreferenceForCard","cardOptions","getPreference","_get","_useData","setSelectedMetricIndexes","_useState3","_useState4","visibleMetrics","setVisibleMetrics","_useState5","_useState6","performanceData","setPerformanceData","_useState7","_useState8","aggregatedMetricPickerData","setAggregatedMetricPickerData","_useState9","_useState10","hideCurrency","setHideCurrency","_useState11","_useState12","isChartLoading","setIsChartLoading","_useState13","_useState14","isMetricLoading","setIsMetricLoading","_useState15","_useState16","isFirstDataLoaded","setIsFirstDataLoaded","_useState17","_useState18","setHasError","ScopeContext","getNavigationLevel","granularity","availableGranularities","dateUtil","isPreferenceInitialized","useIsPreferenceInitialized","legacyPreference","filterString","currentAccount","Campaigns","URLSearchParams","extendedFilter","extraFilter","_constructOptions$ext","baseFilter","fetchSingleTile","NavigationLevel","fetchPerformanceTimeSeries","movingAverage","period","accountsMode","dfmCacheKey","performanceTimeSeries","fetchAggregatedData","OverallTotals","totalMetrics","getFilteredTotalsMetrics","AccountsMode","Expert","availableTotalMetrics","AccountsHaveDifferentCurrencies","metricPickerData","total","formatMetric","metricToDisplayNameMap","useData","selectedMetricIndexesFromDataHook","onMetricUpdate","newSelectedMetricIndexes","newVisibleMetrics","Card","PerformanceCardFluent","PerformanceCard","isComparisonEnabled","ValidatedTextField","withValidation","TextField","FrequencyIntervals","FrequencyCapUnit","getKeyStringMap","formatFrequencyCapping","interval","CapValue","TimeGranularity","count","textStyles","dropDownStyles","getStyle","inputContainer","alignItems","frequency","ValueAndInterval","onIntervalChanged","timeOptions","classNames","selectedKey","ValidatedValueAndInterval","mergeI18n","_ref4$CapValue","setErrorMessage","onToggle","onCountValidate","_result$messages","customErrors","decimalLength","onValidate","alwaysShowError","errorProcessor","oldError","minimum","maximum","CalloutWithLock","lockKey","CalloutWithLockInner","withLock","force","_document$querySelect","_document$querySelect2","addEventListener","_document$querySelect3","_document$querySelect4","removeEventListener","pug","exports","locals","pug_interp","pug_html","locals_for_with","$$obj","pug_index0","$$l","escape","attr","budgetName","isBudgetCenterEntryEnabled","budgetTypeText","AssociatedExperiment","joiner","skipNavigation","linkText","closeText","pug_mixins","popupId","ariaLabelContext","templateString","cssClass","arialLabelText","optTgt","itemClassSelect","collapseId","shouldExpand","shouldCollapseClassName","optTgtTgBtn","split"],"sourceRoot":""}