{"version":3,"file":"static/js/application.initial~5fbb7518.37001acd.js","mappings":"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,CAAC,2C,wBCzRT6C,EAAe,CACnB,EACA,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,K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","sources":["../../../node_modules/@bingads-webui-campaign/query-builder/src/utils/js-data-query-generator.js","../../../node_modules/@bingads-webui-campaign/query-builder/src/query-builder.js","../../../node_modules/@bingads-webui-campaign/query-builder/src/decorators/decorator.js","../../../node_modules/@bingads-webui-campaign/query-builder/src/utils/deps-check.js","../../../node_modules/@bingads-webui-campaign/query-builder/src/decorators/column-chooser-decorator.js","../../../node_modules/@bingads-webui-campaign/query-builder/src/decorators/date-filter-decorator.js","../../../node_modules/@bingads-webui-campaign/query-builder/src/decorators/filter-decorator.js","../../../node_modules/@bingads-webui-campaign/query-builder/src/decorators/grid-data-parameters-decorator.js","../../../node_modules/@bingads-webui-campaign/query-builder/src/decorators/pagination-decorator.js","../../../node_modules/@bingads-webui-campaign/query-builder/src/decorators/segmentation-decorator.js","../../../node_modules/@bingads-webui-campaign/query-builder/src/decorators/sorting-decorator.js","../../../node_modules/@bingads-webui-campaign/query-builder/src/decorators/chart-parameters-decorator.js","../../../node_modules/@bingads-webui-campaign/query-builder/src/decorators/data-exclusion-filter-processor-decorator.js","../../../node_modules/@bingads-webui-campaign/query-builder/src/decorators/target-roas-filter-processor-decorator.js","../../../node_modules/@bingads-webui-campaign/query-builder/src/factory.js","../../../node_modules/@bingads-webui-campaign/react-hook-use-fetch/src/use-fetch/index.js","../../../node_modules/@bingads-webui-campaign/react-hook-use-fetch/src/use-fetch/error-handler/helper.js","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/campaignModel.js","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/const.js","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/campaign.js","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/sharedBudgetModel.js","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/sharedBudget.js","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/adgroupModel.js","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/adgroup.js","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/keywordModel.js","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/keyword.js","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/audienceModel.js","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/audience.js","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/negativeKeywordListModel.js","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/negativeKeywordList.js","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/campaignVNext.js","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/sharedBudgetVNext.js","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/adgroupVNext.js","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/keywordVNext.js","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/audienceVNext.js","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/negativeKeywordListVNext.js","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/goal.js","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/accountVNext.js","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/currentSetting.js","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/suggestedSetting.js","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/generatedFrom.js","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/moreImages.js","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/moreConversionClarityButtons.js","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/importTaskItem.js","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/campaigns.js","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/contextual-attribute.js","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/util.js","../../../node_modules/@bingads-webui-campaign/recommendation-core/src/consts.js","../../../node_modules/@bingads-webui-campaign/recommendation-core/src/schema.js","../../../node_modules/@bingads-webui-campaign/recommendation-core/src/formatter/basic-format-data.js","../../../node_modules/@bingads-webui-campaign/recommendation-core/src/general-preferences.js","../../../node_modules/@bingads-webui-campaign/recommendation-core/src/util.js","../../../node_modules/@bingads-webui-campaign/recommendation-core/src/recommendation-configs.js","../../../node_modules/@bingads-webui-campaign/recommendation-core/src/formatter/format-data.js","../../../node_modules/@bingads-webui-campaign/recommendation-core/src/formatter/format-summary.js","../../../node_modules/@bingads-webui-campaign/recommendation-core/src/formatter/format-visual-data.js","../../../node_modules/@bingads-webui-campaign/recommendation-core/src/formatter/format-competition.js","../../../node_modules/@bingads-webui-campaign/recommendation-core/src/formatter/format-error.js","../../../node_modules/@bingads-webui-campaign/recommendation-core/src/details-view-model.js","../../../node_modules/@bingads-webui-campaign/recommendation-core/src/hoc/with-ads-auto-apply.js","../../../node_modules/@bingads-webui-campaign/recommendation-core/src/hoc/with-image-auto-retrieve.js","../../../node_modules/@bingads-webui-campaign/recommendation-core/src/hoc/with-get-auto-apply-settings.js","../../../node_modules/@bingads-webui-campaign/recommendation-core/src/hoc/with-filter-category.js","../../../node_modules/@bingads-webui-campaign/recommendation-core/src/normalize-data.js","../../../node_modules/@bingads-webui-campaign/recommendation-core/src/hoc/with-get-summary.js","../../../node_modules/@bingads-webui-campaign/recommendation-core/src/hoc/with-get-count.js","../../../node_modules/@bingads-webui-campaign/recommendation-core/src/hoc/with-track.js","../../../node_modules/@bingads-webui-campaign/recommendation-core/src/hoc/with-coupon.js","../../../node_modules/@bingads-webui-campaign/recommendation-core/src/service/recommendation-download-service.js","../../../node_modules/@bingads-webui-campaign/recommendation-core/src/poll.js","../../../node_modules/@bingads-webui-campaign/recommendation-core/src/cache.js","../../../node_modules/@bingads-webui-campaign/recommendation-core/src/service/recommendation-service.js","../../../node_modules/@bingads-webui-campaign/recommendation-core/src/summary-card-model.js","../../../node_modules/@bingads-webui-campaign/recommendation-core/src/with-recommendations-scope.js","../../../node_modules/@bingads-webui-campaign/recommendation-core/src/shared-component-function-state-store.js","../../../node_modules/@bingads-webui-campaign/recommendation-inline-budget-view/src/view/const.js","../../../node_modules/@bingads-webui-campaign/recommendation-inline-budget-view/src/viewmodel/table.js","../../../node_modules/@bingads-webui-campaign/recommendation-inline-budget-view/src/view/table.js","../../../node_modules/@bingads-webui-campaign/recommendation-inline-budget-view/src/view/chart-config.js","../../../node_modules/@bingads-webui-campaign/recommendation-inline-budget-view/src/view/chart.js","../../../node_modules/@bingads-webui-campaign/recommendation-inline-budget-view/src/view/index.js","../../../node_modules/@bingads-webui-campaign/recommendation-notification/src/warn-notification-banner.js","../../../node_modules/@bingads-webui-campaign/recommendation-notification/src/utils.js","../../../node_modules/@bingads-webui-campaign/recommendation-notification/src/in-product-update-notification-banner.js","../../../node_modules/@bingads-webui-campaign/recommendation-notification/src/formatter/format-notification.js","../../../node_modules/@bingads-webui-campaign/recommendation-notification/src/notification-core.js","../../../node_modules/@bingads-webui-campaign/recommendation-preferences/src/consts.js","../../../node_modules/@bingads-webui-campaign/recommendation-preferences/src/preference.js","../../../node_modules/@bingads-webui-campaign/recommendation-repository/src/util/locationRecommendationConverter.js","../../../node_modules/@bingads-webui-campaign/recommendation-repository/src/get.js","../../../node_modules/@bingads-webui-campaign/recommendation-repository/src/util/adoptRecommendations.js","../../../node_modules/@bingads-webui-campaign/recommendation-repository/src/apply.js","../../../node_modules/@bingads-webui-campaign/recommendation-repository/src/dismiss.js","../../../node_modules/@bingads-webui-campaign/reports-v4-bar/src/recent-reports/recent-report-title.js","../../../node_modules/@bingads-webui-campaign/reports-v4-shared/src/util.js","../../../node_modules/@bingads-webui-campaign/reports-v4-bar/src/recent-reports/recent-report-menu-item.js","../../../node_modules/@bingads-webui-campaign/reports-v4-bar/src/generate-default-report-menu-item.js","../../../node_modules/@bingads-webui-campaign/reports-v4-bar/src/generate-saved-report-menu-item.js","../../../node_modules/@bingads-webui-campaign/reports-v4-bar/src/generate-custom-report-builder-menu-item.js","../../../node_modules/@bingads-webui-campaign/reports-v4-bar/src/generate-menu-props.js","../../../node_modules/@bingads-webui-campaign/reports-v4-bar/src/generate-recent-report-menu-items.js","../../../node_modules/@bingads-webui-campaign/reports-v4-bar/src/reports-v4-bar.js","../../../node_modules/@bingads-webui-campaign/reports-v4-data-source/src/observable/observable.js","../../../node_modules/@bingads-webui-campaign/reports-v4-data-source/src/observable/observable-data-source.js","../../../node_modules/@bingads-webui-campaign/reports-v4-data-source/src/report-api-calls/utils.js","../../../node_modules/@bingads-webui-campaign/reports-v4-data-source/src/report-api-calls/to-json-and-throw-on-error.js","../../../node_modules/@bingads-webui-campaign/reports-v4-data-source/src/report-api-calls/poll.js","../../../node_modules/@bingads-webui-campaign/reports-v4-data-source/src/report-api-calls/task-type-utils.js","../../../node_modules/@bingads-webui-campaign/reports-v4-data-source/src/user-error-codes.js","../../../node_modules/@bingads-webui-campaign/reports-v4-data-source/src/report-api-calls/index.js","../../../node_modules/@bingads-webui-campaign/reports-v4-data-source/src/report-data-source/global-menu-saved-reports.js","../../../node_modules/@bingads-webui-campaign/reports-v4-data-source/src/report-data-source/loading-reports.js","../../../node_modules/@bingads-webui-campaign/reports-v4-data-source/src/report-data-source/recent-reports.js","../../../node_modules/@bingads-webui-campaign/reports-v4-data-source/src/observable/subscribe-all.js","../../../node_modules/@bingads-webui-campaign/reports-v4-data-source/src/report-data-source/report-data-source.js","../../../node_modules/@bingads-webui-campaign/reports-v4-history/src/shared.js","../../../node_modules/@bingads-webui-campaign/reports-v4-history/src/history.js","../../../node_modules/@bingads-webui-campaign/reports-v4-history/src/link.js","../../../node_modules/@bingads-webui-campaign/reports-v4-report-type-mapping/index.js","../../../node_modules/@bingads-webui-campaign/reports-v4-telemetry/src/ctr-logger.js","../../../node_modules/@bingads-webui-campaign/scope-constants/src/index.js","../../../node_modules/@bingads-webui-campaign/seasonality-id-name-utils/src/utils.js","../../../node_modules/@bingads-webui-campaign/segmentation-utilities/src/segmentation-type.js","../../../node_modules/@bingads-webui-campaign/segmentation-utilities/src/segmentation-type-enum.js","../../../node_modules/@bingads-webui-campaign/segmentation-utilities/src/time-range-checker.js","../../../node_modules/@bingads-webui-campaign/segmentation-utilities/src/segmentation-tree.js","../../../node_modules/@bingads-webui-campaign/segmentation-utilities/src/localize.js","../../../node_modules/@bingads-webui-campaign/segmentation-utilities/src/is-supported.js","../../../node_modules/@bingads-webui-campaign/segmentation-utilities/src/get-supported-tree.js","../../../node_modules/@bingads-webui-campaign/status-popup-editor/src/status-popup-view.js","../../../node_modules/@bingads-webui-campaign/status-popup-editor/src/render-status-popup-editor.js","../../../node_modules/@bingads-webui-campaign/summary-grid-helper/src/columns-config-builder.js","../../../node_modules/@bingads-webui-campaign/summary-grid-helper/src/query-util.js","../../../node_modules/@bingads-webui-campaign/summary-grid-helper/src/initializers/filter-agent.js","../../../node_modules/@bingads-webui-campaign/summary-grid-helper/src/preferences.js","../../../node_modules/@bingads-webui-campaign/summary-grid-helper/src/inline-edit-save.js","../../../node_modules/@bingads-webui-campaign/summary-grid-helper/src/inline-edit-prompt.js","../../../node_modules/@bingads-webui-campaign/summary-grid-helper/src/grid-util.js","../../../node_modules/@bingads-webui-campaign/summary-grid-helper/src/grid-data-params.js","../../../node_modules/@bingads-webui-campaign/summary-grid-helper/src/error-handler.js","../../../node_modules/@bingads-webui-campaign/summary-grid-helper/src/rsa-preview.js","../../../node_modules/@bingads-webui-campaign/summary-grid-helper/src/hovering-helper.js","../../../node_modules/@bingads-webui-campaign/summary-grid-helper/src/url-filter.js","../../../node_modules/@bingads-webui-campaign/summary-grid-helper/src/date-utils.js","../../../node_modules/@bingads-webui-campaign/summary-grid-helper/src/preference-validator.js","../../../node_modules/@bingads-webui-campaign/ui-next-style/src/uinext-welcome-style.js","../../../node_modules/@bingads-webui-campaign/url-filter-metadata/src/url-filter-type.js","../../../node_modules/@bingads-webui-campaign/url-filter-metadata/src/filter-alias.js","../../../node_modules/@bingads-webui-campaign/url-filter-metadata/src/localized-editorial-rejection-reason.js","../../../node_modules/@bingads-webui-campaign/url-filter/src/index.js","../../../node_modules/@bingads-webui-campaign/version-check/src/index.js","../../../node_modules/@bingads-webui-campaign/wizard-jumbo-card/src/components/collapse/error-string.js","../../../node_modules/@bingads-webui-campaign/wizard-jumbo-card/src/components/collapse/title-bar.js","../../../node_modules/@bingads-webui-campaign/wizard-jumbo-card/src/components/collapse/content.js","../../../node_modules/@bingads-webui-campaign/wizard-jumbo-card/src/components/collapse/details.js","../../../node_modules/@bingads-webui-campaign/wizard-jumbo-card/src/components/collapse/panel.js","../../../node_modules/@bingads-webui-campaign/wizard-jumbo-card/src/components/collapse/style.js","../../../node_modules/@bingads-webui-campaign/wizard-jumbo-card/src/components/collapse/fixed-title-bar.js","../../../node_modules/@bingads-webui-campaign/wizard-jumbo-card/src/components/collapse/fixed-panel.js","../../../node_modules/@bingads-webui-campaign/wizard-jumbo-card/src/components/collapse/collapse.js","../../../node_modules/@bingads-webui-campaign/wizard-jumbo-card/src/components/panel-v2-shim.js","../../../node_modules/@bingads-webui-campaign/wizard-jumbo-card/src/components/common/toggle-title.js","../../../node_modules/@bingads-webui-campaign/wizard-jumbo-card/src/components/common/text-title.js","../../../node_modules/@bingads-webui-campaign/wizard-jumbo-card/src/components/common/title-bar-error.js","../../../node_modules/@bingads-webui-campaign/wizard-jumbo-card/src/components/collapse/use-collapse-state.js","../../../node_modules/@bingads-webui-campaign/wizard-jumbo-card/src/index.js","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/accountVNext.pug","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/adgroup.pug","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/adgroupVNext.pug","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/audience.pug","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/audienceVNext.pug","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/campaign.pug","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/campaignVNext.pug","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/campaigns.pug","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/contextual-attribute.pug","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/currentSetting.pug","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/generatedFrom.pug","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/goal.pug","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/importTaskItem.pug","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/keyword.pug","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/keywordVNext.pug","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/moreConversionClarityButtons.pug","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/moreImages.pug","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/negativeKeywordList.pug","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/negativeKeywordListVNext.pug","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/sharedBudget.pug","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/sharedBudgetVNext.pug","../../../node_modules/@bingads-webui-campaign/recommendation-contextual-attribute/src/suggestedSetting.pug","../../../node_modules/@bingads-webui-campaign/recommendation-inline-budget-view/src/template/chart.pug","../../../node_modules/@bingads-webui-campaign/recommendation-inline-budget-view/src/template/index.pug","../../../node_modules/@bingads-webui-campaign/recommendation-inline-budget-view/src/template/table.pug","../../../node_modules/@bingads-webui-campaign/recommendation-inline-budget-view/src/template/tableForInlineEditor.pug","../../../node_modules/@bingads-webui-campaign/recommendation-inline-budget-view/src/template/tooltip.pug","../../../node_modules/@bingads-webui-campaign/recommendation-inline-budget-view/src/template/uet-link.pug","../../../node_modules/@bingads-webui-campaign/status-popup-editor/src/template.pug","../../../node_modules/@bingads-webui-campaign/summary-grid-helper/template/customized-inline-edit-template.pug","../../../node_modules/@bingads-webui-campaign/summary-grid-helper/template/sortableHeader.pug"],"sourcesContent":["import _ from 'underscore';\r\nimport Promise from 'bluebird';\r\n\r\n/* Converts the query generated by query builder to the format expected by JSData layer.\r\n Useful for when projection-grid is not used, as that logic is currently inside pgrid.\r\n*/\r\nexport class JsDataQueryConverter {\r\n static convert(queryParams) {\r\n return Promise.resolve({\r\n query: this.translateParams(_.omit(queryParams, 'options')),\r\n options: queryParams.options,\r\n });\r\n }\r\n\r\n static translateOrderBy(orderByParams) {\r\n const orderBy = _\r\n .chain(this.normalizeOrderBy(orderByParams))\r\n .map(([key, direction]) => [key, direction > 0 ? 'ASC' : 'DESC'])\r\n .value();\r\n\r\n return _.isEmpty(orderBy) ? null : orderBy;\r\n }\r\n\r\n static translateParams(params) {\r\n return _\r\n .chain(params)\r\n .omit('skip', 'take', 'filter', 'orderby')\r\n .extend(_.pick(\r\n {\r\n offset: params.skip,\r\n limit: params.take,\r\n where: params.filter,\r\n orderBy: this.translateOrderBy(params.orderby),\r\n },\r\n Boolean\r\n ))\r\n .value();\r\n }\r\n\r\n static normalizeOrderBy(orderBy = []) {\r\n // Below code is taken from pgrid and will be extracted out.\r\n // Ignore eslint errors in here for now as to not diverge it from original.\r\n /* eslint-disable */\r\n return _.reduce(_.isArray(orderBy) ? orderBy : [orderBy], (memo, item) => {\r\n let key = null;\r\n let direction = null;\r\n\r\n if (_.isArray(item)) {\r\n key = item[0];\r\n direction = item[1];\r\n } else if (_.isObject(item)) {\r\n key = item.key;\r\n direction = item.direction;\r\n }\r\n\r\n if (!_.isNumber(direction)) {\r\n throw new Error('Invalid direction option for orderBy');\r\n }\r\n\r\n if (!direction) {\r\n return memo;\r\n }\r\n\r\n if (_.isFunction(key)) {\r\n return memo.concat(this.normalizeOrderBy(key(direction)));\r\n }\r\n\r\n if (_.isString(key)) {\r\n memo.push([key, direction]);\r\n return memo;\r\n }\r\n\r\n throw new Error('Invalid key option for orderBy');\r\n }, []);\r\n /* eslint-enable */\r\n }\r\n}\r\n","import Promise from 'bluebird';\r\nimport _ from 'underscore';\r\nimport { Subject as Observable } from '@bingads-webui-universal/observer-pattern';\r\nimport { cloneDeep } from '@bingads-webui-universal/primitive-utilities';\r\nimport { JsDataQueryConverter } from './utils/js-data-query-generator';\r\n\r\nexport class QueryBuilder extends Observable {\r\n /**\r\n * Creates an instance of QueryBuilder.\r\n * @param {Object} Options - the options to create the data query builder\r\n * @memberof QueryBuilder\r\n */\r\n constructor({\r\n decorators,\r\n initialQuery = {},\r\n builderConfig = {\r\n generateJsDataQuery: false,\r\n featureName: '',\r\n },\r\n logActivity = {\r\n error: _.noop,\r\n },\r\n }) {\r\n super();\r\n\r\n this.decorators = decorators;\r\n this.initialQuery = initialQuery;\r\n this.featureName = builderConfig.featureName;\r\n this.generateJsDataQuery = builderConfig.generateJsDataQuery;\r\n this.lastQuery = null;\r\n this.logActivity = logActivity;\r\n }\r\n\r\n /**\r\n * Called every time new query is generated.\r\n * Triggers event 'queryChanged' if query has changed.\r\n * @private\r\n * @param {Object} newQuery - The query\r\n * @returns {Object} - The query\r\n */\r\n handleNewQuery(newQuery) {\r\n let query = newQuery;\r\n delete query.bodyParameters;\r\n\r\n if (this.generateJsDataQuery) {\r\n query = JsDataQueryConverter.convert(query);\r\n }\r\n\r\n if (!_.isEqual(this.lastQuery, newQuery)) {\r\n this.notify('queryChanged', newQuery);\r\n }\r\n this.lastQuery = query;\r\n\r\n return query;\r\n }\r\n\r\n /**\r\n * Pipes the query through the decorators\r\n * @returns {Object} - the transformed query\r\n */\r\n getQuery() {\r\n const initialQuery = cloneDeep(this.initialQuery);\r\n\r\n return Promise.reduce(\r\n this.decorators,\r\n (dataQuery, decorator) => decorator.run(dataQuery),\r\n initialQuery\r\n )\r\n .then(this.handleNewQuery.bind(this))\r\n .catch((e) => {\r\n this.logActivity.error(`Error while building query for ${this.featureName}: ${e.stack ? e.stack : e}`);\r\n return Promise.reject(e);\r\n });\r\n }\r\n\r\n getDecoratorByName(name) {\r\n return _.findWhere(this.decorators, { name });\r\n }\r\n}\r\n","import Promise from 'bluebird';\r\nimport _ from 'underscore';\r\nimport { verifyDepsExist } from '../utils/deps-check';\r\n\r\nexport class Decorator {\r\n constructor({ name, expectedDeps = [], deps = {} }) {\r\n if (!_.isString(name)) {\r\n throw new Error('Did not receive decorator name!');\r\n }\r\n\r\n this.name = name;\r\n verifyDepsExist(deps, expectedDeps);\r\n }\r\n\r\n getValueAsync() {\r\n return Promise.reject(new Error('Not implemented'));\r\n }\r\n\r\n // eslint-disable-next-line no-unused-vars\r\n buildQuery(queryParams, savedValue) {\r\n throw new Error('Not implemented!');\r\n }\r\n\r\n run(queryParams) {\r\n return this.getValueAsync().then(savedValue => this.buildQuery(queryParams, savedValue));\r\n }\r\n}\r\n","import _ from 'underscore';\r\n\r\nexport function verifyDepsExist(deps, expectedDeps = []) {\r\n const missing = _.difference(expectedDeps, _.keys(_.pick(deps, Boolean)));\r\n if (missing.length) {\r\n throw new Error(`Expected the following deps to be passed in: ${missing.join(',')}`);\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport {\r\n customColumnGridKeyFromId,\r\n getCustomColumnPreferenceName\r\n} from '@bingads-webui-universal/custom-column-utils';\r\nimport { buildColumnAndSortingConversions } from '@bingads-webui-campaign/column-conversions';\r\n\r\nimport { Decorator } from './decorator';\r\n\r\n/* eslint-disable no-param-reassign */\r\nfunction getSelectQuery(\r\n savedColumnNames,\r\n lockedColumnNames,\r\n columnMap,\r\n IsAvgPositionDeprecationPhase2Enabled\r\n) {\r\n if (IsAvgPositionDeprecationPhase2Enabled) {\r\n const hasAveragePosition = savedColumnNames.includes('AveragePosition');\r\n if (hasAveragePosition) {\r\n const hasTopImpressionRate = savedColumnNames.includes('TopImpressionRate');\r\n const hasAbsoluteTopImpressionRate = savedColumnNames.includes('AbsoluteTopImpressionRate');\r\n savedColumnNames = savedColumnNames.filter(column => column !== 'AveragePosition');\r\n if (!hasTopImpressionRate) {\r\n savedColumnNames.push('TopImpressionRate');\r\n }\r\n if (!hasAbsoluteTopImpressionRate) {\r\n savedColumnNames.push('AbsoluteTopImpressionRate');\r\n }\r\n }\r\n }\r\n\r\n const validNames = _\r\n .chain(lockedColumnNames)\r\n .concat(savedColumnNames)\r\n .filter(name => _.has(columnMap, name))\r\n .uniq()\r\n .value();\r\n\r\n return _.reduce(\r\n validNames,\r\n (selectedCols, name) => {\r\n const key = columnMap[name];\r\n\r\n if (_.isArray(key)) {\r\n Array.prototype.push.apply(selectedCols, key);\r\n } else if (_.isString(key)) {\r\n selectedCols.push(key);\r\n }\r\n return selectedCols;\r\n },\r\n []\r\n );\r\n}\r\n\r\nexport class ColumnChooserDecorator extends Decorator {\r\n /**\r\n * Creates an instance of ColumnChooserDecorator.\r\n * @param {Object} {\r\n * featureName - Name of feature to use for retriving from preference, ex: PerformanceGrid,\r\n * columnsMap: Mapping of column names from preference to MT names,\r\n * defaultColumns: Default list of columns to use if no preference found,\r\n * lockedColumns: List of columns that should always be in query,\r\n * customColumnsEnabled = false: Whether custom column feature is available or not,\r\n * addPoPColumnsOnComparisonEnabled = false: Whether to add PoP columns when comparison is\r\n * enabled or not,\r\n * deps: The legacy dependencies of the decorator:\r\n * deps.state: 'component/state/index' component\r\n * deps.ColumnChooserPreference: from\r\n * 'component/bingads-grid/service/column-chooser-preferences',\r\n * deps.CustomColumnPreference: from\r\n * 'component/bingads-grid/service/custom-column-preferences'\r\n * deps.fetchSortInfo: from 'component/bingads-grid/service/fetch-sortinfo',\r\n * }\r\n * @memberof ColumnChooserDecorator\r\n */\r\n constructor({\r\n featureName,\r\n columnsMap,\r\n defaultColumns,\r\n lockedColumns,\r\n customColumnsEnabled = false,\r\n IsAvgPositionDeprecationPhase2Enabled = false,\r\n IsColumnConversionEnabled = false,\r\n columnConversions,\r\n comparisonPoPColumns = [],\r\n deps,\r\n }) {\r\n super({\r\n name: 'columnChooser',\r\n deps,\r\n expectedDeps: [\r\n 'state',\r\n 'ColumnChooserPreference',\r\n 'CustomColumnPreference',\r\n 'fetchSortInfo',\r\n ],\r\n });\r\n\r\n this.state = deps.state;\r\n this.Columns = deps.ColumnChooserPreference.Columns;\r\n this.SelectedColumns = deps.ColumnChooserPreference.SelectedColumns;\r\n this.CustomColumns = deps.CustomColumnPreference.getCustomColumnPreferenceStore(featureName);\r\n\r\n this.featureName = featureName;\r\n this.columnsMap = columnsMap;\r\n this.defaultColumns = defaultColumns;\r\n this.lockedColumns = lockedColumns;\r\n this.customColumnsEnabled = customColumnsEnabled;\r\n this.IsAvgPositionDeprecationPhase2Enabled = IsAvgPositionDeprecationPhase2Enabled;\r\n this.comparisonPoPColumns = comparisonPoPColumns;\r\n this.fetchSortInfo = deps.fetchSortInfo;\r\n this.IsColumnConversionEnabled = IsColumnConversionEnabled;\r\n if (IsColumnConversionEnabled) {\r\n ({\r\n applyColumnConversions: this.applyColumnConversions,\r\n applySortingInfoConversion: this.applySortingInfoConversion,\r\n } = buildColumnAndSortingConversions(columnConversions));\r\n }\r\n }\r\n\r\n /**\r\n * @param {Object} customColumnsRecord preferences service response\r\n * @returns {Object} map of all custom columns\r\n */\r\n extractCustomColumnsInfo(customColumnsRecord) {\r\n if (!this.customColumnsEnabled) {\r\n return [{}, []];\r\n }\r\n\r\n const allCustomColumns =\r\n customColumnsRecord && _.isFunction(customColumnsRecord.get)\r\n ? customColumnsRecord.get('customColumns')\r\n : _.result(customColumnsRecord, 'customColumns', []);\r\n const customColumnsMap = {};\r\n\r\n _.each(allCustomColumns, (column) => {\r\n const name = customColumnGridKeyFromId(column.id);\r\n\r\n customColumnsMap[name] = name;\r\n });\r\n\r\n return customColumnsMap;\r\n }\r\n\r\n warmCache(preferenceKey) {\r\n const promises = [\r\n this.Columns.findAll({ where: preferenceKey }),\r\n this.SelectedColumns.findAll({ where: preferenceKey }),\r\n ];\r\n\r\n if (this.customColumnsEnabled) {\r\n promises.push(this.CustomColumns.findAll({\r\n where: {\r\n grid: getCustomColumnPreferenceName(preferenceKey.grid),\r\n project: preferenceKey.project,\r\n },\r\n }));\r\n }\r\n\r\n return Promise.all(promises);\r\n }\r\n\r\n getValueAsync() {\r\n const preferenceKey = {\r\n project: 'CampaignUI',\r\n grid: this.featureName,\r\n };\r\n\r\n const columnsPromise = this.warmCache(preferenceKey)\r\n .then(() =>\r\n _.first(this.SelectedColumns.filter({ where: preferenceKey })))\r\n .then((selection) => {\r\n const name = _.result(selection, 'name', 'Custom');\r\n const savedColumns = _.first(this.Columns.filter({\r\n where: _.defaults({ name }, preferenceKey),\r\n }));\r\n const customColumnsRecord =\r\n this.customColumnsEnabled === true\r\n ? _.first(this.CustomColumns.filter({\r\n where: {\r\n grid: getCustomColumnPreferenceName(preferenceKey.grid),\r\n project: preferenceKey.project,\r\n },\r\n }))\r\n : null;\r\n\r\n return { savedColumns, customColumnsRecord };\r\n });\r\n\r\n return Promise.all([\r\n columnsPromise,\r\n this.state.getPromise('$daterange'),\r\n this.fetchSortInfo(this.featureName),\r\n ]).then(([{ savedColumns, customColumnsRecord }, dateRange, sortInfo]) => ({\r\n savedColumns,\r\n customColumnsRecord,\r\n dateRange,\r\n orderbyInfo: sortInfo.orderbyInfo || {},\r\n sortableHeader: sortInfo.sortableHeader,\r\n }));\r\n }\r\n\r\n buildQuery(\r\n queryParams,\r\n {\r\n savedColumns: savedColumnsRecord, customColumnsRecord, dateRange, orderbyInfo, sortableHeader,\r\n }\r\n ) {\r\n let savedColumns = _.result(savedColumnsRecord, 'columns');\r\n\r\n if (this.IsColumnConversionEnabled && savedColumns) {\r\n savedColumns = this.applyColumnConversions(savedColumns);\r\n }\r\n\r\n const selectedColumns = savedColumns || this.defaultColumns;\r\n const customColumnsMap = this.extractCustomColumnsInfo(customColumnsRecord);\r\n\r\n const transformedQueryParams = _.extend({}, queryParams, {\r\n select: getSelectQuery(\r\n selectedColumns,\r\n this.lockedColumns,\r\n _.extend({}, this.columnsMap, customColumnsMap),\r\n this.IsAvgPositionDeprecationPhase2Enabled\r\n ),\r\n });\r\n\r\n if (\r\n !_.isEmpty(this.comparisonPoPColumns) &&\r\n dateRange.compared &&\r\n dateRange.compared.start\r\n ) {\r\n transformedQueryParams.select =\r\n transformedQueryParams.select.concat(this.comparisonPoPColumns);\r\n }\r\n\r\n transformedQueryParams.select = _.uniq(transformedQueryParams.select).sort();\r\n\r\n if (this.IsColumnConversionEnabled) {\r\n const { orderbyInfo: patchedOrderbyInfo } =\r\n this.applySortingInfoConversion({ sortableHeader, orderbyInfo });\r\n if (patchedOrderbyInfo && patchedOrderbyInfo.length > 0) {\r\n transformedQueryParams.orderby = patchedOrderbyInfo;\r\n }\r\n } else if (orderbyInfo && orderbyInfo.length > 0) {\r\n transformedQueryParams.orderby = orderbyInfo;\r\n }\r\n\r\n return transformedQueryParams;\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { Decorator } from './decorator';\r\n\r\nexport class DateFilterDecorator extends Decorator {\r\n /**\r\n * Creates an instance of DateFilterDecorator.\r\n * @param {Object} {\r\n * isOdataActionSource = false,\r\n * deps: The legacy dependencies of the component\r\n * deps.state: 'component/state/index' component\r\n * deps.dateUtil: 'component/humanize/date' component\r\n * }\r\n * @memberof DateFilterDecorator\r\n */\r\n constructor({ isOdataActionSource = false, deps }) {\r\n super({ name: 'dateFilter', deps, expectedDeps: ['state', 'dateUtil'] });\r\n\r\n this.state = deps.state;\r\n this.dateUtil = deps.dateUtil;\r\n\r\n this.isOdataActionSource = isOdataActionSource;\r\n this.currentRange = null;\r\n }\r\n\r\n getValueAsync() {\r\n return this.state.getPromise('$daterange');\r\n }\r\n\r\n formatDateInQuery(date) {\r\n return this.dateUtil.format(date, 'M/d/yyyy');\r\n }\r\n\r\n formatDateInEntitySet(date) {\r\n return this.dateUtil.format(date, 'yyyy-MM-dd');\r\n }\r\n\r\n buildQuery(queryParams, dateRange) {\r\n this.currentRange = { startDate: dateRange.start, endDate: dateRange.end };\r\n if (dateRange.compared) {\r\n _.extend(this.currentRange, {\r\n comparisonStartDate: dateRange.compared.start,\r\n comparisonEndDate: dateRange.compared.end,\r\n });\r\n }\r\n let transformedQueryParams = this.addDateRangeToQueryParams(queryParams);\r\n if (this.isOdataActionSource) {\r\n transformedQueryParams = this.changeEntitySet(transformedQueryParams);\r\n }\r\n return transformedQueryParams;\r\n }\r\n\r\n addDateRangeToQueryParams(queryParams) {\r\n const {\r\n startDate,\r\n endDate,\r\n comparisonStartDate,\r\n comparisonEndDate,\r\n } = this.currentRange;\r\n let query = _.defaults(\r\n {\r\n startDate: this.formatDateInQuery(startDate),\r\n endDate: this.formatDateInQuery(endDate),\r\n },\r\n queryParams.query\r\n );\r\n\r\n if (comparisonStartDate && comparisonEndDate) {\r\n query = _.defaults(\r\n {\r\n comparisonStartDate: this.formatDateInQuery(comparisonStartDate),\r\n comparisonEndDate: this.formatDateInQuery(comparisonEndDate),\r\n },\r\n query\r\n );\r\n } else {\r\n query = _.omit(query, 'comparisonStartDate', 'comparisonEndDate');\r\n }\r\n return _.defaults(\r\n {\r\n query,\r\n },\r\n queryParams\r\n );\r\n }\r\n\r\n changeEntitySet(queryParams) {\r\n const {\r\n startDate,\r\n endDate,\r\n comparisonStartDate,\r\n comparisonEndDate,\r\n } = this.currentRange;\r\n\r\n // eslint-disable-next-line no-param-reassign\r\n queryParams.gridDataParameters = _.omit(_.defaults(\r\n {\r\n DateRange: {\r\n StartDate: this.formatDateInEntitySet(startDate),\r\n EndDate: this.formatDateInEntitySet(endDate),\r\n },\r\n ComparisonDateRange: comparisonStartDate && comparisonEndDate\r\n ? {\r\n StartDate: this.formatDateInEntitySet(comparisonStartDate),\r\n EndDate: this.formatDateInEntitySet(comparisonEndDate),\r\n }\r\n : undefined,\r\n },\r\n queryParams.gridDataParameters\r\n ), _.isUndefined);\r\n\r\n return queryParams;\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { merge } from '@bingads-webui-universal/primitive-utilities';\r\nimport { setFilterByReportEmailRule } from '@bingads-webui-campaign/projection-grid-inline-download';\r\nimport { Decorator } from './decorator';\r\n\r\n// Values that are not currently provided by the Filter Service,\r\n// but are present in the current filter\r\nconst filterOptionsExtensions = {\r\n dateFormat: 'yyyy-MM-ddTHH:mm:ss',\r\n shortDateFormat: 'M/d/yyyy',\r\n};\r\n\r\nexport class FilterDecorator extends Decorator {\r\n /**\r\n * Creates an instance of FilterDecorator.\r\n * @param {any} {\r\n * featureName - Name of feature,\r\n * filterService - Filter Service instance to use\r\n * }\r\n * @memberof FilterDecorator\r\n */\r\n constructor({\r\n featureName,\r\n filterService,\r\n ignoreColumns,\r\n appConfig,\r\n appState,\r\n }) {\r\n super({ name: 'filter' });\r\n\r\n this.featureName = featureName;\r\n this.filterService = filterService;\r\n this.ignoreColumns = ignoreColumns;\r\n this.appConfig = appConfig;\r\n this.appState = appState;\r\n }\r\n\r\n getValueAsync() {\r\n // If navigated from Report page, set filter from ReportEmailRule\r\n if (this.appState && this.appConfig) {\r\n const ReportEmailRule = this.appState.get('$ReportEmailRule');\r\n if (ReportEmailRule) {\r\n return setFilterByReportEmailRule({\r\n appConfig: this.appConfig,\r\n filterService: this.filterService,\r\n ReportEmailRule,\r\n }).then(() => this.filterService.refreshSource())\r\n .then(() => this.filterService.getCombinedFilter());\r\n }\r\n }\r\n\r\n this.filterService.refreshSource();\r\n\r\n return this.filterService.p$Initialized\r\n .then(() => this.filterService.getCombinedFilter());\r\n }\r\n\r\n buildQuery(queryParams, filterQuery) {\r\n const transformedFilterQuery = filterQuery;\r\n\r\n if (!_.isEmpty(this.ignoreColumns) && !_.isEmpty(filterQuery.query)) {\r\n const keys = filterQuery.query ? _.keys(filterQuery.query) : null;\r\n\r\n if (keys) {\r\n _.each(keys, (key) => {\r\n if (_.contains(this.ignoreColumns, key)) {\r\n delete transformedFilterQuery.query[key];\r\n }\r\n });\r\n }\r\n }\r\n\r\n if (_.isEmpty(transformedFilterQuery.query)) {\r\n return queryParams;\r\n }\r\n\r\n const filterOptions = _.extend(\r\n {},\r\n filterOptionsExtensions,\r\n transformedFilterQuery.odataOptions,\r\n {\r\n schema: transformedFilterQuery.schema,\r\n }\r\n );\r\n\r\n return merge({}, queryParams, {\r\n options: { filterOptions },\r\n where: transformedFilterQuery.query,\r\n });\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport { Decorator } from './decorator';\r\n\r\nexport class GridDataParametersDecorator extends Decorator {\r\n /**\r\n * Creates an instance of GridDataParametersDecorator.\r\n * @param {Object} {\r\n * entitySet - The entitySet to query. For grid, usually entity['Default.GridData],\r\n * isOdataActionSource - True if using OData Actions to make the call (POST call) instead of GET\r\n * isCustomerHierachyRequest - True if it is a Customer Hierarchy request\r\n * loadDirectlyLinkedAccounts - In case of a Customer Hierarchy request,\r\n * True if only the directly linked accounts need to be queried\r\n * accountModes - string array ['Expert'] for filtering on Expert mode accounts,\r\n * ['Smart'] for UP Smart accounts, ['Expert','Smart'] for both\r\n * }\r\n * @memberof GridDataParametersDecorator\r\n */\r\n constructor({\r\n entitySet,\r\n isOdataActionSource,\r\n preloadOptions,\r\n isCustomerHierachyRequest = false,\r\n loadDirectlyLinkedAccounts = null,\r\n accountModes = null,\r\n associationType = null,\r\n adExtensionTypes = null,\r\n }) {\r\n super({ name: 'gridDataParameters' });\r\n\r\n this.entitySet = entitySet;\r\n this.isOdataActionSource = isOdataActionSource;\r\n this.isCustomerHierachyRequest = isCustomerHierachyRequest;\r\n this.preloadOptions = preloadOptions;\r\n this.loadDirectlyLinkedAccounts = loadDirectlyLinkedAccounts;\r\n this.accountModes = accountModes;\r\n this.associationType = associationType;\r\n this.adExtensionTypes = adExtensionTypes;\r\n }\r\n\r\n getValueAsync() {\r\n return this.loadDirectlyLinkedAccounts ?\r\n this.loadDirectlyLinkedAccounts() :\r\n Promise.resolve({ loadDirectlyLinkedAccounts: false });\r\n }\r\n\r\n buildQuery(queryParams, { loadDirectlyLinkedAccounts }) {\r\n if (!this.isOdataActionSource) {\r\n return queryParams;\r\n }\r\n const transformedQueryParams = _.extend({}, queryParams);\r\n const params = {\r\n ...(transformedQueryParams.bodyParameters || {}),\r\n gridDataParameters: queryParams.gridDataParameters,\r\n };\r\n\r\n if (this.isCustomerHierachyRequest) {\r\n params.isCustomerHierachyRequest = true;\r\n params.loadDirectlyLinkedAccounts = loadDirectlyLinkedAccounts;\r\n }\r\n\r\n if (this.preloadOptions) {\r\n params.preloadOptions = this.preloadOptions;\r\n }\r\n\r\n if (this.associationType) {\r\n params.associationType = this.associationType;\r\n }\r\n\r\n if (this.adExtensionTypes) {\r\n params.adExtensionTypes = this.adExtensionTypes;\r\n }\r\n\r\n if (this.accountModes) {\r\n params.accountModes = this.accountModes;\r\n }\r\n\r\n transformedQueryParams.options = _.extend({}, queryParams.options || {}, {\r\n entitySet: this.entitySet\r\n .$call(params),\r\n });\r\n\r\n delete transformedQueryParams.gridDataParameters;\r\n transformedQueryParams.bodyParameters = params;\r\n return transformedQueryParams;\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { Decorator } from './decorator';\r\n\r\nconst ALLOWED_PAGE_SIZES = [20, 50, 100, 200];\r\n\r\nexport class PaginationDecorator extends Decorator {\r\n /**\r\n * Creates an instance of PaginationDecorator.\r\n * @param {any} {\r\n * featureName: The name of feature, such as 'PerformanceGrid',\r\n * defaultPageSize: The default page size if none found,\r\n * deps: Legacy deps\r\n * deps.fetchPaginationConfig: from 'component/bingads-grid/service/fetch-pagination',\r\n * }\r\n * @memberof PaginationDecorator\r\n */\r\n constructor({ featureName, defaultPageSize, deps }) {\r\n super({ name: 'pagination', deps, expectedDeps: ['fetchPaginationConfig'] });\r\n\r\n this.fetchPaginationConfig = deps.fetchPaginationConfig;\r\n\r\n this.featureName = featureName;\r\n this.defaultPageSize = defaultPageSize || _.first(ALLOWED_PAGE_SIZES);\r\n }\r\n\r\n getValueAsync() {\r\n return this.fetchPaginationConfig(this.featureName, this.defaultPageSize);\r\n }\r\n\r\n buildQuery(queryParams, { pageSize, pageNumber }) {\r\n if (!_.contains(ALLOWED_PAGE_SIZES, pageSize)) {\r\n /* eslint-disable no-param-reassign */\r\n pageSize = _.first(ALLOWED_PAGE_SIZES);\r\n }\r\n\r\n const transformedQueryParams = _.extend({}, queryParams, {\r\n take: pageSize,\r\n skip: pageNumber * pageSize,\r\n });\r\n\r\n return transformedQueryParams;\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { Decorator } from './decorator';\r\n\r\nexport class SegmentationDecorator extends Decorator {\r\n /**\r\n * Creates an instance of SegmentationDecorator.\r\n * @param {Object} options [{\r\n * featureName: Name of feature, such as \"PerformanceGrid\",\r\n * isOdataActionSource = false,\r\n * deps: Legacy dependencies\r\n * deps.SegmentationPreference: from 'component/bingads-grid/service/segmentation-preferences'\r\n * }={}]\r\n * @memberof SegmentationDecorator\r\n */\r\n constructor({ featureName, isOdataActionSource = false, deps }) {\r\n super({ name: 'segment', deps, expectedDeps: ['SegmentationPreference'] });\r\n\r\n this.getSegType = deps.SegmentationPreference.getSegType;\r\n this.getSegPreference = deps.SegmentationPreference.getSegPreference;\r\n\r\n this.featureName = featureName;\r\n this.isOdataActionSource = isOdataActionSource;\r\n }\r\n\r\n addSegmentToEntity(queryParams, segType) {\r\n /* eslint-disable no-param-reassign */\r\n queryParams.gridDataParameters =\r\n segType && segType !== 'None'\r\n ? _.defaults(\r\n { SegmentationTypes: [segType] },\r\n queryParams.gridDataParameters\r\n )\r\n : _.omit(queryParams.gridDataParameters, 'SegmentationTypes');\r\n\r\n return queryParams;\r\n }\r\n\r\n addSegmentToQuery(queryParams, segType) {\r\n const newQuery =\r\n segType && segType !== 'None'\r\n ? _.defaults({ SegmentationTypes: segType }, queryParams.query)\r\n : _.omit(queryParams.query, 'SegmentationTypes');\r\n\r\n return _.defaults(\r\n {\r\n query: newQuery,\r\n },\r\n queryParams\r\n );\r\n }\r\n\r\n getValueAsync() {\r\n return this.getSegPreference(this.featureName).then(() =>\r\n this.getSegType(this.featureName));\r\n }\r\n\r\n buildQuery(queryParams, segType) {\r\n const segmentationType = segType ? segType.segmentationType : undefined;\r\n\r\n let transformedQueryParams = this.addSegmentToQuery(\r\n queryParams,\r\n segmentationType\r\n );\r\n\r\n if (this.isOdataActionSource) {\r\n transformedQueryParams = this.addSegmentToEntity(\r\n transformedQueryParams,\r\n segmentationType\r\n );\r\n }\r\n return transformedQueryParams;\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { buildSortingConversions } from '@bingads-webui-campaign/column-conversions';\r\nimport { Decorator } from './decorator';\r\n\r\nexport class SortingDecorator extends Decorator {\r\n /**\r\n * Creates an instance of SortingDecorator.\r\n * @param {Object} {\r\n * featureName: Name of feature, such as \"PerformanceGrid\",\r\n * deps: The legacy dependencies of the decorator:\r\n * deps.fetchSortInfo: from 'component/bingads-grid/service/fetch-sortinfo',\r\n * ignoreColumns: columns to ignore for order by when transforming the query params\r\n * @memberof SortingDecorator\r\n */\r\n constructor({\r\n featureName, deps, ignoreColumns,\r\n IsColumnConversionEnabled = false, columnConversions,\r\n }) {\r\n super({ name: 'sorting', deps, expectedDeps: ['fetchSortInfo'] });\r\n\r\n this.featureName = featureName;\r\n this.fetchSortInfo = deps.fetchSortInfo;\r\n this.ignoreColumns = ignoreColumns;\r\n this.IsColumnConversionEnabled = IsColumnConversionEnabled;\r\n if (IsColumnConversionEnabled) {\r\n ({\r\n applySortingInfoConversion: this.applySortingInfoConversion,\r\n } = buildSortingConversions(columnConversions));\r\n }\r\n }\r\n\r\n getValueAsync() {\r\n return this.fetchSortInfo(this.featureName);\r\n }\r\n\r\n buildQuery(queryParams, { orderbyInfo, sortableHeader }) {\r\n const transformedQueryParams = _.extend({}, queryParams);\r\n\r\n if (this.IsColumnConversionEnabled) {\r\n const { orderbyInfo: patchedOrderbyInfo } =\r\n this.applySortingInfoConversion({ sortableHeader, orderbyInfo });\r\n\r\n if (patchedOrderbyInfo && patchedOrderbyInfo.length > 0) {\r\n transformedQueryParams.orderby = this.ignoreColumns ?\r\n _.reject(patchedOrderbyInfo, ({ key }) => _.contains(this.ignoreColumns, key)) :\r\n patchedOrderbyInfo;\r\n }\r\n } else if (orderbyInfo && orderbyInfo.length > 0) {\r\n transformedQueryParams.orderby = this.ignoreColumns ?\r\n _.reject(orderbyInfo, ({ key }) => _.contains(this.ignoreColumns, key)) :\r\n orderbyInfo;\r\n }\r\n return transformedQueryParams;\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport { Decorator } from './decorator';\r\n\r\nexport class ChartDataParametersDecorator extends Decorator {\r\n /**\r\n * Creates an instance of ChartDataParametersDecorator.\r\n * @param {Object} options options\r\n * @param {Object} options.entitySet entitySet\r\n * @param {Object} options.pageContext pageContext\r\n * @param {Object} options.chartDataAdapter chartDataAdapter\r\n * @param {Object} options.inlineChartPreference inlineChartPreference\r\n * @memberof ChartDataParametersDecorator\r\n */\r\n constructor({\r\n entitySet,\r\n pageState,\r\n pageContext,\r\n chartDataAdapter,\r\n inlineChartPreference,\r\n isOdataActionSource,\r\n }) {\r\n super({ name: 'chartDataParameters' });\r\n\r\n this.entitySet = entitySet;\r\n this.pageState = pageState;\r\n this.pageContext = pageContext;\r\n this.chartDataAdapter = chartDataAdapter;\r\n this.inlineChartPreference = inlineChartPreference;\r\n this.isOdataActionSource = isOdataActionSource;\r\n }\r\n\r\n getValueAsync() {\r\n return Promise.all([\r\n this.pageState.getPromise('$daterange'),\r\n this.chartDataAdapter.getPreferencesAndDefaults(\r\n this.inlineChartPreference,\r\n this.pageContext\r\n ),\r\n ]);\r\n }\r\n\r\n buildQuery(queryParams, [dateRange, chartParams]) {\r\n if (!this.isOdataActionSource) {\r\n return queryParams;\r\n }\r\n const transformedQueryParams = _.extend({}, queryParams);\r\n const params = {\r\n ...(transformedQueryParams.bodyParameters || {}),\r\n performanceTimeSeriesParameters:\r\n this.chartDataAdapter.formatPreferenceValue(dateRange, chartParams),\r\n };\r\n\r\n transformedQueryParams.options = _.extend({}, queryParams.options || {}, {\r\n entitySet: this.entitySet\r\n .$call(params),\r\n });\r\n\r\n transformedQueryParams.bodyParameters = params;\r\n return transformedQueryParams;\r\n }\r\n}\r\n","/* istanbul ignore file */\r\nimport { Decorator } from './decorator';\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\nfunction replaceKeyOfQuery(query, oldKey, newKey) {\r\n if (!query) return query;\r\n let finalQuery = { ...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 return finalQuery;\r\n}\r\n\r\n/**\r\n * \"data exclusion\" is a special \"SeasonalityAdjustment\" edm\r\n * But when using filter, although we still need to use \"SeasonalityAdjustmentId\" as query option,\r\n * user should see \"data exclusion id eqaul xxx\" rather than \"seasonality adjuemsnt id eqaul xxx\".\r\n * Convert the query option when build query to do this.\r\n */\r\nexport class DataExclusionFilterProcessorDecorator extends Decorator {\r\n constructor({\r\n featureName,\r\n }) {\r\n super({ name: 'data-exclusion-filter-processor' });\r\n\r\n this.featureName = featureName;\r\n }\r\n\r\n getValueAsync() {\r\n // eslint-disable-next-line no-restricted-globals\r\n return Promise.resolve();\r\n }\r\n\r\n buildQuery(queryParams) {\r\n const finalWhere = replaceKeyOfQuery(\r\n queryParams.where,\r\n 'DataExclusionId',\r\n 'SeasonalityAdjustmentId'\r\n );\r\n\r\n return {\r\n ...queryParams,\r\n where: finalWhere,\r\n };\r\n }\r\n}\r\n","import { Decorator } from './decorator';\r\n\r\nexport function replaceTargetRoasOfQuery(query, key) {\r\n if (!query) return query;\r\n const finalQuery = { ...query };\r\n if (key in finalQuery) {\r\n const filterTargetRoas = finalQuery[key];\r\n Object.keys(filterTargetRoas).forEach((qKey) => {\r\n // eslint-disable-next-line no-param-reassign\r\n finalQuery[key][qKey] = parseFloat((filterTargetRoas[qKey] / 100.0).toFixed(4));\r\n });\r\n } else if ('$and' in finalQuery) {\r\n finalQuery.$and.forEach((value, index, array) => {\r\n if (key in value) {\r\n const filterTargetRoas = array[index][key];\r\n Object.keys(filterTargetRoas).forEach((qKey) => {\r\n // eslint-disable-next-line no-param-reassign\r\n array[index][key][qKey] = parseFloat((filterTargetRoas[qKey] / 100.0).toFixed(4));\r\n });\r\n }\r\n });\r\n }\r\n return finalQuery;\r\n}\r\n\r\n\r\nexport class TargetRoasFilterProcessorDecorator extends Decorator {\r\n constructor({\r\n featureName,\r\n }) {\r\n super({ name: 'target-roas-filter-processor' });\r\n\r\n this.featureName = featureName;\r\n }\r\n\r\n getValueAsync() {\r\n // eslint-disable-next-line no-restricted-globals\r\n return Promise.resolve();\r\n }\r\n\r\n buildQuery(queryParams) {\r\n const finalWhere = replaceTargetRoasOfQuery(\r\n queryParams.where,\r\n 'DisplayBiddingStrategyTargetRoas'\r\n );\r\n\r\n return {\r\n ...queryParams,\r\n where: finalWhere,\r\n };\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { QueryBuilder } from './query-builder';\r\n\r\nimport { ColumnChooserDecorator } from './decorators/column-chooser-decorator';\r\nimport { DateFilterDecorator } from './decorators/date-filter-decorator';\r\nimport { FilterDecorator } from './decorators/filter-decorator';\r\nimport { GridDataParametersDecorator } from './decorators/grid-data-parameters-decorator';\r\nimport { PaginationDecorator } from './decorators/pagination-decorator';\r\nimport { SegmentationDecorator } from './decorators/segmentation-decorator';\r\nimport { SortingDecorator } from './decorators/sorting-decorator';\r\nimport { ChartDataParametersDecorator } from './decorators/chart-parameters-decorator';\r\nimport { DataExclusionFilterProcessorDecorator } from './decorators/data-exclusion-filter-processor-decorator';\r\nimport { TargetRoasFilterProcessorDecorator } from './decorators/target-roas-filter-processor-decorator';\r\n\r\nconst decoratorMap = {\r\n columnChooser: ColumnChooserDecorator,\r\n dateFilter: DateFilterDecorator,\r\n segment: SegmentationDecorator,\r\n pagination: PaginationDecorator,\r\n filter: FilterDecorator,\r\n sorting: SortingDecorator,\r\n gridDataParameters: GridDataParametersDecorator,\r\n chartDataParameters: ChartDataParametersDecorator,\r\n dataExclusionFilterProcessor: DataExclusionFilterProcessorDecorator,\r\n targetRoasFilterProcessor: TargetRoasFilterProcessorDecorator,\r\n};\r\n\r\nfunction implementsDecoratorInterface(obj) {\r\n return obj && _.isFunction(obj.run);\r\n}\r\n\r\nfunction hasDecoratorConfiguration(obj) {\r\n return _.isObject(obj) && decoratorMap[obj.name];\r\n}\r\n\r\nfunction getDecoratorInstances(decorators = [], commonConfig = {}) {\r\n return decorators.map((decorator) => {\r\n let decoratorInstance = null;\r\n\r\n if (implementsDecoratorInterface(decorator)) {\r\n decoratorInstance = decorator;\r\n } else if (hasDecoratorConfiguration(decorator)) {\r\n const Decorator = decoratorMap[decorator.name];\r\n\r\n decoratorInstance = new Decorator(_.extend({}, commonConfig, decorator));\r\n } else {\r\n throw new Error(`Decorator ${decorator.name} was not found`);\r\n }\r\n\r\n return decoratorInstance;\r\n });\r\n}\r\n\r\n/**\r\n * Factory method that returns an instance of QueryBuilder\r\n * @param {Object} config - Configuration for the data query builder\r\n * @param {Object} [config.initialQuery] - Optional initial query, if not empty object\r\n * @param {Object} [config.logActivity] - Optional instrumentation activity with method\r\n * error, trace, perf for logging QB metrics\r\n * @param {Object} config.commonConfig - Common configuration values. These will be passed in to\r\n * any decorators included in QB.\r\n * @param {Object} config.commonConfig.featureName - Feature name, used to\r\n * retrieve values from preference\r\n * @param {Array} decorators - Mixed array of decorator configurations for\r\n * decorators included in QB, and custom decorators instances.\r\n * Please note that decorators are run in the same order as in the array,\r\n * so be aware of dependencies.\r\n * For example, GridDataParametersDecorator should go last because it copies the other parameters\r\n * to odata action POST body.\r\n * Sample:\r\n * [\r\n {name: 'segment', // other options},\r\n {name: 'pagination' //other options},\r\n myCustomDecoratorInstance,\r\n ]\r\n * @returns {QueryBuilder} - The constructed data query builder\r\n */\r\nexport class QueryBuilderFactory {\r\n static make({\r\n initialQuery,\r\n logActivity,\r\n commonConfig,\r\n decorators,\r\n }) {\r\n const builderConfig = _.pick(commonConfig, 'generateJsDataQuery', 'featureName');\r\n\r\n const decoratorInstances = getDecoratorInstances(decorators, commonConfig);\r\n\r\n return new QueryBuilder({\r\n decorators: decoratorInstances,\r\n initialQuery,\r\n logActivity,\r\n builderConfig,\r\n });\r\n }\r\n}\r\n","import React, { useContext } from 'react';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { InstrumentationContext } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { generateGuid, getTimestamp } from '@bingads-webui-universal/primitive-utilities';\r\nimport _ from 'underscore';\r\n\r\nconst getAjaxStubLogger = _.memoize((instrumentation) => {\r\n if (instrumentation && instrumentation.ajaxStubScenario) {\r\n const scenario = instrumentation.ajaxStubScenario.create();\r\n const activity = scenario.ajaxStubActivity.create();\r\n return activity;\r\n }\r\n\r\n return {\r\n ajax: _.noop,\r\n trace: _.noop,\r\n error: _.noop,\r\n };\r\n});\r\n\r\n\r\nconst getRequestPayloadLogger = _.memoize((instrumentation) => {\r\n const schema = {\r\n scenario: [\r\n {\r\n name: 'ReportsV4DataSource',\r\n value: 'ReportsV4DataSource',\r\n activity: [\r\n { name: 'RequestPayload', value: 'RequestPayload' },\r\n { name: 'Response', value: 'Response' },\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n instrumentation.addScenario(schema);\r\n\r\n const scenario = instrumentation.ReportsV4DataSource.create();\r\n const reqestLogger = scenario.RequestPayload.create();\r\n const responseLogger = scenario.Response.create();\r\n\r\n return {\r\n reqestLogger,\r\n responseLogger,\r\n };\r\n});\r\n\r\n\r\nfunction isUserError(userErrorCodes, response) {\r\n if (response.status === 400) {\r\n const { bodyText } = response;\r\n if (bodyText) {\r\n return !!userErrorCodes.find(code => bodyText.includes(code));\r\n }\r\n return false;\r\n }\r\n if (response.status === 401) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\n\r\nasync function readBody(response) {\r\n const bodyText = 'bodyText';\r\n response[bodyText] = await response.text();\r\n // response body can only be read once, otherwise will get TypeError: Failed to execute 'text' on 'Response': body stream already read\r\n response.text = () => Promise.resolve(response[bodyText]);\r\n response.json = () => Promise.resolve(JSON.parse(response[bodyText]));\r\n}\r\n\r\nfunction hashFn({ userErrorCodes, oDataToken }) {\r\n return JSON.stringify(userErrorCodes) + oDataToken;\r\n}\r\n\r\nexport const fetchFactory = _.memoize(({\r\n host,\r\n path,\r\n oDataToken,\r\n sessionId,\r\n lcid,\r\n pageTrackingId,\r\n redirectUrl,\r\n instrumentation,\r\n applicationName = 'bingadsweb',\r\n userErrorCodes = [],\r\n}) => {\r\n const ajaxStubLogger = getAjaxStubLogger(instrumentation);\r\n const { reqestLogger, responseLogger } = getRequestPayloadLogger(instrumentation);\r\n\r\n function beforeFetch(fetchContext) {\r\n const { options } = fetchContext;\r\n\r\n /* eslint-disable no-param-reassign */\r\n fetchContext.startTime = getTimestamp();\r\n fetchContext.httpMethod = options.method || 'GET';\r\n fetchContext.requestId = options.headers['x-ms-requestid'];\r\n\r\n reqestLogger.trace({ body: options.body }, fetchContext.url, fetchContext.requestId, fetchContext.httpMethod);\r\n\r\n // Mimic AjaxEventHandler::beforeSendHandler\r\n ajaxStubLogger.ajax(\r\n fetchContext.requestId,\r\n fetchContext.url,\r\n true,\r\n fetchContext.httpMethod,\r\n 0,\r\n true,\r\n '',\r\n -1\r\n );\r\n }\r\n\r\n\r\n function afterFetch(fetchContext) {\r\n const {\r\n response, startTime, instrument = {},\r\n } = fetchContext;\r\n\r\n const userError = isUserError(userErrorCodes, response);\r\n const duration = getTimestamp() - startTime;\r\n\r\n const serverPerf = {\r\n 'x-ms-mte2eelapsedtimems': response.headers.get('x-ms-mte2eelapsedtimems'),\r\n 'x-ms-odataapie2eelapsedtimems': response.headers.get('x-ms-odataapie2eelapsedtimems'),\r\n 'x-ms-odataapionlye2eelapsedtimems': response.headers.get('x-ms-odataapionlye2eelapsedtimems'),\r\n };\r\n\r\n const serializeFunc = instrument.serializeResponse || (res => ({ count: res['@odata.count'] }));\r\n\r\n response.text().then((text) => {\r\n try {\r\n const json = JSON.parse(text);\r\n responseLogger.trace({ response: serializeFunc(json) }, fetchContext.url, fetchContext.requestId, fetchContext.httpMethod);\r\n } catch (e) {\r\n responseLogger.trace({ response: text }, fetchContext.url, fetchContext.requestId, fetchContext.httpMethod);\r\n }\r\n });\r\n\r\n // Mimic AjaxEventHandler::successHandler\r\n ajaxStubLogger.ajax(\r\n fetchContext.requestId,\r\n fetchContext.url,\r\n false,\r\n fetchContext.httpMethod,\r\n duration,\r\n response.ok || userError,\r\n JSON.stringify(serverPerf),\r\n -1\r\n );\r\n\r\n // Mimic AjaxEventHandler::errorHandler\r\n if (!response.ok) {\r\n const error = _.compact([\r\n `Ajax error [${response.status}]`,\r\n response.statusText || 'error',\r\n response.bodyText,\r\n ]).join(', ');\r\n\r\n if (userError) {\r\n ajaxStubLogger.trace(error, fetchContext.url, fetchContext.requestId, fetchContext.httpMethod);\r\n } else {\r\n ajaxStubLogger.error(error, fetchContext.url, fetchContext.requestId, '', fetchContext.httpMethod);\r\n }\r\n }\r\n\r\n // Handle token expired\r\n if (response.status === 401) {\r\n window.location.href = redirectUrl;\r\n }\r\n }\r\n\r\n\r\n async function fetch(url, options = {}) {\r\n const requestId = generateGuid();\r\n const finalHeaders = {\r\n authorization: `CCMTSmallToken ${oDataToken}`,\r\n lcid,\r\n 'content-type': 'application/json',\r\n 'x-ms-applicationname': applicationName,\r\n 'x-ms-lcid': lcid,\r\n 'x-ms-pagetrackingid': pageTrackingId,\r\n 'x-ms-requestid': requestId,\r\n 'x-ms-sessionid': sessionId,\r\n // Put custom headers at the end to allow overriding default headers\r\n ...options.headers,\r\n };\r\n\r\n const finalOptions = {\r\n ...options,\r\n headers: finalHeaders,\r\n };\r\n\r\n const finalUrl = `${host}${path}${url}`;\r\n\r\n const fetchContext = { url: finalUrl, options: finalOptions };\r\n\r\n beforeFetch(fetchContext);\r\n\r\n try {\r\n const response = await window.fetch(finalUrl, finalOptions);\r\n\r\n await readBody(response);\r\n\r\n fetchContext.response = response;\r\n afterFetch(fetchContext);\r\n\r\n return response;\r\n } catch (err) {\r\n throw new Error(`Request failed, url: ${finalUrl}, error: ${err.toString()}`);\r\n }\r\n }\r\n\r\n return { fetch };\r\n}, hashFn);\r\n\r\n\r\n// Custom hook for function component\r\nexport function useFetch({ userErrorCodes = [] } = {}) {\r\n const serverContext = useContext(ServerContext);\r\n const instrumentation = useContext(InstrumentationContext);\r\n\r\n const domain = serverContext.NonAzureDomain || '';\r\n const redirectUrl = `${domain}/default.aspx?reason=1&msg=sessionexpired`;\r\n\r\n return fetchFactory({\r\n host: serverContext.ServicesEndpoints.CampaignAPI,\r\n path: 'Advertiser/V2',\r\n oDataToken: serverContext.Token,\r\n sessionId: serverContext.Omniture.SessionId,\r\n lcid: serverContext.Omniture.Lcid,\r\n pageTrackingId: serverContext.PageTrackingId,\r\n redirectUrl,\r\n instrumentation,\r\n userErrorCodes,\r\n });\r\n}\r\n\r\n// HoC for class component\r\nexport function withFetch(Comp) {\r\n return function CompWrapper(props) {\r\n const dataSourceProps = useFetch();\r\n\r\n return ;\r\n };\r\n}\r\n\r\n","import { notificationApi } from '@bingads-webui-campaign/notification-center';\r\n\r\nexport function createErrorHandlePipe(...handleFunctions) {\r\n return (error) => {\r\n for (let index = 0; index < handleFunctions.length; index += 1) {\r\n const handleFunction = handleFunctions[index];\r\n const isErrorHandled = handleFunction(error);\r\n if (isErrorHandled) {\r\n return;\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport class ErrorHandlerFactory {\r\n static createTryNotifyAdsApiError(i18n, errorCodeToErrorMessageMapping) {\r\n return function tryNotifyAdsApiError(errorResponseBody) {\r\n const isAdsApiError = errorResponseBody['@odata.context'] && errorResponseBody['@odata.context'].includes('Model.AdsApiError');\r\n let allErrorsHandled = false;\r\n if (isAdsApiError) {\r\n const errorDescriptors = errorResponseBody.value;\r\n errorDescriptors.forEach((errorDescriptor) => {\r\n const errorCode = errorDescriptor.Code;\r\n const mappedErrorText = errorCodeToErrorMessageMapping[errorCode] ? i18n.getString(errorCodeToErrorMessageMapping[errorCode]) : undefined;\r\n let errorText = errorCode;\r\n if (mappedErrorText) {\r\n errorText = mappedErrorText;\r\n } else if (errorDescriptor.Message) {\r\n errorText = errorDescriptor.Message;\r\n }\r\n\r\n notificationApi.showWarning(errorText);\r\n });\r\n allErrorsHandled = true;\r\n }\r\n return allErrorsHandled;\r\n };\r\n }\r\n\r\n static createNotifyGeneralError(i18n) {\r\n return function notifyGeneralError() {\r\n notificationApi.showWarning(i18n.getString(_TL_('We\\'ve encountered an error. Please try again or contact support.')));\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * encapsulate out-of-box error handle pipe\r\n */\r\nexport class ErrorHandlePipeFactory {\r\n static createNotifyErrorHandlerPipe(i18n, errorCodeToErrorMessageMapping) {\r\n return createErrorHandlePipe(\r\n ErrorHandlerFactory.createTryNotifyAdsApiError(i18n, errorCodeToErrorMessageMapping),\r\n ErrorHandlerFactory.createNotifyGeneralError(i18n)\r\n );\r\n }\r\n}\r\n","import ko from 'knockout';\r\nimport _ from 'underscore';\r\nimport {\r\n formatCost,\r\n CONTEXTUAL_DELIVERY_STATUS,\r\n} from '@bingads-webui-campaign/recommendation-core';\r\n\r\nexport default class ViewModel {\r\n constructor({\r\n i18n,\r\n }) {\r\n this.i18n = i18n;\r\n this.campaignDeliveryStatusTitle = ko.observable('');\r\n this.campaignDeliveryStatus = ko.observable('');\r\n this.campaignType = ko.observable('');\r\n this.campaignBudget = ko.observable('');\r\n this.campaignBiddingType = ko.observable('');\r\n this.eligibleStatusIcon = ko.observable(false);\r\n this.showStatusIcon = ko.observable(false);\r\n }\r\n\r\n updateAttribute({\r\n campaignDeliveryStatus,\r\n campaignType,\r\n campaignBudget,\r\n campaignBiddingType,\r\n }) {\r\n const { i18n } = this;\r\n this.campaignDeliveryStatusTitle(i18n.getString('Campaign_Delivery_Status'));\r\n this.campaignDeliveryStatus(_.contains(CONTEXTUAL_DELIVERY_STATUS, campaignDeliveryStatus) ?\r\n i18n.getString(`Label_DeliveryStatus_${campaignDeliveryStatus}`) :\r\n i18n.getString('Contextual_Response_Null'));\r\n this.campaignType(i18n.getString('Campaign_Type', {\r\n campaignType: campaignType ?\r\n i18n.getString(`CampaignType_${campaignType}`) :\r\n i18n.getString('Contextual_Response_Null'),\r\n }));\r\n this.campaignBudget(i18n.getString('Campaign_Budget', {\r\n campaignBudget: campaignBudget ?\r\n i18n.getString('Campaign_Budget_Value', {\r\n campaignBudget: formatCost(campaignBudget, i18n, i18n.currency),\r\n }) :\r\n i18n.getString('Contextual_Response_Null'),\r\n }));\r\n this.campaignBiddingType(i18n.getString('Campaign_Bidding_Type', {\r\n campaignBiddingType: campaignBiddingType ?\r\n i18n.getString(`BidStrategy_${campaignBiddingType}`) :\r\n i18n.getString('Contextual_Response_Null'),\r\n }));\r\n\r\n if (this.campaignDeliveryStatus() !== i18n.getString('Contextual_Response_Null')) {\r\n this.showStatusIcon(true);\r\n }\r\n if (this.campaignDeliveryStatus() === i18n.getString('EntityStatus_Eligible')) {\r\n this.eligibleStatusIcon(true);\r\n }\r\n }\r\n}\r\n","import { CheckDocBottomMargin } from '@bingads-webui-campaign/recommendation-core';\r\n\r\n/**\r\n * set postion of el to top if bottom space is not enough else set it at bottom\r\n * @param {object} $el - element\r\n * @returns {void}\r\n */\r\nexport function setPosition($el) {\r\n $el.css('top', '');\r\n $el.css('bottom', '');\r\n $el.css('margin-top', '');\r\n $el.css('margin-bottom', '');\r\n if (!CheckDocBottomMargin($el, 50)) {\r\n $el.css('bottom', '100%');\r\n $el.css('margin-bottom', '5px');\r\n } else {\r\n $el.css('top', '100%');\r\n $el.css('margin-top', '5px');\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport ko from 'knockout';\r\nimport $ from 'jquery';\r\n\r\nimport { withUiBlock } from '@bingads-webui/uiblocker';\r\nimport ViewModel from './campaignModel';\r\nimport template from './campaign.pug';\r\nimport { setPosition } from './const';\r\n\r\nexport class CampaignContextualAttributeView extends Backbone.View {\r\n initialize({\r\n deps,\r\n i18n,\r\n targetId,\r\n }) {\r\n this.deps = deps;\r\n this.i18n = i18n;\r\n this.campaignId = targetId;\r\n this.viewModel = new ViewModel({\r\n i18n,\r\n });\r\n }\r\n\r\n\r\n render() {\r\n const {\r\n deps,\r\n campaignId,\r\n i18n,\r\n } = this;\r\n\r\n this.$el.html(template({ i18n }));\r\n ko.applyBindings(this.viewModel, this.el);\r\n\r\n const container = this.$el.children('.contextual-tooltip-container');\r\n setPosition(container);\r\n\r\n deps.jsdata.Campaign.findAll({\r\n limit: 1,\r\n select: ['DeliveryStatus', 'CampaignType', 'Budget', 'BiddingScheme'],\r\n where: { Id: { $eq: campaignId } },\r\n }).then((response) => {\r\n if (response.length && response.length > 0) {\r\n this.viewModel.updateAttribute({\r\n campaignDeliveryStatus: response[0].DeliveryStatus,\r\n campaignType: response[0].CampaignType,\r\n campaignBudget: response[0].Budget ? response[0].Budget.Amount : null,\r\n campaignBiddingType: response[0].BiddingScheme ? response[0].BiddingScheme.Type : null,\r\n });\r\n setPosition(container);\r\n }\r\n }).finally(withUiBlock($(`.${this.el.className} .contextual-content`)));\r\n return this;\r\n }\r\n}\r\n","import ko from 'knockout';\r\nimport {\r\n formatInteger,\r\n} from '@bingads-webui-campaign/recommendation-core';\r\n\r\nexport default class ViewModel {\r\n constructor({\r\n i18n,\r\n }) {\r\n this.i18n = i18n;\r\n this.campaignsCount = ko.observable('');\r\n }\r\n\r\n updateAttribute({ campaignsCount }) {\r\n const { i18n } = this;\r\n this.campaignsCount(i18n.getString(\r\n 'Shared_Budget_Recommendation_CampaignCount',\r\n { campaignsCount: formatInteger(campaignsCount, this.i18n) }\r\n ));\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport ko from 'knockout';\r\nimport ViewModel from './sharedBudgetModel';\r\nimport template from './sharedBudget.pug';\r\nimport { setPosition } from './const';\r\n\r\nexport class SharedBudgetContextualAttributeView extends Backbone.View {\r\n initialize({\r\n deps,\r\n i18n,\r\n targetId,\r\n }) {\r\n this.deps = deps;\r\n this.i18n = i18n;\r\n this.sharedBudgetId = targetId;\r\n this.viewModel = new ViewModel({\r\n i18n,\r\n });\r\n }\r\n\r\n\r\n render() {\r\n const {\r\n deps,\r\n sharedBudgetId,\r\n i18n,\r\n } = this;\r\n\r\n deps.jsdata.Budget.findAll({\r\n limit: 1,\r\n select: ['AssociationCount'],\r\n where: { Id: { $eq: sharedBudgetId } },\r\n }).then((response) => {\r\n if (response.length && response.length > 0) {\r\n this.viewModel.updateAttribute({\r\n campaignsCount: response[0].AssociationCount,\r\n });\r\n this.$el.html(template({ i18n }));\r\n ko.applyBindings(this.viewModel, this.el);\r\n const container = this.$el.children('.contextual-tooltip-container');\r\n\r\n setPosition(container);\r\n }\r\n });\r\n return this;\r\n }\r\n}\r\n","import ko from 'knockout';\r\nimport _ from 'underscore';\r\nimport { CONTEXTUAL_DELIVERY_STATUS } from '@bingads-webui-campaign/recommendation-core';\r\n\r\nexport default class ViewModel {\r\n constructor({\r\n i18n,\r\n }) {\r\n this.i18n = i18n;\r\n this.adgroupDeliveryStatusTitle = ko.observable('');\r\n this.adgroupDeliveryStatus = ko.observable('');\r\n this.eligibleStatusIcon = ko.observable(false);\r\n this.showStatusIcon = ko.observable(false);\r\n }\r\n\r\n updateAttribute({\r\n adgroupDeliveryStatus,\r\n }) {\r\n const { i18n } = this;\r\n this.adgroupDeliveryStatusTitle(i18n.getString('AdGroup_Delivery_Status'));\r\n this.adgroupDeliveryStatus(_.contains(CONTEXTUAL_DELIVERY_STATUS, adgroupDeliveryStatus) ?\r\n i18n.getString(`Label_DeliveryStatus_${adgroupDeliveryStatus}`) :\r\n i18n.getString('Contextual_Response_Null'));\r\n\r\n if (this.adgroupDeliveryStatus() !== i18n.getString('Contextual_Response_Null')) {\r\n this.showStatusIcon(true);\r\n }\r\n if (this.adgroupDeliveryStatus() === i18n.getString('EntityStatus_Eligible')) {\r\n this.eligibleStatusIcon(true);\r\n }\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport ko from 'knockout';\r\n\r\nimport ViewModel from './adgroupModel';\r\nimport template from './adgroup.pug';\r\nimport { setPosition } from './const';\r\n\r\nexport class AdGroupContextualAttributeView extends Backbone.View {\r\n initialize({\r\n deps,\r\n i18n,\r\n targetId,\r\n }) {\r\n this.deps = deps;\r\n this.i18n = i18n;\r\n this.adgroupId = targetId;\r\n this.viewModel = new ViewModel({\r\n i18n,\r\n });\r\n }\r\n\r\n\r\n render() {\r\n const {\r\n deps,\r\n adgroupId,\r\n i18n,\r\n } = this;\r\n\r\n deps.jsdata.AdGroup.findAll({\r\n limit: 1,\r\n select: ['Id', 'DeliveryStatus'],\r\n where: { Id: { $eq: adgroupId } },\r\n }).then((response) => {\r\n if (response.length && response.length > 0) {\r\n this.viewModel.updateAttribute({\r\n adgroupDeliveryStatus: response[0].DeliveryStatus,\r\n });\r\n this.$el.html(template({ i18n }));\r\n ko.applyBindings(this.viewModel, this.el);\r\n const container = this.$el.children('.contextual-tooltip-container');\r\n setPosition(container);\r\n }\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 }) {\r\n this.i18n = i18n;\r\n this.keywordQualityScore = ko.observable('');\r\n }\r\n\r\n updateAttribute({\r\n keywordQualityScore,\r\n }) {\r\n this.keywordQualityScore(this.i18n.getString('Keyword_Quality_Score', {\r\n keywordQualityScore: keywordQualityScore ?\r\n this.i18n.getString('Keyword_Quality_Score_Value', { keywordQualityScore }) :\r\n this.i18n.getString('Contextual_Response_Null'),\r\n }));\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport ko from 'knockout';\r\n\r\nimport ViewModel from './keywordModel';\r\nimport template from './keyword.pug';\r\nimport { setPosition } from './const';\r\n\r\nexport class KeywordContextualAttributeView extends Backbone.View {\r\n initialize({\r\n deps,\r\n i18n,\r\n targetId,\r\n }) {\r\n this.deps = deps;\r\n this.i18n = i18n;\r\n this.keywordId = targetId;\r\n this.viewModel = new ViewModel({\r\n i18n,\r\n });\r\n }\r\n\r\n\r\n render() {\r\n const {\r\n deps,\r\n keywordId,\r\n } = this;\r\n\r\n deps.jsdata.Keyword.findAll({\r\n limit: 1,\r\n select: ['Id', 'QualityScore'],\r\n where: { Id: { $eq: keywordId } },\r\n }).then((response) => {\r\n if (response.length && response.length > 0) {\r\n this.viewModel.updateAttribute({\r\n keywordQualityScore: response[0].QualityScore ?\r\n response[0].QualityScore.OverallQualityScore : null,\r\n });\r\n this.$el.html(template());\r\n ko.applyBindings(this.viewModel, this.el);\r\n const container = this.$el.children('.contextual-tooltip-container');\r\n setPosition(container);\r\n }\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 }) {\r\n this.i18n = i18n;\r\n this.reachSize = ko.observable('');\r\n }\r\n\r\n updateAttribute({\r\n reachSize,\r\n }) {\r\n this.reachSize(this.i18n.getString('Audience_Reach_Size', {\r\n reachSize: reachSize || this.i18n.getString('Contextual_Response_Null'),\r\n }));\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport ko from 'knockout';\r\n\r\nimport ViewModel from './audienceModel';\r\nimport template from './audience.pug';\r\nimport { setPosition } from './const';\r\n\r\nexport class AudienceContextualAttributeView extends Backbone.View {\r\n initialize({\r\n deps,\r\n i18n,\r\n targetId,\r\n }) {\r\n this.deps = deps;\r\n this.i18n = i18n;\r\n this.audienceId = targetId;\r\n this.viewModel = new ViewModel({\r\n i18n,\r\n });\r\n }\r\n\r\n\r\n render() {\r\n const {\r\n deps,\r\n audienceId,\r\n } = this;\r\n\r\n // this.$el.html(template());\r\n // ko.applyBindings(this.viewModel, this.el);\r\n\r\n deps.jsdata.Audience.find(audienceId).then((response) => {\r\n if (response) {\r\n this.viewModel.updateAttribute({\r\n reachSize: response.Reach,\r\n });\r\n this.$el.html(template());\r\n ko.applyBindings(this.viewModel, this.el);\r\n const container = this.$el.children('.contextual-tooltip-container');\r\n setPosition(container);\r\n }\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 }) {\r\n this.i18n = i18n;\r\n this.negativeKeywordList = ko.observable('');\r\n }\r\n\r\n updateAttribute() {\r\n this.negativeKeywordList(this.i18n.getString('Negative_Keyword_List'));\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport ko from 'knockout';\r\n\r\nimport ViewModel from './negativeKeywordListModel';\r\nimport template from './negativeKeywordList.pug';\r\nimport { setPosition } from './const';\r\n\r\nexport class NegativeKeywordListContextualAttributeView extends Backbone.View {\r\n initialize({\r\n i18n,\r\n }) {\r\n this.i18n = i18n;\r\n this.viewModel = new ViewModel({\r\n i18n,\r\n });\r\n }\r\n\r\n render() {\r\n this.viewModel.updateAttribute();\r\n this.$el.html(template());\r\n ko.applyBindings(this.viewModel, this.el);\r\n const container = this.$el.children('.contextual-tooltip-container');\r\n setPosition(container);\r\n return this;\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport _ from 'underscore';\r\nimport {\r\n formatCost,\r\n CONTEXTUAL_DELIVERY_STATUS,\r\n} from '@bingads-webui-campaign/recommendation-core';\r\n\r\nimport template from './campaignVNext.pug';\r\n\r\nexport class CampaignContextualAttributeViewVNext extends Backbone.View {\r\n initialize({\r\n deps,\r\n i18n,\r\n targetId,\r\n isMCC,\r\n recommendationService,\r\n }) {\r\n this.deps = deps;\r\n this.i18n = i18n;\r\n this.campaignId = targetId;\r\n this.isMCC = isMCC;\r\n this.campaignDeliveryStatusTitle = '';\r\n this.campaignDeliveryStatus = '';\r\n this.campaignType = '';\r\n this.campaignBudget = '';\r\n this.campaignBiddingType = '';\r\n this.eligibleStatusIcon = false;\r\n this.showStatusIcon = false;\r\n this.recommendationService = recommendationService;\r\n }\r\n\r\n\r\n render({\r\n showDeliveryStatusPopup,\r\n recommendationAccountId,\r\n }) {\r\n const {\r\n deps,\r\n campaignId,\r\n i18n,\r\n } = this;\r\n const options = this.isMCC ?\r\n {\r\n entitySet:\r\n deps\r\n .edmCampaign\r\n .currentCustomer\r\n .Accounts\r\n .$withKey(Number(recommendationAccountId))\r\n .Campaigns,\r\n } : {};\r\n\r\n deps.jsdata.Campaign.findAll({\r\n limit: 1,\r\n select: ['DeliveryStatus', 'CampaignType', 'Budget', 'BiddingScheme'],\r\n where: { Id: { $eq: campaignId } },\r\n }, options).then((response) => {\r\n if (response.length && response.length > 0) {\r\n const deliveryStatus = response[0].DeliveryStatus;\r\n const type = response[0].CampaignType;\r\n const budget = response[0].Budget ? response[0].Budget.Amount : null;\r\n const biddingType = response[0].BiddingScheme ? response[0].BiddingScheme.Type : null;\r\n\r\n this.campaignDeliveryStatusTitle = i18n.getString('Campaign_Delivery_Status');\r\n this.campaignDeliveryStatus = _.contains(CONTEXTUAL_DELIVERY_STATUS, deliveryStatus) ?\r\n i18n.getString(`Label_DeliveryStatus_${deliveryStatus}`) :\r\n i18n.getString('Contextual_Response_Null');\r\n this.campaignType = i18n.getString('Campaign_Type', {\r\n campaignType: type ?\r\n i18n.getString(`CampaignType_${type}`) :\r\n i18n.getString('Contextual_Response_Null'),\r\n });\r\n this.campaignBudget = i18n.getString('Campaign_Budget', {\r\n campaignBudget: budget ?\r\n i18n.getString('Campaign_Budget_Value', {\r\n campaignBudget: formatCost(budget, i18n, i18n.currency),\r\n }) :\r\n i18n.getString('Contextual_Response_Null'),\r\n });\r\n this.campaignBiddingType = i18n.getString('Campaign_Bidding_Type', {\r\n campaignBiddingType: biddingType ?\r\n i18n.getString(`BidStrategy_${biddingType}`) :\r\n i18n.getString('Contextual_Response_Null'),\r\n });\r\n\r\n if (this.campaignDeliveryStatus !== i18n.getString('Contextual_Response_Null')) {\r\n this.showStatusIcon = true;\r\n } else if (this.recommendationService) {\r\n this.recommendationService.currentActivity.trace(\r\n `unknown delivery status: \"${deliveryStatus}\" in campaign contextual attribute`,\r\n 'recommendation/unKnownDeliveryStatus'\r\n );\r\n }\r\n if (this.campaignDeliveryStatus === i18n.getString('EntityStatus_Eligible')) {\r\n this.eligibleStatusIcon = true;\r\n }\r\n\r\n this.$el.html(template({\r\n i18n,\r\n campaignDeliveryStatusTitle: this.campaignDeliveryStatusTitle,\r\n campaignDeliveryStatus: this.campaignDeliveryStatus,\r\n campaignType: this.campaignType,\r\n campaignBudget: this.campaignBudget,\r\n campaignBiddingType: this.campaignBiddingType,\r\n showStatusIcon: this.showStatusIcon,\r\n eligibleStatusIcon: this.eligibleStatusIcon,\r\n }));\r\n\r\n showDeliveryStatusPopup(this.el.outerHTML);\r\n }\r\n });\r\n return this;\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport {\r\n formatInteger,\r\n} from '@bingads-webui-campaign/recommendation-core';\r\nimport template from './sharedBudgetVNext.pug';\r\n\r\nexport class SharedBudgetContextualAttributeViewVNext extends Backbone.View {\r\n initialize({\r\n deps,\r\n i18n,\r\n isMCC,\r\n targetId,\r\n }) {\r\n this.deps = deps;\r\n this.i18n = i18n;\r\n this.isMCC = isMCC;\r\n this.sharedBudgetId = targetId;\r\n this.campaignsCount = '';\r\n }\r\n\r\n\r\n render({\r\n showDeliveryStatusPopup,\r\n recommendationAccountId,\r\n }) {\r\n const {\r\n deps,\r\n sharedBudgetId,\r\n i18n,\r\n } = this;\r\n const options = this.isMCC ?\r\n {\r\n entitySet:\r\n deps\r\n .edmCampaign\r\n .currentCustomer\r\n .Accounts\r\n .$withKey(Number(recommendationAccountId))\r\n .Budgets,\r\n } : {};\r\n\r\n deps.jsdata.Budget.findAll({\r\n limit: 1,\r\n select: ['AssociationCount'],\r\n where: { Id: { $eq: sharedBudgetId } },\r\n }, options).then((response) => {\r\n if (response.length && response.length > 0) {\r\n const campaignsCount = response[0].AssociationCount;\r\n\r\n this.campaignsCount = i18n.getString(\r\n 'Shared_Budget_Recommendation_CampaignCount',\r\n { campaignsCount: formatInteger(campaignsCount, i18n) }\r\n );\r\n\r\n this.$el.html(template({\r\n campaignsCount: this.campaignsCount,\r\n }));\r\n\r\n showDeliveryStatusPopup(this.el.outerHTML);\r\n }\r\n });\r\n return this;\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport _ from 'underscore';\r\nimport { CONTEXTUAL_DELIVERY_STATUS } from '@bingads-webui-campaign/recommendation-core';\r\n\r\nimport template from './adgroupVNext.pug';\r\n\r\nexport class AdGroupContextualAttributeViewVNext extends Backbone.View {\r\n initialize({\r\n deps,\r\n i18n,\r\n targetId,\r\n isMCC,\r\n recommendationService,\r\n }) {\r\n this.deps = deps;\r\n this.i18n = i18n;\r\n this.adgroupId = targetId;\r\n this.isMCC = isMCC;\r\n this.adgroupDeliveryStatusTitle = '';\r\n this.adgroupDeliveryStatus = '';\r\n this.eligibleStatusIcon = false;\r\n this.showStatusIcon = false;\r\n this.recommendationService = recommendationService;\r\n }\r\n\r\n\r\n render({\r\n showDeliveryStatusPopup,\r\n recommendationAccountId,\r\n }) {\r\n const {\r\n deps,\r\n adgroupId,\r\n i18n,\r\n } = this;\r\n const options = this.isMCC ?\r\n {\r\n entitySet:\r\n deps\r\n .edmCampaign\r\n .currentCustomer\r\n .Accounts\r\n .$withKey(Number(recommendationAccountId))\r\n .AdGroups,\r\n } : {};\r\n\r\n deps.jsdata.AdGroup.findAll({\r\n limit: 1,\r\n select: ['Id', 'DeliveryStatus'],\r\n where: { Id: { $eq: adgroupId } },\r\n }, options).then((response) => {\r\n if (response.length && response.length > 0) {\r\n this.deliveryStatus = response[0].DeliveryStatus;\r\n this.adgroupDeliveryStatusTitle = i18n.getString('AdGroup_Delivery_Status');\r\n this.adgroupDeliveryStatus = _.contains(CONTEXTUAL_DELIVERY_STATUS, this.deliveryStatus) ?\r\n i18n.getString(`Label_DeliveryStatus_${this.deliveryStatus}`) :\r\n i18n.getString('Contextual_Response_Null');\r\n\r\n if (this.adgroupDeliveryStatus !== i18n.getString('Contextual_Response_Null')) {\r\n this.showStatusIcon = true;\r\n } else if (this.recommendationService) {\r\n this.recommendationService.currentActivity.trace(\r\n `unknown delivery status: \"${this.deliveryStatus}\" in adgroup contextual attribute`,\r\n 'recommendation/unKnownDeliveryStatus'\r\n );\r\n }\r\n if (this.adgroupDeliveryStatus === i18n.getString('EntityStatus_Eligible')) {\r\n this.eligibleStatusIcon = true;\r\n }\r\n\r\n this.$el.html(template({\r\n i18n,\r\n adgroupDeliveryStatusTitle: this.adgroupDeliveryStatusTitle,\r\n adgroupDeliveryStatus: this.adgroupDeliveryStatus,\r\n showStatusIcon: this.showStatusIcon,\r\n eligibleStatusIcon: this.eligibleStatusIcon,\r\n }));\r\n\r\n showDeliveryStatusPopup(this.el.outerHTML);\r\n }\r\n });\r\n return this;\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\n\r\nimport template from './keywordVNext.pug';\r\n\r\nexport class KeywordContextualAttributeViewVNext extends Backbone.View {\r\n initialize({\r\n deps,\r\n i18n,\r\n targetId,\r\n isMCC,\r\n }) {\r\n this.deps = deps;\r\n this.i18n = i18n;\r\n this.isMCC = isMCC;\r\n this.keywordId = targetId;\r\n this.keywordQualityScore = '';\r\n }\r\n\r\n\r\n render({\r\n showDeliveryStatusPopup,\r\n recommendationAccountId,\r\n }) {\r\n const {\r\n deps,\r\n keywordId,\r\n } = this;\r\n const options = this.isMCC ?\r\n {\r\n entitySet:\r\n deps\r\n .edmCampaign\r\n .currentCustomer\r\n .Accounts\r\n .$withKey(Number(recommendationAccountId))\r\n .Keywords,\r\n } : {};\r\n\r\n deps.jsdata.Keyword.findAll({\r\n limit: 1,\r\n select: ['Id', 'QualityScore'],\r\n where: { Id: { $eq: keywordId } },\r\n }, options).then((response) => {\r\n if (response.length && response.length > 0) {\r\n const qualityScore = response[0].QualityScore ?\r\n response[0].QualityScore.OverallQualityScore : null;\r\n this.keywordQualityScore = this.i18n.getString('Keyword_Quality_Score', {\r\n keywordQualityScore: qualityScore ?\r\n this.i18n.getString('Keyword_Quality_Score_Value', { keywordQualityScore: qualityScore }) : // eslint-disable-line\r\n this.i18n.getString('Contextual_Response_Null'),\r\n });\r\n this.$el.html(template({ keywordQualityScore: this.keywordQualityScore }));\r\n\r\n showDeliveryStatusPopup(this.el.outerHTML);\r\n }\r\n });\r\n return this;\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\n\r\nimport template from './audienceVNext.pug';\r\n\r\nexport class AudienceContextualAttributeViewVNext extends Backbone.View {\r\n initialize({\r\n deps,\r\n i18n,\r\n targetId,\r\n isMCC,\r\n }) {\r\n this.deps = deps;\r\n this.i18n = i18n;\r\n this.isMCC = isMCC;\r\n this.audienceId = targetId;\r\n this.reachSize = '';\r\n }\r\n\r\n\r\n render({\r\n showDeliveryStatusPopup,\r\n recommendationAccountId,\r\n }) {\r\n const {\r\n deps,\r\n i18n,\r\n audienceId,\r\n } = this;\r\n const options = this.isMCC ?\r\n {\r\n entitySet:\r\n deps\r\n .edmCampaign\r\n .currentCustomer\r\n .Accounts\r\n .$withKey(Number(recommendationAccountId))\r\n .Audiences,\r\n } : {};\r\n\r\n deps.jsdata.Audience.find(\r\n audienceId,\r\n options\r\n ).then((response) => {\r\n if (response) {\r\n this.reachSize = i18n.getString('Audience_Reach_Size', {\r\n reachSize: response.Reach || i18n.getString('Contextual_Response_Null'),\r\n });\r\n this.$el.html(template({ reachSize: this.reachSize }));\r\n\r\n showDeliveryStatusPopup(this.el.outerHTML);\r\n }\r\n });\r\n return this;\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\n\r\nimport template from './negativeKeywordListVNext.pug';\r\n\r\nexport class NegativeKeywordListContextualAttributeViewVNext extends Backbone.View {\r\n initialize({\r\n i18n,\r\n }) {\r\n this.i18n = i18n;\r\n this.negativeKeywordList = '';\r\n }\r\n\r\n render({\r\n showDeliveryStatusPopup,\r\n }) {\r\n this.negativeKeywordList = this.i18n.getString('Negative_Keyword_List');\r\n this.$el.html(template({ negativeKeywordList: this.negativeKeywordList }));\r\n\r\n showDeliveryStatusPopup(this.el.outerHTML);\r\n return this;\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport template from './goal.pug';\r\n\r\nexport class GoalContextualAttributeView extends Backbone.View {\r\n initialize({\r\n deps,\r\n i18n,\r\n targetId,\r\n isMCC,\r\n scope,\r\n accountName,\r\n s$i18n,\r\n newI18n,\r\n }) {\r\n this.deps = deps;\r\n this.i18n = i18n;\r\n this.goalId = targetId;\r\n this.isMCC = isMCC;\r\n this.scope = scope;\r\n this.accountName = accountName;\r\n this.s$i18n = s$i18n;\r\n this.newI18n = newI18n;\r\n }\r\n\r\n\r\n render({\r\n showDeliveryStatusPopup,\r\n recommendationAccountId,\r\n }) {\r\n const {\r\n deps, goalId, i18n, scope, accountName, s$i18n, newI18n,\r\n } = this;\r\n const cid = scope.advertiserCustomerId;\r\n const aid = recommendationAccountId;\r\n const url = `Customers(${cid})/Accounts(${aid})/Goals(${goalId})`;\r\n deps.odata.get(url).then((response) => {\r\n if (response) {\r\n const trackingStatus = response.TrackingStatus;\r\n const isAccountLevel = response.IsAccountLevel;\r\n const goalType = s$i18n.value('Goal', 'Type', response.Type);\r\n let scopeName;\r\n if (isAccountLevel) {\r\n scopeName = i18n.getString(\r\n 'UnifiedEventTracking_Goal_Creation_TrackingType_CurrentAccount',\r\n { acctname: accountName }\r\n );\r\n } else {\r\n scopeName = i18n.getString('UnifiedEventTracking_Goal_Creation_TrackingType_AllAccounts');\r\n }\r\n\r\n this.$el.html(template({\r\n i18n,\r\n trackingStatus,\r\n scopeName,\r\n goalType,\r\n goalTypeLabel: newI18n.getString(_TL_('Goal type')),\r\n }));\r\n\r\n showDeliveryStatusPopup(this.el.outerHTML);\r\n }\r\n });\r\n return this;\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport {\r\n formatCost,\r\n} from '@bingads-webui-campaign/recommendation-core';\r\nimport template from './accountVNext.pug';\r\n\r\nexport class AccountContextualAttributeView extends Backbone.View {\r\n initialize({\r\n deps,\r\n i18n,\r\n targetId,\r\n }) {\r\n this.deps = deps;\r\n this.i18n = i18n;\r\n this.accountId = targetId;\r\n this.budget = '';\r\n }\r\n\r\n\r\n render({ showDeliveryStatusPopup }) {\r\n const {\r\n deps,\r\n accountId,\r\n i18n,\r\n } = this;\r\n\r\n deps.jsdata.Account.findAll(\r\n {\r\n limit: 1,\r\n select: ['Budget/DailyBudget'],\r\n where: { Id: { $eq: accountId } },\r\n },\r\n {\r\n entitySet: deps.edmCampaign.currentCustomer.Accounts,\r\n }\r\n ).then((response) => {\r\n if (response.length && response.length > 0) {\r\n const dailyBudget = response[0].Budget.DailyBudget;\r\n\r\n this.budgetString = i18n.getString(\r\n 'Account_Total_Budget',\r\n { dailyBudget: formatCost(dailyBudget, i18n, i18n.currency) }\r\n );\r\n\r\n this.$el.html(template({\r\n budgetString: this.budgetString,\r\n }));\r\n\r\n showDeliveryStatusPopup(this.el.outerHTML);\r\n }\r\n });\r\n return this;\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\n\r\nimport template from './currentSetting.pug';\r\n\r\nexport class CurrentSettingContextualAttributeView extends Backbone.View {\r\n initialize({\r\n i18n,\r\n }) {\r\n this.i18n = i18n;\r\n }\r\n\r\n render({\r\n showDeliveryStatusPopup,\r\n }) {\r\n const message = this.i18n.getString('Details_View_Current_Setting_Context_Attribute');\r\n this.$el.html(template({ message }));\r\n\r\n showDeliveryStatusPopup(this.el.outerHTML);\r\n return this;\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\n\r\nimport template from './suggestedSetting.pug';\r\n\r\nexport class SuggestedSettingContextualAttributeView extends Backbone.View {\r\n initialize({\r\n i18n,\r\n }) {\r\n this.i18n = i18n;\r\n }\r\n\r\n render({\r\n showDeliveryStatusPopup,\r\n }) {\r\n const message = this.i18n.getString('Details_View_Suggested_Setting_Context_Attribute');\r\n this.$el.html(template({ message }));\r\n\r\n showDeliveryStatusPopup(this.el.outerHTML);\r\n return this;\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\n\r\nimport template from './generatedFrom.pug';\r\n\r\nexport class GeneratedFromContextualAttributeView extends Backbone.View {\r\n initialize({\r\n pageUrls,\r\n }) {\r\n this.Urls = pageUrls;\r\n }\r\n\r\n render({\r\n showDeliveryStatusPopup,\r\n }) {\r\n const {\r\n Urls,\r\n } = this;\r\n\r\n this.$el.html(template({ Urls }));\r\n\r\n showDeliveryStatusPopup(this.el.outerHTML);\r\n return this;\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport _ from 'underscore';\r\nimport template from './moreImages.pug';\r\n\r\nexport class MoreImagesContextualAttributeView extends Backbone.View {\r\n initialize({\r\n images,\r\n newI18n,\r\n key,\r\n gridView,\r\n }) {\r\n this.images = images;\r\n this.newI18n = newI18n;\r\n this.key = key;\r\n this.gridView = gridView;\r\n }\r\n\r\n render({\r\n showDeliveryStatusPopup,\r\n }) {\r\n const {\r\n images,\r\n gridView,\r\n } = this;\r\n\r\n const imagesWithoutFirstImage = images.slice(1);\r\n const displayPopupImageUrls = [];\r\n const MAX_NUMBER_OF_DISPLAY_POPUOP_IMAGE = 3;\r\n _.each(imagesWithoutFirstImage, (image, index) => {\r\n if (index < MAX_NUMBER_OF_DISPLAY_POPUOP_IMAGE) {\r\n if (_.isNull(image.AssetIdString)) {\r\n displayPopupImageUrls.push(image.ThumbnailURL);\r\n } else {\r\n let imageUrlToUse = image.ImageURL;\r\n\r\n // strip off the resizing from MT as we need a smaller resizing\r\n const indexOfResizeInfo = imageUrlToUse.indexOf('&w=');\r\n if (indexOfResizeInfo > 0) {\r\n imageUrlToUse = imageUrlToUse.substr(0, indexOfResizeInfo);\r\n }\r\n\r\n const responsiveAdThumbnailWidth = 114;\r\n const responsiveAdThumbnailHeight = 60;\r\n const resizeQueryString = `&w=${responsiveAdThumbnailWidth}&h=${responsiveAdThumbnailHeight}`;\r\n\r\n displayPopupImageUrls.push(`${imageUrlToUse}${resizeQueryString}`);\r\n }\r\n }\r\n });\r\n\r\n // TODO: better contract between action & their callback other than window.globalCallback\r\n window.openEditPanel = () => gridView.trigger('openEditPanel', this.key);\r\n\r\n this.$el.html(template({\r\n displayPopupImageUrls,\r\n numOfImages: imagesWithoutFirstImage.length,\r\n maxNumOfDisplayPopupImage: MAX_NUMBER_OF_DISPLAY_POPUOP_IMAGE,\r\n viewMore: this.newI18n.getString(_TL_('View {{numOfRemaininfImage}} more images'), {\r\n numOfRemaininfImage: imagesWithoutFirstImage.length - MAX_NUMBER_OF_DISPLAY_POPUOP_IMAGE,\r\n }),\r\n openEditPanel: 'openEditPanel();',\r\n }));\r\n\r\n showDeliveryStatusPopup(this.el.outerHTML);\r\n return this;\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport _ from 'underscore';\r\nimport template from './moreConversionClarityButtons.pug';\r\n\r\nexport class MoreConversionClarityButtonsContextualAttributeView extends Backbone.View {\r\n initialize({\r\n conversionClarityButtons,\r\n newI18n,\r\n }) {\r\n this.conversionClarityButtons = conversionClarityButtons;\r\n this.newI18n = newI18n;\r\n }\r\n\r\n render({\r\n showDeliveryStatusPopup,\r\n }) {\r\n const {\r\n conversionClarityButtons,\r\n } = this;\r\n\r\n const conversionClarityButtonsWithoutFirst = conversionClarityButtons.slice(1);\r\n\r\n const displayPopupclarityEventGoalSettings = [];\r\n _.each(conversionClarityButtonsWithoutFirst, (conversionClarityButton) => {\r\n const {\r\n SourceURL,\r\n Text,\r\n } = conversionClarityButton;\r\n\r\n const buttonTextElement = `\"${Text}\"`;\r\n const clarityEventGoalSetting = this.newI18n.getString(_TL_('Button {0} on')).replace('{0}', buttonTextElement);\r\n displayPopupclarityEventGoalSettings.push({ clarityEventGoalSetting, sourceURL: SourceURL });\r\n });\r\n\r\n this.$el.html(template({\r\n displayPopupclarityEventGoalSettings,\r\n }));\r\n\r\n showDeliveryStatusPopup(this.el.outerHTML);\r\n return this;\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport _ from 'underscore';\r\nimport config from '@bingads-webui-component-legacy/config/index';\r\nimport dateUtil from '@bingads-webui-component-legacy/humanize/date';\r\nimport template from './importTaskItem.pug';\r\n\r\nexport class ImportTaskItemContextualAttributeView extends Backbone.View {\r\n initialize({\r\n deps,\r\n i18n,\r\n targetId,\r\n isMCC,\r\n recommendationService,\r\n newI18n,\r\n taskItemId,\r\n budgetAdjustmentOption,\r\n }) {\r\n this.deps = deps;\r\n this.i18n = i18n;\r\n this.campaignId = targetId;\r\n this.isMCC = isMCC;\r\n this.campaignDeliveryStatusTitle = '';\r\n this.campaignDeliveryStatus = '';\r\n this.campaignType = '';\r\n this.campaignBudget = '';\r\n this.campaignBiddingType = '';\r\n this.eligibleStatusIcon = false;\r\n this.showStatusIcon = false;\r\n this.recommendationService = recommendationService;\r\n this.newI18n = newI18n;\r\n this.taskItemId = taskItemId;\r\n this.budgetAdjustmentOption = budgetAdjustmentOption;\r\n }\r\n\r\n\r\n render({\r\n showDeliveryStatusPopup,\r\n }) {\r\n const {\r\n deps,\r\n i18n,\r\n newI18n,\r\n taskItemId,\r\n budgetAdjustmentOption,\r\n } = this;\r\n\r\n deps.jsdata.TaskItem.findAll({\r\n query: {\r\n $filter: deps.importScheduleConstants.FILTER_ALL_BUT_DELETED,\r\n },\r\n }).then((response) => {\r\n if (response.length && response.length > 0) {\r\n const taskItem = _.filter(response, item => item.Id === taskItemId);\r\n if (taskItem.length > 0) {\r\n const status = taskItem[0].State === 'Active' ? newI18n.getString(_TL_('Enabled')) : newI18n.getString(_TL_('Paused'));\r\n\r\n const creator = taskItem[0].ModifiedBy && taskItem[0].ModifiedBy.Name;\r\n const dateTime = dateUtil.format(new Date(taskItem[0].ModifiedAt), 'dddd, MMMM d, yyyy', config.get('culture'));\r\n const time = dateUtil.format(new Date(taskItem[0].ModifiedAt), 'hh:mm:ss tt', config.get('culture'));\r\n const createdBy = `${creator}
${dateTime}, ${time}
`;\r\n\r\n const when = deps.importFreqColDataToTemplate(taskItem[0], i18n);\r\n const importedCampaigns = taskItem[0].AdWordsImportContext.CampaignIds.length;\r\n const limitedByBudgetCampaigns = budgetAdjustmentOption.BudgetConstrainedCampaignsCount;\r\n\r\n this.$el.html(template({\r\n status: `${newI18n.getString(_TL_('Status'))}: ${status}`,\r\n createdBy: `${newI18n.getString(_TL_('Created by'))}: ${createdBy}`,\r\n when: `${newI18n.getString(_TL_('When'))}: ${when}`,\r\n importedCampaigns: `${newI18n.getString(_TL_('Imported campaigns'))}: ${importedCampaigns}`,\r\n limitedByBudgetCampaigns: `${newI18n.getString(_TL_('Campaigns limited by budget'))}: ${limitedByBudgetCampaigns}`,\r\n }));\r\n\r\n showDeliveryStatusPopup(this.el.outerHTML);\r\n }\r\n }\r\n });\r\n return this;\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\n\r\nimport template from './campaigns.pug';\r\n\r\nexport class CampaignsContextualAttributeView extends Backbone.View {\r\n initialize({\r\n newI18n,\r\n budgetAdjustmentOption,\r\n }) {\r\n this.newI18n = newI18n;\r\n this.budgetAdjustmentOption = budgetAdjustmentOption;\r\n }\r\n\r\n render({\r\n showDeliveryStatusPopup,\r\n }) {\r\n const {\r\n newI18n,\r\n budgetAdjustmentOption,\r\n } = this;\r\n\r\n this.$el.html(template({\r\n campaignsTitle: newI18n.getString(_TL_('Campaign names:')),\r\n campaigns: budgetAdjustmentOption.BudgetAdjustmentOptionConstrainedCampaigns,\r\n }));\r\n\r\n showDeliveryStatusPopup(this.el.outerHTML);\r\n return this;\r\n }\r\n}\r\n","import $ from 'jquery';\r\nimport _ from 'underscore';\r\nimport { DeliveryStatusPopupFactory } from '@bingads-webui-campaign/delivery-status-popup-factory';\r\nimport { RECOMMENDATION_TYPES, CONTEXTUAL_ENTITY_TYPE } from '@bingads-webui-campaign/recommendation-core';\r\nimport edmCampaign from '@bingads-webui-component-legacy/edm-campaign/index';\r\n\r\nimport template from './contextual-attribute.pug';\r\n\r\nimport { SharedBudgetContextualAttributeViewVNext } from './sharedBudgetVNext';\r\nimport { AccountContextualAttributeView } from './accountVNext';\r\nimport { CampaignContextualAttributeViewVNext } from './campaignVNext';\r\nimport { AdGroupContextualAttributeViewVNext } from './adgroupVNext';\r\nimport { KeywordContextualAttributeViewVNext } from './keywordVNext';\r\nimport { AudienceContextualAttributeViewVNext } from './audienceVNext';\r\nimport { NegativeKeywordListContextualAttributeViewVNext } from './negativeKeywordListVNext';\r\nimport { GoalContextualAttributeView } from './goal';\r\nimport { CurrentSettingContextualAttributeView } from './currentSetting';\r\nimport { SuggestedSettingContextualAttributeView } from './suggestedSetting';\r\nimport { GeneratedFromContextualAttributeView } from './generatedFrom';\r\nimport { MoreImagesContextualAttributeView } from './moreImages';\r\nimport { MoreConversionClarityButtonsContextualAttributeView } from './moreConversionClarityButtons';\r\nimport { ImportTaskItemContextualAttributeView } from './importTaskItem';\r\nimport { CampaignsContextualAttributeView } from './campaigns';\r\n\r\nexport const withContextualAttributeTemplate = ({\r\n opportunityId,\r\n entityName,\r\n entityId,\r\n entityType,\r\n entityCampaignId,\r\n status,\r\n isExpandingView,\r\n ariaLabel = '',\r\n accountName,\r\n pageUrls,\r\n}) => template({\r\n opportunityId,\r\n entityName,\r\n entityId,\r\n entityType,\r\n entityCampaignId,\r\n status,\r\n isExpandingView,\r\n ariaLabel,\r\n accountName,\r\n pageUrls,\r\n});\r\n\r\nfunction showDeliveryStatusPopup(e, self, contextualAttributeViewTemplate) {\r\n const factory = new DeliveryStatusPopupFactory({ grid: self.grid, i18n: self.i18n });\r\n factory.showRejectionPopup({\r\n event: e,\r\n getCustomTemplate: () => contextualAttributeViewTemplate,\r\n isContextualAttributeForRecommendation: true,\r\n popoverId: 'contextual-attribute',\r\n view: self,\r\n });\r\n}\r\n\r\nexport const showContextualAttribute = ({\r\n deps,\r\n i18n,\r\n e,\r\n type,\r\n isMCC = false,\r\n isExpanding = false,\r\n self,\r\n scope,\r\n recommendationService,\r\n s$i18n,\r\n newI18n,\r\n}) => {\r\n if (!deps.edmCampaign) {\r\n _.extend(deps, { edmCampaign });\r\n }\r\n const target = $(e.target);\r\n const elMapper = {\r\n [RECOMMENDATION_TYPES.REPAIR_ADS]: '.recommendation-repair-ads-inline-view',\r\n [RECOMMENDATION_TYPES.REPAIR_KEYWORD]: '.recommendation-repair-keywords-inline-view',\r\n [RECOMMENDATION_TYPES.CALLOUT]: '.recommendation-inline-ad-extension-view',\r\n [RECOMMENDATION_TYPES.SITE_LINK]: '.recommendation-inline-ad-extension-view',\r\n [RECOMMENDATION_TYPES.BUDGET_OPPORTUNITY]: '.recommendation-inline-budget-view',\r\n [RECOMMENDATION_TYPES.ADJUST_SHARED_BUDGET_OPPORTUNITY]: '.recommendation-inline-budget-view',\r\n [RECOMMENDATION_TYPES.RESPONSIVE_SEARCH_ADS]: '.recommendation-new-ads-inline-view',\r\n [RECOMMENDATION_TYPES.MULTIMEDIA_ADS]: '.recommendation-new-ads-inline-view',\r\n [RECOMMENDATION_TYPES.REALLOCATE_BUDGET]: '.recommendation-reallocate-budget',\r\n [RECOMMENDATION_TYPES.DYNAMIC_SEARCH_ADS]: '.recommendation-dynamic-search-ads-inline-view',\r\n [RECOMMENDATION_TYPES.SETUP_CONVERSION_TRACKING_OPPORTUNITY]: '.recommendation-setup-conversion-tracking',\r\n [RECOMMENDATION_TYPES.FIX_CONVERSION_GOAL_SETTINGS]: '.recommendation-inline-fix-conversion-goal-setting-view',\r\n };\r\n\r\n const contextualAttributeMapper = {\r\n [CONTEXTUAL_ENTITY_TYPE.CAMPAIGN]:\r\n CampaignContextualAttributeViewVNext,\r\n [CONTEXTUAL_ENTITY_TYPE.ADGROUP]:\r\n AdGroupContextualAttributeViewVNext,\r\n [CONTEXTUAL_ENTITY_TYPE.KEYWORD]: KeywordContextualAttributeViewVNext,\r\n [CONTEXTUAL_ENTITY_TYPE.AUDIENCE]: AudienceContextualAttributeViewVNext,\r\n [CONTEXTUAL_ENTITY_TYPE.NEGATIVE_KEYWORD_LIST]: NegativeKeywordListContextualAttributeViewVNext,\r\n [CONTEXTUAL_ENTITY_TYPE.SHARED_BUDGET]:\r\n SharedBudgetContextualAttributeViewVNext,\r\n [CONTEXTUAL_ENTITY_TYPE.ACCOUNT]: AccountContextualAttributeView,\r\n [CONTEXTUAL_ENTITY_TYPE.GOAL]: GoalContextualAttributeView,\r\n [CONTEXTUAL_ENTITY_TYPE.CURRENT_SETTING]: CurrentSettingContextualAttributeView,\r\n [CONTEXTUAL_ENTITY_TYPE.SUGGESTED_SETTING]: SuggestedSettingContextualAttributeView,\r\n [CONTEXTUAL_ENTITY_TYPE.GENERATED_FROM]: GeneratedFromContextualAttributeView,\r\n [CONTEXTUAL_ENTITY_TYPE.MORE_IMAGES]: MoreImagesContextualAttributeView,\r\n [CONTEXTUAL_ENTITY_TYPE.MORE_CONVERSION_CLARITY_BUTTONS]: MoreConversionClarityButtonsContextualAttributeView,\r\n [CONTEXTUAL_ENTITY_TYPE.IMPORTED_TASK_ITEM]: ImportTaskItemContextualAttributeView,\r\n [CONTEXTUAL_ENTITY_TYPE.CAMPAIGNS]: CampaignsContextualAttributeView,\r\n };\r\n\r\n const contextual = isExpanding ? $(`${elMapper[type]} .expanding-contextual-attribute-${target.data('opportunityid')}-${target.data('entityid')}`) // eslint-disable-line\r\n : $(`.contextual-attribute-${target.data('opportunityid')}-${target.data('entityid')}`);\r\n\r\n if (contextual.length === 0) {\r\n return;\r\n }\r\n\r\n if (!target.data('status')) {\r\n const key = $(e.target).parents('tr[data-key]').data('key') || $(e.target).parents('tr[key]').attr('key');\r\n const recommendation = self.grid.gridView.itemWithKey(key) || self.data; // self.data for panelEdit\r\n const recommendationAccountId = recommendation.Target.AccountId;\r\n const contextualAttributeView = new contextualAttributeMapper[target.data('type')]({\r\n deps,\r\n i18n,\r\n isMCC,\r\n targetId: Number(target.data('entityid')),\r\n el: contextual,\r\n scope,\r\n accountName: target.data('accountname'),\r\n pageUrls: target.data('pageurls'),\r\n recommendationService,\r\n s$i18n,\r\n newI18n,\r\n images: _.result(_.first(recommendation.Opportunities), 'Images'),\r\n key,\r\n gridView: self.grid.gridView,\r\n conversionClarityButtons: _.result(_.result(_.first(recommendation.Opportunities), 'SuggestedClarityEventGoal'), 'ConversionClarityButtons'),\r\n budgetAdjustmentOption: _.result(_.first(recommendation.Opportunities), 'BudgetAdjustmentOption'),\r\n taskItemId: _.result(_.first(recommendation.Opportunities), 'RuleId'),\r\n });\r\n contextualAttributeView.render({\r\n showDeliveryStatusPopup: _.partial(showDeliveryStatusPopup, e, self),\r\n recommendationAccountId,\r\n });\r\n target.data('status', 'true');\r\n }\r\n\r\n if (contextual.children('.contextual-tooltip-container').length > 0) { // new ui\r\n showDeliveryStatusPopup(\r\n e,\r\n self,\r\n contextual.children('.contextual-tooltip-container')[0].outerHTML\r\n );\r\n } else { // old ui\r\n $(`.expanding-contextual-attribute-${target.data('opportunityid')}-${target.data('entityid')}`).show();\r\n }\r\n};\r\n\r\nexport const hideContextualAttribute = ({\r\n e,\r\n self,\r\n}) => {\r\n if ($(e.relatedTarget).closest('#contextual-attribute').length === 0) {\r\n self.trigger('closeDeliveryStatusPopup');\r\n }\r\n};\r\n","import { CONTEXTUAL_ENTITY_TYPE } from '@bingads-webui-campaign/recommendation-core';\r\n\r\nimport { withContextualAttributeTemplate } from './contextual-attribute';\r\n\r\n/**\r\n * add account contextual in front of campaign in MCC recommendation inline view.\r\n * @param {string} opportunityId - opportunity Id\r\n * @param {string} accountName - account Name\r\n * @param {number} accountId - account Id\r\n * @param {string} originEntity - entity contextual attribute in single account version\r\n * @return {string} entity string with account name prepended\r\n */\r\nexport const prependAccountAttribute = ({\r\n opportunityId,\r\n accountName,\r\n accountId,\r\n originEntity,\r\n}) => {\r\n const accountEntity = withContextualAttributeTemplate({\r\n opportunityId,\r\n entityName: accountName,\r\n entityId: accountId,\r\n entityType: CONTEXTUAL_ENTITY_TYPE.ACCOUNT,\r\n status: 'false',\r\n isExpandingView: true,\r\n });\r\n\r\n return `${accountEntity} > ${originEntity}`;\r\n};\r\n","import _ from 'underscore';\r\nimport { levelAtConstant } from '@bingads-webui-campaign/scope-constants';\r\n\r\nexport const ESTIMATE_TYPES = {\r\n IMPRESSION_SHARE: 'imprShare',\r\n IMPRESSIONS: 'impressions',\r\n QUERY_VOLUME: 'queryVolume',\r\n COST: 'cost',\r\n CLICKS: 'clicks',\r\n CTR: 'ctr',\r\n CONVERSIONS: 'conv',\r\n WEEKLY_SEARCHES: 'weeklySearches',\r\n REJECTED_ADS: 'rejectedAds',\r\n REJECTED_KEYWORDS: 'rejectedKeywords',\r\n MISSING_CONVERSIONS: 'missingConv',\r\n TARGETED_PRODUCTS: 'targetedProducts',\r\n};\r\n\r\nexport const NO_SYMBOL_ESTIMATE_TYPES = [\r\n ESTIMATE_TYPES.REJECTED_ADS,\r\n ESTIMATE_TYPES.REJECTED_KEYWORDS,\r\n ESTIMATE_TYPES.MISSING_CONVERSIONS,\r\n];\r\n\r\nexport const SUMMARY_CARD = 'SummaryCard';\r\nexport const RECOMMENDATIOIN_SUMMARY_APPLY_FAILED_RESULTS = 'RecommendationSummaryPageApplyFaildResult';\r\n\r\nexport const RECOMMENDATION_TYPES = {\r\n BUDGET: 'CompetitiveBudgetOpportunity',\r\n COMPETITIVE_BID: 'CompetitiveBidOpportunity',\r\n DEVICE_BID_BOOST: 'CompetitiveDeviceBidBoostOpportunity',\r\n LOCATION_BID_BOOST: 'CompetitiveLocationBidBoostOpportunity',\r\n NEW_KEYWORD: 'CompetitiveKeywordOpportunity', // deprecated in Oct 2023\r\n BROAD_MATCH_KEYWORD: 'BroadMatchAdoptionOpportunity',\r\n BUDGET_OPPORTUNITY: 'BudgetOpportunity',\r\n ADJUST_SHARED_BUDGET_OPPORTUNITY: 'AdjustSharedBudgetOpportunity',\r\n CALLOUT: 'CalloutOpportunity',\r\n GOOGLE_IMPORT: 'GoogleImportOpportunity',\r\n GOOGLE_IMPORT_SCHEDULED: 'GoogleImportScheduledOpportunity',\r\n NEW_KEYWORD_OPPORTUNITY: 'CampaignContextKeywordOpportunity',\r\n TRENDING_QUERY: 'RisingQueryKeywordOpportunity',\r\n REPAIR_ADS: 'RepairAdsOpportunity',\r\n REPAIR_KEYWORD: 'RepairKeywordsOpportunity',\r\n SITE_LINK: 'SiteLinkOpportunity',\r\n REMOVE_CONFLICTING_NEGATIVE_KEYWORD: 'RemoveConflictingNegativeKeywordOpportunity',\r\n RESPONSIVE_SEARCH_ADS: 'ResponsiveSearchAdsOpportunity',\r\n DYNAMIC_SEARCH_ADS: 'DSAOpportunity',\r\n REALLOCATE_BUDGET: 'ReallocateBudgetOpportunity',\r\n FIX_AD_TEXT: 'FixAdContentOpportunity',\r\n FIX_AD_DESTINATION: 'FixAdDestinationOpportunity',\r\n SETUP_CONVERSION_TRACKING_OPPORTUNITY: 'SetupConversionTrackingOpportunity',\r\n FIX_CONVERSION_TRACKING_OPPORTUNITY: 'FixConversionTrackingOpportunity',\r\n FIX_CONVERSION_GOAL_SETTINGS: 'FixConversionGoalSettingsOpportunity',\r\n MULTIMEDIA_ADS: 'MultiMediaAdsOpportunity',\r\n CREATE_CONVERSION_GOAL: 'CreateConversionGoalOpportunity',\r\n FACEBOOK_IMPORT: 'FacebookImportOpportunity',\r\n IMAGE_EXTENSION: 'ImageExtensionOpportunity',\r\n REPAIR_MISSING_KEYWORD_PARAMS: 'RepairMissingKeywordParamsOpportunity',\r\n FIX_NO_IMPRESSION_BID: 'FixNoImpressionBidOpportunity',\r\n IMPROVE_RESPONSIVE_SEARCH_ADS: 'ImproveResponsiveSearchAdsOpportunity',\r\n REPAIR_UNTARGETED_OFFER: 'RepairUntargetedOfferOpportunity',\r\n IMPROVE_MULTIMEDIA_ADS: 'ImproveMultiMediaAdsOpportunity',\r\n SSC_2_PMAX_MIGRATION: 'SSC2PMaxMigrationOpportunity',\r\n PMAX_IMPORT: 'PerformanceMaxImportOpportunity',\r\n DSA_2_PMAX_MIGRATION: 'DSA2PMaxMigrationOpportunity',\r\n SYNDICATION_GAP: 'SyndicationGapOpportunity',\r\n};\r\n\r\nexport const BUDGET_OPPORTUNITY_TYPES = [\r\n RECOMMENDATION_TYPES.BUDGET_OPPORTUNITY,\r\n RECOMMENDATION_TYPES.ADJUST_SHARED_BUDGET_OPPORTUNITY,\r\n];\r\n\r\nexport const RECOMMENDATION_IDS = {\r\n [RECOMMENDATION_TYPES.BUDGET]: '40001',\r\n [RECOMMENDATION_TYPES.COMPETITIVE_BID]: '19',\r\n [RECOMMENDATION_TYPES.DEVICE_BID_BOOST]: '211',\r\n [RECOMMENDATION_TYPES.LOCATION_BID_BOOST]: '212',\r\n [RECOMMENDATION_TYPES.NEW_KEYWORD]: '32001', // deprecated in Oct 2023\r\n [RECOMMENDATION_TYPES.NEW_LOCATION]: '213',\r\n [RECOMMENDATION_TYPES.SYNDICATION]: '214',\r\n [RECOMMENDATION_TYPES.BROAD_MATCH_KEYWORD]: '202',\r\n [RECOMMENDATION_TYPES.BUDGET_OPPORTUNITY]: '40',\r\n [RECOMMENDATION_TYPES.CALLOUT]: '132',\r\n [RECOMMENDATION_TYPES.GOOGLE_IMPORT]: '205',\r\n [RECOMMENDATION_TYPES.GOOGLE_IMPORT_SCHEDULED]: '206',\r\n [RECOMMENDATION_TYPES.NEW_KEYWORD_OPPORTUNITY]: '32',\r\n [RECOMMENDATION_TYPES.TRENDING_QUERY]: '237',\r\n [RECOMMENDATION_TYPES.REPAIR_ADS]: '60',\r\n [RECOMMENDATION_TYPES.REPAIR_KEYWORD]: '61',\r\n [RECOMMENDATION_TYPES.SITE_LINK]: '131',\r\n [RECOMMENDATION_TYPES.REMOVE_CONFLICTING_NEGATIVE_KEYWORD]: '36',\r\n [RECOMMENDATION_TYPES.RESPONSIVE_SEARCH_ADS]: '228',\r\n [RECOMMENDATION_TYPES.DYNAMIC_SEARCH_ADS]: '210',\r\n [RECOMMENDATION_TYPES.REALLOCATE_BUDGET]: '42',\r\n [RECOMMENDATION_TYPES.ADJUST_SHARED_BUDGET_OPPORTUNITY]: '40002',\r\n [RECOMMENDATION_TYPES.FIX_AD_TEXT]: '62001',\r\n [RECOMMENDATION_TYPES.FIX_AD_DESTINATION]: '62002',\r\n [RECOMMENDATION_TYPES.SETUP_CONVERSION_TRACKING_OPPORTUNITY]: '65',\r\n [RECOMMENDATION_TYPES.FIX_CONVERSION_TRACKING_OPPORTUNITY]: '66',\r\n [RECOMMENDATION_TYPES.FIX_CONVERSION_GOAL_SETTINGS]: '90',\r\n [RECOMMENDATION_TYPES.MULTIMEDIA_ADS]: '242',\r\n [RECOMMENDATION_TYPES.CREATE_CONVERSION_GOAL]: '91',\r\n [RECOMMENDATION_TYPES.FACEBOOK_IMPORT]: '247',\r\n [RECOMMENDATION_TYPES.IMAGE_EXTENSION]: '223',\r\n [RECOMMENDATION_TYPES.REPAIR_MISSING_KEYWORD_PARAMS]: '251',\r\n [RECOMMENDATION_TYPES.FIX_NO_IMPRESSION_BID]: '21',\r\n [RECOMMENDATION_TYPES.IMPROVE_RESPONSIVE_SEARCH_ADS]: '73',\r\n [RECOMMENDATION_TYPES.REPAIR_UNTARGETED_OFFER]: '68',\r\n [RECOMMENDATION_TYPES.IMPROVE_MULTIMEDIA_ADS]: '74',\r\n [RECOMMENDATION_TYPES.SSC_2_PMAX_MIGRATION]: '44',\r\n [RECOMMENDATION_TYPES.PMAX_IMPORT]: '268',\r\n [RECOMMENDATION_TYPES.DSA_2_PMAX_MIGRATION]: '270',\r\n [RECOMMENDATION_TYPES.SYNDICATION_GAP]: '221',\r\n};\r\n\r\nexport const ESTIMATE_STRINGS = {\r\n [ESTIMATE_TYPES.CLICKS]: 'Summary_Card_Estimate_Clicks',\r\n [ESTIMATE_TYPES.COST]: 'Summary_Card_Estimate_Cost',\r\n [ESTIMATE_TYPES.IMPRESSION_SHARE]: 'Summary_Card_Estimate_Impression_Share',\r\n [ESTIMATE_TYPES.IMPRESSIONS]: 'Summary_Card_Estimate_Impressions',\r\n [ESTIMATE_TYPES.QUERY_VOLUME]: 'Summary_Card_Estimate_Query_Volume',\r\n [ESTIMATE_TYPES.CTR]: 'Summary_Card_Estimate_CTR',\r\n [ESTIMATE_TYPES.CONVERSIONS]: 'Summary_Card_Estimate_Conversions',\r\n [ESTIMATE_TYPES.WEEKLY_SEARCHES]: 'Summary_Card_Estimate_Weekly_Searches',\r\n [ESTIMATE_TYPES.REJECTED_ADS]: 'Summary_Card_Estimate_Rejected_Ads',\r\n [ESTIMATE_TYPES.REJECTED_KEYWORDS]: 'Summary_Card_Estimate_Rejected_Keywords',\r\n [ESTIMATE_TYPES.MISSING_CONVERSIONS]: 'Summary_Card_Estimate_Missing_Conversions',\r\n [ESTIMATE_TYPES.TARGETED_PRODUCTS]: 'Summary_Card_Estimate_Targeted_Products',\r\n};\r\n\r\nexport const SUMMARY_LEVELS = levelAtConstant;\r\n\r\nexport const VISUAL_TYPES = {\r\n SEARCH_TERMS_CHART: 'Search_Terms_Chart',\r\n COLUMN_CHART: 'Column_Chart',\r\n LINE_CHART: 'Line_Chart',\r\n LINE_WEEKLY_CHART: 'Line_Weekly_Chart',\r\n LINE_COLUMN_CHART: 'Line_Column_Chart',\r\n TABLE: 'Table',\r\n MAP: 'Map',\r\n ADS_PREVIEW: 'Ads_Preview',\r\n};\r\n\r\nexport const VISUAL_TABLE_ENABLED_SCOPES = {\r\n ACCOUNT: [\r\n levelAtConstant.CUSTOMER,\r\n levelAtConstant.ACCOUNT,\r\n ],\r\n CAMPAIGN: [\r\n levelAtConstant.CUSTOMER,\r\n levelAtConstant.ACCOUNT,\r\n levelAtConstant.CAMPAIGN,\r\n ],\r\n ADGROUP: [\r\n levelAtConstant.CUSTOMER,\r\n levelAtConstant.ACCOUNT,\r\n levelAtConstant.CAMPAIGN,\r\n levelAtConstant.ADGROUP,\r\n ],\r\n};\r\n\r\nexport const CHANNEL_TYPES = {\r\n COMPETITION: 'competitionpage',\r\n RECOMMENDATION: 'recommendationpage',\r\n INCONTEXT: 'incontextrecommendation',\r\n INCONTEXTCARD: 'incontextcard',\r\n OVERVIEW: 'overviewpage',\r\n MCCRECOMMENDATION: 'mccrecommendationpage',\r\n MCCOVERVIEW: 'mccoverviewpage',\r\n AUTO_APPLY_REC_SETTING: 'autoApplyRecdSettingUpdate',\r\n CAMPAIGN_SUMMARY_BAR: 'campaignsummarybar',\r\n SEARCHINSIGHT: 'searchinsight',\r\n};\r\n\r\nconst RECOMMENDATIONS = [\r\n RECOMMENDATION_TYPES.BROAD_MATCH_KEYWORD,\r\n RECOMMENDATION_TYPES.BUDGET_OPPORTUNITY,\r\n RECOMMENDATION_TYPES.ADJUST_SHARED_BUDGET_OPPORTUNITY,\r\n RECOMMENDATION_TYPES.CALLOUT,\r\n RECOMMENDATION_TYPES.GOOGLE_IMPORT,\r\n RECOMMENDATION_TYPES.GOOGLE_IMPORT_SCHEDULED,\r\n RECOMMENDATION_TYPES.NEW_KEYWORD_OPPORTUNITY,\r\n RECOMMENDATION_TYPES.TRENDING_QUERY,\r\n RECOMMENDATION_TYPES.REPAIR_ADS,\r\n RECOMMENDATION_TYPES.REPAIR_KEYWORD,\r\n RECOMMENDATION_TYPES.SITE_LINK,\r\n RECOMMENDATION_TYPES.REMOVE_CONFLICTING_NEGATIVE_KEYWORD,\r\n RECOMMENDATION_TYPES.RESPONSIVE_SEARCH_ADS,\r\n RECOMMENDATION_TYPES.DYNAMIC_SEARCH_ADS,\r\n RECOMMENDATION_TYPES.REALLOCATE_BUDGET,\r\n RECOMMENDATION_TYPES.FIX_AD_DESTINATION,\r\n RECOMMENDATION_TYPES.FIX_AD_TEXT,\r\n RECOMMENDATION_TYPES.FIX_CONVERSION_TRACKING_OPPORTUNITY,\r\n RECOMMENDATION_TYPES.SETUP_CONVERSION_TRACKING_OPPORTUNITY,\r\n RECOMMENDATION_TYPES.FIX_CONVERSION_GOAL_SETTINGS,\r\n RECOMMENDATION_TYPES.CREATE_CONVERSION_GOAL,\r\n RECOMMENDATION_TYPES.FACEBOOK_IMPORT,\r\n RECOMMENDATION_TYPES.MULTIMEDIA_ADS,\r\n RECOMMENDATION_TYPES.IMAGE_EXTENSION,\r\n RECOMMENDATION_TYPES.REPAIR_MISSING_KEYWORD_PARAMS,\r\n RECOMMENDATION_TYPES.FIX_NO_IMPRESSION_BID,\r\n RECOMMENDATION_TYPES.IMPROVE_RESPONSIVE_SEARCH_ADS,\r\n RECOMMENDATION_TYPES.REPAIR_UNTARGETED_OFFER,\r\n RECOMMENDATION_TYPES.IMPROVE_MULTIMEDIA_ADS,\r\n RECOMMENDATION_TYPES.SSC_2_PMAX_MIGRATION,\r\n RECOMMENDATION_TYPES.PMAX_IMPORT,\r\n RECOMMENDATION_TYPES.DSA_2_PMAX_MIGRATION,\r\n RECOMMENDATION_TYPES.SYNDICATION_GAP,\r\n];\r\n\r\nexport const CHANNEL_ALL_RECOMMENDATIONS = {\r\n [CHANNEL_TYPES.COMPETITION]: [\r\n RECOMMENDATION_TYPES.BUDGET,\r\n RECOMMENDATION_TYPES.COMPETITIVE_BID,\r\n RECOMMENDATION_TYPES.DEVICE_BID_BOOST,\r\n RECOMMENDATION_TYPES.LOCATION_BID_BOOST,\r\n ],\r\n [CHANNEL_TYPES.RECOMMENDATION]: RECOMMENDATIONS,\r\n [CHANNEL_TYPES.MCCRECOMMENDATION]: RECOMMENDATIONS,\r\n [CHANNEL_TYPES.MCCOVERVIEW]: RECOMMENDATIONS,\r\n [CHANNEL_TYPES.OVERVIEW]: RECOMMENDATIONS,\r\n [CHANNEL_TYPES.CAMPAIGN_SUMMARY_BAR]: RECOMMENDATIONS,\r\n [CHANNEL_TYPES.SEARCHINSIGHT]: RECOMMENDATIONS,\r\n [CHANNEL_TYPES.INCONTEXT]: [\r\n RECOMMENDATION_TYPES.NEW_KEYWORD_OPPORTUNITY,\r\n ],\r\n [CHANNEL_TYPES.INCONTEXTCARD]: [\r\n RECOMMENDATION_TYPES.NEW_KEYWORD_OPPORTUNITY,\r\n RECOMMENDATION_TYPES.RESPONSIVE_SEARCH_ADS,\r\n RECOMMENDATION_TYPES.SETUP_CONVERSION_TRACKING_OPPORTUNITY,\r\n RECOMMENDATION_TYPES.FIX_CONVERSION_GOAL_SETTINGS,\r\n RECOMMENDATION_TYPES.FIX_CONVERSION_TRACKING_OPPORTUNITY,\r\n RECOMMENDATION_TYPES.CREATE_CONVERSION_GOAL,\r\n RECOMMENDATION_TYPES.BUDGET_OPPORTUNITY,\r\n RECOMMENDATION_TYPES.ADJUST_SHARED_BUDGET_OPPORTUNITY,\r\n RECOMMENDATION_TYPES.MULTIMEDIA_ADS,\r\n RECOMMENDATION_TYPES.REPAIR_MISSING_KEYWORD_PARAMS,\r\n RECOMMENDATION_TYPES.FIX_NO_IMPRESSION_BID,\r\n RECOMMENDATION_TYPES.IMPROVE_RESPONSIVE_SEARCH_ADS,\r\n RECOMMENDATION_TYPES.REPAIR_UNTARGETED_OFFER,\r\n RECOMMENDATION_TYPES.IMPROVE_MULTIMEDIA_ADS,\r\n RECOMMENDATION_TYPES.SSC_2_PMAX_MIGRATION,\r\n RECOMMENDATION_TYPES.DSA_2_PMAX_MIGRATION,\r\n RECOMMENDATION_TYPES.SYNDICATION_GAP,\r\n ],\r\n};\r\n\r\nexport const NOT_SUPPORT_DOWNLOAD_TYPES = [\r\n RECOMMENDATION_TYPES.GOOGLE_IMPORT,\r\n RECOMMENDATION_TYPES.GOOGLE_IMPORT_SCHEDULED,\r\n RECOMMENDATION_TYPES.FIX_CONVERSION_TRACKING_OPPORTUNITY,\r\n RECOMMENDATION_TYPES.SETUP_CONVERSION_TRACKING_OPPORTUNITY,\r\n RECOMMENDATION_TYPES.FIX_CONVERSION_GOAL_SETTINGS,\r\n RECOMMENDATION_TYPES.CREATE_CONVERSION_GOAL,\r\n RECOMMENDATION_TYPES.FACEBOOK_IMPORT,\r\n RECOMMENDATION_TYPES.MULTIMEDIA_ADS,\r\n RECOMMENDATION_TYPES.IMAGE_EXTENSION,\r\n RECOMMENDATION_TYPES.REPAIR_MISSING_KEYWORD_PARAMS,\r\n RECOMMENDATION_TYPES.IMPROVE_MULTIMEDIA_ADS,\r\n RECOMMENDATION_TYPES.SSC_2_PMAX_MIGRATION,\r\n RECOMMENDATION_TYPES.PMAX_IMPORT,\r\n RECOMMENDATION_TYPES.DSA_2_PMAX_MIGRATION,\r\n RECOMMENDATION_TYPES.SYNDICATION_GAP,\r\n];\r\n\r\nexport const NOT_SUPPORT_DISMISS_TYPES = [\r\n RECOMMENDATION_TYPES.SSC_2_PMAX_MIGRATION,\r\n];\r\n\r\nexport const APPLY_ODATA_TYPES = {\r\n APPLY_BULK_OPPORTUNITY_REQUEST: '#Microsoft.Advertiser.AdInsight.Opportunity.Core.Adoption.Interface.Entity.ApplyBulkOpportunitiesRequest',\r\n APPLY_ALL_OPPORTUNITY_REQUEST: '#Microsoft.Advertiser.AdInsight.Opportunity.Core.Adoption.Interface.Entity.ApplyAllOpportunitiesRequest',\r\n APPLY_BULK_RECOMMENDATION_REQUEST: '#Microsoft.Advertiser.AdInsight.Opportunity.Core.Adoption.Interface.Entity.ApplyBulkAccountRecommendationRequest',\r\n APPLY_ALL_RECOMMENDATION_REQUEST: '#Microsoft.Advertiser.AdInsight.Opportunity.Core.Adoption.Interface.Entity.ApplyAllAccountRecommendationRequest',\r\n APPLY_BULK_RECOMMENDATION_REQUEST_MCC: '#Microsoft.Advertiser.AdInsight.Opportunity.Core.Adoption.Interface.Entity.ApplyBulkMccRecommendationRequest',\r\n APPLY_ALL_RECOMMENDATION_REQUEST_MCC: '#Microsoft.Advertiser.AdInsight.Opportunity.Core.Adoption.Interface.Entity.ApplyAllMccRecommendationRequest',\r\n};\r\n\r\nexport const APPLY_ODATA_TYPES_MAP = {\r\n ALL: {\r\n MCC: APPLY_ODATA_TYPES.APPLY_ALL_RECOMMENDATION_REQUEST_MCC,\r\n SINGLE_ACCOUNT: APPLY_ODATA_TYPES.APPLY_ALL_OPPORTUNITY_REQUEST,\r\n SINGLE_ACCOUNT_ASYNC: APPLY_ODATA_TYPES.APPLY_ALL_RECOMMENDATION_REQUEST,\r\n OPTIMIZATION_SCORE: APPLY_ODATA_TYPES.APPLY_ALL_RECOMMENDATION_REQUEST,\r\n },\r\n BULK: {\r\n MCC: APPLY_ODATA_TYPES.APPLY_BULK_RECOMMENDATION_REQUEST_MCC,\r\n SINGLE_ACCOUNT: APPLY_ODATA_TYPES.APPLY_BULK_OPPORTUNITY_REQUEST,\r\n SINGLE_ACCOUNT_ASYNC: APPLY_ODATA_TYPES.APPLY_BULK_RECOMMENDATION_REQUEST,\r\n OPTIMIZATION_SCORE: APPLY_ODATA_TYPES.APPLY_BULK_RECOMMENDATION_REQUEST,\r\n },\r\n};\r\n\r\nexport const APPLY_USERINPUT_TYPES = {\r\n [RECOMMENDATION_TYPES.BUDGET]: '#Microsoft.Advertiser.AdInsight.Opportunity.Core.Adoption.Interface.Entity.ApplyBudgetOpportunityUserInputV2',\r\n [RECOMMENDATION_TYPES.COMPETITIVE_BID]: '#Microsoft.Advertiser.AdInsight.Opportunity.Core.Adoption.Interface.Entity.ApplyBidOpportunityUserInput',\r\n [RECOMMENDATION_TYPES.DEVICE_BID_BOOST]: '#Microsoft.Advertiser.AdInsight.Opportunity.Core.Adoption.Interface.Entity.ApplyCompetitiveBidBoostOpportunityUserInput',\r\n [RECOMMENDATION_TYPES.LOCATION_BID_BOOST]: '#Microsoft.Advertiser.AdInsight.Opportunity.Core.Adoption.Interface.Entity.ApplyCompetitiveBidBoostOpportunityUserInput',\r\n [RECOMMENDATION_TYPES.NEW_KEYWORD]: '#Microsoft.Advertiser.AdInsight.Opportunity.Core.Adoption.Interface.Entity.ApplyKeywordOpportunityUserInput', // deprecated in Oct 2023\r\n [RECOMMENDATION_TYPES.REPAIR_ADS]: '#Microsoft.Advertiser.AdInsight.Opportunity.Core.Adoption.Interface.Entity.ApplyRepairAdsOpportunityUserInput',\r\n [RECOMMENDATION_TYPES.REPAIR_KEYWORD]: '#Microsoft.Advertiser.AdInsight.Opportunity.Core.Adoption.Interface.Entity.ApplyRepairKeywordsOpportunityUserInput',\r\n [RECOMMENDATION_TYPES.BROAD_MATCH_KEYWORD]: '#Microsoft.Advertiser.AdInsight.Opportunity.Core.Adoption.Interface.Entity.ApplyBroadMatchAdoptionOpportunityUserInput',\r\n [RECOMMENDATION_TYPES.NEW_KEYWORD_OPPORTUNITY]: '#Microsoft.Advertiser.AdInsight.Opportunity.Core.Adoption.Interface.Entity.ApplyKeywordOpportunityUserInput',\r\n [RECOMMENDATION_TYPES.TRENDING_QUERY]: '#Microsoft.Advertiser.AdInsight.Opportunity.Core.Adoption.Interface.Entity.ApplyKeywordOpportunityUserInput',\r\n [RECOMMENDATION_TYPES.REMOVE_CONFLICTING_NEGATIVE_KEYWORD]: '#Microsoft.Advertiser.AdInsight.Opportunity.Core.Adoption.Interface.Entity.ApplyUserInput',\r\n [RECOMMENDATION_TYPES.RESPONSIVE_SEARCH_ADS]: '#Microsoft.Advertiser.AdInsight.Opportunity.Core.Adoption.Interface.Entity.ApplyResponsiveSearchAdsOpportunityUserInput',\r\n [RECOMMENDATION_TYPES.DYNAMIC_SEARCH_ADS]: '#Microsoft.Advertiser.AdInsight.Opportunity.Core.Adoption.Interface.Entity.ApplyDSAOpportunityUserInput',\r\n [RECOMMENDATION_TYPES.REALLOCATE_BUDGET]: '#Microsoft.Advertiser.AdInsight.Opportunity.Core.Adoption.Interface.Entity.ApplyReallocateBudgetOpportunityUserInput',\r\n [RECOMMENDATION_TYPES.FIX_AD_DESTINATION]: '#Microsoft.Advertiser.AdInsight.Opportunity.Core.Adoption.Interface.Entity.ApplyFixAdDestinationOpportunityUserInput',\r\n [RECOMMENDATION_TYPES.FIX_CONVERSION_GOAL_SETTINGS]: '#Microsoft.Advertiser.AdInsight.Opportunity.Core.Adoption.Interface.Entity.ApplyFixConversionGoalSettingsOpportunityUserInput',\r\n [RECOMMENDATION_TYPES.CREATE_CONVERSION_GOAL]: '#Microsoft.Advertiser.AdInsight.Opportunity.Core.Adoption.Interface.Entity.ApplyCreateConversionGoalOpportunityUserInput',\r\n [RECOMMENDATION_TYPES.MULTIMEDIA_ADS]: '#Microsoft.Advertiser.AdInsight.Opportunity.Core.Adoption.Interface.Entity.ApplyMultiMediaAdsOpportunityUserInput',\r\n [RECOMMENDATION_TYPES.IMAGE_EXTENSION]: '#Microsoft.Advertiser.AdInsight.Opportunity.Core.Adoption.Interface.Entity.ApplyImageExtensionOpportunityUserInput',\r\n [RECOMMENDATION_TYPES.REPAIR_MISSING_KEYWORD_PARAMS]: '#Microsoft.Advertiser.AdInsight.Opportunity.Core.Adoption.Interface.Entity.ApplyRepairMissingKeywordParamsOpportunityUserInput',\r\n [RECOMMENDATION_TYPES.FIX_NO_IMPRESSION_BID]: '#Microsoft.Advertiser.AdInsight.Opportunity.Core.Adoption.Interface.Entity.ApplyBidOpportunityUserInput',\r\n [RECOMMENDATION_TYPES.IMPROVE_RESPONSIVE_SEARCH_ADS]: '#Microsoft.Advertiser.AdInsight.Opportunity.Core.Adoption.Interface.Entity.ApplyImproveResponsiveSearchAdsOpportunityUserInput',\r\n [RECOMMENDATION_TYPES.REPAIR_UNTARGETED_OFFER]: '#Microsoft.Advertiser.AdInsight.Opportunity.Core.Adoption.Interface.Entity.ApplyRepairUntargetedOfferOpportunityUserInput',\r\n [RECOMMENDATION_TYPES.IMPROVE_MULTIMEDIA_ADS]: '#Microsoft.Advertiser.AdInsight.Opportunity.Core.Adoption.Interface.Entity.ApplyImproveMultiMediaAdsOpportunityUserInput',\r\n};\r\nAPPLY_USERINPUT_TYPES[[RECOMMENDATION_TYPES.BUDGET_OPPORTUNITY]]\r\n = APPLY_USERINPUT_TYPES[[RECOMMENDATION_TYPES.BUDGET]];\r\nAPPLY_USERINPUT_TYPES[[RECOMMENDATION_TYPES.ADJUST_SHARED_BUDGET_OPPORTUNITY]]\r\n = APPLY_USERINPUT_TYPES[[RECOMMENDATION_TYPES.BUDGET_OPPORTUNITY]];\r\n\r\nexport const APPLY_ACTION_TYPES = {\r\n ACCEPT: 'Accept',\r\n DISMISS: 'Dismiss',\r\n REJECT: 'Reject',\r\n REDISMISS: 'Redismiss',\r\n UNDISMISS: 'Undismiss',\r\n};\r\n\r\nexport const SETTING_OPTIONS = {\r\n UPDATE_FROM_CAMPAIGN: 'UpdateRecommendationFromCampaignDb',\r\n REJECTION_DATE_LAST_NINETY_DAYS: 'RejectionDateFilterLast90Days',\r\n NONE: 'None',\r\n};\r\n\r\nexport const COMPETITION_RECOMMENDATION_FEATURE_NAME = 'CompetitionRecommendation';\r\n\r\nexport const COMPETITION_RECOMMENDATION_PREFERENCES = 'WebApp.CampaignUI.CompetitionRecommendationPreferences';\r\nexport const RECOMMENDATION_PREFERENCES = 'WebApp.CampaignUI.RecommendationPreferences';\r\n\r\nexport const COMPETITION_RECOMMENDATION_PAGE_SIZES = [3, 10, 20, 50];\r\nexport const RECOMMENDATION_PAGE_SIZES = [20, 50, 100];\r\nexport const RECOMMENDATION_IMAGE_EXTENSION_PAGE_SIZES = [5];\r\nexport const RECOMMENDATION_IMAGE_EXTENSION_PAGE_SIZES_TEN = [10];\r\nexport const RECOMMENDATION_IMAGE_EXTENSION_PAGE_SIZES_TWENTY = [20];\r\n\r\nexport const COMPETITION_DEFAULT_PAGE_SIZE = COMPETITION_RECOMMENDATION_PAGE_SIZES[0];\r\nexport const RECOMMENDATION_DEFAULT_PAGE_SIZE = RECOMMENDATION_PAGE_SIZES[0];\r\n\r\nexport const APPLY_SETTINGS = {\r\n DEFAULT: '#Microsoft.Advertiser.AdInsight.Opportunity.Core.Adoption.Interface.Entity.ApplySettings',\r\n};\r\n\r\nexport const MAX_NUMBER_OF_RECOMMENDATION_SAMPLES = 4;\r\n\r\nexport const MAX_NUMBER_OF_RECOMMENDATION_SAMPLES_WITH_OS = 2;\r\n\r\nexport const MATCH_TYPE_IDS = {\r\n EXACT: 1,\r\n PHRASE: 2,\r\n BROAD: 3,\r\n};\r\n\r\nexport const MATCH_TYPE = {\r\n EXACT: 'Exact',\r\n PHRASE: 'Phrase',\r\n BROAD: 'Broad',\r\n};\r\n\r\nexport const PERIOD_TYPE = {\r\n WORKDAY: 1,\r\n WEEKEND: 2,\r\n};\r\n\r\nexport const MAP_HEIGHT = '320px';\r\n\r\nexport const ADINSIGHT_LOG_API_NAME = {\r\n COMPETITION: 'competitionpage',\r\n RECOMMENDATION: 'recommendationpage',\r\n INCONTEXTCARD: 'incontextcard',\r\n SEARCHINSIGHT: 'searchinsight',\r\n};\r\n\r\nexport const ADINSIGHT_LOG_ACTION_TYPE = {\r\n VIEW: 'View',\r\n VIEWEDIT: 'ViewEdit',\r\n CUSTOM: 'Custom',\r\n CLICK_CATEGORY: 'Click',\r\n CLICK_RECS: 'ClickRecs',\r\n CLICK_APPLYALL: 'ClickApplyAll',\r\n IMPRESSION: 'Impression',\r\n FEEDBACK: 'Feedback',\r\n DOWNLOAD: 'Export',\r\n HIDE: 'Hide',\r\n VIEW_EXTERNAL: 'ViewExternal',\r\n CLICK_DISMISSALL: 'ClickDismissAll',\r\n REDIRECT: 'Redirect',\r\n};\r\n\r\nexport const SUMMARY_APPLY_ALL_ENABLED = {\r\n [RECOMMENDATION_TYPES.BUDGET]: true,\r\n [RECOMMENDATION_TYPES.COMPETITIVE_BID]: true,\r\n [RECOMMENDATION_TYPES.DEVICE_BID_BOOST]: true,\r\n [RECOMMENDATION_TYPES.LOCATION_BID_BOOST]: true,\r\n [RECOMMENDATION_TYPES.NEW_LOCATION]: false,\r\n [RECOMMENDATION_TYPES.SYNDICATION]: false,\r\n [RECOMMENDATION_TYPES.BROAD_MATCH_KEYWORD]: true,\r\n [RECOMMENDATION_TYPES.BUDGET_OPPORTUNITY]: true,\r\n [RECOMMENDATION_TYPES.ADJUST_SHARED_BUDGET_OPPORTUNITY]: true,\r\n [RECOMMENDATION_TYPES.CALLOUT]: false,\r\n [RECOMMENDATION_TYPES.GOOGLE_IMPORT]: false,\r\n [RECOMMENDATION_TYPES.GOOGLE_IMPORT_SCHEDULED]: false,\r\n [RECOMMENDATION_TYPES.NEW_KEYWORD_OPPORTUNITY]: true,\r\n [RECOMMENDATION_TYPES.TRENDING_QUERY]: true,\r\n [RECOMMENDATION_TYPES.REPAIR_ADS]: false,\r\n [RECOMMENDATION_TYPES.REPAIR_KEYWORD]: false,\r\n [RECOMMENDATION_TYPES.SITE_LINK]: false,\r\n [RECOMMENDATION_TYPES.REMOVE_CONFLICTING_NEGATIVE_KEYWORD]: true,\r\n [RECOMMENDATION_TYPES.RESPONSIVE_SEARCH_ADS]: true,\r\n [RECOMMENDATION_TYPES.REALLOCATE_BUDGET]: true,\r\n [RECOMMENDATION_TYPES.FIX_AD_DESTINATION]: false,\r\n [RECOMMENDATION_TYPES.FIX_CONVERSION_GOAL_SETTINGS]: false,\r\n [RECOMMENDATION_TYPES.CREATE_CONVERSION_GOAL]: false,\r\n [RECOMMENDATION_TYPES.FACEBOOK_IMPORT]: false,\r\n [RECOMMENDATION_TYPES.MULTIMEDIA_ADS]: true,\r\n [RECOMMENDATION_TYPES.IMAGE_EXTENSION]: false,\r\n [RECOMMENDATION_TYPES.REPAIR_MISSING_KEYWORD_PARAMS]: true,\r\n [RECOMMENDATION_TYPES.FIX_NO_IMPRESSION_BID]: true,\r\n [RECOMMENDATION_TYPES.IMPROVE_RESPONSIVE_SEARCH_ADS]: true,\r\n [RECOMMENDATION_TYPES.REPAIR_UNTARGETED_OFFER]: true,\r\n [RECOMMENDATION_TYPES.IMPROVE_MULTIMEDIA_ADS]: true,\r\n [RECOMMENDATION_TYPES.SSC_2_PMAX_MIGRATION]: true,\r\n [RECOMMENDATION_TYPES.SYNDICATION_GAP]: true,\r\n};\r\n\r\n// import center's recommendations, only import types\r\nexport const IMPORTCENTER_RECOMMENDATION_TYPES = [\r\n RECOMMENDATION_TYPES.GOOGLE_IMPORT,\r\n RECOMMENDATION_TYPES.GOOGLE_IMPORT_SCHEDULED,\r\n RECOMMENDATION_TYPES.FACEBOOK_IMPORT,\r\n];\r\n\r\nexport const RECOMMENDATION_CATEGORIES = {\r\n ALL: 'All',\r\n REPAIRS: 'Repairs',\r\n BIDS: 'Bids',\r\n KEYWORDS: 'Keywords',\r\n ADS: 'Ads',\r\n DISMISSED: 'Dismissed',\r\n};\r\n\r\nexport const RECOMMENDATION_CATEGORIES_IDS = {\r\n [RECOMMENDATION_CATEGORIES.ALL]: 'All Recommendations',\r\n [RECOMMENDATION_CATEGORIES.REPAIRS]: 'Repairs',\r\n [RECOMMENDATION_CATEGORIES.BIDS]: 'Bids & Budgets',\r\n [RECOMMENDATION_CATEGORIES.KEYWORDS]: 'Keywords & Targeting',\r\n [RECOMMENDATION_CATEGORIES.ADS]: 'Ads & Extensions',\r\n [RECOMMENDATION_CATEGORIES.DISMISSED]: 'Dismissed',\r\n};\r\n\r\nexport const RECOMMENDATION_CATEGORIES_WORDING = {\r\n [RECOMMENDATION_CATEGORIES_IDS[RECOMMENDATION_CATEGORIES.ALL]]: 'All Recommendations',\r\n [RECOMMENDATION_CATEGORIES_IDS[RECOMMENDATION_CATEGORIES.REPAIRS]]: 'Repairs',\r\n [RECOMMENDATION_CATEGORIES_IDS[RECOMMENDATION_CATEGORIES.BIDS]]: 'Bidding & budgets',\r\n [RECOMMENDATION_CATEGORIES_IDS[RECOMMENDATION_CATEGORIES.KEYWORDS]]: 'Keywords & targeting',\r\n [RECOMMENDATION_CATEGORIES_IDS[RECOMMENDATION_CATEGORIES.ADS]]: 'Ads & Extensions',\r\n [RECOMMENDATION_CATEGORIES_IDS[RECOMMENDATION_CATEGORIES.DISMISSED]]: 'Dismissed',\r\n};\r\n\r\nexport const RECOMMENDATION_CATEGORIES_STRINGS = {\r\n [RECOMMENDATION_CATEGORIES.ALL]: 'Recommendations_Category_All',\r\n [RECOMMENDATION_CATEGORIES.REPAIRS]: 'Recommendations_Category_Repairs',\r\n [RECOMMENDATION_CATEGORIES.BIDS]: 'Recommendations_Category_Bids',\r\n [RECOMMENDATION_CATEGORIES.KEYWORDS]: 'Recommendations_Category_Target',\r\n [RECOMMENDATION_CATEGORIES.ADS]: 'Recommendations_Category_Ads',\r\n};\r\n\r\nexport const SEASONAL_TRACKID = 8;\r\n\r\nexport const NOT_AVAILABLE_DEFAULT_STR = '-';\r\n\r\nexport const CONVERSION_STATUS_TYPE = {\r\n NO_UET: 0,\r\n NO_DATA: 1,\r\n HAS_DATA: 2,\r\n};\r\n\r\nexport const RECOMMENDATION_DISMISS_FEEDBACK_TYPE = {\r\n [RECOMMENDATION_TYPES.NEW_KEYWORD_OPPORTUNITY]: true,\r\n [RECOMMENDATION_TYPES.TRENDING_QUERY]: true,\r\n [RECOMMENDATION_TYPES.BROAD_MATCH_KEYWORD]: true,\r\n [RECOMMENDATION_TYPES.REMOVE_CONFLICTING_NEGATIVE_KEYWORD]: true,\r\n [RECOMMENDATION_TYPES.REPAIR_ADS]: true,\r\n [RECOMMENDATION_TYPES.REPAIR_KEYWORD]: true,\r\n [RECOMMENDATION_TYPES.RESPONSIVE_SEARCH_ADS]: true,\r\n [RECOMMENDATION_TYPES.FIX_AD_TEXT]: true,\r\n [RECOMMENDATION_TYPES.FIX_AD_DESTINATION]: true,\r\n [RECOMMENDATION_TYPES.SETUP_CONVERSION_TRACKING_OPPORTUNITY]: true,\r\n [RECOMMENDATION_TYPES.FIX_CONVERSION_GOAL_SETTINGS]: true,\r\n [RECOMMENDATION_TYPES.MULTIMEDIA_ADS]: true,\r\n [RECOMMENDATION_TYPES.IMAGE_EXTENSION]: true,\r\n [RECOMMENDATION_TYPES.CREATE_CONVERSION_GOAL]: true,\r\n [RECOMMENDATION_TYPES.REPAIR_MISSING_KEYWORD_PARAMS]: true,\r\n [RECOMMENDATION_TYPES.FIX_NO_IMPRESSION_BID]: true,\r\n [RECOMMENDATION_TYPES.IMPROVE_RESPONSIVE_SEARCH_ADS]: true,\r\n [RECOMMENDATION_TYPES.REPAIR_UNTARGETED_OFFER]: true,\r\n [RECOMMENDATION_TYPES.IMPROVE_MULTIMEDIA_ADS]: true,\r\n [RECOMMENDATION_TYPES.DSA_2_PMAX_MIGRATION]: true,\r\n [RECOMMENDATION_TYPES.SYNDICATION_GAP]: true,\r\n};\r\n\r\nexport const RECOMMENDATION_NOTIFICATION_ERRORCODE = {\r\n Recommendation_Error_53505: {\r\n hasLearnMore: true,\r\n helpId: 'help:ext53097',\r\n }, // Recommendation_Error_MaxKeywordsLimitExceededForAdGroup\r\n Recommendation_Error_53504: {\r\n hasLearnMore: true,\r\n helpId: 'help:ext51042',\r\n }, // Recommendation_Error_MaxKeywordsLimitExceededForAccount\r\n Recommendation_Error_53521: {\r\n hasLearnMore: true,\r\n helpId: 'help:ext53092',\r\n }, // Recommendation_Error_KeywordBroadBidAmountsLessThanFloorPrice\r\n Recommendation_Error_53517: {\r\n hasLearnMore: true,\r\n helpId: 'help:ext53092',\r\n }, // Recommendation_Error_KeywordBroadBidAmountsGreaterThanCeilingPrice\r\n Recommendation_Error_53508: {\r\n hasLearnMore: false,\r\n helpId: null,\r\n }, // Recommendation_Error_Keyword_KeywordNotFound\r\n Recommendation_Error_53507: {\r\n hasLearnMore: false,\r\n helpId: null,\r\n }, // Recommendation_Error_Keyword_KeywordNotFound\r\n Recommendation_Error_52505: {\r\n hasLearnMore: true,\r\n helpId: 'help:ext53094',\r\n }, // Recommendation_Error_Keyword_AdGroupInExpiredStateCannotBeUpdated\r\n Recommendation_Error_52511: {\r\n hasLearnMore: true,\r\n helpId: 'help:ext53094',\r\n }, // Recommendation_Error_Keyword_AdGroupInExpiredStateCannotBeUpdated\r\n Recommendation_Error_52512: {\r\n hasLearnMore: true,\r\n helpId: 'help:ext53094',\r\n }, // Recommendation_Error_AdGroupIdInvalid\r\n Recommendation_Error_51501: {\r\n hasLearnMore: true,\r\n helpId: 'help:ext60029',\r\n }, // Recommendation_Error_CampaignIdInvalid\r\n Recommendation_Error_93001: {\r\n hasLearnMore: true,\r\n helpId: 'help:ext60029',\r\n }, // Recommendation_Error_NegativeKeywordDeleted\r\n Recommendation_Error_93114: {\r\n hasLearnMore: true,\r\n helpId: 'help:ext60029',\r\n }, // Recommendation_Error_SharedListDeleted\r\n Recommendation_Error_7: {\r\n hasLearnMore: true,\r\n helpId: 'help:ext60029',\r\n }, // Recommendation_Error_Generic_OpportunityExpired\r\n Recommendation_Error_1010: {\r\n hasLearnMore: true,\r\n helpId: 'help:ext53092',\r\n }, // Recommendation_Error_Bid_InvalidPeroidToUpdate\r\n Recommendation_Error_21000: {\r\n hasLearnMore: false,\r\n helpId: null,\r\n }, // Recommendation_Error_Generic_SystemFailed\r\n Recommendation_Error_1001519: {\r\n hasLearnMore: true,\r\n helpId: 'help:ext53097',\r\n }, // Recommendation_Error_MaxKeywordsLimitExceededForAdGroup\r\n Recommendation_Error_1001518: {\r\n hasLearnMore: true,\r\n helpId: 'help:ext51042',\r\n }, // Recommendation_Error_MaxKeywordsLimitExceededForAccount\r\n Recommendation_Error_1001515: {\r\n hasLearnMore: true,\r\n helpId: 'help:ext53092',\r\n }, // Recommendation_Error_KeywordBroadBidAmountsLessThanFloorPrice\r\n Recommendation_Error_1001516: {\r\n hasLearnMore: true,\r\n helpId: 'help:ext53092',\r\n }, // Recommendation_Error_KeywordBroadBidAmountsGreaterThanCeilingPrice\r\n Recommendation_Error_1001531: {\r\n hasLearnMore: false,\r\n helpId: null,\r\n }, // Recommendation_Error_Keyword_KeywordNotFound\r\n Recommendation_Error_1001215: {\r\n hasLearnMore: true,\r\n helpId: 'help:ext53094',\r\n }, // Recommendation_Error_Keyword_AdGroupInExpiredStateCannotBeUpdated\r\n Recommendation_Error_1001231: {\r\n hasLearnMore: true,\r\n helpId: 'help:ext53094',\r\n }, // Recommendation_Error_Keyword_AdGroupInExpiredStateCannotBeUpdated\r\n Recommendation_Error_1001201: {\r\n hasLearnMore: true,\r\n helpId: 'help:ext53094',\r\n }, // Recommendation_Error_AdGroupIdInvalid\r\n Recommendation_Error_1001100: {\r\n hasLearnMore: true,\r\n helpId: 'help:ext60029',\r\n }, // Recommendation_Error_CampaignIdInvalid\r\n Recommendation_Error_1004329: {\r\n hasLearnMore: true,\r\n helpId: 'help:ext60029',\r\n }, // Recommendation_Error_NegativeKeywordDeleted\r\n Recommendation_Error_1004314: {\r\n hasLearnMore: true,\r\n helpId: 'help:ext60029',\r\n }, // Recommendation_Error_SharedListDeleted\r\n Recommendation_Error_93214: {\r\n hasLearnMore: false,\r\n helpId: null,\r\n }, // UnifiedEventTracking_Goal_Creation_FailedToSaveWithDuplicatedName\r\n Recommendation_Error_93222: {\r\n hasLearnMore: false,\r\n helpId: null,\r\n }, // UnifiedEventTracking_Goals_PleaseEnterValidGoalName\r\n Recommendation_Error_93223: {\r\n hasLearnMore: false,\r\n helpId: null,\r\n }, // UnifiedEventTracking_Goals_PleaseEnterValidGoalName\r\n Recommendation_Error_93234: {\r\n hasLearnMore: false,\r\n helpId: null,\r\n }, // UnifiedEventTracking_Goal_Creation_FailedToSaveWithLongUrl\r\n Recommendation_Error_93272: {\r\n hasLearnMore: false,\r\n helpId: null,\r\n }, // UnifiedEventTracking_Goal_Creation_GoalTypeCannotBeChanged\r\n Recommendation_Error_93237: {\r\n hasLearnMore: false,\r\n helpId: null,\r\n }, // UnifiedEventTracking_Goal_Creation_InvalidEventGoalCategory\r\n Recommendation_Error_93239: {\r\n hasLearnMore: false,\r\n helpId: null,\r\n }, // UnifiedEventTracking_Goal_Creation_InvalidEventGoalAction\r\n Recommendation_Error_93271: {\r\n hasLearnMore: false,\r\n helpId: null,\r\n }, // UnifiedEventTracking_Goal_Creation_GoalValueCurrencyCodeShouldNotBeNull\r\n Recommendation_Error_93274: {\r\n hasLearnMore: false,\r\n helpId: null,\r\n }, // UnifiedEventTracking_Goal_Creation_Type_InStoreTransactionAlert\r\n Recommendation_Error_56028: {\r\n hasLearnMore: false,\r\n helpId: null,\r\n }, // UnifiedEventTracking_Goal_Creation_AdvertiserCustomerIdInvalid\r\n Recommendation_Error_93233: {\r\n hasLearnMore: false,\r\n helpId: null,\r\n }, // UnifiedEventTracking_Goal_Creation_FailedToSaveWithInvalidURLCharacters\r\n Recommendation_Error_93277: {\r\n hasLearnMore: false,\r\n helpId: null,\r\n }, // UnifiedEventTracking_Goal_Creation_CustomerNotEligibleForConversionGoalSelection\r\n};\r\n\r\nexport const CONTEXTUAL_DELIVERY_STATUS = [\r\n 'InvalidFinancialStatusOther',\r\n 'CampaignSuspended',\r\n 'CampaignBudgetPaused',\r\n 'CampaignUserPaused',\r\n 'Eligible',\r\n 'BudgetSuggestions',\r\n 'AutoBiddingLimitedByNotEnoughConversions',\r\n 'AutoBiddingLearning',\r\n 'AutoBiddingLimitedByNotEnoughRevenue',\r\n 'NoEligibleAdGroups',\r\n 'AdGroupExpired',\r\n 'AdGroupDraft',\r\n 'AdGroupUserPaused',\r\n 'AdGroupPrivacyPending',\r\n 'AdGroupTargetingTooNarrow',\r\n 'NoEligibleAds',\r\n 'NoEligibleKeywords',\r\n 'InlineOpportunity',\r\n 'New',\r\n];\r\n\r\nexport const CONTEXTUAL_ENTITY_TYPE = {\r\n CAMPAIGN: 'Campaign',\r\n ADGROUP: 'AdGroup',\r\n KEYWORD: 'Keyword',\r\n AUDIENCE: 'Audience',\r\n NEGATIVE_KEYWORD_LIST: 'NegativeKeywordList',\r\n SHARED_BUDGET: 'SharedBudget',\r\n ACCOUNT: 'Account',\r\n GOAL: 'Goal',\r\n CURRENT_SETTING: 'CurrentSetting',\r\n SUGGESTED_SETTING: 'SuggestedSetting',\r\n GENERATED_FROM: 'GeneratedFrom',\r\n MORE_IMAGES: 'MoreImages',\r\n MORE_CONVERSION_CLARITY_BUTTONS: 'MoreConversionClarityButtons',\r\n IMPORTED_TASK_ITEM: 'ImportedTaskItem',\r\n CAMPAIGNS: 'Campaigns',\r\n};\r\n\r\nexport const RECOMMENDATION_NOTIFICATION_REJECT_REASONS = {\r\n NotInterested: 30,\r\n OtherSolution: 60,\r\n DoNotUnderstand: 10,\r\n NotApplicable: 180,\r\n SpendNoMore: 10,\r\n UseOtherSolution: 60,\r\n ManualBidding: 60,\r\n NotAlignGoal: 30,\r\n NotImprovePerf: 30,\r\n Other: 10,\r\n};\r\n\r\nexport const RECOMMENDATION_SOURCE_FOR_SORT_TYPES = {\r\n [RECOMMENDATION_TYPES.NEW_KEYWORD_OPPORTUNITY]: 'Microsoft.Advertiser.AdInsight.Opportunity.Schema.KeywordOpportunitySummary/SourceForSort',\r\n [RECOMMENDATION_TYPES.BROAD_MATCH_KEYWORD]: 'Microsoft.Advertiser.AdInsight.Opportunity.Schema.BroadMatchAdoptionOpportunitySummary/SourceForSort',\r\n};\r\n\r\nexport const CROSS_LEVEL_TYPES = [\r\n RECOMMENDATION_TYPES.REMOVE_CONFLICTING_NEGATIVE_KEYWORD,\r\n];\r\n\r\nexport const VIEW_TYPES = {\r\n SUMMARY: 'recommendation-summary',\r\n DETAILS: 'recommendation-details',\r\n HISTORY: 'recommendation-history',\r\n AUTO_APPLY_SETTINGS: 'recommendation-auto-apply-settings',\r\n AUTO_APPLY_BULK_UPLOAD: 'recommendation-auto-apply-bulk-upload',\r\n};\r\n\r\nexport const CampaignType = {\r\n None: 0,\r\n Default: 0b1,\r\n Shopping: 0b10,\r\n DynamicSearchAds: 0b100,\r\n Audience: 0b1000,\r\n Smart: 0b10000,\r\n PerformanceMax: 0b1000000,\r\n All: 0xFFFF,\r\n};\r\n\r\nexport const SUPPORTED_CAMPAIGN_TYPES = [\r\n CampaignType.Default,\r\n CampaignType.Shopping,\r\n CampaignType.DynamicSearchAds,\r\n CampaignType.Audience,\r\n CampaignType.PerformanceMax,\r\n];\r\n\r\nexport const MOVE_BUDGET_CAMPAIGN_BUDGET_STATUS = {\r\n Deficit: 'Deficit',\r\n Surplus: 'Surplus',\r\n};\r\n\r\nexport const DOWNLOAD_SCOPE = {\r\n INDIVIDUAL: 'Individual',\r\n ALL: 'All',\r\n};\r\n\r\nexport const TASK_STATUS = {\r\n COMPLETED: 'Completed',\r\n FAILED: 'Failed',\r\n INPROGRESS: 'InProgress',\r\n};\r\n\r\nexport const FAC_FEATURE_ID = {\r\n GOOGLE_IMPORT: '206',\r\n FACEBOOK_IMPORT: '207',\r\n CONVERSION_TRACKING: '208',\r\n CALLOUTCARD_GOOGLE_IMPORT: '209',\r\n CALLOUTCARD_PINTEREST_IMPORT: '210',\r\n CALLOUTCARD_FACEBOOK_IMPORT: '211',\r\n AUTO_BIDDING_MAX_CLICKS: '212',\r\n AUTO_BIDDING_MAX_CONVERSIONS: '213',\r\n SHOPPING_CAMPAIGN: '214',\r\n};\r\n\r\nexport const PAGINATION_DIRECTION = {\r\n PREVIOUS_PAGE: 'previous_page',\r\n NEXT_PAGE: 'next_page',\r\n CURRENT_PAGE: 'current_page',\r\n};\r\n\r\nexport const ORDERBY_DIRECTION = {\r\n ASCENDING: 'ASC',\r\n DESCENDING: 'DESC',\r\n};\r\n\r\nexport const FILTERBY = {\r\n UNDEFINED: 'Undefined',\r\n GREATER_THAN: 'GreaterThan',\r\n GREATER_EQUAL: 'GreaterEqual',\r\n LESS_THAN: 'LessThan',\r\n LESS_EQUAL: 'LessEqual',\r\n};\r\n\r\nexport const PAGINATION_ORDERBY = {\r\n DEFAULT: 'Default',\r\n};\r\n\r\n// mapping of FeatureId to RECOMMENDATION_TYPES, sorted by priority, and string keys\r\nexport const FAC_RECOMMENDATION_CONFIG = {\r\n [FAC_FEATURE_ID.GOOGLE_IMPORT]: {\r\n couponTitleActionKey: 'Summary_Card_Coupon_Title_Google_Import',\r\n couponDescriptionTitleKey: 'Summary_Card_Coupon_Description_Title_Google_Import',\r\n couponDescriptionKey: 'Summary_Card_Coupon_Description_Google_Import',\r\n couponTagMessageKey: 'Summary_Card_Coupon_Tag_Message_Google_Import',\r\n couponLightboxTitle: 'Coupon_LightboxTitleNew',\r\n priority: [\r\n RECOMMENDATION_TYPES.GOOGLE_IMPORT_SCHEDULED,\r\n RECOMMENDATION_TYPES.GOOGLE_IMPORT,\r\n ],\r\n },\r\n [FAC_FEATURE_ID.FACEBOOK_IMPORT]: {\r\n couponTitleActionKey: 'Summary_Card_Coupon_Title_Facebook_Import',\r\n couponDescriptionTitleKey: 'Summary_Card_Coupon_Description_Title_Facebook_Import',\r\n couponDescriptionKey: 'Summary_Card_Coupon_Description_Facebook_Import',\r\n couponTagMessageKey: 'Summary_Card_Coupon_Tag_Message_Facebook_Import',\r\n couponLightboxTitle: 'Coupon_LightboxTitleNew',\r\n },\r\n [FAC_FEATURE_ID.CONVERSION_TRACKING]: {\r\n couponTitleActionKey: 'Summary_Card_Coupon_Title_Conversion_Tracking',\r\n couponDescriptionTitleKey: 'Summary_Card_Coupon_Description_Title_Conversion_Tracking',\r\n couponDescriptionKey: 'Summary_Card_Coupon_Description_Conversion_Tracking',\r\n couponTagMessageKey: 'Summary_Card_Coupon_Tag_Message_Conversion_Tracking',\r\n couponLightboxTitle: 'Coupon_LightboxTitleNew',\r\n priority: [\r\n RECOMMENDATION_TYPES.FIX_CONVERSION_TRACKING_OPPORTUNITY,\r\n RECOMMENDATION_TYPES.SETUP_CONVERSION_TRACKING_OPPORTUNITY,\r\n RECOMMENDATION_TYPES.FIX_CONVERSION_GOAL_SETTINGS,\r\n RECOMMENDATION_TYPES.CREATE_CONVERSION_GOAL,\r\n ],\r\n },\r\n [FAC_FEATURE_ID.SHOPPING_CAMPAIGN]: {\r\n couponTitleActionKey: 'Summary_Card_Coupon_Title_Shopping_Campaign',\r\n couponDescriptionTitleKey: 'Summary_Card_Coupon_Description_Title_Shopping_Campaign',\r\n couponDescriptionKey: 'Summary_Card_Coupon_Description_Shopping_Campaign',\r\n couponTagMessageKey: 'Summary_Card_Coupon_Tag_Message_Shopping_Campaign',\r\n couponLightboxTitle: 'Coupon_LightboxTitleNew_Shopping_Campaign',\r\n },\r\n};\r\n\r\n// creates array mapping RECOMMENDATION_TYPES to FeatureId\r\nexport const FAC_RECOMENDATIONTYPE_FEATUREID_MAPPING = _.reduce(\r\n FAC_RECOMMENDATION_CONFIG,\r\n (mapping, { priority }, featureId) =>\r\n _.extend(mapping, ..._.map(priority, recType => ({ [recType]: featureId }))),\r\n {}\r\n);\r\n\r\nexport const TYPE_DESCRIPTION_TABLE = {\r\n [RECOMMENDATION_TYPES.REALLOCATE_BUDGET]: 'Recommendation_Type_Name_Reallocate_Budget_Opportunity',\r\n};\r\n\r\nexport const DATE_FILTER = {\r\n LAST_90: 'last90Days',\r\n LAST_180: 'last180Days',\r\n};\r\n\r\nexport const FILTER_TO_TIME = {\r\n [DATE_FILTER.LAST_90]: -90,\r\n [DATE_FILTER.LAST_180]: -180,\r\n};\r\n\r\nexport const schema = {\r\n scenario: [\r\n {\r\n name: 'loadRecommendationTab',\r\n value: 'LoadRecommendationTab',\r\n setting: {},\r\n activity: [\r\n {\r\n name: 'loadRecommendationTab',\r\n value: 'LoadRecommendationTab',\r\n },\r\n // Below activities are for performance logs.\r\n {\r\n name: 'getSummary',\r\n value: 'getsummary',\r\n },\r\n {\r\n name: 'getCoupons',\r\n value: 'getCoupons',\r\n },\r\n {\r\n name: 'getHistory',\r\n value: 'getHistory',\r\n },\r\n {\r\n name: 'getCount',\r\n value: 'getCount',\r\n },\r\n {\r\n name: 'track',\r\n value: 'track',\r\n },\r\n {\r\n name: 'viewCategory',\r\n value: 'ViewCategory',\r\n },\r\n ],\r\n },\r\n ],\r\n};\r\n\r\nexport const GOAL_OPERATOR_TYPES_STRING_VALUES = {\r\n EqualTo: 'UnifiedEventTracking_Goal_Creation_Type_Option_EqualsTo',\r\n EqualsTo: 'UnifiedEventTracking_Goal_Creation_Type_Option_EqualsTo',\r\n Contains: 'UnifiedEventTracking_Goal_Creation_Type_Option_Contains',\r\n BeginsWith: 'UnifiedEventTracking_Goal_Creation_Type_Option_BeginsWith',\r\n RegularExpression: 'UnifiedEventTracking_Goal_Creation_Type_Option_RegularExpression',\r\n LessThan: 'UnifiedEventTracking_Goal_Creation_Type_Option_LessThan',\r\n GreaterThan: 'UnifiedEventTracking_Goal_Creation_Type_Option_GreaterThan',\r\n};\r\n\r\nexport const ADGROUP_TYPES = {\r\n SearchStandard: 'SearchStandard',\r\n SearchDynamic: 'SearchDynamic',\r\n};\r\n\r\nexport const AUTO_APPLY_TYPES = {\r\n [RECOMMENDATION_TYPES.RESPONSIVE_SEARCH_ADS]: 'ResponsiveSearchAdsAutoApply',\r\n [RECOMMENDATION_TYPES.MULTIMEDIA_ADS]: 'MultimediaAdsAutoApply',\r\n};\r\n\r\nexport const AUTO_APPLY_TYPES_NAMES = {\r\n [RECOMMENDATION_TYPES.RESPONSIVE_SEARCH_ADS]: 'responsive search ads',\r\n};\r\n\r\n// Recommendation types which support AdInsight MT new auto apply pipeline\r\nexport const SUPPORT_ADINSIGHT_AUTO_APPLY_TYPES = [\r\n RECOMMENDATION_TYPES.FIX_CONVERSION_GOAL_SETTINGS,\r\n RECOMMENDATION_TYPES.REMOVE_CONFLICTING_NEGATIVE_KEYWORD,\r\n RECOMMENDATION_TYPES.CREATE_CONVERSION_GOAL,\r\n RECOMMENDATION_TYPES.RESPONSIVE_SEARCH_ADS,\r\n RECOMMENDATION_TYPES.MULTIMEDIA_ADS,\r\n RECOMMENDATION_TYPES.REPAIR_MISSING_KEYWORD_PARAMS,\r\n];\r\n\r\nexport const HISTORY_PAGE_TAB_TYPES = {\r\n ALL: 'All',\r\n MANUAL: 'Manual',\r\n AUTO: 'Auto',\r\n};\r\n\r\nexport const IMPORT_TYPE = {\r\n GOOGLE: 'googleimport',\r\n FACEBOOK: 'facebookimport',\r\n};\r\n\r\nexport const ISSUE_TYPES = {\r\n 1: 'Destination URL',\r\n 2: 'Event',\r\n 3: 'Scope',\r\n 4: 'Revenue value',\r\n 5: 'UET',\r\n};\r\n\r\nexport const GA_NO_PILOTING_TYPES = [\r\n RECOMMENDATION_TYPES.ADJUST_SHARED_BUDGET_OPPORTUNITY,\r\n RECOMMENDATION_TYPES.RESPONSIVE_SEARCH_ADS,\r\n RECOMMENDATION_TYPES.REALLOCATE_BUDGET,\r\n RECOMMENDATION_TYPES.MULTIMEDIA_ADS,\r\n RECOMMENDATION_TYPES.FACEBOOK_IMPORT,\r\n RECOMMENDATION_TYPES.CREATE_CONVERSION_GOAL,\r\n RECOMMENDATION_TYPES.FIX_CONVERSION_GOAL_SETTINGS,\r\n RECOMMENDATION_TYPES.FIX_CONVERSION_TRACKING_OPPORTUNITY,\r\n RECOMMENDATION_TYPES.SETUP_CONVERSION_TRACKING_OPPORTUNITY,\r\n RECOMMENDATION_TYPES.REMOVE_CONFLICTING_NEGATIVE_KEYWORD,\r\n RECOMMENDATION_TYPES.DYNAMIC_SEARCH_ADS,\r\n RECOMMENDATION_TYPES.BROAD_MATCH_KEYWORD,\r\n RECOMMENDATION_TYPES.REPAIR_KEYWORD,\r\n RECOMMENDATION_TYPES.REPAIR_ADS,\r\n RECOMMENDATION_TYPES.BUDGET_OPPORTUNITY,\r\n RECOMMENDATION_TYPES.CALLOUT,\r\n RECOMMENDATION_TYPES.SITE_LINK,\r\n RECOMMENDATION_TYPES.GOOGLE_IMPORT_SCHEDULED,\r\n RECOMMENDATION_TYPES.GOOGLE_IMPORT,\r\n RECOMMENDATION_TYPES.TRENDING_QUERY,\r\n RECOMMENDATION_TYPES.NEW_KEYWORD_OPPORTUNITY,\r\n RECOMMENDATION_TYPES.REPAIR_UNTARGETED_OFFER,\r\n RECOMMENDATION_TYPES.IMPROVE_MULTIMEDIA_ADS,\r\n RECOMMENDATION_TYPES.FIX_AD_DESTINATION,\r\n RECOMMENDATION_TYPES.FIX_AD_TEXT,\r\n];\r\n\r\nexport const MCC_NOT_SUPPORTED_TYPE = [\r\n RECOMMENDATION_TYPES.FIX_AD_DESTINATION,\r\n RECOMMENDATION_TYPES.FIX_AD_TEXT,\r\n RECOMMENDATION_TYPES.IMAGE_EXTENSION,\r\n];\r\n\r\nexport const CAMPAIGN_ODATA_ERROR_BASELINE = 1000000;\r\n\r\nexport const INLIE_APPLY_ERROR_SUPPORT_TYPES = [\r\n RECOMMENDATION_TYPES.DYNAMIC_SEARCH_ADS,\r\n RECOMMENDATION_TYPES.MULTIMEDIA_ADS,\r\n];\r\n\r\nexport const MCC_ACCOUNTS_CAPPING = 100;\r\n\r\nexport const COMPETITION_SUMMARY_TOP_NUMBER = 4;\r\n\r\nexport const RECOMMENDATION_SUMMARY_TOP_NUMBER = 10;\r\n\r\nexport const isFilterSearchStandardAdgroupRecommendationType = recommendationType =>\r\n recommendationType === RECOMMENDATION_TYPES.NEW_KEYWORD_OPPORTUNITY ||\r\n recommendationType === RECOMMENDATION_TYPES.BROAD_MATCH_KEYWORD ||\r\n recommendationType === RECOMMENDATION_TYPES.TRENDING_QUERY;\r\n\r\nexport const RECOMMENDATION_AUTO_APPLY_SETTINGS_TOOLTIPS = {\r\n [RECOMMENDATION_TYPES.FIX_CONVERSION_GOAL_SETTINGS]: {\r\n text: _TL_('We created a new recommendation to improve conversion tracking and conversion goal settings.'),\r\n helpText: _TL_('Learn more about conversion tracking.'),\r\n },\r\n [RECOMMENDATION_TYPES.REPAIR_MISSING_KEYWORD_PARAMS]: {\r\n text: _TL_('We recommend you set up values for missing keyword parameters. Making these changes can increase the click-through rates and ad impressions of your ads.'),\r\n helpText: _TL_('Learn more about missing keyword parameters.'),\r\n },\r\n [RECOMMENDATION_TYPES.CREATE_CONVERSION_GOAL]: {\r\n text: _TL_('We created a new recommendation to increase conversions and improve conversion tracking when using an enabled UET tag.'),\r\n helpText: _TL_('Learn more about conversion tracking.'),\r\n },\r\n [RECOMMENDATION_TYPES.REMOVE_CONFLICTING_NEGATIVE_KEYWORD]: {\r\n text: _TL_('We created a new recommendation to help you resolve negative keyword conflicts that prevent your ads from displaying.'),\r\n helpText: _TL_('Learn more about negative keyword conflicts.'),\r\n },\r\n [RECOMMENDATION_TYPES.MULTIMEDIA_ADS]: {\r\n text: _TL_('We created a new recommendation to improve your campaign performance by adding multimedia search ads to your ad groups.'),\r\n helpText: _TL_('Learn more about adding multimedia search ads.'),\r\n },\r\n [RECOMMENDATION_TYPES.RESPONSIVE_SEARCH_ADS]: {\r\n text: _TL_('We created a new recommendation to improve your campaign performance by adding responsive search ads to your ad groups.'),\r\n helpText: _TL_('Learn more about responsive search ads.'),\r\n },\r\n};\r\n\r\nexport const TOP_POSITION_RECOMMENDATION_TYPES = [\r\n RECOMMENDATION_TYPES.DSA_2_PMAX_MIGRATION,\r\n];\r\n","export const generateSchema = function (appConfig) {\r\n const minBudget = appConfig.get('BudgetRange').DailyRange.FloorValue;\r\n const maxBudget = appConfig.get('BudgetRange').DailyRange.CeilingValue;\r\n\r\n const minBid = appConfig.get('KeywordBidRange').FloorValue;\r\n const maxBid = appConfig.get('KeywordBidRange').CeilingValue;\r\n\r\n const schema = {\r\n name: 'recommendation details view form',\r\n type: 'object',\r\n properties: {\r\n budgetSuggested: {\r\n required: true,\r\n default: '', // required, otherwise it will not have first required check.\r\n type: 'number',\r\n minimum: minBudget,\r\n maximum: maxBudget,\r\n },\r\n suggestedBid: {\r\n required: true,\r\n default: '',\r\n type: 'number',\r\n minimum: minBid,\r\n maximum: maxBid,\r\n },\r\n },\r\n };\r\n\r\n return schema;\r\n};\r\n","import _ from 'underscore';\r\nimport smartTruncate from 'smart-truncate';\r\n\r\nimport {\r\n SUMMARY_LEVELS,\r\n RECOMMENDATION_TYPES,\r\n MATCH_TYPE_IDS,\r\n MATCH_TYPE,\r\n} from '../consts';\r\n\r\nconst ENTITY_NAME_MAX_LENGTH = 25;\r\nconst ENTITY_NAME_SINGLE_COLUNN_MAX_LENGTH = 50;\r\nconst ENTITY_NAME_ELLIPSIS_INDEX = 15;\r\nconst ENTITY_NAME_SINGLE_COLUNN_ELLIPSIS_INDEX = 30;\r\nconst ENTITY_URL_SINGLE_COLUNN_MAX_LENGTH = 80;\r\nconst ENTITY_URL_SINGLE_COLUNN_ELLIPSIS_INDEX = 30;\r\n\r\nconst percentOptions = {\r\n minimumFractionDigits: 0,\r\n maximumFractionDigits: 0,\r\n};\r\n\r\nconst percentOptionsOneDecimal = {\r\n minimumFractionDigits: 1,\r\n maximumFractionDigits: 1,\r\n};\r\n\r\nconst percentOptionsHundredths = {\r\n minimumFractionDigits: 2,\r\n maximumFractionDigits: 2,\r\n};\r\n\r\n/**\r\n * Monetary, always with two decimal places\r\n */\r\nconst monetaryOptions = {\r\n compact: 'short',\r\n minimumFractionDigits: 2,\r\n maximumFractionDigits: 2,\r\n};\r\n\r\n/**\r\n * For impressions and clicks, 0-2 decimal places\r\n */\r\nconst impreAndClicksOptions = {\r\n compact: 'short',\r\n minimumFractionDigits: 0,\r\n maximumFractionDigits: 2,\r\n};\r\n\r\n/**\r\n * Format cost, spend number with currency symbol and abbreviation.\r\n * Decimals: always 2 decimals\r\n * Example: $323.00K\r\n * @param {number} value - value to be formatted\r\n * @param {Object} i18n - Localization component\r\n * @param {string} currency - currency code\r\n * @return {string} formatted string\r\n */\r\nexport const formatCost = (value, i18n, currency) =>\r\n i18n.formatCurrency(value, currency, monetaryOptions);\r\n\r\n/**\r\n * Format percentage number.\r\n * Decimals: 0 decimal\r\n * Example: 12%\r\n * @param {number} value - value to be formatted\r\n * @param {Object} i18n - Localization component\r\n * @return {string} formatted string\r\n */\r\nexport const formatPercent = (value, i18n) =>\r\n i18n.formatPercent(value, percentOptions);\r\n\r\n/**\r\n * Format integer number.\r\n * Decimals: 2 decimals\r\n * Example: 12\r\n * @param {number} value - value to be formatted\r\n * @param {Object} i18n - Localization component\r\n * @return {string} formatted string\r\n */\r\nexport const formatInteger = (value, i18n) =>\r\n i18n.formatDecimal(value, { minimumFractionDigits: 0, maximumFractionDigits: 0 });\r\n\r\n/**\r\n * Format percentage number.\r\n * Decimals: 1 decimal\r\n * Example: 12.9%\r\n * @param {number} value - value to be formatted\r\n * @param {Object} i18n - Localization component\r\n * @return {string} formatted string\r\n */\r\nexport const formatPercentOneDecimal = (value, i18n) =>\r\n i18n.formatPercent(value, percentOptionsOneDecimal);\r\n\r\n/**\r\n * Format percentage number.\r\n * Decimals: 2 decimals\r\n * Example: 12.00%\r\n * @param {number} value - value to be formatted\r\n * @param {Object} i18n - Localization component\r\n * @return {string} formatted string\r\n */\r\nexport const formatPercentHundredths = (value, i18n) =>\r\n i18n.formatPercent(value, percentOptionsHundredths);\r\n\r\n/**\r\n * Format number with abbreviation.\r\n * Decimals: 0-2 decimals\r\n * Example: $1K or 1.2M or 1.23B\r\n * @param {number} value - value to be formatted\r\n * @param {Object} i18n - Localization component\r\n * @return {string} formatted string\r\n */\r\nexport const formatDecimal = (value, i18n) =>\r\n i18n.formatDecimal(value, impreAndClicksOptions);\r\n\r\n/**\r\n * Format bid number with or without currency symbol and abbreviation.\r\n * Decimals: always 2 decimals\r\n * Example: $1.23M or 1.23M\r\n * @param {number} value - value to be formatted\r\n * @param {Object} i18n - Localization component\r\n * @param {string} currency - currency code\r\n * @return {string} formatted string\r\n */\r\nexport const formatBid = (value, i18n, currency) => {\r\n if (currency) {\r\n return i18n.formatCurrency(value, currency, monetaryOptions);\r\n }\r\n return i18n.formatDecimal(value, monetaryOptions);\r\n};\r\n\r\n/**\r\n * Truncate entity name in the middle\r\n * @param {string} name - entity name to be truncated\r\n * @return {string} truncated entity name\r\n */\r\nexport const truncateEntityName = name =>\r\n smartTruncate(name, ENTITY_NAME_MAX_LENGTH, { position: ENTITY_NAME_ELLIPSIS_INDEX });\r\nexport const truncateSingleColumnEntityName = name =>\r\n smartTruncate(\r\n name,\r\n ENTITY_NAME_SINGLE_COLUNN_MAX_LENGTH,\r\n { position: ENTITY_NAME_SINGLE_COLUNN_ELLIPSIS_INDEX }\r\n );\r\n\r\nexport const truncateSingleColumnEntityURL = url =>\r\n smartTruncate(\r\n url,\r\n ENTITY_URL_SINGLE_COLUNN_MAX_LENGTH,\r\n { position: ENTITY_URL_SINGLE_COLUNN_ELLIPSIS_INDEX }\r\n );\r\n\r\nconst campaignNameHtml = campaignName =>\r\n `${truncateEntityName(campaignName)}`;\r\nconst adGroupNameHtml = adGroupName =>\r\n `${truncateEntityName(adGroupName)}`;\r\nconst fullAdGroupNameHtml = (campaignName, adGroupName) => `${campaignNameHtml(campaignName)} > ${adGroupNameHtml(adGroupName)}`;\r\nconst keywordHtml = keyword =>\r\n `${truncateEntityName(keyword)}`;\r\n\r\n/**\r\n * Format target object to html .\r\n * Display text is truncated version.\r\n * Title (hover over) is full version.\r\n * @param {string} level - target level\r\n * @param {Object} target - target object\r\n * @return {string} formatted html string\r\n */\r\nexport const formatEntityNameForHtml = (level, target = {}) => {\r\n const {\r\n CampaignName,\r\n AdGroupName,\r\n Keyword,\r\n } = target;\r\n\r\n switch (level) {\r\n case SUMMARY_LEVELS.CAMPAIGN:\r\n return campaignNameHtml(CampaignName);\r\n case SUMMARY_LEVELS.ADGROUP:\r\n return fullAdGroupNameHtml(CampaignName, AdGroupName);\r\n case SUMMARY_LEVELS.KEYWORD:\r\n return keywordHtml(Keyword);\r\n default:\r\n return '';\r\n }\r\n};\r\n\r\n/**\r\n * Format entity type\r\n * @param {string} level - target level\r\n * @param {number} recommendationsCount - number of recommendations (Plural or Singular)\r\n * @param {Object} i18n - Localization component\r\n * @return {string} formatted entity type\r\n */\r\nexport const formatEntityType = (level, recommendationsCount, i18n) => {\r\n const form = recommendationsCount > 1 ? 'Plural' : 'Singular';\r\n return i18n.getString(`Summary_Card_${level}_${form}`);\r\n};\r\n\r\nexport const replacePlaceholders = ({\r\n model = {},\r\n type,\r\n i18n,\r\n level,\r\n}, settings) => {\r\n if (!settings) {\r\n return null;\r\n }\r\n\r\n if (_.isString(settings)) {\r\n return i18n.getString(settings);\r\n }\r\n\r\n const {\r\n key,\r\n config,\r\n } = settings || {};\r\n const {\r\n useLevelInComputingEntityName,\r\n useCampaignName,\r\n useAdGroupName,\r\n useOpportunityCount,\r\n compareWithCompetitor,\r\n useSegment,\r\n } = config || {};\r\n const {\r\n target,\r\n isHighConverting,\r\n opportunities = [],\r\n segment,\r\n competitor,\r\n delta,\r\n } = model;\r\n const {\r\n CampaignName,\r\n AdGroupName,\r\n Keyword,\r\n } = target || {};\r\n\r\n let localizedKey = key;\r\n const templateValues = {};\r\n\r\n if (type === RECOMMENDATION_TYPES.COMPETITIVE_BID) {\r\n localizedKey = isHighConverting ? `${key}_High_Converting` : key;\r\n templateValues.keyword = keywordHtml(Keyword);\r\n } else if (useOpportunityCount) {\r\n localizedKey = opportunities.length > 1 ? key : `${key}_Singular`;\r\n templateValues.opportunity_count = opportunities.length;\r\n }\r\n\r\n if (useLevelInComputingEntityName) {\r\n const formattedName = formatEntityNameForHtml(level, target);\r\n templateValues.entity_name = formattedName;\r\n } else if (useAdGroupName) {\r\n templateValues.entity_name = `${fullAdGroupNameHtml(CampaignName, AdGroupName)}`;\r\n } else if (useCampaignName) {\r\n templateValues.entity_name = `${campaignNameHtml(CampaignName)}`;\r\n }\r\n\r\n if (compareWithCompetitor) {\r\n _.extend(templateValues, {\r\n competitor_domain: competitor,\r\n delta: formatPercent(delta, i18n),\r\n });\r\n }\r\n\r\n if (compareWithCompetitor || useSegment) {\r\n templateValues.segment = i18n.getString(`Details_View_Device_Type_${segment}`) || segment;\r\n }\r\n\r\n return i18n.getString(localizedKey, templateValues);\r\n};\r\n\r\nexport const buildSimpleFormFields = (\r\n config,\r\n data,\r\n i18n,\r\n labelProcessor = _.identity,\r\n currency\r\n) => {\r\n const result = _.map(config, (oneRow) => {\r\n const propertyName = oneRow.property;\r\n const propertyValue = propertyName && data[propertyName];\r\n const field = { propertyValue };\r\n\r\n let formattedValue;\r\n if (oneRow.formatter) {\r\n formattedValue = oneRow.formatter(propertyValue, i18n, currency);\r\n } else {\r\n formattedValue = propertyValue && propertyValue.toString();\r\n }\r\n\r\n if (oneRow.type === 'input') {\r\n field.items = [formattedValue, i18n.getString(oneRow.placeHolder)];\r\n } else {\r\n field.value = formattedValue;\r\n }\r\n _.each(oneRow, (val, key) => {\r\n if (_.contains(['text', 'label', 'helpText'], key)) {\r\n field[key] = labelProcessor(i18n.getString(val));\r\n } else if (key === 'enum') {\r\n field[key] = [];\r\n _.each(val, ({ value, text }) => {\r\n let localizedKey = text;\r\n if (value === field.value) {\r\n localizedKey = `${text}_Recommended`;\r\n }\r\n field[key].push({\r\n value,\r\n text: i18n.getString(localizedKey),\r\n });\r\n });\r\n } else {\r\n field[key] = val;\r\n }\r\n });\r\n return field;\r\n });\r\n return result;\r\n};\r\n\r\n/**\r\n * Format match type by ID\r\n * @param {number} matchType - value to match type\r\n * @param {Object} i18n - Localization component\r\n * @return {string} formatted string\r\n */\r\nexport const formatMatchType = (matchType, i18n) => {\r\n if (matchType === MATCH_TYPE_IDS.EXACT) {\r\n return i18n.getString('Details_View_Match_Type_Exact');\r\n } else if (matchType === MATCH_TYPE_IDS.PHRASE) {\r\n return i18n.getString('Details_View_Match_Type_Phrase');\r\n } else if (matchType === MATCH_TYPE_IDS.BROAD) {\r\n return i18n.getString('Details_View_Match_Type_Broad');\r\n }\r\n return null;\r\n};\r\n\r\n/**\r\n * Format match type by String\r\n * @param {number} matchType - value to match type\r\n * @param {Object} i18n - Localization component\r\n * @return {string} formatted string\r\n */\r\nexport const formatMatchTypeStr = (matchType, i18n) => {\r\n if (_.isUndefined(matchType)) {\r\n return null;\r\n }\r\n if (matchType.toUpperCase() === MATCH_TYPE.EXACT.toUpperCase()) {\r\n return i18n.getString('Details_View_Match_Type_Exact');\r\n } else if (matchType.toUpperCase() === MATCH_TYPE.PHRASE.toUpperCase()) {\r\n return i18n.getString('Details_View_Match_Type_Phrase');\r\n } else if (matchType.toUpperCase() === MATCH_TYPE.BROAD.toUpperCase()) {\r\n return i18n.getString('Details_View_Match_Type_Broad');\r\n }\r\n return null;\r\n};\r\n\r\n/**\r\n * Format location level\r\n * @param {number} level - value to level\r\n * @param {Object} i18n - Localization component\r\n * @return {string} formatted string\r\n */\r\nexport const formatLocationLevel = (level, i18n) => {\r\n const levelNames = {\r\n Country: i18n.getString('BidAdjustmentOpt_Country'),\r\n State: i18n.getString('BidAdjustmentOpt_State'),\r\n MetroArea: i18n.getString('BidAdjustmentOpt_MetroArea'),\r\n City: i18n.getString('BidAdjustmentOpt_City'),\r\n PostalCode: i18n.getString('BidAdjustmentOpt_PostalCode'),\r\n };\r\n\r\n return levelNames[level];\r\n};\r\n","import {\r\n getPreferences,\r\n savePreferences,\r\n} from '@bingads-webui-campaign/recommendation-preferences';\r\n\r\nexport function getRecommendationPreferences(preferencesService, isUserLevel = true) {\r\n return getPreferences(preferencesService, isUserLevel);\r\n}\r\n\r\nexport function saveRecommendationPreferences(data, preferencesService, isUserLevel = true) {\r\n savePreferences(preferencesService, data, isUserLevel);\r\n}\r\n","/* eslint-disable no-restricted-globals */\r\nimport _ from 'underscore';\r\nimport $ from 'jquery';\r\nimport { merge } from '@bingads-webui-universal/primitive-utilities';\r\nimport * as urlUtil from '@bingads-webui/url-util';\r\nimport { CAMPAIGN_TYPES, PREFERENCES_ACTION_TYPES } from '@bingads-webui-campaign/recommendation-preferences';\r\nimport { fromLegacyTimeZone, toIANATimeZone } from '@bingads-webui-universal/time-zone-converter';\r\nimport { editorialErrorCodeToErrorMessageMapping } from '@bingads-webui-campaign/api-errors';\r\n\r\nimport {\r\n RECOMMENDATION_TYPES,\r\n CHANNEL_ALL_RECOMMENDATIONS,\r\n RECOMMENDATION_IDS,\r\n CHANNEL_TYPES,\r\n SUMMARY_LEVELS,\r\n ESTIMATE_TYPES,\r\n ADINSIGHT_LOG_API_NAME,\r\n ADINSIGHT_LOG_ACTION_TYPE,\r\n RECOMMENDATION_DISMISS_FEEDBACK_TYPE,\r\n GA_NO_PILOTING_TYPES,\r\n MCC_NOT_SUPPORTED_TYPE,\r\n RECOMMENDATION_IMAGE_EXTENSION_PAGE_SIZES,\r\n RECOMMENDATION_IMAGE_EXTENSION_PAGE_SIZES_TEN,\r\n RECOMMENDATION_IMAGE_EXTENSION_PAGE_SIZES_TWENTY,\r\n} from './consts';\r\n\r\nimport {\r\n getRecommendationPreferences,\r\n saveRecommendationPreferences,\r\n} from './general-preferences';\r\n\r\nimport { recommendationNewTextConfigs } from './recommendation-configs';\r\n/**\r\n * Check if a recommendation is for competition tab or recommendation tab\r\n * @param {string} type - recommendation type\r\n * @return {boolean} true for competition tab, false for recommendation tab\r\n */\r\nexport const isCompetition = (type) => {\r\n const competitionTypes = CHANNEL_ALL_RECOMMENDATIONS[CHANNEL_TYPES.COMPETITION];\r\n return _.contains(competitionTypes, type);\r\n};\r\n\r\n/**\r\n * Check recommendaton type enabling by parameter\r\n * @param {string} type - recommendation type\r\n * @return {boolean} true for enabled, false for disabled\r\n */\r\nconst isEnabledByUrlParameter = (type) => {\r\n const enabledRecommendationType = urlUtil.getParameter(`IsRecommendationType${type}Enabled`);\r\n return enabledRecommendationType === 'true';\r\n};\r\n\r\n/**\r\n * Is a recommendation type enabled based permission and channel.\r\n * @param {string} type - recommendation type\r\n * @param {string} channel - channel for competition or recommendation\r\n * @param {Object} permissions - permission object\r\n * @param {Object} isMCC - is MCC or not\r\n * @return {boolean} true for enabled, false for disabled\r\n */\r\nexport const isRecommendationTypeEnabled = (\r\n type,\r\n channel,\r\n permissions,\r\n isMCC = false\r\n) => {\r\n const supportedTypes = CHANNEL_ALL_RECOMMENDATIONS[channel];\r\n if (supportedTypes && supportedTypes.indexOf(type) !== -1) {\r\n if (isEnabledByUrlParameter(type)) {\r\n return true;\r\n }\r\n\r\n const isFromMCC = isMCC || channel === CHANNEL_TYPES.MCCRECOMMENDATION || channel === CHANNEL_TYPES.MCCOVERVIEW;\r\n\r\n if (isFromMCC && _.contains(MCC_NOT_SUPPORTED_TYPE, type)) {\r\n return false;\r\n }\r\n\r\n if (_.contains(GA_NO_PILOTING_TYPES, type)) {\r\n return true;\r\n }\r\n\r\n switch (type) {\r\n case RECOMMENDATION_TYPES.BUDGET:\r\n return permissions.IsRecommendationTypeBudgetEnabled;\r\n // [Recommendation Deprecation] Softly remove CompetitiveBidOpportunity from UI\r\n // TODO: Clean up all related code regarding CompetitiveBidOpportunity\r\n case RECOMMENDATION_TYPES.COMPETITIVE_BID:\r\n return false;\r\n // [Recommendation Deprecation] Softly remove DeviceBidBoost from UI\r\n // TODO: Clean up all related code regarding DeviceBidBoost\r\n case RECOMMENDATION_TYPES.DEVICE_BID_BOOST:\r\n return false;\r\n // [Recommendation Deprecation] Softly remove LocationBidBoost from UI\r\n // TODO: Clean up all related code regarding LocationBidBoost\r\n case RECOMMENDATION_TYPES.LOCATION_BID_BOOST:\r\n return false;\r\n case RECOMMENDATION_TYPES.NEW_LOCATION:\r\n return false;\r\n case RECOMMENDATION_TYPES.SYNDICATION:\r\n return false;\r\n case RECOMMENDATION_TYPES.IMAGE_EXTENSION:\r\n return permissions.IsRecommendationTypeImageExtensionEnabled;\r\n case RECOMMENDATION_TYPES.REPAIR_MISSING_KEYWORD_PARAMS:\r\n return permissions.IsRecommendationTypeRepairMissingKeywordParamsEnabled;\r\n case RECOMMENDATION_TYPES.FIX_NO_IMPRESSION_BID:\r\n return permissions.IsFixNoImpressionBidRecommendationEnabled;\r\n case RECOMMENDATION_TYPES.IMPROVE_RESPONSIVE_SEARCH_ADS:\r\n return permissions.IsRecommendationTypeImproveResponsiveSearchAdsEnabled;\r\n case RECOMMENDATION_TYPES.SSC_2_PMAX_MIGRATION:\r\n return false;\r\n case RECOMMENDATION_TYPES.PMAX_IMPORT:\r\n return permissions.IsRecommendationTypePmaxImportEnabled;\r\n case RECOMMENDATION_TYPES.DSA_2_PMAX_MIGRATION:\r\n return permissions.IsRecommendationTypeDSA2PMaxMigrationEnabled;\r\n case RECOMMENDATION_TYPES.SYNDICATION_GAP:\r\n return permissions.IsRecommendationTypeSyndicationGapEnabled;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n return false;\r\n};\r\n\r\n/**\r\n * Get enabled recommendation types.\r\n * If recommendation type is given, return its Id (if enabled)\r\n * If recommendation type is not given, return all enabled type for this channel\r\n * @param {string} recommendationType - recommendation type\r\n * @param {string} channel - channel for competition or recommendation\r\n * @param {Object} permissions - permission object\r\n * @param {Object} isMCC - is MCC or not\r\n * @return {Array} enabled type collection\r\n */\r\nexport const getRecommendationTypes = (\r\n recommendationType,\r\n channel,\r\n permissions,\r\n isMCC = false\r\n) => {\r\n const types = recommendationType ? [recommendationType] : CHANNEL_ALL_RECOMMENDATIONS[channel];\r\n const enabledTypes = _.filter(\r\n types,\r\n type => isRecommendationTypeEnabled(type, channel, permissions, isMCC)\r\n );\r\n\r\n return enabledTypes;\r\n};\r\n\r\n/**\r\n * Get enabled recommendation ids.\r\n * If recommendation type is given, return its Id (if enabled)\r\n * If recommendation type is not given, return all enabled Ids for this channel\r\n * @param {string} recommendationType - recommendation type\r\n * @param {string} channel - channel for competition or recommendation\r\n * @param {Object} permissions - permission object\r\n * @param {Object} isMCC - is MCC or not\r\n * @return {Array} enabled id collection\r\n */\r\nexport const getRecommendationIds = (\r\n recommendationType,\r\n channel,\r\n permissions,\r\n isMCC = false\r\n) => {\r\n const types = recommendationType ?\r\n _.flatten([recommendationType]) : CHANNEL_ALL_RECOMMENDATIONS[channel];\r\n const enabledTypes = _.filter(\r\n types,\r\n type => isRecommendationTypeEnabled(type, channel, permissions, isMCC)\r\n );\r\n\r\n return _.map(enabledTypes, type => RECOMMENDATION_IDS[type]);\r\n};\r\n\r\n/**\r\n * Get preference data\r\n * @param {Object} preferencesService - preference service\r\n * @param {string} name - data name\r\n * @return {Object} preference data\r\n */\r\nexport function getPreferences(preferencesService, name) {\r\n const sessionData = preferencesService.findByNameAtUserLevel(name);\r\n\r\n return _.result(sessionData, 'Data', {});\r\n}\r\n\r\n/**\r\n * Save preference data\r\n * @param {Object} preferencesService - preference service\r\n * @param {string} name - data name\r\n * @param {Object} data - preference data to be saved\r\n * @return {undefined}\r\n */\r\nexport function savePreferences(preferencesService, name, data) {\r\n const Data = merge(\r\n {},\r\n getPreferences(preferencesService, name),\r\n data\r\n );\r\n\r\n preferencesService.setAtUserLevel({\r\n Name: name,\r\n Data,\r\n });\r\n}\r\n\r\n/**\r\n * Check if it is read only user or account is inactive\r\n * @param {Object} appConfig - legacy module 'component/config/index'\r\n * @param {bool} isMCC - is or not customer level\r\n * @return {bool} true if edit is not allowed\r\n */\r\nexport function isReadOnly(appConfig, isMCC = false) {\r\n return !!(appConfig.get('Permissions').IsReadOnlyUser || (!isMCC && appConfig.get('CurrentAccountInActive')));\r\n}\r\n\r\nconst levelWeight = {\r\n [SUMMARY_LEVELS.CUSTOMER]: 4,\r\n [SUMMARY_LEVELS.ACCOUNT]: 3,\r\n [SUMMARY_LEVELS.CAMPAIGN]: 2,\r\n [SUMMARY_LEVELS.ADGROUP]: 1,\r\n [SUMMARY_LEVELS.KEYWORD]: 0,\r\n};\r\n\r\n/**\r\n * Check if a aggregate level is a parent of the scope.\r\n * E.g. Campaign level is a parent of Ad Group scope\r\n * @param {string} scope - the scope (e.g. Campaign, Ad Group)\r\n * @param {string} level - the level (e.g. Campaign, Ad Group)\r\n * @return {bool} true if level is a parent of the scope.\r\n */\r\nexport function isParentLevel(scope, level) {\r\n return levelWeight[scope] < levelWeight[level];\r\n}\r\n\r\nexport function getIncreaseSymbol(value, type = 'normal') {\r\n const map = {\r\n normal: '+',\r\n arrow: '↑ ',\r\n };\r\n return value >= 0 ? map[type] : '';\r\n}\r\n\r\n/**\r\n * Check if an estimate is positive.\r\n * E.g. increase of cost should not be highlighted\r\n * @param {number} value - the delta value\r\n * @param {string} type - type of estimates\r\n * @return {bool} true if it should be highlighted\r\n */\r\nexport function isPositive(value, type = 'default') {\r\n return type === ESTIMATE_TYPES.COST ? value <= 0 : value > 0;\r\n}\r\n\r\n/**\r\n *\r\n *\r\n * @param {object} $el - element\r\n * @param {number} extra - extra bottom need to show\r\n * @returns {boolean} if bottom of the element in screen\r\n */\r\nexport function checkBottomInScreen($el, extra = 0) {\r\n return ($el.offset().top + $el.outerHeight() > $(document).scrollTop()) &&\r\n ($el.offset().top + $el.outerHeight() + extra < $(window).height() + $(document).scrollTop());\r\n}\r\n\r\n/**\r\n *\r\n *\r\n * @param {object} $el - element\r\n * @param {number} extra - extra bottom need to show\r\n * @returns {boolean} if the element will extend the height of document return false else true\r\n */\r\nexport function CheckDocBottomMargin($el, extra = 0) {\r\n return $el.offset().top + $el.outerHeight() + extra < $(document).height();\r\n}\r\n\r\nexport function dismissFeedback(op) {\r\n const {\r\n campaignId,\r\n currentActivity,\r\n feedback: { preference, reason },\r\n preferencesService,\r\n rejectAutoApplySuggestedAds,\r\n context,\r\n guid,\r\n isMCC,\r\n } = op;\r\n const { type, expireTime } = preference;\r\n let api = ADINSIGHT_LOG_API_NAME.RECOMMENDATION;\r\n let channel = isMCC ? CHANNEL_TYPES.MCCRECOMMENDATION : CHANNEL_TYPES.RECOMMENDATION;\r\n\r\n if (isCompetition(type)) {\r\n api = ADINSIGHT_LOG_API_NAME.COMPETITION;\r\n channel = CHANNEL_TYPES.COMPETITION;\r\n }\r\n currentActivity.trace({\r\n type: type || '',\r\n typeId: RECOMMENDATION_IDS[type],\r\n action: ADINSIGHT_LOG_ACTION_TYPE.FEEDBACK,\r\n input: reason,\r\n campaignId,\r\n channel,\r\n context: JSON.stringify(context),\r\n guid,\r\n }, api);\r\n const name = rejectAutoApplySuggestedAds ?\r\n CAMPAIGN_TYPES.RejectAutoApplySuggestedAds :\r\n CAMPAIGN_TYPES.DismissFeedback;\r\n\r\n saveRecommendationPreferences(\r\n {\r\n [name]: { [type]: expireTime },\r\n },\r\n preferencesService\r\n );\r\n}\r\n\r\nexport function hideInContextRecommendation(op) {\r\n const {\r\n levelAt,\r\n id,\r\n type,\r\n currentActivity,\r\n preferencesService,\r\n channel,\r\n campaignId,\r\n context,\r\n isCardView,\r\n guid,\r\n } = op;\r\n\r\n currentActivity.trace({\r\n type,\r\n typeId: RECOMMENDATION_IDS[type],\r\n action: ADINSIGHT_LOG_ACTION_TYPE.HIDE,\r\n channel,\r\n campaignId,\r\n context: JSON.stringify(context),\r\n guid,\r\n }, ADINSIGHT_LOG_API_NAME.RECOMMENDATION);\r\n const name = isCardView ?\r\n PREFERENCES_ACTION_TYPES.HidedRecommendationCards :\r\n PREFERENCES_ACTION_TYPES.HidedRecommendationBanner;\r\n const preferences = getRecommendationPreferences(preferencesService);\r\n const levelPreferences = _.chain(preferences)\r\n .result(`${name}`)\r\n .result(`${type}`)\r\n .result(`${levelAt}`, [])\r\n .value();\r\n\r\n levelPreferences.push(id);\r\n\r\n saveRecommendationPreferences(\r\n {\r\n [name]: {\r\n [type]: {\r\n [levelAt]: levelPreferences,\r\n },\r\n },\r\n },\r\n preferencesService\r\n );\r\n}\r\n\r\nexport function isShowAutoApplyFeedback(op) {\r\n const { preferencesService, type, rejectAutoApplySuggestedAds } = op;\r\n const data = getRecommendationPreferences(preferencesService);\r\n const preference = data[rejectAutoApplySuggestedAds ?\r\n CAMPAIGN_TYPES.RejectAutoApplySuggestedAds :\r\n CAMPAIGN_TYPES.DismissFeedback];\r\n if (!RECOMMENDATION_DISMISS_FEEDBACK_TYPE[type]) {\r\n return false;\r\n }\r\n if (preference && preference[type]) {\r\n return Date.now() > preference[type];\r\n }\r\n return true;\r\n}\r\n\r\nexport function getChannel(\r\n type,\r\n isInContext,\r\n isMCC = false,\r\n isOverviewPage = false,\r\n inContextCard = false\r\n) {\r\n if (isCompetition(type)) {\r\n return CHANNEL_TYPES.COMPETITION;\r\n } else if (isInContext) {\r\n return CHANNEL_TYPES.INCONTEXT;\r\n } else if (isMCC && isOverviewPage) {\r\n return CHANNEL_TYPES.MCCOVERVIEW;\r\n } else if (isMCC) {\r\n return CHANNEL_TYPES.MCCRECOMMENDATION;\r\n } else if (inContextCard) {\r\n return CHANNEL_TYPES.INCONTEXTCARD;\r\n }\r\n return CHANNEL_TYPES.RECOMMENDATION;\r\n}\r\n\r\n/**\r\n * group UserInputs to {AccountId: [Userinputs]} for bulk apply\r\n *\r\n * @param {object} options - options\r\n * @param {array} options.userInputs - ungrouped userInputs\r\n * @param {array} options.opportunities - opportunities,\r\n * the options.userInputs must generate from users.opportunities\r\n * @returns {object} grouped userinputs\r\n */\r\nexport function groupUserInputs({\r\n userInputs,\r\n opportunities,\r\n}) {\r\n const groupedInputs = {};\r\n\r\n _.map(userInputs, (userInput) => {\r\n const opportunity = _.find(\r\n opportunities,\r\n oppo => oppo.OpportunityId === userInput.OpportunityId\r\n );\r\n const accountId = opportunity.Target.AccountId;\r\n if (!_.isUndefined(groupedInputs[accountId])) {\r\n groupedInputs[accountId].push(userInput);\r\n } else {\r\n groupedInputs[accountId] = [userInput];\r\n }\r\n });\r\n\r\n return _.map(groupedInputs, (val, key) => ({\r\n Key: parseInt(key, 10),\r\n Value: val,\r\n }));\r\n}\r\n\r\n/**\r\n * format MT date to human readable string with time zone\r\n *\r\n * @param {int} startDate - startDate in int style\r\n * @param {object} i18n - i18n\r\n * @param {int} timeZone - time zone in int\r\n * @returns {string} human readable date string\r\n */\r\nexport function formatStartDate(startDate, i18n, timeZone) {\r\n const applyDateStr = startDate.toString();\r\n const applyDate = i18n.parseDate(`${applyDateStr.substring(0, 4)}/${applyDateStr.substring(4)}`, { raw: 'yyyy/MMddHHmmss', timeZone: 'UTC' });\r\n const accountTimeZone = toIANATimeZone(fromLegacyTimeZone(timeZone));\r\n return i18n.formatDate(_.max([applyDate, new Date()]), { timeZone: accountTimeZone });\r\n}\r\n\r\nexport function getIconClasses(statusId, count) {\r\n const classes = {};\r\n let cur = 0;\r\n\r\n while (cur < count) {\r\n if (cur === statusId) {\r\n classes[`icon${cur}`] = 'status-current';\r\n } else if (cur < statusId) {\r\n classes[`icon${cur}`] = 'status-complete';\r\n } else {\r\n classes[`icon${cur}`] = 'status-next';\r\n }\r\n cur += 1;\r\n }\r\n return classes;\r\n}\r\n\r\nexport function getNewTextConfigByPermission(recommendationType, permissions = {}, configType) {\r\n const config = recommendationNewTextConfigs[recommendationType];\r\n let newConfig;\r\n\r\n if (config && permissions[config.permission]) {\r\n newConfig = config[configType];\r\n }\r\n return newConfig;\r\n}\r\n\r\nexport function getShiftedDate(shift) {\r\n const now = new Date();\r\n const shiftedDate = new Date(now.setDate(now.getDate() + (shift || 0)));\r\n\r\n return shiftedDate.toISOString().slice(0, 10);\r\n}\r\n\r\nexport const getDestUrlData = (\r\n destUrlCurrentSetting,\r\n destUrlSuggestedSetting,\r\n goalOperatorTypes,\r\n i18n\r\n) => ({\r\n currentDestinationURLOperatorName:\r\n goalOperatorTypes[destUrlCurrentSetting.DestinationURLOperatorCode] ?\r\n i18n.getString(goalOperatorTypes[destUrlCurrentSetting.DestinationURLOperatorCode])\r\n : destUrlCurrentSetting.DestinationURLOperatorName,\r\n currentDestinationUrl: destUrlCurrentSetting.DestinationUrl,\r\n suggestedDestinationURLOperatorName:\r\n goalOperatorTypes[destUrlSuggestedSetting.DestinationURLOperatorCode] ?\r\n i18n.getString(goalOperatorTypes[destUrlSuggestedSetting.DestinationURLOperatorCode])\r\n : destUrlSuggestedSetting.DestinationURLOperatorName,\r\n suggestedDestinationUrl: destUrlSuggestedSetting.DestinationUrl,\r\n});\r\n\r\nexport const getEventData = (\r\n eventCurrentSetting,\r\n eventSuggestedSetting,\r\n goalOperatorTypes,\r\n i18n\r\n) => ({\r\n categoryTitle: i18n.getString('UnifiedEventTracking_Goal_Creation_Type_Event_Category'),\r\n currentCategoryName: eventCurrentSetting.Category,\r\n currentCategoryOperatorName:\r\n goalOperatorTypes[eventCurrentSetting.CategoryOperatorCode] ?\r\n i18n.getString(goalOperatorTypes[eventCurrentSetting.CategoryOperatorCode])\r\n : eventCurrentSetting.CategoryOperatorName,\r\n suggestedCategoryName: eventSuggestedSetting.Category,\r\n suggestedCategoryOperatorName:\r\n goalOperatorTypes[eventSuggestedSetting.CategoryOperatorCode] ?\r\n i18n.getString(goalOperatorTypes[eventSuggestedSetting.CategoryOperatorCode])\r\n : eventSuggestedSetting.CategoryOperatorName,\r\n actionTitle: i18n.getString('UnifiedEventTracking_Goal_Creation_Type_Event_Action'),\r\n currentActionName: eventCurrentSetting.Action,\r\n currentActionOperatorName:\r\n goalOperatorTypes[eventCurrentSetting.ActionOperatorCode] ?\r\n i18n.getString(goalOperatorTypes[eventCurrentSetting.ActionOperatorCode])\r\n : eventCurrentSetting.ActionOperatorName,\r\n suggestedActionName: eventSuggestedSetting.Action,\r\n suggesteActionOperatorName:\r\n goalOperatorTypes[eventSuggestedSetting.ActionOperatorCode] ?\r\n i18n.getString(goalOperatorTypes[eventSuggestedSetting.ActionOperatorCode])\r\n : eventSuggestedSetting.CategoryOperatorName,\r\n labelTitle: i18n.getString('UnifiedEventTracking_Goal_Creation_Type_Event_Label'),\r\n currentLabelName: eventCurrentSetting.Label,\r\n currentLabelOperatorName:\r\n goalOperatorTypes[eventCurrentSetting.LabelOperatorCode] ?\r\n i18n.getString(goalOperatorTypes[eventCurrentSetting.LabelOperatorCode])\r\n : eventCurrentSetting.LabelOperatorName,\r\n suggestedLabelName: eventSuggestedSetting.Label,\r\n suggestedLabelOperatorName:\r\n goalOperatorTypes[eventSuggestedSetting.LabelOperatorCode] ?\r\n i18n.getString(goalOperatorTypes[eventSuggestedSetting.LabelOperatorCode])\r\n : eventSuggestedSetting.LabelOperatorName,\r\n valueTitle: i18n.getString('UnifiedEventTracking_Goal_Creation_Type_Event_Value'),\r\n currentValueName: eventCurrentSetting.Value,\r\n currentValueOperatorName:\r\n goalOperatorTypes[eventCurrentSetting.ValueOperatorCode] ?\r\n i18n.getString(goalOperatorTypes[eventCurrentSetting.ValueOperatorCode])\r\n : eventCurrentSetting.ValueOperatorName,\r\n suggestedValueName: eventSuggestedSetting.Value,\r\n suggesteValueOperatorName:\r\n goalOperatorTypes[eventSuggestedSetting.ValueOperatorCode] ?\r\n i18n.getString(goalOperatorTypes[eventSuggestedSetting.ValueOperatorCode])\r\n : eventSuggestedSetting.ValueOperatorName,\r\n});\r\n\r\nexport function isPlural(value) {\r\n return value > 1 ? 'Plural' : 'Singular';\r\n}\r\n\r\nexport const getEditorialErrorMessage = (policyCode) => {\r\n const policyErrorStr = `Error_Editorial_Raw_${policyCode}`;\r\n let editorialErrorMessage = editorialErrorCodeToErrorMessageMapping[policyErrorStr];\r\n if (_.isUndefined(editorialErrorMessage)) {\r\n editorialErrorMessage = editorialErrorCodeToErrorMessageMapping.EditorialReasons_Default;\r\n }\r\n return editorialErrorMessage;\r\n};\r\n\r\nexport const isDFMEnabled = () => {\r\n const previousRoute = _.property(['state', 'state', 'previousRoute'])(history);\r\n return _.isUndefined(previousRoute)\r\n || (previousRoute && !previousRoute.includes('/recommendations/'));\r\n};\r\n\r\nexport const getImageExtensionPageSize = (permissions) => {\r\n let pageSize = RECOMMENDATION_IMAGE_EXTENSION_PAGE_SIZES.slice();\r\n if (permissions.IsRecommendationIncreaseImageExtensionPageSizePhase2Enabled) {\r\n pageSize = RECOMMENDATION_IMAGE_EXTENSION_PAGE_SIZES_TWENTY.slice();\r\n } else if (permissions.IsRecommendationIncreaseImageExtensionPageSizePhase1Enabled) {\r\n pageSize = RECOMMENDATION_IMAGE_EXTENSION_PAGE_SIZES_TEN.slice();\r\n }\r\n return pageSize;\r\n};\r\n\r\nexport const getFieldValueFromGridData = (gridData, field) => {\r\n let value;\r\n const campaignGridData = _.first(_.where(gridData, { Type: 'Campaign' }));\r\n const adGroupProductPartitionGridData = _.first(_.where(gridData, { Type: 'Ad Group Product Partition' }));\r\n if (!_.isUndefined(campaignGridData)) {\r\n if (field === 'CampaignName') {\r\n value = campaignGridData.CampaignName;\r\n } else if (field === 'AdGroupName') {\r\n value = adGroupProductPartitionGridData.AdGroupName;\r\n } else if (field === 'ProductCondition1') {\r\n value = adGroupProductPartitionGridData.ProductCondition1;\r\n } else if (field === 'Bid') {\r\n value = adGroupProductPartitionGridData.Bid;\r\n } else if (field === 'Budget') {\r\n value = campaignGridData.Budget;\r\n } else if (field === 'Priority') {\r\n value = campaignGridData.Priority;\r\n } else if (field === 'StoreId') {\r\n value = campaignGridData.StoreId;\r\n }\r\n }\r\n return value;\r\n};\r\n","import _ from 'underscore';\r\n\r\nimport {\r\n RECOMMENDATION_TYPES,\r\n ESTIMATE_TYPES,\r\n VISUAL_TYPES,\r\n VISUAL_TABLE_ENABLED_SCOPES,\r\n} from './consts';\r\n\r\nimport { formatCost, formatPercent, formatBid, formatDecimal } from './formatter/index';\r\nimport { isPlural } from './util';\r\n\r\nfunction buildActionGridDataForBidBoost({\r\n recommendation,\r\n i18n,\r\n currency,\r\n}, useBid = false) {\r\n const {\r\n opportunities,\r\n bidCurrent,\r\n currentBidAdjustmentPercent,\r\n imprShareCurrent,\r\n costCurrent,\r\n } = recommendation;\r\n const formatCostWithi18n = _.partial(formatCost, _, i18n, currency);\r\n const formatPercentWithi18n = _.partial(formatPercent, _, i18n);\r\n const formatBidWithi18n = _.partial(formatBid, _, i18n, currency);\r\n const formatDecimalWithi18n = _.partial(formatDecimal, _, i18n);\r\n\r\n const bodies = _.map(opportunities, (opportunity) => {\r\n const newBidOrAdjustment = useBid ?\r\n formatBidWithi18n(opportunity.suggestedBid) :\r\n formatPercentWithi18n(opportunity.suggestedBidAdjustmentPercent / 100);\r\n const competitorImprShareIncrease = `${formatPercentWithi18n(opportunity.imprShareIncrease)} ${i18n.getString('Summary_Card_Estimate_Points')}`;\r\n const competitorTotalImprShare = formatPercentWithi18n(opportunity.totalImprShare);\r\n const competitorWeeklyCost = formatCostWithi18n(opportunity.weeklyCost);\r\n const competitorImprShare = formatPercentWithi18n(opportunity.competitorImprShare);\r\n const competitorClicksIncrease = formatDecimalWithi18n(opportunity.clicksIncrease);\r\n const competitorConversionsIncrease = formatDecimalWithi18n(opportunity.convIncrease);\r\n\r\n return [\r\n newBidOrAdjustment,\r\n competitorImprShareIncrease,\r\n competitorTotalImprShare,\r\n competitorClicksIncrease,\r\n competitorConversionsIncrease,\r\n competitorWeeklyCost,\r\n opportunity.competitorDomain,\r\n competitorImprShare,\r\n ];\r\n });\r\n const currentBidOrAdjustment = useBid ?\r\n formatBidWithi18n(bidCurrent) : formatPercentWithi18n(currentBidAdjustmentPercent / 100);\r\n const currentTotalImprShare = formatPercentWithi18n(imprShareCurrent);\r\n const currentWeeklyCost = formatCostWithi18n(costCurrent);\r\n const ZERO_PERCENT = `${formatPercentWithi18n(0)} ${i18n.getString('Summary_Card_Estimate_Points')}`;\r\n const ZERO = '0'; // no format should be needed\r\n\r\n bodies.push([\r\n currentBidOrAdjustment,\r\n ZERO_PERCENT,\r\n currentTotalImprShare,\r\n ZERO,\r\n ZERO,\r\n currentWeeklyCost,\r\n '',\r\n '']);\r\n return bodies;\r\n}\r\n\r\nfunction buildActionGridDataForNewLocation({\r\n recommendation,\r\n i18n,\r\n currency,\r\n}) {\r\n const bodies = _.map(recommendation.opportunities, (opportunity) => {\r\n const recommendedLoc = opportunity.location;\r\n const searchQueryVolume = formatDecimal(opportunity.searchQueryVolume, i18n);\r\n const imprIncrease = formatDecimal(opportunity.impressionsIncrease, i18n);\r\n const costIncrease = formatCost(opportunity.costIncrease, i18n, currency);\r\n const clicksIncrease = formatDecimal(opportunity.clicksIncrease, i18n);\r\n\r\n return [\r\n recommendedLoc,\r\n searchQueryVolume,\r\n imprIncrease,\r\n clicksIncrease,\r\n costIncrease,\r\n ];\r\n });\r\n\r\n return bodies;\r\n}\r\n\r\nexport const recommendationConfigs = {\r\n [RECOMMENDATION_TYPES.BUDGET]: {\r\n summaryTitle: 'Summary_Card_Title_Budget',\r\n summaryIconClasses: 'recommendation-budget-icon',\r\n summaryIconClassesVNext: 'Financial',\r\n detailDescription: 'Summary_Card_Detail_Description_Budget',\r\n detailPitching: 'Summary_Card_Detail_Pitching_Budget',\r\n detailHelpId: 'ext56677',\r\n sampleInsight: 'Summary_Card_Sample_Insight_Budget',\r\n sampleActionHeaders: [\r\n 'Summary_Card_Action_Header_Buget_Increase',\r\n 'Summary_Card_Action_Header_Est_Impression_Share',\r\n ],\r\n primaryEstimateType: ESTIMATE_TYPES.IMPRESSION_SHARE,\r\n secondaryEstimateType: ESTIMATE_TYPES.CLICKS,\r\n costEstimateType: ESTIMATE_TYPES.COST,\r\n isPrimaryFromToEnabled: true,\r\n visualType: VISUAL_TYPES.LINE_WEEKLY_CHART,\r\n recommendation: {\r\n actionTitle: 'Details_View_Modify_Budget',\r\n insightTitle: {\r\n key: 'Details_View_Budget_Insight',\r\n config: {\r\n useCampaignName: true,\r\n },\r\n },\r\n actionDataInForm: [{\r\n label: 'Details_View_Current_Budget',\r\n property: 'budgetCurrent',\r\n formatter: formatDecimal,\r\n }, {\r\n label: 'Details_View_Suggested_Budget',\r\n property: 'budgetSuggested',\r\n type: 'input',\r\n formatter: formatCost,\r\n placeHolder: 'Details_View_Suggested_Budget_Placeholder',\r\n }],\r\n },\r\n },\r\n [RECOMMENDATION_TYPES.COMPETITIVE_BID]: {\r\n summaryTitle: 'Summary_Card_Title_Competitive_Bid',\r\n summaryIconClasses: 'recommendation-bid-icon',\r\n summaryIconClassesVNext: 'WebConversion',\r\n detailDescription: 'Summary_Card_Detail_Description_Competitive_Bid',\r\n detailPitching: 'Summary_Card_Detail_Pitching_Competitive_Bid',\r\n detailHelpId: 'ext53092',\r\n sampleInsight: 'Summary_Card_Sample_Insight_Competitive_Bid',\r\n sampleActionHeaders: [\r\n 'Summary_Card_Action_Header_Keyword',\r\n 'Summary_Card_Action_Header_Suggested_Bid',\r\n 'Summary_Card_Action_Header_Est_Impressions',\r\n ],\r\n primaryEstimateType: ESTIMATE_TYPES.IMPRESSION_SHARE,\r\n secondaryEstimateType: ESTIMATE_TYPES.CLICKS,\r\n costEstimateType: ESTIMATE_TYPES.COST,\r\n isPrimaryFromToEnabled: true,\r\n visualType: VISUAL_TYPES.LINE_COLUMN_CHART,\r\n recommendation: {\r\n insightTitle: {\r\n key: 'Details_View_Competitive_Bid_Insight',\r\n config: {\r\n useAdGroupName: true,\r\n },\r\n },\r\n actionTitle: 'Details_View_Increase_Keyword_Bid',\r\n actionGrid: {\r\n dataBuilder: _.partial(buildActionGridDataForBidBoost, _, true),\r\n columns: [{\r\n header: 'Details_View_Action_Header_New_Bid',\r\n }, {\r\n header: 'Details_View_Action_Header_Impression_Share_Change',\r\n isIncrease: true,\r\n }, {\r\n header: 'Details_View_Action_Header_Total_Impression_Share',\r\n }, {\r\n header: 'Details_View_Action_Header_Estimate_Clicks',\r\n isIncrease: true,\r\n }, {\r\n header: 'Details_View_Action_Header_Estimate_Conversions',\r\n isIncrease: true,\r\n autoHide: true,\r\n }, {\r\n header: 'Details_View_Action_Header_Weekly_Spend',\r\n }, {\r\n header: 'Details_View_Action_Header_Competitor_Domain',\r\n enableCheckedIcon: true,\r\n }, {\r\n header: 'Details_View_Action_Header_Competitor_Impresssion_Share',\r\n }],\r\n singleSelection: true,\r\n hasLastRowAsCurrent: true,\r\n },\r\n },\r\n },\r\n [RECOMMENDATION_TYPES.DEVICE_BID_BOOST]: {\r\n summaryTitle: 'Summary_Card_Title_Device_Bid_Boost',\r\n summaryIconClasses: 'recommendation-bid-icon',\r\n summaryIconClassesVNext: 'WebConversion',\r\n detailDescription: 'Summary_Card_Detail_Description_Device_Bid_Boost',\r\n detailPitching: 'Summary_Card_Detail_Pitching_Device_Bid_Boost',\r\n detailHelpId: 'ext51004',\r\n sampleInsight: 'Summary_Card_Sample_Insight_Device_Bid_Boost',\r\n sampleActionHeaders: [\r\n 'Summary_Card_Action_Header_Device_Type',\r\n 'Summary_Card_Action_Header_Increase_Bid',\r\n 'Summary_Card_Action_Header_Est_Impression_Share',\r\n ],\r\n primaryEstimateType: ESTIMATE_TYPES.IMPRESSION_SHARE,\r\n secondaryEstimateType: ESTIMATE_TYPES.CLICKS,\r\n costEstimateType: ESTIMATE_TYPES.COST,\r\n isPrimaryFromToEnabled: true,\r\n visualType: VISUAL_TYPES.COLUMN_CHART,\r\n recommendation: {\r\n insightTitle: {\r\n key: 'Details_View_Device_Bid_Boost_Insight',\r\n config: {\r\n useLevelInComputingEntityName: true,\r\n compareWithCompetitor: true,\r\n },\r\n },\r\n actionTitle: {\r\n key: 'Details_View_Increase_Device_Bid_Boost',\r\n config: {\r\n useSegment: true,\r\n },\r\n },\r\n actionGrid: {\r\n dataBuilder: buildActionGridDataForBidBoost,\r\n columns: [{\r\n header: 'Details_View_Action_Header_New_Bid_Adjustment',\r\n isIncrease: true,\r\n }, {\r\n header: 'Details_View_Action_Header_Impression_Share_Change',\r\n isIncrease: true,\r\n }, {\r\n header: 'Details_View_Action_Header_Total_Impression_Share',\r\n }, {\r\n header: 'Details_View_Action_Header_Estimate_Clicks',\r\n isIncrease: true,\r\n }, {\r\n header: 'Details_View_Action_Header_Estimate_Conversions',\r\n isIncrease: true,\r\n autoHide: true,\r\n }, {\r\n header: 'Details_View_Action_Header_Weekly_Spend',\r\n }, {\r\n header: 'Details_View_Action_Header_Competitor_Domain',\r\n enableCheckedIcon: true,\r\n }, {\r\n header: 'Details_View_Action_Header_Competitor_Impresssion_Share',\r\n }],\r\n singleSelection: true,\r\n hasLastRowAsCurrent: true,\r\n },\r\n },\r\n },\r\n [RECOMMENDATION_TYPES.LOCATION_BID_BOOST]: {\r\n summaryTitle: 'Summary_Card_Title_Location_Bid_Boost',\r\n summaryIconClasses: 'recommendation-bid-icon',\r\n summaryIconClassesVNext: 'WebConversion',\r\n detailDescription: 'Summary_Card_Detail_Description_Location_Bid_Boost',\r\n detailPitching: 'Summary_Card_Detail_Pitching_Location_Bid_Boost',\r\n detailHelpId: 'ext51100',\r\n sampleInsight: 'Summary_Card_Sample_Insight_Location_Bid_Boost',\r\n sampleActionHeaders: [\r\n 'Summary_Card_Action_Header_Location',\r\n 'Summary_Card_Action_Header_Increase_Bid',\r\n 'Summary_Card_Action_Header_Est_Impression_Share',\r\n ],\r\n primaryEstimateType: ESTIMATE_TYPES.IMPRESSION_SHARE,\r\n secondaryEstimateType: ESTIMATE_TYPES.CLICKS,\r\n costEstimateType: ESTIMATE_TYPES.COST,\r\n isPrimaryFromToEnabled: true,\r\n visualType: VISUAL_TYPES.COLUMN_CHART,\r\n recommendation: {\r\n insightTitle: {\r\n key: 'Details_View_Location_Bid_Boost_Insight',\r\n config: {\r\n useLevelInComputingEntityName: true,\r\n compareWithCompetitor: true,\r\n },\r\n },\r\n actionTitle: 'Details_View_Increase_Location_Bid_Boost',\r\n actionGrid: {\r\n dataBuilder: buildActionGridDataForBidBoost,\r\n columns: [{\r\n header: 'Details_View_Action_Header_New_Bid_Adjustment',\r\n isIncrease: true,\r\n }, {\r\n header: 'Details_View_Action_Header_Impression_Share_Change',\r\n isIncrease: true,\r\n }, {\r\n header: 'Details_View_Action_Header_Total_Impression_Share',\r\n }, {\r\n header: 'Details_View_Action_Header_Estimate_Clicks',\r\n isIncrease: true,\r\n }, {\r\n header: 'Details_View_Action_Header_Estimate_Conversions',\r\n isIncrease: true,\r\n autoHide: true,\r\n }, {\r\n header: 'Details_View_Action_Header_Weekly_Spend',\r\n }, {\r\n header: 'Details_View_Action_Header_Competitor_Domain',\r\n enableCheckedIcon: true,\r\n }, {\r\n header: 'Details_View_Action_Header_Competitor_Impresssion_Share',\r\n }],\r\n singleSelection: true,\r\n hasLastRowAsCurrent: true,\r\n },\r\n postprocessor(data, recommendation, i18n) {\r\n if (_.isUndefined(recommendation.targetGroupId) ||\r\n _.isNull(recommendation.targetGroupId) ||\r\n recommendation.targetGroupId === '') {\r\n /* eslint-disable no-param-reassign */\r\n data.actionTitle = i18n.getString('Details_View_Target_Location_Bid_Boost');\r\n data.actionDataInGrid.hasLastRowAsCurrent = false;\r\n data.actionDataInGrid.bodies.pop();\r\n data.actionTitleExtraForm = [{\r\n label: i18n.getString('Details_View_Action_Header_Target_Location'),\r\n property: 'segment',\r\n value: recommendation.segment.toString(),\r\n }];\r\n /* eslint-enable no-param-reassign */\r\n }\r\n },\r\n },\r\n },\r\n // deprecated in Oct 2023\r\n [RECOMMENDATION_TYPES.NEW_KEYWORD]: {\r\n summaryTitle: 'Summary_Card_Title_New_Keyword',\r\n summaryIconClasses: 'recommendation-keyword-icon',\r\n summaryIconClassesVNext: 'SearchCampaigns',\r\n detailDescription: 'Summary_Card_Detail_Description_New_Keyword',\r\n detailPitching: 'Summary_Card_Detail_Pitching_New_Keyword',\r\n detailHelpId: 'ext51010',\r\n sampleInsight: 'Summary_Card_Sample_Insight_New_Keyword',\r\n primaryEstimateType: ESTIMATE_TYPES.IMPRESSIONS,\r\n secondaryEstimateType: ESTIMATE_TYPES.CLICKS,\r\n costEstimateType: ESTIMATE_TYPES.COST,\r\n isPrimaryFromToEnabled: true,\r\n visualType: VISUAL_TYPES.TABLE,\r\n visualTableHeaders: [\r\n 'Summary_Card_Action_Header_Suggested_Keyword',\r\n /* 'Summary_Card_Action_Header_Monthly_Search_Volume',\r\n //bug 1457951: disable until est. weekly search volume is available */\r\n 'Summary_Card_Action_Header_Suggested_Bid',\r\n 'Summary_Card_Action_Header_Est_Impressions',\r\n ],\r\n recommendation: {\r\n visualType: VISUAL_TYPES.SEARCH_TERMS_CHART,\r\n actionTitle: 'Details_View_Add_Keyword',\r\n insightTitle: {\r\n key: 'Details_View_Keyword_Insight',\r\n config: {\r\n useAdGroupName: true,\r\n },\r\n },\r\n visualData: [{\r\n label: 'Details_View_Insight_Suggested_Keyword',\r\n property: 'suggestedKeyword',\r\n }, {\r\n label: 'Details_View_Insight_Search_Query',\r\n property: 'monthlyQueryVolume',\r\n formatter: formatDecimal,\r\n }],\r\n actionDataInForm: [{\r\n label: 'Details_View_Keyword',\r\n property: 'suggestedKeyword',\r\n }, {\r\n label: 'Details_View_Suggested_Keyword_Bid',\r\n type: 'input',\r\n property: 'suggestedBid',\r\n formatter: formatBid,\r\n placeHolder: 'Details_View_Suggested_Keyword_Bid_Placeholder',\r\n }, {\r\n label: 'Details_View_Match_Type',\r\n type: 'select',\r\n property: 'matchType',\r\n enum: [{\r\n value: '1',\r\n text: 'Details_View_Match_Type_Exact',\r\n }, {\r\n value: '2',\r\n text: 'Details_View_Match_Type_Phrase',\r\n }, {\r\n value: '3',\r\n text: 'Details_View_Match_Type_Broad',\r\n }],\r\n }],\r\n },\r\n },\r\n [RECOMMENDATION_TYPES.NEW_LOCATION]: {\r\n summaryTitle: 'Summary_Card_Title_New_Location',\r\n summaryIconClasses: 'recommendation-targeting-icon',\r\n summaryIconClassesVNext: 'POI',\r\n detailDescription: 'Summary_Card_Detail_Description_New_Location',\r\n detailPitching: 'Summary_Card_Detail_Pitching_New_Location',\r\n detailHelpId: 'ext51100',\r\n sampleInsight: 'Summary_Card_Sample_Insight_New_Location',\r\n sampleActionHeaders: [\r\n 'Summary_Card_Action_Header_Target_Location',\r\n 'Summary_Card_Action_Header_Est_Impressions',\r\n ],\r\n primaryEstimateType: ESTIMATE_TYPES.IMPRESSIONS,\r\n secondaryEstimateType: ESTIMATE_TYPES.CLICKS,\r\n costEstimateType: ESTIMATE_TYPES.COST,\r\n isPrimaryFromToEnabled: true,\r\n visualType: VISUAL_TYPES.MAP,\r\n recommendation: {\r\n actionTitle: 'Details_View_Add_New_Location',\r\n insightTitle: {\r\n key: 'Details_View_New_Location_Insight',\r\n config: {\r\n useCampaignName: true,\r\n useOpportunityCount: true,\r\n },\r\n },\r\n opportunities: [{}],\r\n actionGrid: {\r\n dataBuilder: buildActionGridDataForNewLocation,\r\n columns: [{\r\n header: 'Details_View_Action_Header_Recommended_Locations',\r\n }, {\r\n header: 'Details_View_Action_Header_Query_Volume',\r\n }, {\r\n header: 'Details_View_Action_Header_Estimate_Impressions',\r\n isIncrease: true,\r\n }, {\r\n header: 'Details_View_Action_Header_Estimate_Clicks',\r\n isIncrease: true,\r\n }, {\r\n header: 'Details_View_Action_Header_Estimate_Spend',\r\n isIncrease: true,\r\n }],\r\n singleSelection: false,\r\n helpTopics: [\r\n 'pop_BA_CompetitionTab_RecommendedLocations',\r\n 'pop_BA_CompetitionTab_Searchvolume',\r\n 'pop_BA_CompetitionTab_EstImpr',\r\n ],\r\n },\r\n },\r\n },\r\n [RECOMMENDATION_TYPES.SYNDICATION]: {\r\n summaryTitle: 'Summary_Card_Title_Syndication',\r\n summaryIconClasses: 'recommendation-targeting-icon',\r\n summaryIconClassesVNext: 'POI',\r\n detailDescription: 'Summary_Card_Detail_Description_Syndication',\r\n detailPitching: 'Summary_Card_Detail_Pitching_Syndication',\r\n detailHelpId: 'ext52031',\r\n sampleInsight: 'Summary_Card_Sample_Insight_Syndication',\r\n primaryEstimateType: ESTIMATE_TYPES.IMPRESSIONS,\r\n secondaryEstimateType: ESTIMATE_TYPES.CLICKS,\r\n costEstimateType: ESTIMATE_TYPES.COST,\r\n isPrimaryFromToEnabled: true,\r\n visualType: VISUAL_TYPES.TABLE,\r\n visualTableHeaders: [\r\n 'Summary_Card_Action_Header_Campaign',\r\n 'Summary_Card_Action_Header_AdGroup',\r\n 'Summary_Card_Action_Header_Adoption_Percentage',\r\n 'Summary_Card_Action_Header_Est_Change_Impressions',\r\n ],\r\n recommendation: {\r\n insightTitle: {\r\n key: 'Summary_Card_Sample_Insight_Syndication',\r\n config: {\r\n useAdGroupName: true,\r\n },\r\n },\r\n visualData: [{\r\n label: 'Details_View_Syndication_Insight_Adoption_Label',\r\n useProgressBar: true,\r\n property: 'adoptionPercent',\r\n formatter: (propertyValue, i18n) => formatPercent(propertyValue / 100, i18n),\r\n }],\r\n actionDataInForm: [{\r\n text: 'Details_View_Syndication_Action_Text',\r\n helpText: 'Details_View_Syndication_Action_Help_Text',\r\n helpQuery: 'ext56674',\r\n type: 'info',\r\n }],\r\n },\r\n },\r\n [RECOMMENDATION_TYPES.NEW_KEYWORD_OPPORTUNITY]: {\r\n summaryTitle: 'Summary_Card_Title_New_Keyword_Opportunity',\r\n summaryIconClasses: 'recommendation-keyword-icon',\r\n summaryIconClassesVNext: 'SearchCampaigns',\r\n detailDescription: 'Summary_Card_Detail_Description_New_Keyword_Opportunity',\r\n detailPitching: 'Summary_Card_Detail_Pitching_New_Keyword_Opportunity',\r\n detailHelpId: 'ext51010',\r\n visualType: VISUAL_TYPES.TABLE,\r\n visualTableScope: VISUAL_TABLE_ENABLED_SCOPES.ADGROUP,\r\n visualTableHeaders: [\r\n 'Summary_Card_Action_Header_Recommended_Keyword',\r\n 'Summary_Card_Action_Header_Recommended_From',\r\n ],\r\n },\r\n [RECOMMENDATION_TYPES.TRENDING_QUERY]: {\r\n summaryTitle: 'Summary_Card_Title_Trending_Query',\r\n summaryIconClasses: 'recommendation-keyword-icon',\r\n summaryIconClassesVNext: 'SearchCampaigns',\r\n detailDescription: 'Summary_Card_Detail_Description_Trending_Query',\r\n detailPitching: 'Summary_Card_Detail_Pitching_Trending_Query',\r\n detailHelpId: 'ext51010',\r\n visualType: VISUAL_TYPES.TABLE,\r\n visualTableScope: VISUAL_TABLE_ENABLED_SCOPES.ADGROUP,\r\n visualTableHeaders: [\r\n 'Summary_Card_Action_Header_Recommended_Keyword',\r\n 'Summary_Card_Action_Header_Recommended_Est_Search_Volume',\r\n ],\r\n },\r\n [RECOMMENDATION_TYPES.DYNAMIC_SEARCH_ADS]: {\r\n summaryTitle: 'Summary_Card_Title_Dynamic_Search_Ads',\r\n summaryIconClasses: 'recommendation-ads-icon',\r\n summaryIconClassesVNext: 'Chart',\r\n detailDescription: 'Summary_Card_Detail_Description_Dynamic_Search_Ads',\r\n detailPitching: 'Summary_Card_Detail_Pitching_Dynamic_Search_Ads',\r\n detailHelpId: 'ext56794',\r\n isPrimaryFromToEnabled: false,\r\n primaryEstimateType: ESTIMATE_TYPES.WEEKLY_SEARCHES,\r\n primaryIncreaseNullable: true,\r\n visualType: VISUAL_TYPES.TABLE,\r\n visualTableScope: VISUAL_TABLE_ENABLED_SCOPES.ACCOUNT,\r\n visualTableHeaders: [\r\n 'Summary_Card_Action_Header_Example_Of_Searches',\r\n ],\r\n },\r\n\r\n [RECOMMENDATION_TYPES.GOOGLE_IMPORT]: {\r\n summaryTitle: 'Summary_Card_Title_Google_Import',\r\n summaryIconClasses: 'recommendation-keyword-icon',\r\n summaryIconClassesVNext: 'SearchCampaigns',\r\n detailDescription: 'Summary_Card_Detail_Description_Google_Import',\r\n detailPitching: 'Summary_Card_Detail_Pitching_Google_Import',\r\n detailHelpId: 'ext51050',\r\n primaryEstimateType: ESTIMATE_TYPES.CLICKS,\r\n secondaryEstimateType: ESTIMATE_TYPES.IMPRESSIONS,\r\n isPrimaryFromToEnabled: true,\r\n visualType: VISUAL_TYPES.TABLE,\r\n visualTableHeaders: [],\r\n },\r\n [RECOMMENDATION_TYPES.GOOGLE_IMPORT_SCHEDULED]: {\r\n summaryTitle: 'Summary_Card_Title_Google_Import_Scheduled',\r\n summaryIconClasses: 'recommendation-keyword-icon',\r\n summaryIconClassesVNext: 'SearchCampaigns',\r\n detailDescription: 'Summary_Card_Detail_Description_Google_Import_Scheduled',\r\n detailPitching: 'Summary_Card_Detail_Pitching_Google_Import_Scheduled',\r\n detailHelpId: 'ext50851',\r\n primaryEstimateType: ESTIMATE_TYPES.CLICKS,\r\n secondaryEstimateType: ESTIMATE_TYPES.IMPRESSIONS,\r\n isPrimaryFromToEnabled: true,\r\n visualType: VISUAL_TYPES.TABLE,\r\n visualTableHeaders: [],\r\n },\r\n [RECOMMENDATION_TYPES.SITE_LINK]: {\r\n summaryTitle: 'Summary_Card_Title_Site_Link',\r\n summaryIconClasses: 'recommendation-extension-icon',\r\n summaryIconClassesVNext: 'Add',\r\n detailDescription: 'Summary_Card_Detail_Description_Site_Link',\r\n detailPitching: 'Summary_Card_Detail_Pitching_Site_Link',\r\n detailHelpId: 'ext56823',\r\n primaryEstimateType: ESTIMATE_TYPES.CTR,\r\n secondaryEstimateType: ESTIMATE_TYPES.CLICKS,\r\n costEstimateType: ESTIMATE_TYPES.COST,\r\n isPrimaryFromToEnabled: true,\r\n visualType: VISUAL_TYPES.TABLE,\r\n visualTableScope: VISUAL_TABLE_ENABLED_SCOPES.ACCOUNT,\r\n visualTableHeaders: [\r\n 'Summary_Card_Action_Header_Campaign',\r\n 'Summary_Card_Action_Header_Est_CTR',\r\n ],\r\n },\r\n [RECOMMENDATION_TYPES.BUDGET_OPPORTUNITY]: {\r\n summaryTitle: 'Summary_Card_Title_Budget_Opportunity',\r\n summaryIconClasses: 'recommendation-budget-icon',\r\n summaryIconClassesVNext: 'Financial',\r\n detailDescription: 'Summary_Card_Detail_Description_Budget_Opportunity',\r\n detailPitching: 'Summary_Card_Detail_Pitching_Budget_Opportunity',\r\n detailHelpId: 'ext53099',\r\n isPrimaryFromToEnabled: true,\r\n visualType: VISUAL_TYPES.TABLE,\r\n visualTableScope: VISUAL_TABLE_ENABLED_SCOPES.ACCOUNT,\r\n visualTableHeaders: [\r\n 'Summary_Card_Action_Header_Campaign',\r\n ],\r\n },\r\n [RECOMMENDATION_TYPES.ADJUST_SHARED_BUDGET_OPPORTUNITY]: {\r\n summaryTitle: 'Summary_Card_Title_Adjust_Shared_Budget_Opportunity',\r\n summaryIconClasses: 'recommendation-budget-icon',\r\n summaryIconClassesVNext: 'Financial',\r\n detailDescription: 'Summary_Card_Detail_Description_Adjust_Shared_Budget_Opportunity',\r\n detailPitching: 'Summary_Card_Detail_Pitching_Adjust_Shared_Budget_Opportunity',\r\n detailHelpId: 'ext53099', // todo\r\n isPrimaryFromToEnabled: true,\r\n visualType: VISUAL_TYPES.TABLE,\r\n visualTableScope: VISUAL_TABLE_ENABLED_SCOPES.ACCOUNT,\r\n visualTableHeaders: [\r\n 'Summary_Card_Action_Header_Shared_Budget',\r\n ],\r\n },\r\n [RECOMMENDATION_TYPES.CALLOUT]: {\r\n summaryTitle: 'Summary_Card_Title_Callout',\r\n summaryIconClasses: 'recommendation-extension-icon',\r\n summaryIconClassesVNext: 'Add',\r\n detailDescription: 'Summary_Card_Detail_Description_Callout',\r\n detailPitching: 'Summary_Card_Detail_Pitching_Callout',\r\n detailHelpId: 'ext56766',\r\n primaryEstimateType: ESTIMATE_TYPES.CTR,\r\n secondaryEstimateType: ESTIMATE_TYPES.CLICKS,\r\n costEstimateType: ESTIMATE_TYPES.COST,\r\n isPrimaryFromToEnabled: true,\r\n visualType: VISUAL_TYPES.TABLE,\r\n visualTableScope: VISUAL_TABLE_ENABLED_SCOPES.ACCOUNT,\r\n visualTableHeaders: [\r\n 'Summary_Card_Action_Header_Campaign',\r\n 'Summary_Card_Action_Header_Est_CTR',\r\n ],\r\n },\r\n [RECOMMENDATION_TYPES.REPAIR_ADS]: {\r\n summaryTitle: 'Summary_Card_Title_Repair_Ads',\r\n summaryIconClasses: 'recommendation-repair-icon',\r\n summaryIconClassesVNext: 'Error',\r\n detailDescription: 'Summary_Card_Detail_Description_Repair_Ads',\r\n detailPitching: 'Summary_Card_Detail_Pitching_Repair_Ads_Temp',\r\n detailHelpId: 'app54696',\r\n isPrimaryFromToEnabled: true,\r\n visualType: VISUAL_TYPES.TABLE,\r\n visualTableScope: VISUAL_TABLE_ENABLED_SCOPES.CAMPAIGN,\r\n visualTableHeaders: [\r\n 'Summary_Card_Action_Header_Ad_Group_Without_Ads',\r\n ],\r\n },\r\n [RECOMMENDATION_TYPES.FIX_AD_TEXT]: {\r\n summaryTitle: 'Summary_Card_Title_Fix_Ad_Text',\r\n summaryIconClasses: 'recommendation-repair-icon',\r\n summaryIconClassesVNext: 'Error',\r\n detailDescription: 'Summary_Card_Detail_Description_Fix_Ad_Text',\r\n detailPitching: 'Summary_Card_Detail_Pitching_Fix_Ad_Text',\r\n detailHelpId: 'app54725',\r\n isPrimaryFromToEnabled: false,\r\n visualType: VISUAL_TYPES.TABLE,\r\n visualTableScope: VISUAL_TABLE_ENABLED_SCOPES.CAMPAIGN,\r\n visualTableHeaders: [\r\n 'Summary_Card_Action_Header_Top_Policies',\r\n 'Summary_Card_Action_Header_Rejected_Ads',\r\n 'Summary_Card_Action_Header_Rejected_Keywords',\r\n ],\r\n isEstimate: false,\r\n },\r\n [RECOMMENDATION_TYPES.FIX_CONVERSION_TRACKING_OPPORTUNITY]: {\r\n summaryTitle: 'Summary_Card_Title_Fix_Conversion_Tracking',\r\n summaryIconClasses: 'recommendation-repair-icon',\r\n summaryIconClassesVNext: 'Error',\r\n detailDescription: 'Summary_Card_Detail_Description_Fix_Conversion_Tracking',\r\n detailPitching: 'Summary_Card_Detail_Pitching_Fix_Conversion_Tracking',\r\n detailHelpId: 'ext56951',\r\n isPrimaryFromToEnabled: false,\r\n isEstimate: false,\r\n visualType: VISUAL_TYPES.TABLE,\r\n visualTableHeaders: [],\r\n },\r\n [RECOMMENDATION_TYPES.REPAIR_KEYWORD]: {\r\n summaryTitle: 'Summary_Card_Title_Repair_Keywords',\r\n summaryIconClasses: 'recommendation-repair-icon',\r\n summaryIconClassesVNext: 'Error',\r\n detailDescription: 'Summary_Card_Detail_Description_Repair_Keywords',\r\n detailPitching: 'Summary_Card_Detail_Pitching_Repair_Keywords_Temp',\r\n detailHelpId: 'app54697',\r\n isPrimaryFromToEnabled: true,\r\n visualType: VISUAL_TYPES.TABLE,\r\n visualTableScope: VISUAL_TABLE_ENABLED_SCOPES.CAMPAIGN,\r\n visualTableHeaders: [\r\n 'Summary_Card_Action_Header_Ad_Group_Without_Keywords',\r\n ],\r\n },\r\n [RECOMMENDATION_TYPES.BROAD_MATCH_KEYWORD]: {\r\n summaryTitle: 'Summary_Card_Title_Broad_Match_Keywords',\r\n summaryIconClasses: 'recommendation-keyword-icon',\r\n summaryIconClassesVNext: 'SearchCampaigns',\r\n detailDescription: 'Summary_Card_Detail_Description_Broad_Match_Keyword',\r\n detailPitching: 'Summary_Card_Detail_Pitching_Broad_Match_Keywords',\r\n detailHelpId: 'ext56911',\r\n visualType: VISUAL_TYPES.TABLE,\r\n visualTableScope: VISUAL_TABLE_ENABLED_SCOPES.ADGROUP,\r\n visualTableHeaders: [\r\n 'Summary_Card_Action_Header_Broad_Match_Keyword',\r\n ],\r\n },\r\n [RECOMMENDATION_TYPES.REMOVE_CONFLICTING_NEGATIVE_KEYWORD]: {\r\n summaryTitle: 'Summary_Card_Title_Remove_Conflicting_Negative_Keyword',\r\n summaryIconClasses: 'recommendation-keyword-icon',\r\n summaryIconClassesVNext: 'SearchCampaigns',\r\n detailDescription: 'Summary_Card_Detail_Description_Remove_Conflicting_Negative_Keyword',\r\n detailPitching: 'Summary_Card_Detail_Pitching_Remove_Conflicting_Negative_Keyword',\r\n detailHelpId: 'ext51014',\r\n isPrimaryFromToEnabled: true,\r\n visualType: VISUAL_TYPES.TABLE,\r\n visualTableScope: VISUAL_TABLE_ENABLED_SCOPES.ADGROUP,\r\n visualTableHeaders: [\r\n 'Summary_Card_Action_Header_Use_Remove_Negative_Keywords',\r\n 'Summary_Card_Action_Header_Blocked_Keywords',\r\n ],\r\n },\r\n [RECOMMENDATION_TYPES.RESPONSIVE_SEARCH_ADS]: {\r\n summaryTitle: 'Summary_Card_Title_Responsive_Search_Ads',\r\n summaryIconClasses: 'recommendation-ads-icon',\r\n summaryIconClassesVNext: 'Chart',\r\n detailDescription: 'Summary_Card_Detail_Description_Responsive_Search_Ads',\r\n detailPitching: 'Summary_Card_Detail_Pitching_Responsive_Search_Ads',\r\n detailHelpId: 'ext60037',\r\n isPrimaryFromToEnabled: true,\r\n visualType: VISUAL_TYPES.TABLE,\r\n visualTableScope: VISUAL_TABLE_ENABLED_SCOPES.ADGROUP,\r\n visualTableHeaders: [\r\n 'Summary_Card_Action_Header_Ad_Group_Without_Responsive_Search_Ads',\r\n ],\r\n },\r\n [RECOMMENDATION_TYPES.REALLOCATE_BUDGET]: {\r\n summaryTitle: 'Summary_Card_Title_Reallocate_Budget_Opportunity',\r\n summaryIconClasses: 'recommendation-budget-icon',\r\n summaryIconClassesVNext: 'Financial',\r\n detailDescription: 'Summary_Card_Detail_Description_Reallocate_Budget_Opportunity',\r\n detailPitching: 'Summary_Card_Detail_Pitching_Reallocate_Budget_Opportunity',\r\n detailHelpId: 'ext53099',\r\n primaryEstimateType: ESTIMATE_TYPES.CLICKS,\r\n primaryIncreaseNullable: true,\r\n costEstimateType: ESTIMATE_TYPES.COST,\r\n isPrimaryFromToEnabled: true,\r\n visualType: VISUAL_TYPES.TABLE,\r\n visualTableScope: VISUAL_TABLE_ENABLED_SCOPES.CAMPAIGN,\r\n visualTableHeaders: [\r\n 'Summary_Card_Action_Header_SuggestedBudget',\r\n 'Summary_Card_Action_Header_FromCampaign',\r\n 'Summary_Card_Action_Header_ToCampaign',\r\n 'Summary_Card_Action_Header_Est_Clicks',\r\n ],\r\n },\r\n [RECOMMENDATION_TYPES.FIX_AD_DESTINATION]: {\r\n summaryTitle: 'Summary_Card_Title_Fix_Ad_Destination_Opportunity',\r\n summaryIconClasses: 'recommendation-repair-icon',\r\n summaryIconClassesVNext: 'Error',\r\n detailDescription: 'Summary_Card_Detail_Description_Fix_Ad_Destination_Opportunity',\r\n detailPitching: 'Summary_Card_Detail_Pitching_Fix_Ad_Destination_Opportunity',\r\n detailHelpId: '2128217',\r\n detailLinkType: 'fwdLink',\r\n visualType: VISUAL_TYPES.TABLE,\r\n visualTableScope: VISUAL_TABLE_ENABLED_SCOPES.ADGROUP,\r\n visualTableHeaders: [\r\n 'Summary_Card_Action_Header_LandingPageUrl',\r\n ],\r\n isPrimaryFromToEnabled: false,\r\n isEstimate: false,\r\n },\r\n [RECOMMENDATION_TYPES.SETUP_CONVERSION_TRACKING_OPPORTUNITY]: {\r\n summaryTitle: 'Summary_Card_Title_Setup_Conversion_Tracking_Opportunity_UnCreated',\r\n summaryIconClasses: 'recommendation-shopping-cart-icon',\r\n summaryIconClassesVNext: 'ShoppingCart',\r\n detailDescription: 'Summary_Card_Detail_Description_Setup_Conversion_Tracking_Opportunity_UnCreated',\r\n detailPitching: 'Summary_Card_Detail_Pitching_Setup_Conversion_Tracking_Opportunity_UnCreated',\r\n detailHelpId: 'ext56680',\r\n isPrimaryFromToEnabled: false,\r\n isEstimate: false,\r\n visualType: VISUAL_TYPES.TABLE,\r\n visualTableHeaders: [],\r\n isDynamicText: true,\r\n },\r\n [RECOMMENDATION_TYPES.FIX_CONVERSION_GOAL_SETTINGS]: {\r\n summaryTitle: 'Summary_Card_Title_Fix_Conversion_Goal_Settings',\r\n summaryIconClasses: 'recommendation-repair-icon',\r\n summaryIconClassesVNext: 'Error',\r\n detailDescription: 'Summary_Card_Detail_Description_Fix_Conversion_Goal_Settings',\r\n detailPitching: 'Summary_Card_Detail_Pitching_Fix_Conversion_Goal_Settings',\r\n detailHelpId: '56951',\r\n primaryEstimateType: ESTIMATE_TYPES.MISSING_CONVERSIONS,\r\n visualType: VISUAL_TYPES.TABLE,\r\n visualTableHeaders: [],\r\n isPrimaryFromToEnabled: false,\r\n },\r\n [RECOMMENDATION_TYPES.CREATE_CONVERSION_GOAL]: {\r\n summaryTitle: _TL_('Create conversion goal'),\r\n summaryIconClasses: 'recommendation-shopping-cart-icon',\r\n summaryIconClassesVNext: 'ShoppingCart',\r\n detailDescription: _TL_('Track more about your conversion performance.'),\r\n detailPitching: _TL_(\"This action is recommended because UET is enabled, but you don't have any recent conversions. Create a conversion goal with a converted destination URL or custom events to help track more conversion data.\"),\r\n detailHelpId: '56689',\r\n primaryEstimateType: ESTIMATE_TYPES.MISSING_CONVERSIONS,\r\n visualType: VISUAL_TYPES.TABLE,\r\n visualTableHeaders: [],\r\n isPrimaryFromToEnabled: false,\r\n useNewI18n: true,\r\n },\r\n [RECOMMENDATION_TYPES.FACEBOOK_IMPORT]: {\r\n summaryTitle: 'Summary_Card_Title_Facebook_Import',\r\n summaryIconClasses: 'recommendation-keyword-icon',\r\n summaryIconClassesVNext: 'SearchCampaigns',\r\n detailDescription: 'Summary_Card_Detail_Description_Facebook_Import',\r\n detailPitching: 'Summary_Card_Detail_Pitching_Facebook_Import',\r\n detailHelpId: '60078',\r\n primaryEstimateType: ESTIMATE_TYPES.IMPRESSIONS,\r\n secondaryEstimateType: ESTIMATE_TYPES.CLICKS,\r\n isPrimaryFromToEnabled: true,\r\n visualType: VISUAL_TYPES.TABLE,\r\n visualTableHeaders: [],\r\n },\r\n [RECOMMENDATION_TYPES.MULTIMEDIA_ADS]: {\r\n summaryTitle: 'Summary_Card_Title_Multi_Media_Ads',\r\n summaryIconClasses: 'recommendation-ads-icon',\r\n summaryIconClassesVNext: 'Chart',\r\n detailDescription: 'Summary_Card_Detail_Description_Multi_Media_Ads',\r\n detailPitching: 'Summary_Card_Detail_Pitching_Multi_Media_Ads',\r\n detailHelpId: '60107',\r\n isPrimaryFromToEnabled: true,\r\n visualType: VISUAL_TYPES.TABLE,\r\n visualTableScope: VISUAL_TABLE_ENABLED_SCOPES.ADGROUP,\r\n visualTableHeaders: [\r\n 'Summary_Card_Action_Header_Ad_Group_Without_Multi_Media_Ads',\r\n ],\r\n },\r\n [RECOMMENDATION_TYPES.IMAGE_EXTENSION]: {\r\n summaryTitle: 'Summary_Card_Title_Image_Extension',\r\n summaryIconClasses: 'recommendation-ads-icon',\r\n summaryIconClassesVNext: 'Add',\r\n detailDescription: 'Summary_Card_Detail_Description_Image_Extension',\r\n detailPitching: 'Summary_Card_Detail_Pitching_Image_Extension',\r\n detailHelpId: '56674',\r\n primaryEstimateType: ESTIMATE_TYPES.CLICKS,\r\n primaryIncreaseNullable: true,\r\n costEstimateType: ESTIMATE_TYPES.COST,\r\n isPrimaryFromToEnabled: true,\r\n visualType: VISUAL_TYPES.TABLE,\r\n visualTableScope: VISUAL_TABLE_ENABLED_SCOPES.CAMPAIGN,\r\n visualTableHeaders: [\r\n 'Summary_Card_Action_Header_Campaign',\r\n 'Summary_Card_Action_Header_Est_Clicks',\r\n ],\r\n },\r\n [RECOMMENDATION_TYPES.REPAIR_MISSING_KEYWORD_PARAMS]: {\r\n summaryTitle: _TL_('Fix missing keyword parameters issue'),\r\n summaryIconClasses: 'recommendation-repair-icon',\r\n summaryIconClassesVNext: 'Error',\r\n detailDescription: _TL_('Increase ad impressions and improve your click-through rate by setting up appropriate values for missing keyword parameters.'),\r\n detailPitching: _TL_('Setting values for your keyword parameters could enhance your search ads performance.'),\r\n detailHelpId: 'app54450',\r\n primaryEstimateType: ESTIMATE_TYPES.IMPRESSIONS,\r\n secondaryEstimateType: ESTIMATE_TYPES.CLICKS,\r\n primaryIncreaseNullable: true,\r\n isPrimaryFromToEnabled: true,\r\n visualType: VISUAL_TYPES.TABLE,\r\n visualTableScope: VISUAL_TABLE_ENABLED_SCOPES.CAMPAIGN,\r\n visualTableHeaders: [\r\n _TL_('Keywords'),\r\n _TL_('Weekly est. impressions growth'),\r\n ],\r\n useNewI18n: true,\r\n },\r\n [RECOMMENDATION_TYPES.FIX_NO_IMPRESSION_BID]: {\r\n summaryTitle: _TL_('Increase your keyword bids'),\r\n summaryIconClasses: 'recommendation-bid-icon',\r\n summaryIconClassesVNext: 'WebConversion',\r\n detailDescription: _TL_('Get more impressions in your enhanced CPC campaign by increasing bids.'),\r\n detailPitching: _TL_('Recommended because these keywords haven\\'t received impressions in the past 2 weeks due to low keyword bids.'),\r\n detailHelpId: '51018',\r\n primaryEstimateType: ESTIMATE_TYPES.IMPRESSIONS,\r\n primaryIncreaseNullable: true,\r\n isPrimaryFromToEnabled: true,\r\n visualType: VISUAL_TYPES.TABLE,\r\n visualTableScope: VISUAL_TABLE_ENABLED_SCOPES.CAMPAIGN,\r\n visualTableHeaders: [\r\n _TL_('Keywords'),\r\n _TL_('Suggested bid'),\r\n _TL_('Weekly est. impr.'),\r\n ],\r\n useNewI18n: true,\r\n },\r\n [RECOMMENDATION_TYPES.IMPROVE_RESPONSIVE_SEARCH_ADS]: {\r\n summaryTitle: _TL_('Improve your responsive search ads'),\r\n summaryIconClasses: 'recommendation-ads-icon',\r\n summaryIconClassesVNext: 'Chart',\r\n detailDescription: _TL_('Get more clicks on your responsive search ads by improving your headlines and descriptions'),\r\n detailPitching: _TL_('Recommended because some of your responsive search ads don\\'t have sufficient headlines or descriptions.'),\r\n detailHelpId: 'ext60037',\r\n primaryEstimateType: ESTIMATE_TYPES.CLICKS,\r\n secondaryEstimateType: ESTIMATE_TYPES.IMPRESSIONS,\r\n primaryIncreaseNullable: true,\r\n isPrimaryFromToEnabled: true,\r\n visualType: VISUAL_TYPES.TABLE,\r\n visualTableScope: VISUAL_TABLE_ENABLED_SCOPES.CAMPAIGN,\r\n visualTableHeaders: [],\r\n useNewI18n: true,\r\n },\r\n [RECOMMENDATION_TYPES.REPAIR_UNTARGETED_OFFER]: {\r\n summaryTitle: _TL_('Target all eligible shopping products'),\r\n summaryIconClasses: 'recommendation-shopping-cart-icon',\r\n summaryIconClassesVNext: 'ShoppingCart',\r\n detailDescription: _TL_('Get more conversion value from your shopping products by advertising with a catch-all campaign.'),\r\n detailPitching: _TL_('Recommended because you have untargeted online products in your shopping feed.'),\r\n detailHelpId: 'ext56483',\r\n primaryEstimateType: ESTIMATE_TYPES.TARGETED_PRODUCTS,\r\n secondaryEstimateType: ESTIMATE_TYPES.IMPRESSIONS,\r\n primaryIncreaseNullable: false,\r\n costEstimateType: ESTIMATE_TYPES.COST,\r\n isPrimaryFromToEnabled: true,\r\n visualType: VISUAL_TYPES.TABLE,\r\n visualTableScope: VISUAL_TABLE_ENABLED_SCOPES.CAMPAIGN,\r\n visualTableHeaders: [\r\n _TL_('Campaigns'),\r\n _TL_('Products targeted'),\r\n _TL_('Weekly est. impr.'),\r\n ],\r\n useNewI18n: true,\r\n },\r\n [RECOMMENDATION_TYPES.IMPROVE_MULTIMEDIA_ADS]: {\r\n summaryTitle: _TL_('Optimize your multimedia ads'),\r\n summaryIconClasses: 'recommendation-ads-icon',\r\n summaryIconClassesVNext: 'Chart',\r\n detailDescription: _TL_('Drive engagement with your multimedia ads by creating new ad texts, headlines, and images.'),\r\n detailPitching: _TL_('We\\'ve recommended these changes for some of your multimedia ads because they have an insufficient number of ad texts, headlines, or images.'),\r\n detailHelpId: 'ext60107',\r\n primaryEstimateType: ESTIMATE_TYPES.CLICKS,\r\n secondaryEstimateType: ESTIMATE_TYPES.IMPRESSIONS,\r\n primaryIncreaseNullable: true,\r\n isPrimaryFromToEnabled: true,\r\n visualType: VISUAL_TYPES.ADS_PREVIEW,\r\n visualTableScope: VISUAL_TABLE_ENABLED_SCOPES.ADGROUP,\r\n visualTableHeaders: [\r\n _TL_('Ad preview'),\r\n ],\r\n useNewI18n: true,\r\n },\r\n [RECOMMENDATION_TYPES.SSC_2_PMAX_MIGRATION]: {\r\n summaryTitle: _TL_('Upgrade your smart shopping campaigns to Performance Max campaigns'),\r\n summaryIconClasses: 'recommendation-p-max-icon',\r\n summaryIconClassesVNext: 'Up',\r\n detailDescription: _TL_('Increase conversions by upgrading to Performance Max.'),\r\n detailPitching: _TL_('We\\'re recommending this upgrade because you have smart shopping campaigns in this account.'),\r\n detailHelpId: 'ext60176',\r\n isPrimaryFromToEnabled: true,\r\n visualType: VISUAL_TYPES.TABLE,\r\n visualTableScope: VISUAL_TABLE_ENABLED_SCOPES.ADGROUP,\r\n visualTableHeaders: [\r\n _TL_('The following smart shopping campaigns are eligible to upgrade to Performance Max campaigns:'),\r\n ],\r\n useNewI18n: true,\r\n },\r\n [RECOMMENDATION_TYPES.PMAX_IMPORT]: {\r\n summaryTitle: _TL_('Import your Performance Max campaigns from Google Ads'),\r\n summaryIconClasses: 'recommendation-keyword-icon',\r\n summaryIconClassesVNext: 'SearchCampaigns',\r\n detailDescription: _TL_('Save time and effort by importing your Performance Max campaigns from Google Ads.'),\r\n detailPitching: _TL_('We recommend this because we now support Performance Max campaigns. Importing these campaigns can increase customer engagement and improve your ROI.'),\r\n detailHelpId: 'ext51050',\r\n isPrimaryFromToEnabled: true,\r\n visualType: VISUAL_TYPES.TABLE,\r\n visualTableHeaders: [],\r\n useNewI18n: true,\r\n },\r\n [RECOMMENDATION_TYPES.DSA_2_PMAX_MIGRATION]: {\r\n summaryTitle: _TL_('Upgrade your Dynamic Search Ad (DSA) campaigns to Performance Max campaigns'),\r\n summaryIconClasses: 'recommendation-p-max-icon',\r\n summaryIconClassesVNext: 'Up',\r\n detailDescription: _TL_('Upgrade your eligible DSA campaigns to Performance Max and we\\'ll use your existing assets, settings, and budget to create a new Performance Max campaign.'),\r\n detailPitching: _TL_('We recommend this because Performance Max campaigns can generate 24% more conversions at the same cost per conversion.'),\r\n detailHelpId: '60366',\r\n visualType: VISUAL_TYPES.TABLE,\r\n visualTableHeaders: [],\r\n useNewI18n: true,\r\n primaryEstimateType: ESTIMATE_TYPES.CONVERSIONS,\r\n primaryIncreaseNullable: true,\r\n isPrimaryFromToEnabled: true,\r\n },\r\n [RECOMMENDATION_TYPES.SYNDICATION_GAP]: {\r\n summaryTitle: _TL_('Show ads on the entire Microsoft Advertising Network'),\r\n summaryIconClasses: 'recommendation-syndication-icon',\r\n summaryIconClassesVNext: 'Add',\r\n detailDescription: _TL_('Expand your advertising reach on the entire Microsoft Advertising Network.'),\r\n detailPitching: _TL_('Recommended because it can help you reach additional customers and drive conversions at a lower cost per click.'),\r\n detailHelpId: 'ext60146',\r\n visualType: VISUAL_TYPES.TABLE,\r\n useNewI18n: true,\r\n primaryEstimateType: ESTIMATE_TYPES.CLICKS,\r\n secondaryEstimateType: ESTIMATE_TYPES.CONVERSIONS,\r\n primaryIncreaseNullable: true,\r\n isPrimaryFromToEnabled: true,\r\n visualTableHeaders: [\r\n _TL_('Campaigns'),\r\n _TL_('Weekly est. clicks'),\r\n _TL_('Weekly est. conversions'),\r\n ],\r\n },\r\n};\r\n\r\nexport const recommendationNewTextConfigs = {\r\n [RECOMMENDATION_TYPES.REMOVE_CONFLICTING_NEGATIVE_KEYWORD]: {\r\n permission: 'IsRemoveNegativeKeywordConflictNewTextsEnabled',\r\n configs: {\r\n detailDescription: 'Summary_Card_Detail_Description_Remove_Conflicting_Negative_Keyword_New',\r\n detailPitching: 'Summary_Card_Detail_Pitching_Remove_Conflicting_Negative_Keyword_New',\r\n },\r\n column: {\r\n BlockedKeywordsColumn: {\r\n helpId: 'pop_BA_Recommendations_BlockedKeywords',\r\n },\r\n },\r\n },\r\n};\r\n\r\nexport const recommendationInProductUpdateConfigs = {\r\n [RECOMMENDATION_TYPES.REPAIR_ADS]: {\r\n permission: 'IsRecommendationInProductUpdateEnabled',\r\n available: 'isNrt',\r\n notification: 'Summary_Card_Repair_Opportunity_Update_Notification',\r\n additionalPitching: 'Detail_Card_Repair_Recommendations_NRT',\r\n additionalPitchingEnabledBy: 'available',\r\n helpTopic: 'pop_BA_Recommendations_RelevantSuggestions',\r\n },\r\n [RECOMMENDATION_TYPES.REPAIR_KEYWORD]: {\r\n permission: 'IsRecommendationInProductUpdateEnabled',\r\n available: 'isNrt',\r\n notification: 'Summary_Card_Repair_Opportunity_Update_Notification',\r\n additionalPitching: 'Detail_Card_Repair_Recommendations_NRT',\r\n additionalPitchingEnabledBy: 'available',\r\n helpTopic: 'pop_BA_Recommendations_RelevantSuggestions',\r\n },\r\n [RECOMMENDATION_TYPES.RESPONSIVE_SEARCH_ADS]: {\r\n permission: 'IsRSAAdoptionV2Enabled',\r\n available: 'hasAIAssetRecommendation',\r\n notification: 'Summary_Card_RSA_Opportunity_Update_Notification',\r\n additionalPitching: 'Detail_Card_RSA_Recommendations_Notification',\r\n additionalPitchingEnabledBy: 'permission',\r\n helpTopic: 'pop_BA_Recommendations_AI_HeadDescp',\r\n },\r\n [RECOMMENDATION_TYPES.BUDGET_OPPORTUNITY]: {\r\n permission: 'IsRecommendationInProductFeedbackLoopEnabled',\r\n available: 'isFeedbackPersonalized',\r\n notification: 'Summary_Card_Banner_AlertMsg_FeedbackPersonalized',\r\n additionalPitching: '',\r\n additionalPitchingEnabledBy: null,\r\n helpTopic: 'pop_BA_Recommendations_RelevantSuggestions',\r\n },\r\n [RECOMMENDATION_TYPES.SETUP_CONVERSION_TRACKING_OPPORTUNITY]: {\r\n permission: 'IsRecommendationThirdPartyTaggingEnabled',\r\n available: 'isNrt',\r\n notification: 'Summary_Card_SetupConversionTracking_Opportunity_Update_Notification',\r\n additionalPitching: '',\r\n additionalPitchingEnabledBy: null,\r\n helpTopic: null,\r\n needAdditionalArgs: true,\r\n neverExpired: true,\r\n },\r\n [RECOMMENDATION_TYPES.FIX_CONVERSION_TRACKING_OPPORTUNITY]: {\r\n permission: 'IsRecommendationThirdPartyTaggingEnabled',\r\n available: 'isNrt',\r\n notification: 'Summary_Card_SetupConversionTracking_Opportunity_Update_Notification',\r\n additionalPitching: '',\r\n additionalPitchingEnabledBy: null,\r\n helpTopic: null,\r\n needAdditionalArgs: true,\r\n neverExpired: true,\r\n },\r\n};\r\n\r\nexport const recommendationDynamicTextConfigs = {\r\n [RECOMMENDATION_TYPES.SETUP_CONVERSION_TRACKING_OPPORTUNITY]: ({\r\n isMCC,\r\n statusId,\r\n recommendationsCount,\r\n }) => {\r\n const defaultConfig = {\r\n summaryTitle: 'Summary_Card_Title_Setup_Conversion_Tracking_Opportunity_UnCreated',\r\n detailDescription: 'Summary_Card_Detail_Description_Setup_Conversion_Tracking_Opportunity_UnCreated',\r\n detailPitching: 'Summary_Card_Detail_Pitching_Setup_Conversion_Tracking_Opportunity_UnCreated',\r\n };\r\n let newConfig;\r\n if (isMCC) {\r\n if (statusId === 2) {\r\n newConfig = {\r\n ...defaultConfig,\r\n summaryTitle: 'Summary_Card_Title_Setup_Conversion_Tracking_Opportunity_Unverified',\r\n detailDescription: `MCC_Summary_Card_Detail_Description_Setup_Conversion_Tracking_Opportunity_Unverified_${isPlural(recommendationsCount)}`,\r\n detailPitching: 'MCC_Summary_Card_Detail_Pitching_Setup_Conversion_Tracking_Opportunity',\r\n };\r\n } else {\r\n newConfig = {\r\n ...defaultConfig,\r\n summaryTitle: 'Summary_Card_Title_Setup_Conversion_Tracking_Opportunity_UnCreated',\r\n detailDescription: `MCC_Summary_Card_Detail_Description_Setup_Conversion_Tracking_Opportunity_UnCreated_${isPlural(recommendationsCount)}`,\r\n detailPitching: 'MCC_Summary_Card_Detail_Pitching_Setup_Conversion_Tracking_Opportunity',\r\n };\r\n }\r\n } else if (statusId === 2) {\r\n newConfig = {\r\n ...defaultConfig,\r\n summaryTitle: 'Summary_Card_Title_Setup_Conversion_Tracking_Opportunity_Unverified',\r\n detailDescription: 'Summary_Card_Detail_Description_Setup_Conversion_Tracking_Opportunity_Unverified',\r\n detailPitching: 'Summary_Card_Detail_Pitching_Setup_Conversion_Tracking_Opportunity_Unverified',\r\n };\r\n }\r\n return newConfig || defaultConfig;\r\n },\r\n};\r\n\r\nexport const additionDetailPitchingConfig = {\r\n [RECOMMENDATION_TYPES.FIX_AD_DESTINATION]: {\r\n detailPitching: 'Detail_Page_Detail_Description_Fix_Ad_Destination_Opportunity',\r\n },\r\n [RECOMMENDATION_TYPES.FIX_AD_TEXT]: {\r\n detailPitching: 'Detail_Page_Detail_Description_Fix_Ad_Text_Opportunity',\r\n },\r\n};\r\n","import _ from 'underscore';\r\nimport { getCurrencyText } from '@bingads-webui-react/currency';\r\n\r\nimport { recommendationConfigs } from '../recommendation-configs';\r\nimport {\r\n ESTIMATE_TYPES,\r\n ESTIMATE_STRINGS,\r\n RECOMMENDATION_TYPES,\r\n MATCH_TYPE_IDS,\r\n NO_SYMBOL_ESTIMATE_TYPES,\r\n FAC_RECOMMENDATION_CONFIG,\r\n} from '../consts';\r\nimport {\r\n formatPercentHundredths,\r\n formatCost,\r\n formatDecimal,\r\n formatInteger,\r\n} from './basic-format-data';\r\nimport { isCompetition } from '../util';\r\n\r\n// place format function using recommendation-configs in this file\r\n\r\n/**\r\n * Format estimation value based on estimation type\r\n * @param {string} type - estimation type\r\n * @param {number} value - value to be formatted\r\n * @param {Object} i18n - Localization component\r\n * @param {string} currency - currency code\r\n * @return {string} formatted estimation value\r\n */\r\nconst formatEstimateValue = (type, value, i18n, currency) => {\r\n switch (type) {\r\n case ESTIMATE_TYPES.IMPRESSION_SHARE:\r\n case ESTIMATE_TYPES.CTR:\r\n return formatPercentHundredths(value, i18n); // 12.34%\r\n case ESTIMATE_TYPES.COST:\r\n return formatCost(value, i18n, currency); // $32.00K\r\n case ESTIMATE_TYPES.REJECTED_ADS:\r\n case ESTIMATE_TYPES.REJECTED_KEYWORDS:\r\n return formatInteger(value, i18n);\r\n case ESTIMATE_TYPES.IMPRESSIONS:\r\n case ESTIMATE_TYPES.QUERY_VOLUME:\r\n case ESTIMATE_TYPES.CLICKS:\r\n case ESTIMATE_TYPES.WEEKLY_SEARCHES:\r\n case ESTIMATE_TYPES.MISSING_CONVERSIONS:\r\n case ESTIMATE_TYPES.TARGETED_PRODUCTS:\r\n default:\r\n return formatDecimal(value, i18n); // 12.3M\r\n }\r\n};\r\n\r\n/**\r\n * Format estimation block\r\n * @param {Object} options - options\r\n * @param {string} options.type - recomendation type\r\n * @param {Object} options.i18n - Localization component\r\n * @param {Object} options.estimates - estimate value collection\r\n * @param {string} options.currency - currency code\r\n * @param {string} options.inDetailsView - estimates block will be shown in details view or not\r\n * @return {Object} formatted estimation block\r\n */\r\nexport const formatEstimates = ({\r\n type, i18n, estimates, currency, inDetailsView,\r\n}) => {\r\n if (!estimates) {\r\n return null;\r\n }\r\n\r\n const {\r\n isPrimaryFromToEnabled,\r\n primaryIncreaseNullable,\r\n } = recommendationConfigs[type];\r\n let {\r\n primaryEstimateType,\r\n secondPrimaryEstimateType,\r\n isDoublePrimary,\r\n secondaryEstimateType,\r\n costEstimateType,\r\n isEstimate,\r\n } = recommendationConfigs[type];\r\n let tertiaryEstimateType = null;\r\n\r\n const bindedFormatValue = _.partial(formatEstimateValue, _, _, i18n, currency);\r\n if (!primaryEstimateType) {\r\n switch (type) {\r\n case RECOMMENDATION_TYPES.BUDGET_OPPORTUNITY:\r\n case RECOMMENDATION_TYPES.ADJUST_SHARED_BUDGET_OPPORTUNITY:\r\n primaryEstimateType = estimates.primaryEstimate;\r\n secondaryEstimateType = estimates.primaryEstimate === ESTIMATE_TYPES.CONVERSIONS ?\r\n ESTIMATE_TYPES.CLICKS : ESTIMATE_TYPES.COST;\r\n costEstimateType = estimates.primaryEstimate === ESTIMATE_TYPES.CONVERSIONS ?\r\n ESTIMATE_TYPES.COST : null;\r\n break;\r\n case RECOMMENDATION_TYPES.FIX_AD_TEXT:\r\n case RECOMMENDATION_TYPES.FIX_AD_DESTINATION:\r\n primaryEstimateType = estimates.primaryEstimate;\r\n secondPrimaryEstimateType = estimates.secondPrimaryEstimate;\r\n isDoublePrimary = estimates.isDoublePrimary; // eslint-disable-line prefer-destructuring\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n // Special logic for competition\r\n // Show Est. Conversions Increase as secondary estimate in summary page\r\n // Show Est. Conversions Increase as tertiary estimate in summary page\r\n if (isCompetition(type) && estimates.convIncrease) {\r\n if (inDetailsView) {\r\n tertiaryEstimateType = ESTIMATE_TYPES.CONVERSIONS;\r\n } else {\r\n secondaryEstimateType = ESTIMATE_TYPES.CONVERSIONS;\r\n }\r\n }\r\n const primaryString = i18n.getString(ESTIMATE_STRINGS[primaryEstimateType]);\r\n\r\n // We get CTR (%) from MT - 'CtrLift' field. Increase field is applied for calculation only.\r\n const primaryIncreaseNumber = (primaryEstimateType === ESTIMATE_TYPES.CTR) ?\r\n estimates[`${primaryEstimateType}Lift`] : estimates[`${primaryEstimateType}Increase`];\r\n const primaryIncrease = bindedFormatValue(primaryEstimateType, primaryIncreaseNumber);\r\n\r\n const increaseSymbol = primaryEstimateType === ESTIMATE_TYPES.CTR ? '↑' : '+';\r\n const primaryIncreaseSymbol = (primaryIncreaseNumber >= 0 &&\r\n !_.contains(NO_SYMBOL_ESTIMATE_TYPES, primaryEstimateType)) ? increaseSymbol : '';\r\n\r\n const primaryPts = primaryEstimateType === ESTIMATE_TYPES.IMPRESSION_SHARE ?\r\n i18n.getString('Summary_Card_Estimate_Points') : '';\r\n\r\n const hasFrom = isPrimaryFromToEnabled && !_.isUndefined(estimates[`${primaryEstimateType}Current`]);\r\n const primaryFrom = hasFrom && bindedFormatValue(primaryEstimateType, estimates[`${primaryEstimateType}Current`]);\r\n const primaryFromString = hasFrom && i18n.getString('Summary_Card_Estimate_Primary_From');\r\n const primaryTo = hasFrom\r\n && bindedFormatValue(primaryEstimateType, estimates[`${primaryEstimateType}Current`] + estimates[`${primaryEstimateType}Increase`]);\r\n const primaryToString = hasFrom && i18n.getString('Summary_Card_Estimate_Primary_To');\r\n const isPositivePrimary = !(primaryEstimateType === ESTIMATE_TYPES.COST &&\r\n primaryIncreaseNumber > 0) && !_.contains(NO_SYMBOL_ESTIMATE_TYPES, primaryEstimateType);\r\n\r\n const secondaryIncrease = secondaryEstimateType\r\n && bindedFormatValue(secondaryEstimateType, estimates[`${secondaryEstimateType}Increase`]);\r\n const secondaryString = secondaryEstimateType\r\n && i18n.getString(ESTIMATE_STRINGS[secondaryEstimateType]);\r\n const isPositiveSecondary = secondaryEstimateType &&\r\n !(secondaryEstimateType === ESTIMATE_TYPES.COST && estimates[`${secondaryEstimateType}Increase`] > 0);\r\n\r\n const tertiaryIncrease = tertiaryEstimateType\r\n && bindedFormatValue(tertiaryEstimateType, estimates[`${tertiaryEstimateType}Increase`]);\r\n const tertiaryString = tertiaryEstimateType\r\n && i18n.getString(ESTIMATE_STRINGS[tertiaryEstimateType]);\r\n\r\n const spendIncrease = costEstimateType\r\n && bindedFormatValue(costEstimateType, estimates[`${costEstimateType}Increase`]);\r\n const spendString = costEstimateType && i18n.getString(ESTIMATE_STRINGS[costEstimateType]);\r\n\r\n const estimateNote = i18n.getString('Summary_Card_Estimate_Note');\r\n\r\n const showEstimates = primaryIncreaseNumber !== 0 ||\r\n (type !== RECOMMENDATION_TYPES.CALLOUT && type !== RECOMMENDATION_TYPES.SITE_LINK);\r\n\r\n let secondPrimaryString;\r\n let secondPrimaryIncrease;\r\n\r\n if (isDoublePrimary) {\r\n secondPrimaryString = i18n.getString(ESTIMATE_STRINGS[secondPrimaryEstimateType]);\r\n\r\n // We get CTR (%) from MT - 'CtrLift' field. Increase field is applied for calculation only.\r\n const secondPrimaryIncreaseNumber = (primaryEstimateType === ESTIMATE_TYPES.CTR) ?\r\n estimates[`${secondPrimaryEstimateType}Lift`] :\r\n estimates[`${secondPrimaryEstimateType}Increase`];\r\n secondPrimaryIncrease = bindedFormatValue(\r\n secondPrimaryEstimateType,\r\n secondPrimaryIncreaseNumber\r\n );\r\n }\r\n\r\n if (type === RECOMMENDATION_TYPES.DYNAMIC_SEARCH_ADS && primaryIncreaseNullable) {\r\n isEstimate = primaryIncrease !== '0';\r\n }\r\n\r\n const formatted = {\r\n primaryIncrease,\r\n primaryPts,\r\n primaryFrom,\r\n primaryTo,\r\n primaryFromString,\r\n primaryToString,\r\n primaryString,\r\n primaryIncreaseSymbol,\r\n secondPrimaryIncrease,\r\n secondPrimaryString,\r\n isDoublePrimary,\r\n isPositivePrimary,\r\n secondaryIncrease,\r\n secondaryString,\r\n isPositiveSecondary,\r\n spendIncrease,\r\n spendString,\r\n estimateNote,\r\n showEstimates,\r\n isEstimate,\r\n };\r\n\r\n if (tertiaryEstimateType) {\r\n formatted.tertiaryIncrease = tertiaryIncrease;\r\n formatted.tertiaryString = tertiaryString;\r\n }\r\n\r\n if (primaryIncreaseNullable) {\r\n formatted.primaryIncreaseNullable = primaryIncreaseNullable;\r\n }\r\n\r\n return formatted;\r\n};\r\n\r\nexport const formatLocaledSourceType = (i18n, source) => {\r\n const convertedSource = `Recommendation_Keywword_Source_Type_${source}`;\r\n return i18n.getString(convertedSource) || source;\r\n};\r\n\r\nexport const formatLocaledSeasonalEventType = (i18n, seasonEvent) => {\r\n const arr = seasonEvent.split(' ');\r\n let convertedSeasonEvent = 'Recommendation_Keywword_Seasonal_Event_Type';\r\n _.each(arr, (word) => {\r\n convertedSeasonEvent += `_${word.charAt(0).toUpperCase() + word.slice(1)}`;\r\n });\r\n convertedSeasonEvent = convertedSeasonEvent.replace('\\'', '');\r\n return i18n.getString(convertedSeasonEvent) || seasonEvent;\r\n};\r\n\r\nexport const formatPictchingSource = (i18n, pitchingKey, sources, seasonalEvent) => {\r\n let value = '';\r\n if (_.isUndefined(sources) || sources.length === 0) {\r\n return '';\r\n }\r\n\r\n if (sources.length === 1) {\r\n value = i18n.getString(\r\n pitchingKey,\r\n {\r\n source1: formatLocaledSourceType(i18n, sources[0]),\r\n }\r\n );\r\n } else if (sources.length === 2) {\r\n value = i18n.getString(\r\n `${pitchingKey}_Two`,\r\n {\r\n source1: formatLocaledSourceType(i18n, sources[0]),\r\n source2: formatLocaledSourceType(i18n, sources[1]),\r\n }\r\n );\r\n } else if (sources.length >= 3) {\r\n value = i18n.getString(\r\n `${pitchingKey}_Three`,\r\n {\r\n source1: formatLocaledSourceType(i18n, sources[0]),\r\n source2: formatLocaledSourceType(i18n, sources[1]),\r\n source3: formatLocaledSourceType(i18n, sources[2]),\r\n }\r\n );\r\n }\r\n\r\n if (!_.isUndefined(seasonalEvent) && seasonalEvent.length > 0) {\r\n value += ` ${i18n.getString(\r\n `${pitchingKey}_Seasonal_Event`,\r\n {\r\n seasonalEvent: formatLocaledSeasonalEventType(i18n, seasonalEvent[0].SampleContent),\r\n }\r\n )}`;\r\n }\r\n return value;\r\n};\r\n\r\nexport const formatKeyword = (keyword, matchType) => {\r\n switch (matchType) {\r\n case MATCH_TYPE_IDS.EXACT:\r\n return `[${keyword}]`;\r\n case MATCH_TYPE_IDS.PHRASE:\r\n return `\"${keyword}\"`;\r\n default:\r\n return keyword;\r\n }\r\n};\r\n\r\n/**\r\n * Format coupon block\r\n * @param {Object} options - options\r\n * @param {Object} options.i18n - Localization component\r\n * @param {Object} options.coupon - coupon value collection\r\n * @param {string} options.currency - currency code\r\n * @return {Object} formatted coupon block\r\n */\r\nexport const formatCoupon = ({\r\n i18n, coupon, currency,\r\n}) => {\r\n const couponConfig = FAC_RECOMMENDATION_CONFIG[coupon.FeatureId.toString()];\r\n\r\n if (!couponConfig) {\r\n return null;\r\n }\r\n\r\n const {\r\n couponTitleActionKey,\r\n couponDescriptionKey,\r\n couponDescriptionTitleKey,\r\n couponTagMessageKey,\r\n couponLightboxTitle,\r\n } = couponConfig;\r\n\r\n const titleAction = i18n.getString(couponTitleActionKey);\r\n const descriptionTitle = i18n.getString(couponDescriptionTitleKey);\r\n const description = i18n.getString(couponDescriptionKey);\r\n const tagMessage = i18n.getString(couponTagMessageKey);\r\n\r\n return {\r\n value: getCurrencyText({\r\n currencyCode: currency,\r\n amount: Math.floor(coupon.CouponValue),\r\n i18n,\r\n maxFractionDigits: 0,\r\n hideCurrencyCode: true,\r\n }),\r\n cost: getCurrencyText({\r\n currencyCode: currency,\r\n amount: Math.ceil(coupon.CouponUpfrontSpend),\r\n i18n,\r\n maxFractionDigits: 0,\r\n hideCurrencyCode: true,\r\n }),\r\n expirationDate: new Date(coupon.EndDate).toLocaleDateString(),\r\n descriptionTitle,\r\n descriptionShort: descriptionTitle,\r\n titleAction,\r\n description,\r\n tagMessage,\r\n rawData: coupon,\r\n couponLightboxTitle,\r\n };\r\n};\r\n","import _ from 'underscore';\r\nimport { levelAtConstant } from '@bingads-webui-campaign/scope-constants';\r\nimport {\r\n recommendationConfigs,\r\n recommendationDynamicTextConfigs\r\n} from '../recommendation-configs';\r\nimport {\r\n RECOMMENDATION_TYPES,\r\n BUDGET_OPPORTUNITY_TYPES,\r\n} from '../consts';\r\nimport {\r\n formatDecimal,\r\n formatEntityType,\r\n formatEntityNameForHtml,\r\n} from './basic-format-data';\r\nimport {\r\n formatEstimates,\r\n formatPictchingSource,\r\n formatLocaledSeasonalEventType,\r\n formatCoupon,\r\n} from './format-data';\r\nimport {\r\n isCompetition,\r\n isParentLevel,\r\n getNewTextConfigByPermission,\r\n} from '../util';\r\nimport {\r\n formatPercentHundredths\r\n} from './index';\r\n\r\n/**\r\n * @param {Object} options - options for formatting summary model\r\n * @param {string} options.type - recommendation type\r\n * @param {string} options.level - target level of the recommendation.\r\n * For example, Device bid boost and Location bid boost can target Campaign or AdGroup.\r\n * @param {string} options.scope - current scope user selected in wunderbar\r\n * @param {Object} options.sample - sample data for summary card (insight, actions)\r\n * @param {number} options.recommendationsCount - total count of recommendations\r\n * @param {boolean} [options.isHighConverting=false] - if the ALL recommendations for\r\n * this type is HighConverting.\r\n * @param {boolean} [options.isSeasonal=false] - if recommendation is seasonal\r\n * @param {Object} options.i18n - Localization component\r\n * @return {Object} formatted summary model for React component to render\r\n */\r\nexport const formatSummary = (options) => {\r\n const {\r\n type,\r\n level,\r\n scope,\r\n recommendationsCount,\r\n sample,\r\n i18n,\r\n newI18n,\r\n isHighConverting = false,\r\n isSeasonal = false,\r\n permissions,\r\n isNrt,\r\n hasAIAssetRecommendation,\r\n isFeedbackPersonalized,\r\n currentActivity,\r\n showAutoApplyBanner,\r\n isAutoApplyRecommendationEnabled,\r\n thirdPartyInfos,\r\n } = options;\r\n\r\n // entity\r\n const entityType = formatEntityType(level, recommendationsCount, i18n);\r\n const entityName = sample && sample.target && formatEntityNameForHtml(level, sample.target);\r\n\r\n let recommendationConfig = recommendationConfigs[type];\r\n if (_.isUndefined(recommendationConfig)) {\r\n if (!_.isUndefined(currentActivity)) {\r\n currentActivity.error(`formatSummary: cannot get recommendationConfig, type=${type}`, type);\r\n }\r\n return null;\r\n }\r\n\r\n const useNewI18n = !_.isUndefined(recommendationConfig.useNewI18n) ?\r\n recommendationConfig.useNewI18n : false;\r\n const i18nToUse = useNewI18n ? newI18n : i18n;\r\n\r\n if (recommendationConfig.isDynamicText) {\r\n recommendationConfig = _.extend(\r\n recommendationConfig,\r\n recommendationDynamicTextConfigs[type](options)\r\n );\r\n }\r\n // title\r\n const title = i18nToUse.getString(\r\n recommendationConfig.summaryTitle,\r\n { entity_type: formatEntityType(level, 1, i18n) }\r\n );\r\n\r\n // description\r\n let descriptionKey = recommendationConfig.detailDescription;\r\n // pitching\r\n let pitchingKey = type === RECOMMENDATION_TYPES.COMPETITIVE_BID && isHighConverting ?\r\n `${recommendationConfig.detailPitching}_High_Converting` :\r\n recommendationConfig.detailPitching;\r\n const isScopeToThis = !useNewI18n && (isParentLevel(scope, level) || scope === level);\r\n\r\n const newConfig = getNewTextConfigByPermission(type, permissions, 'configs');\r\n\r\n if (newConfig) {\r\n descriptionKey = newConfig.detailDescription || descriptionKey;\r\n pitchingKey = newConfig.detailPitching || pitchingKey;\r\n }\r\n\r\n let description = i18nToUse.getString(\r\n isScopeToThis ? `${descriptionKey}_This` : descriptionKey,\r\n {\r\n n: recommendationsCount,\r\n entity_name: entityName,\r\n entity_type: entityType,\r\n }\r\n );\r\n\r\n if (isSeasonal && _.contains(BUDGET_OPPORTUNITY_TYPES, type)) {\r\n description = i18n.getString(\r\n `${descriptionKey}_Seasonal_Event`,\r\n { seasonalEvent: formatLocaledSeasonalEventType(i18n, sample.seasonalEvent) }\r\n );\r\n }\r\n\r\n\r\n let pitching = '';\r\n if (isCompetition(type)) {\r\n pitching = i18n.getString(\r\n pitchingKey,\r\n { segment: i18n.getString(`Details_View_Device_Type_${sample.segment}`) || sample.segment }\r\n );\r\n } else {\r\n switch (type) {\r\n case RECOMMENDATION_TYPES.BUDGET_OPPORTUNITY:\r\n case RECOMMENDATION_TYPES.ADJUST_SHARED_BUDGET_OPPORTUNITY:\r\n pitching = isSeasonal ? i18n.getString(`${pitchingKey}_Seasonal_Event`) : i18n.getString(`${pitchingKey}`);\r\n break;\r\n case RECOMMENDATION_TYPES.GOOGLE_IMPORT:\r\n case RECOMMENDATION_TYPES.GOOGLE_IMPORT_SCHEDULED:\r\n pitching = i18n.getString(\r\n pitchingKey,\r\n { clicks: formatDecimal(options.estimates.clicksIncrease, i18n) }\r\n );\r\n break;\r\n case RECOMMENDATION_TYPES.SITE_LINK:\r\n case RECOMMENDATION_TYPES.CALLOUT: {\r\n const withThis = scope === levelAtConstant.CAMPAIGN || scope === levelAtConstant.ADGROUP ? '_This' : '';\r\n const cpcCondition = options.estimates.cpcIncrease > 0 ? '_cpcIncrease' : '_cpcDecrease';\r\n const cpcStatus = options.estimates.cpcIncrease === 0 ? '_cpcSame' : cpcCondition;\r\n const paramWithoutEstimates = { n: recommendationsCount, entity_type: entityType };\r\n const paramWithEstimates = {\r\n ...paramWithoutEstimates,\r\n ctrLift: formatPercentHundredths(options.estimates.ctrLift, i18n),\r\n cpcIncrease: formatDecimal(Math.abs(options.estimates.cpcIncrease), i18n),\r\n };\r\n if (options.estimates.ctrLift !== 0) {\r\n pitching = i18n.getString(`${pitchingKey}${cpcStatus}${withThis}`, paramWithEstimates);\r\n } else {\r\n pitching = i18n.getString(`${pitchingKey}_Without_Estimates${withThis}`, paramWithoutEstimates);\r\n }\r\n break;\r\n }\r\n case RECOMMENDATION_TYPES.NEW_KEYWORD_OPPORTUNITY:\r\n pitching = formatPictchingSource(\r\n i18n,\r\n pitchingKey,\r\n options.seasonalEntity.sources,\r\n options.seasonalEntity.seasonalEvent\r\n );\r\n break;\r\n case RECOMMENDATION_TYPES.REPAIR_ADS:\r\n pitching = isNrt ? i18n.getString('Summary_Card_Detail_Pitching_Repair_Ads_NRT') : i18n.getString(pitchingKey);\r\n break;\r\n case RECOMMENDATION_TYPES.REPAIR_KEYWORD:\r\n pitching = isNrt ? i18n.getString('Summary_Card_Detail_Pitching_Repair_Keywords_NRT') : i18n.getString(pitchingKey);\r\n break;\r\n case RECOMMENDATION_TYPES.SETUP_CONVERSION_TRACKING_OPPORTUNITY:\r\n pitching = i18n.getString(pitchingKey, {\r\n n: recommendationsCount,\r\n });\r\n break;\r\n case RECOMMENDATION_TYPES.REMOVE_CONFLICTING_NEGATIVE_KEYWORD:\r\n case RECOMMENDATION_TYPES.BROAD_MATCH_KEYWORD:\r\n case RECOMMENDATION_TYPES.RESPONSIVE_SEARCH_ADS:\r\n case RECOMMENDATION_TYPES.DYNAMIC_SEARCH_ADS:\r\n case RECOMMENDATION_TYPES.FIX_CONVERSION_GOAL_SETTINGS:\r\n case RECOMMENDATION_TYPES.TRENDING_QUERY:\r\n case RECOMMENDATION_TYPES.CREATE_CONVERSION_GOAL:\r\n case RECOMMENDATION_TYPES.FACEBOOK_IMPORT:\r\n case RECOMMENDATION_TYPES.MULTIMEDIA_ADS:\r\n case RECOMMENDATION_TYPES.IMAGE_EXTENSION:\r\n case RECOMMENDATION_TYPES.REPAIR_MISSING_KEYWORD_PARAMS:\r\n case RECOMMENDATION_TYPES.FIX_NO_IMPRESSION_BID:\r\n case RECOMMENDATION_TYPES.IMPROVE_MULTIMEDIA_ADS:\r\n case RECOMMENDATION_TYPES.SSC_2_PMAX_MIGRATION:\r\n case RECOMMENDATION_TYPES.PMAX_IMPORT:\r\n case RECOMMENDATION_TYPES.DSA_2_PMAX_MIGRATION:\r\n case RECOMMENDATION_TYPES.SYNDICATION_GAP:\r\n default:\r\n pitching = i18nToUse.getString(pitchingKey);\r\n break;\r\n }\r\n }\r\n\r\n let iconClasses;\r\n let iconClassesVNext;\r\n if (isSeasonal) {\r\n iconClasses = 'recommendation-seasonal-icon';\r\n iconClassesVNext = 'FavoriteStar';\r\n } else if (showAutoApplyBanner && isAutoApplyRecommendationEnabled) {\r\n iconClasses = 'recommendation-auto-apply-icon';\r\n iconClassesVNext = 'FlashAuto';\r\n } else {\r\n iconClasses = recommendationConfig.summaryIconClasses;\r\n iconClassesVNext = recommendationConfig.summaryIconClassesVNext;\r\n }\r\n const helpId = recommendationConfig.detailHelpId;\r\n const linkType = recommendationConfig.detailLinkType;\r\n const isEstimate = _.isUndefined(recommendationConfig.isEstimate) ?\r\n true : recommendationConfig.isEstimate;\r\n const { needNRTDisclaimer } = recommendationConfig;\r\n\r\n const estimates = formatEstimates(options);\r\n const coupon = options.coupon && formatCoupon(options);\r\n\r\n return _.extend(\r\n {\r\n iconClasses,\r\n iconClassesVNext,\r\n title,\r\n description,\r\n pitching,\r\n helpId,\r\n isSeasonal,\r\n isEstimate,\r\n needNRTDisclaimer,\r\n isNrt,\r\n hasAIAssetRecommendation,\r\n linkType,\r\n isFeedbackPersonalized,\r\n thirdPartyInfos,\r\n },\r\n estimates ? { estimates } : null,\r\n coupon ? { coupon } : null\r\n );\r\n};\r\n","import _ from 'underscore';\r\nimport { VISUAL_TYPES } from '../consts';\r\n\r\nconst chartTypes = [\r\n VISUAL_TYPES.COLUMN_CHART,\r\n VISUAL_TYPES.LINE_CHART,\r\n VISUAL_TYPES.LINE_WEEKLY_CHART,\r\n VISUAL_TYPES.LINE_COLUMN_CHART,\r\n];\r\n\r\n/**\r\n * Format visual data chart, e.g category string\r\n * @param {Object} i18n - Localization component\r\n * @param {string} visualType - visual type\r\n * @param {Object} visualData - visual data\r\n * @return {Object} formatted visual data\r\n */\r\nexport const formatVisualDataChart = (i18n, visualType, visualData) => {\r\n if (_.contains(chartTypes, visualType)) {\r\n const category = visualData.category || null;\r\n\r\n // eslint-disable-next-line no-param-reassign\r\n visualData.title = visualData.localizeCategory ?\r\n i18n.getString(category) : category;\r\n }\r\n\r\n return visualData;\r\n};\r\n","import _ from 'underscore';\r\nimport { recommendationConfigs } from '../recommendation-configs';\r\nimport {\r\n RECOMMENDATION_TYPES,\r\n} from '../consts';\r\nimport {\r\n formatEntityType,\r\n formatCost,\r\n formatPercent,\r\n formatBid,\r\n formatDecimal,\r\n truncateEntityName,\r\n} from './basic-format-data';\r\n\r\nconst formatOutOf = (i18n, recommendationsCount, sampleCount = 1) => (recommendationsCount === 1 ? ''\r\n : `(${sampleCount} ${i18n.getString('Summary_Card_Out_Of')} ${recommendationsCount})`);\r\n\r\nconst formatActions = (type, actions, i18n, currency) => _.map(actions, (row) => {\r\n const fromString = i18n.getString('Summary_Card_Estimate_Primary_From');\r\n const toString = i18n.getString('Summary_Card_Estimate_Primary_To');\r\n switch (type) {\r\n case RECOMMENDATION_TYPES.BUDGET: {\r\n const budgetFrom = formatCost(row.budgetCurrent, i18n, currency);\r\n const budgetTo = formatCost(row.budgetCurrent + row.budgetIncrease, i18n, currency);\r\n return [\r\n `${fromString} ${budgetFrom} ${toString} ${budgetTo}`,\r\n `+${formatPercent(row.imprShareIncrease, i18n)}`,\r\n ];\r\n }\r\n case RECOMMENDATION_TYPES.COMPETITIVE_BID: {\r\n const bidFrom = formatBid(row.bidCurrent, i18n, currency);\r\n const bidTo = formatBid(row.bidSuggested, i18n, currency);\r\n return [\r\n row.keyword,\r\n `${fromString} ${bidFrom} ${toString} ${bidTo}`,\r\n `+${formatPercent(row.imprShareIncrease, i18n)}`,\r\n ];\r\n }\r\n case RECOMMENDATION_TYPES.LOCATION_BID_BOOST:\r\n case RECOMMENDATION_TYPES.DEVICE_BID_BOOST: {\r\n const bidBoostFrom = formatPercent(row.currentBidAdjustmentPercent / 100, i18n);\r\n const bidBoostTo = formatPercent(row.suggestedBidAdjustmentPercent / 100, i18n);\r\n return [\r\n type === RECOMMENDATION_TYPES.DEVICE_BID_BOOST ?\r\n row.device : row.location,\r\n `${fromString} ${bidBoostFrom} ${toString} ${bidBoostTo}`,\r\n `+${formatPercent(row.imprShareIncrease, i18n)}`,\r\n ];\r\n }\r\n case RECOMMENDATION_TYPES.NEW_LOCATION: {\r\n return [\r\n row.location,\r\n `+${formatDecimal(row.impressionsIncrease, i18n)}`,\r\n ];\r\n }\r\n default:\r\n return null;\r\n }\r\n});\r\n\r\nexport const getModelForCompetitionSampleAction = ({\r\n type,\r\n i18n,\r\n recommendationsCount,\r\n level,\r\n entityName,\r\n currency,\r\n sample,\r\n}) => {\r\n let actionTitle;\r\n let actions;\r\n\r\n // deprecated in Oct 2023\r\n if (type === RECOMMENDATION_TYPES.NEW_KEYWORD) {\r\n actionTitle = i18n.getString('Summary_Card_What_You_Can_Do_Generic');\r\n actions = i18n.getString(\r\n 'Summary_Card_Action_New_Keyword',\r\n {\r\n n: recommendationsCount,\r\n entity_type: formatEntityType(level, recommendationsCount, i18n),\r\n }\r\n );\r\n } else if (type === RECOMMENDATION_TYPES.SYNDICATION) {\r\n actionTitle = i18n.getString('Summary_Card_What_You_Can_Do_Generic');\r\n actions = i18n.getString('Summary_Card_Action_Syndication');\r\n } else {\r\n actionTitle = i18n.getString(\r\n 'Summary_Card_What_You_Can_Do',\r\n { entity_name: entityName }\r\n );\r\n const headers = _.map(recommendationConfigs[type].sampleActionHeaders, headerKey =>\r\n i18n.getString(headerKey));\r\n const highlights = _.map(recommendationConfigs[type].sampleActionHeaders, headerKey =>\r\n headerKey === 'Summary_Card_Action_Header_Est_Impressions'\r\n || headerKey === 'Summary_Card_Action_Header_Est_Impression_Share');\r\n actions = {\r\n headers,\r\n values: formatActions(type, sample.actions, i18n, currency),\r\n highlights,\r\n };\r\n }\r\n\r\n return {\r\n actions,\r\n actionTitle,\r\n };\r\n};\r\n\r\nexport const getCompetitionSampleInsightTitle = ({\r\n type,\r\n i18n,\r\n entityName,\r\n recommendationsCount,\r\n sample,\r\n}) => {\r\n let insightTitle = '';\r\n // what's going on\r\n if (type === RECOMMENDATION_TYPES.NEW_KEYWORD || type === RECOMMENDATION_TYPES.SYNDICATION) {\r\n insightTitle = i18n.getString(\r\n 'Summary_Card_Whats_Going_Generic',\r\n { out_of: formatOutOf(i18n, recommendationsCount, sample.visualData.length) }\r\n );\r\n } else {\r\n insightTitle = i18n.getString(\r\n 'Summary_Card_Whats_Going_On',\r\n {\r\n out_of: formatOutOf(i18n, recommendationsCount),\r\n entity_name: entityName,\r\n }\r\n );\r\n }\r\n return insightTitle;\r\n};\r\n\r\nexport const formatCompetitionSampleVisualDataTable = ({\r\n type,\r\n visualData,\r\n visualTableHeaders,\r\n i18n,\r\n currency,\r\n}) => {\r\n const headers = _.map(visualTableHeaders, headerKey => i18n.getString(headerKey));\r\n const formattedVisualData = { headers };\r\n switch (type) {\r\n case RECOMMENDATION_TYPES.NEW_KEYWORD: {\r\n formattedVisualData.highlights = [false, false, true];\r\n formattedVisualData.values = _.map(visualData, row => ([\r\n row.suggestedKeyword,\r\n /* row.monthlyQueryVolume,\r\n //bug 1457951: disable until est. weekly search volume is available */\r\n formatBid(row.bidSuggested, i18n, currency),\r\n `+${formatDecimal(row.impressionsIncrease, i18n)}`,\r\n ]));\r\n break;\r\n }\r\n case RECOMMENDATION_TYPES.SYNDICATION: {\r\n formattedVisualData.highlights = [false, false, false, true];\r\n formattedVisualData.alignments = ['left', 'left'];\r\n formattedVisualData.values = _.map(visualData, (row) => {\r\n const formattedAdoptionPercentage = formatPercent(row.adoptionPercentage / 100, i18n);\r\n const adoptionValue = {\r\n percentValue: row.adoptionPercentage,\r\n formattedValue: formattedAdoptionPercentage,\r\n useProgressBar: true,\r\n };\r\n return [\r\n truncateEntityName(row.campaignName),\r\n truncateEntityName(row.adGroupName),\r\n adoptionValue,\r\n `+${formatDecimal(row.impressionsIncrease, i18n)}`,\r\n ];\r\n });\r\n break;\r\n }\r\n default: {\r\n break;\r\n }\r\n }\r\n\r\n return formattedVisualData;\r\n};\r\n","import _ from 'underscore';\r\n\r\n/**\r\n * Format campaign bulk api error\r\n * @param {Array} errors - array of error from MT\r\n * @param {Integer} addedValue - diff between adinsight error code and campaign error code\r\n * @return {Array} formatted errors in campaign MT style\r\n */\r\nexport const formatCampaignBulkApiError = (errors, addedValue) => _.map(errors, error => ({\r\n ErrorNumber: error.ErrorCode - addedValue,\r\n Error: error.ErrorMessage,\r\n Property: error.Property,\r\n}));\r\n","import _ from 'underscore';\r\nimport {\r\n RECOMMENDATION_TYPES,\r\n VISUAL_TYPES\r\n} from './consts';\r\n\r\nimport { generateSchema } from './schema';\r\n\r\nimport {\r\n formatEstimates,\r\n replacePlaceholders,\r\n formatSummary,\r\n buildSimpleFormFields,\r\n formatVisualDataChart,\r\n} from './formatter/index';\r\nimport { recommendationConfigs } from './recommendation-configs';\r\n\r\nfunction getModelForInsight({\r\n i18n, level, type,\r\n recommendation,\r\n}) {\r\n const config = recommendationConfigs[type];\r\n\r\n // visual\r\n let { visualData } = recommendation;\r\n const visualType = config.recommendation.visualType || config.visualType;\r\n visualData = formatVisualDataChart(i18n, visualType, visualData);\r\n if (visualType === VISUAL_TYPES.TABLE) {\r\n visualData = buildSimpleFormFields(\r\n config.recommendation.visualData,\r\n _.first(recommendation.opportunities),\r\n i18n\r\n );\r\n }\r\n\r\n const insightTitle = replacePlaceholders({\r\n model: recommendation,\r\n i18n,\r\n level,\r\n type,\r\n }, config.recommendation.insightTitle);\r\n\r\n return {\r\n insightTitle,\r\n visualData,\r\n visualType,\r\n };\r\n}\r\n\r\nfunction getModelForFormAction({\r\n type,\r\n i18n,\r\n recommendation,\r\n currency,\r\n appConfig,\r\n}) {\r\n const recommendationConfig = recommendationConfigs[type].recommendation;\r\n\r\n let labelProcessor;\r\n if (type === RECOMMENDATION_TYPES.BUDGET) {\r\n labelProcessor = label => label.replace('{{currency}}', currency);\r\n }\r\n const model = _.first(recommendation.opportunities);\r\n const fields = buildSimpleFormFields(\r\n recommendationConfig.actionDataInForm,\r\n model,\r\n i18n,\r\n labelProcessor,\r\n currency\r\n );\r\n\r\n const estimates = formatEstimates(_.extend(\r\n {},\r\n {\r\n type,\r\n i18n,\r\n currency,\r\n inDetailsView: true,\r\n },\r\n recommendation\r\n ));\r\n return {\r\n actionDataInForm: _.extend({ id: _.uniqueId('action-form-data-') }, {\r\n fields,\r\n model,\r\n target: recommendation.target,\r\n schema: generateSchema(appConfig),\r\n }),\r\n estimates,\r\n };\r\n}\r\n\r\nfunction getModelForGridAction({\r\n type,\r\n i18n,\r\n recommendation,\r\n currency,\r\n}) {\r\n const recommendationConfig = recommendationConfigs[type].recommendation;\r\n\r\n const {\r\n dataBuilder, columns, singleSelection, helpTopics, hasLastRowAsCurrent,\r\n } = recommendationConfig.actionGrid;\r\n const localizedHeaders = _.map(_.pluck(columns, 'header'), header => (i18n.getString(header)));\r\n const selectedRowIndex = _.findIndex(\r\n recommendation.opportunities,\r\n opportunity => opportunity.isDefault\r\n );\r\n const bodies = dataBuilder({\r\n recommendation,\r\n i18n,\r\n currency,\r\n });\r\n\r\n const actionDataInGrid = {\r\n id: _.uniqueId('action-grid-data-'),\r\n headers: localizedHeaders,\r\n bodies,\r\n selectedRow: selectedRowIndex.toString(),\r\n singleSelection,\r\n helpTopics,\r\n columns,\r\n hasLastRowAsCurrent,\r\n model: recommendation.opportunities,\r\n target: recommendation.target,\r\n };\r\n\r\n return {\r\n actionDataInGrid,\r\n };\r\n}\r\n\r\nconst getModelForAllRecommendations = (options) => {\r\n const {\r\n recommendations,\r\n type,\r\n i18n,\r\n level,\r\n currency,\r\n appConfig,\r\n } = options;\r\n const recommendationConfig = recommendationConfigs[type].recommendation;\r\n const result = _.map(recommendations, (recommendation) => {\r\n const data = {};\r\n\r\n // insight\r\n _.extend(data, getModelForInsight({\r\n i18n, level, type, recommendation,\r\n }));\r\n\r\n // action\r\n data.actionTitle = replacePlaceholders({\r\n model: recommendation,\r\n i18n,\r\n level,\r\n type,\r\n }, recommendationConfig.actionTitle);\r\n\r\n const commonOptionsForAction = {\r\n type, i18n, recommendation, currency,\r\n };\r\n if (recommendationConfig.actionDataInForm || recommendation.actionDataInForm) {\r\n _.extend(data, getModelForFormAction(_.extend({}, { appConfig }, commonOptionsForAction)));\r\n }\r\n if (recommendationConfig.actionGrid) {\r\n _.extend(data, getModelForGridAction(commonOptionsForAction));\r\n }\r\n if (_.isFunction(recommendationConfig.postprocessor)) {\r\n recommendationConfig.postprocessor(data, recommendation, i18n);\r\n }\r\n return data;\r\n });\r\n return result;\r\n};\r\n\r\nexport const getDetailsSummary = (options) => {\r\n const summary = formatSummary(options);\r\n return {\r\n summary,\r\n };\r\n};\r\n\r\nexport const getDetailsViewModel = (options) => {\r\n const summary = formatSummary(options);\r\n const recommendations = getModelForAllRecommendations(options);\r\n\r\n return _.extend({}, {\r\n summary,\r\n recommendations,\r\n });\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\n\r\nimport { createAsyncToken } from '@bingads-webui-universal/primitive-utilities';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\nimport { getDisplayName } from '@bingads-webui-react/hoc-utils';\r\nimport { RECOMMENDATION_TYPES } from '../consts';\r\n\r\nexport const withAdsAutoApply = (WrappedComponent) => {\r\n class HoC extends React.Component {\r\n static displayName = `withAdsAutoApply(${getDisplayName(WrappedComponent)})`;\r\n\r\n static propTypes = {\r\n odata: PropTypes.PropTypes.shape({\r\n get: PropTypes.func.isRequired,\r\n }).isRequired,\r\n cid: PropTypes.string.isRequired,\r\n aid: PropTypes.string.isRequired,\r\n showIntermediateView: PropTypes.bool,\r\n permissions: PropTypes.shape({}),\r\n type: PropTypes.string,\r\n data: PropTypes.objectOf(PropTypes.any),\r\n dataService: PropTypes.func.isRequired,\r\n };\r\n\r\n static defaultProps = {\r\n showIntermediateView: false,\r\n permissions: {},\r\n type: null,\r\n data: {},\r\n };\r\n\r\n state = {\r\n campaignAutoApplyStatus: {},\r\n };\r\n\r\n componentDidMount = () => {\r\n this.reload();\r\n };\r\n\r\n componentWillUnmount = () => {\r\n this.cancel();\r\n };\r\n\r\n reload = () => {\r\n this.cancel();\r\n\r\n this.loadToken = createAsyncToken(this.props.dataService\r\n .getAutoApplyOptInStatus())\r\n .on({\r\n onSuccess: (response) => {\r\n this.setState({\r\n campaignAutoApplyStatus: {\r\n [RECOMMENDATION_TYPES.RESPONSIVE_SEARCH_ADS]: _.find(response.data.value, item => item.RecommendationType === RECOMMENDATION_TYPES.RESPONSIVE_SEARCH_ADS).IsOptIn,\r\n },\r\n });\r\n },\r\n });\r\n };\r\n\r\n cancel = () => {\r\n if (this.loadToken) {\r\n this.loadToken.cancel();\r\n }\r\n };\r\n\r\n render = () => {\r\n const type = this.props.type || this.props.data.type;\r\n if (this.state.campaignAutoApplyStatus[type] === undefined\r\n && !this.props.showIntermediateView) {\r\n return null;\r\n }\r\n\r\n return ();\r\n };\r\n }\r\n\r\n return hoistNonReactStatics(HoC, WrappedComponent);\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { createAsyncToken } from '@bingads-webui-universal/primitive-utilities';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\nimport { getDisplayName } from '@bingads-webui-react/hoc-utils';\r\n\r\nexport const withImgAutoRetrieve = (WrappedComponent) => {\r\n class HoC extends React.Component {\r\n static displayName = `withImgAutoRetrieve(${getDisplayName(WrappedComponent)})`;\r\n\r\n static propTypes = {\r\n odata: PropTypes.PropTypes.shape({\r\n get: PropTypes.func.isRequired,\r\n }).isRequired,\r\n cid: PropTypes.string.isRequired,\r\n aid: PropTypes.string.isRequired,\r\n };\r\n\r\n state = {\r\n allowCrawlImagesFromLandingPage: undefined,\r\n };\r\n\r\n componentDidMount = () => {\r\n this.reload();\r\n };\r\n\r\n componentWillUnmount = () => {\r\n this.cancel();\r\n };\r\n\r\n reload = () => {\r\n this.cancel();\r\n\r\n const {\r\n odata,\r\n cid,\r\n aid,\r\n } = this.props;\r\n\r\n const url = `Customers(${cid})/Accounts(${aid})?$select=AllowCrawlImagesFromLandingPage`;\r\n\r\n this.loadToken = createAsyncToken(odata.get(url))\r\n .on({\r\n onSuccess: (response) => {\r\n this.setState({\r\n allowCrawlImagesFromLandingPage: response.AllowCrawlImagesFromLandingPage,\r\n });\r\n },\r\n });\r\n };\r\n\r\n cancel = () => {\r\n if (this.loadToken) {\r\n this.loadToken.cancel();\r\n }\r\n };\r\n\r\n render = () => {\r\n if (this.state.allowCrawlImagesFromLandingPage === undefined) {\r\n return null;\r\n }\r\n\r\n return ();\r\n };\r\n }\r\n\r\n return hoistNonReactStatics(HoC, WrappedComponent);\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport $ from 'jquery';\r\nimport _ from 'underscore';\r\n\r\nimport { withUiBlock } from '@bingads-webui/uiblocker';\r\nimport { createAsyncToken, generateGuid } from '@bingads-webui-universal/primitive-utilities';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\nimport { getDisplayName } from '@bingads-webui-react/hoc-utils';\r\nimport { SUPPORT_ADINSIGHT_AUTO_APPLY_TYPES } from '../consts';\r\n\r\nexport const withGetAutoApplyOptInStatus = (WrappedComponent) => {\r\n class HoC extends React.Component {\r\n static displayName = `withGetAutoApplyOptInStatus(${getDisplayName(WrappedComponent)})`;\r\n\r\n static propTypes = {\r\n dataService: PropTypes.shape({\r\n getAutoApplyOptInStatus: PropTypes.func.isRequired,\r\n }).isRequired,\r\n permissions: PropTypes.shape({}),\r\n isMCC: PropTypes.bool,\r\n };\r\n\r\n static defaultProps = {\r\n permissions: {},\r\n isMCC: false,\r\n }\r\n\r\n state = {\r\n data: null,\r\n optInStatus: null,\r\n };\r\n\r\n componentDidMount = () => {\r\n if (!this.props.isMCC) {\r\n this.reload();\r\n }\r\n };\r\n\r\n componentWillUnmount = () => {\r\n this.cancel();\r\n };\r\n\r\n reload = () => {\r\n this.cancel();\r\n this.loadToken = createAsyncToken(this.props.dataService\r\n .getAutoApplyOptInStatus().finally(withUiBlock($('.recommendations-page'))))\r\n .on({\r\n onSuccess: ({\r\n data,\r\n }) => {\r\n const parsedData = this.parse(data.value);\r\n this.setState({\r\n data: parsedData.parsedData,\r\n optInStatus: parsedData.optInStatus,\r\n });\r\n },\r\n });\r\n };\r\n\r\n cancel = () => {\r\n if (this.loadToken) {\r\n this.loadToken.cancel();\r\n }\r\n };\r\n\r\n parse = (rawData) => {\r\n const parsedData = {};\r\n const optInStatus = {};\r\n _.each(rawData, (data) => {\r\n if (_.contains(SUPPORT_ADINSIGHT_AUTO_APPLY_TYPES, data.RecommendationType)) {\r\n parsedData[data.RecommendationType] = { ...data };\r\n optInStatus[data.RecommendationType] = data.IsOptIn;\r\n }\r\n });\r\n\r\n return { optInStatus, parsedData };\r\n };\r\n\r\n render = () => {\r\n if (this.state.data === null) return null;\r\n\r\n return ();\r\n };\r\n }\r\n\r\n return hoistNonReactStatics(HoC, WrappedComponent);\r\n};\r\n","import _ from 'underscore';\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\nimport { getDisplayName } from '@bingads-webui-react/hoc-utils';\r\nimport { RECOMMENDATION_CATEGORIES_IDS, RECOMMENDATION_CATEGORIES } from '../consts';\r\n\r\nfunction filterData({ data, filterCategory, recommendationCustomizedDataFilterFunc }) {\r\n if (_.isFunction(recommendationCustomizedDataFilterFunc)) {\r\n return recommendationCustomizedDataFilterFunc(data);\r\n }\r\n if (filterCategory &&\r\n filterCategory !== RECOMMENDATION_CATEGORIES_IDS[RECOMMENDATION_CATEGORIES.ALL]) {\r\n const matcher = _.matcher({ category: filterCategory });\r\n return _.pick(data, matcher);\r\n }\r\n\r\n return data;\r\n}\r\n\r\nexport const withFilterCategory = (WrappedComponent) => {\r\n const HoC = props => (\r\n \r\n );\r\n\r\n HoC.displayName = `withFilterCategory(${getDisplayName(WrappedComponent)})`;\r\n HoC.propTypes = {\r\n filterCategory: PropTypes.string,\r\n data: PropTypes.objectOf(PropTypes.any),\r\n };\r\n HoC.defaultProps = {\r\n filterCategory: null,\r\n data: null,\r\n };\r\n\r\n hoistNonReactStatics(HoC, WrappedComponent);\r\n\r\n return HoC;\r\n};\r\n","import _ from 'underscore';\r\nimport 'jquery';\r\nimport kendo from '@bingads-webui/kendo/kendo.core';\r\n\r\nimport {\r\n RECOMMENDATION_TYPES,\r\n ESTIMATE_TYPES,\r\n SEASONAL_TRACKID,\r\n MOVE_BUDGET_CAMPAIGN_BUDGET_STATUS,\r\n BUDGET_OPPORTUNITY_TYPES,\r\n SUPPORT_ADINSIGHT_AUTO_APPLY_TYPES,\r\n RECOMMENDATION_CATEGORIES,\r\n TOP_POSITION_RECOMMENDATION_TYPES,\r\n} from './consts';\r\n\r\nimport { getFieldValueFromGridData } from './util';\r\n\r\n// #region estimates\r\nexport const getEstimates = (type, entity) => {\r\n const estimates = {\r\n costIncrease: entity.EstimatedIncreaseInCost,\r\n clicksIncrease: entity.EstimatedIncreaseInClicks,\r\n };\r\n\r\n switch (type) {\r\n case RECOMMENDATION_TYPES.BUDGET:\r\n case RECOMMENDATION_TYPES.COMPETITIVE_BID:\r\n case RECOMMENDATION_TYPES.DEVICE_BID_BOOST:\r\n case RECOMMENDATION_TYPES.LOCATION_BID_BOOST:\r\n estimates.imprShareCurrent = entity.CurSelfImprShare;\r\n estimates.imprShareIncrease = entity.EstimatedIncreaseInImprShare;\r\n estimates.imprShareTotal = entity.CurSelfImprShare + entity.EstimatedIncreaseInImprShare;\r\n if (entity.EstimatedIncreaseInConversionsInt > 0) {\r\n estimates.convIncrease = entity.EstimatedIncreaseInConversionsInt;\r\n }\r\n break;\r\n case RECOMMENDATION_TYPES.GOOGLE_IMPORT:\r\n case RECOMMENDATION_TYPES.GOOGLE_IMPORT_SCHEDULED:\r\n case RECOMMENDATION_TYPES.FACEBOOK_IMPORT:\r\n estimates.clicksCurrent = entity.CurrentClicks;\r\n estimates.impressionsIncrease = entity.EstimatedIncreaseInImpressions;\r\n break;\r\n case RECOMMENDATION_TYPES.SITE_LINK:\r\n case RECOMMENDATION_TYPES.CALLOUT:\r\n estimates.ctrCurrent = entity.CurrentCtr;\r\n estimates.ctrIncrease = entity.EstimatedIncreaseInCtr;\r\n estimates.ctrLift = entity.CtrLift;\r\n estimates.cpcIncrease = entity.EstimatedIncreaseInCpc;\r\n break;\r\n case RECOMMENDATION_TYPES.BUDGET_OPPORTUNITY:\r\n case RECOMMENDATION_TYPES.ADJUST_SHARED_BUDGET_OPPORTUNITY:\r\n if (entity.EstimatedIncreaseInConversionsInt > 0) {\r\n estimates.primaryEstimate = ESTIMATE_TYPES.CONVERSIONS;\r\n estimates.convCurrent = entity.CurrentConversionsInt;\r\n estimates.convIncrease = entity.EstimatedIncreaseInConversionsInt;\r\n } else {\r\n estimates.primaryEstimate = ESTIMATE_TYPES.CLICKS;\r\n estimates.clicksCurrent = entity.CurrentClicks;\r\n }\r\n break;\r\n case RECOMMENDATION_TYPES.NEW_KEYWORD: // deprecated in Oct 2023\r\n case RECOMMENDATION_TYPES.NEW_LOCATION:\r\n case RECOMMENDATION_TYPES.SYNDICATION:\r\n estimates.impressionsIncrease = entity.EstimatedIncreaseInImpressions;\r\n estimates.impressionsCurrent = entity.CurrentImpressions;\r\n if (entity.EstimatedIncreaseInConversionsInt > 0) {\r\n estimates.convIncrease = entity.EstimatedIncreaseInConversionsInt;\r\n }\r\n break;\r\n case RECOMMENDATION_TYPES.DYNAMIC_SEARCH_ADS:\r\n estimates.weeklySearchesIncrease = entity.EstimatedIncreaseInSearches;\r\n break;\r\n case RECOMMENDATION_TYPES.IMAGE_EXTENSION:\r\n case RECOMMENDATION_TYPES.REALLOCATE_BUDGET:\r\n estimates.clicksCurrent = entity.CurrentClicks;\r\n estimates.costCurrent = entity.CurrentCost;\r\n break;\r\n case RECOMMENDATION_TYPES.FIX_AD_TEXT:\r\n case RECOMMENDATION_TYPES.FIX_AD_DESTINATION:\r\n estimates.primaryEstimate = ESTIMATE_TYPES.REJECTED_ADS;\r\n estimates.secondPrimaryEstimate = ESTIMATE_TYPES.REJECTED_KEYWORDS;\r\n estimates.isDoublePrimary = true;\r\n estimates[`${ESTIMATE_TYPES.REJECTED_ADS}Increase`] = entity.NumberRejectedAds;\r\n estimates[`${ESTIMATE_TYPES.REJECTED_KEYWORDS}Increase`] = entity.NumberRejectedKeywords;\r\n break;\r\n case RECOMMENDATION_TYPES.CREATE_CONVERSION_GOAL:\r\n case RECOMMENDATION_TYPES.FIX_CONVERSION_GOAL_SETTINGS:\r\n estimates.missingConvIncrease = entity.EstimatedIncreaseInConversionsInt;\r\n break;\r\n case RECOMMENDATION_TYPES.REPAIR_MISSING_KEYWORD_PARAMS:\r\n estimates.impressionsIncrease = entity.EstimatedIncreaseInImpressions;\r\n estimates.impressionsCurrent = entity.CurrentImpressions;\r\n break;\r\n case RECOMMENDATION_TYPES.IMPROVE_RESPONSIVE_SEARCH_ADS:\r\n estimates.clicksCurrent = entity.CurrentClicks;\r\n estimates.impressionsIncrease = entity.EstimatedIncreaseInImpressions;\r\n break;\r\n case RECOMMENDATION_TYPES.REPAIR_UNTARGETED_OFFER:\r\n estimates.impressionsCurrent = entity.CurrentImpressions;\r\n estimates.impressionsIncrease = entity.EstimatedIncreaseInImpressions;\r\n estimates.targetedProductsIncrease = entity.SumofTotalUntargetedOfferCnt;\r\n break;\r\n case RECOMMENDATION_TYPES.IMPROVE_MULTIMEDIA_ADS:\r\n estimates.clicksIncrease = entity.EstimatedIncreaseInClicks;\r\n estimates.impressionsIncrease = entity.EstimatedIncreaseInImpressions;\r\n break;\r\n case RECOMMENDATION_TYPES.DSA_2_PMAX_MIGRATION:\r\n estimates.convIncrease = entity.EstimatedIncreaseInConversionsInt;\r\n break;\r\n case RECOMMENDATION_TYPES.SYNDICATION_GAP:\r\n estimates.clicksIncrease = entity.EstimatedIncreaseInClicks;\r\n estimates.convIncrease = entity.EstimatedIncreaseInConversionsInt;\r\n break;\r\n // No estimates\r\n case RECOMMENDATION_TYPES.REPAIR_ADS:\r\n case RECOMMENDATION_TYPES.REPAIR_KEYWORD:\r\n case RECOMMENDATION_TYPES.REMOVE_CONFLICTING_NEGATIVE_KEYWORD:\r\n case RECOMMENDATION_TYPES.RESPONSIVE_SEARCH_ADS:\r\n case RECOMMENDATION_TYPES.FIX_CONVERSION_TRACKING_OPPORTUNITY:\r\n case RECOMMENDATION_TYPES.SETUP_CONVERSION_TRACKING_OPPORTUNITY:\r\n case RECOMMENDATION_TYPES.NEW_KEYWORD_OPPORTUNITY:\r\n case RECOMMENDATION_TYPES.TRENDING_QUERY:\r\n case RECOMMENDATION_TYPES.BROAD_MATCH_KEYWORD:\r\n case RECOMMENDATION_TYPES.MULTIMEDIA_ADS:\r\n case RECOMMENDATION_TYPES.FIX_NO_IMPRESSION_BID:\r\n case RECOMMENDATION_TYPES.SSC_2_PMAX_MIGRATION:\r\n case RECOMMENDATION_TYPES.PMAX_IMPORT:\r\n return null;\r\n default:\r\n throw new Error(`Not Implemented: ${type}`);\r\n }\r\n\r\n return estimates;\r\n};\r\n// #endregion estimates\r\n\r\n// #region chart/map/table\r\nconst formatDate = (day, hour) => kendo.toString(kendo.parseDate(`${day}${hour || 0}`, 'yyyyMMddH'), 's');\r\n\r\nconst GetImpressionSharePoints = points => _.map(points, point => ({\r\n primarySegment: formatDate(point.Day, point.Hour),\r\n value: point.AuctionNumber && (point.ImpressionNumber / point.AuctionNumber),\r\n}));\r\n\r\nconst GetConversionRatePoints = points => _.map(points, point => ({\r\n primarySegment: formatDate(point.Day, point.Hour),\r\n value: point.ClickNumber && (point.ConversionNumber / point.ClickNumber),\r\n}));\r\n\r\nconst getBudgetChartData = (opportunity) => {\r\n const competitorData = opportunity.ReferenceCompetitor.CompetitiveInsights[0];\r\n const youData = opportunity.ReferenceCompetitor.CompetitiveInsights[1];\r\n\r\n const items = [\r\n {\r\n name: youData.Key,\r\n segmentData: GetImpressionSharePoints(youData.Value),\r\n },\r\n {\r\n name: competitorData.Key,\r\n segmentData: GetImpressionSharePoints(competitorData.Value),\r\n },\r\n ];\r\n\r\n return {\r\n selectedMetric: 'ImpressionShare',\r\n primarySegmentType: 'Hour',\r\n items,\r\n };\r\n};\r\n\r\nconst normalizeLocation = (\r\n id,\r\n location,\r\n estimatedIncreaseInImpressions = null,\r\n estimatedIncreaseInClicks = null,\r\n queriesFiltered = null,\r\n queriesPassedLocationFiltering = null\r\n) => {\r\n const type = 'Location';\r\n\r\n return {\r\n Id: id,\r\n Criterion: {\r\n Type: type,\r\n LocationCriterion: {\r\n CountryCode: location.CountryCode,\r\n LocationId: location.LocationId,\r\n Latitude: location.Latitude,\r\n Longitude: location.Longitude,\r\n LocationType: location.LocationType,\r\n Name: location.ExpandedName,\r\n },\r\n },\r\n EstimatedIncreaseInImpressions: estimatedIncreaseInImpressions,\r\n EstimatedIncreaseInClicks: estimatedIncreaseInClicks,\r\n QueriesFiltered: queriesFiltered,\r\n QueriesPassedLocationFiltering: queriesPassedLocationFiltering,\r\n };\r\n};\r\n\r\nconst getNewLocationMapData = (recommendation) => {\r\n const firstOpportunity = recommendation.Opportunities[0];\r\n let count = 0;\r\n\r\n const included =\r\n _.map(firstOpportunity.ExistingLocations, (location) => {\r\n count += 1;\r\n return normalizeLocation(count, location);\r\n });\r\n\r\n const excluded =\r\n _.map(firstOpportunity.ExcludedLocations, (location) => {\r\n count += 1;\r\n return normalizeLocation(count, location);\r\n });\r\n\r\n const recommended = _.map(recommendation.Opportunities, (opportunity) => {\r\n count += 1;\r\n return normalizeLocation(\r\n count,\r\n opportunity.Location,\r\n opportunity.EstimatedIncreaseInImpressions,\r\n opportunity.EstimatedIncreaseInClicks,\r\n opportunity.QueriesFiltered,\r\n opportunity.QueriesPassedLocationFiltering\r\n );\r\n });\r\n\r\n return {\r\n included,\r\n excluded,\r\n recommended,\r\n };\r\n};\r\n\r\nconst getBidBoostChartData = (recommendation, isDeviceBidBoost = false) => {\r\n const firstOpportunity = recommendation.Opportunities[0];\r\n const youData = firstOpportunity.CompetitiveInsights[1];\r\n const youPoint = {\r\n name: youData.Key,\r\n data: [youData.Value[0].ImpressionNumber / youData.Value[0].AuctionNumber],\r\n };\r\n\r\n const items = _.map(recommendation.Opportunities, (opportunity) => {\r\n const competitorData = opportunity.CompetitiveInsights[0].Value[0];\r\n return {\r\n name: opportunity.CompetitorDomain,\r\n data: [competitorData.ImpressionNumber / competitorData.AuctionNumber],\r\n };\r\n });\r\n items.unshift(youPoint);\r\n\r\n return {\r\n selectedMetric: 'ImpressionShare',\r\n localizeCategory: isDeviceBidBoost,\r\n category: isDeviceBidBoost ?\r\n `Details_View_Device_Type_${firstOpportunity.Device}` :\r\n firstOpportunity.ExpandedName,\r\n items,\r\n };\r\n};\r\n\r\nconst getCompetitiveBidChartData = (recommendation) => {\r\n const youData = _.find(recommendation.Opportunities[0].CompetitiveInsights, ({ Key }) => Key === 'You');\r\n\r\n const items = _.map(recommendation.Opportunities, (opportunity) => {\r\n const competitorData = _.find(opportunity.CompetitiveInsights, ({ Key }) => Key !== 'You');\r\n return {\r\n name: competitorData.Key,\r\n segmentData: GetImpressionSharePoints(competitorData.Value),\r\n };\r\n });\r\n\r\n // add line for You\r\n items.unshift({\r\n name: youData.Key,\r\n segmentData: GetImpressionSharePoints(youData.Value),\r\n });\r\n\r\n if (recommendation.Opportunities[0].IsHighConverting) {\r\n items.push({\r\n name: youData.Key,\r\n metric: 'ConversionRate',\r\n segmentData: GetConversionRatePoints(youData.Value),\r\n });\r\n }\r\n\r\n return {\r\n selectedMetric: 'ImpressionShare',\r\n secondaryMetric: 'ConversionRate',\r\n primarySegmentType: 'Day',\r\n items,\r\n };\r\n};\r\n\r\nconst getDetailsVisualData = (type, recommendation) => {\r\n switch (type) {\r\n case RECOMMENDATION_TYPES.BUDGET:\r\n return getBudgetChartData(recommendation.Opportunities[0]);\r\n case RECOMMENDATION_TYPES.COMPETITIVE_BID:\r\n return getCompetitiveBidChartData(recommendation);\r\n case RECOMMENDATION_TYPES.DEVICE_BID_BOOST:\r\n return getBidBoostChartData(recommendation, true);\r\n case RECOMMENDATION_TYPES.LOCATION_BID_BOOST:\r\n return getBidBoostChartData(recommendation);\r\n case RECOMMENDATION_TYPES.NEW_LOCATION:\r\n return getNewLocationMapData(recommendation);\r\n case RECOMMENDATION_TYPES.SYNDICATION:\r\n default:\r\n return null;\r\n }\r\n};\r\n\r\nconst getNewKeywordTable = (recommendations) => {\r\n const rows = _.map(recommendations, (recommendation) => {\r\n let row;\r\n const topOpportunity = recommendation.Opportunities[0];\r\n if (topOpportunity) {\r\n row = {\r\n suggestedKeyword: topOpportunity.SuggestedKeyword,\r\n monthlyQueryVolume: topOpportunity.MonthlyQueryVolume,\r\n bidSuggested: topOpportunity.SuggestedBid,\r\n impressionsIncrease: topOpportunity.EstimatedIncreaseInImpressions,\r\n };\r\n }\r\n\r\n return row;\r\n });\r\n\r\n return _.compact(rows);\r\n};\r\n\r\nconst getNewKeywordOpportunityTable = (recommendations) => {\r\n const rows = _.map(recommendations, (recommendation) => {\r\n let row;\r\n const topOpportunity = recommendation.Opportunities[0];\r\n if (topOpportunity) {\r\n row = {\r\n recommendedKeyword: topOpportunity.SuggestedKeyword,\r\n matchType: topOpportunity.MatchType,\r\n recommendedSource: topOpportunity.SourcesForBingAdsWebUi[0],\r\n };\r\n }\r\n\r\n return row;\r\n });\r\n\r\n return _.compact(rows);\r\n};\r\n\r\nconst getDynamicSearchAdsTable = (recommendations) => {\r\n const rows = _.map(recommendations, (recommendation) => {\r\n let row;\r\n const topOpportunity = _.first(recommendation.Opportunities);\r\n if (topOpportunity) {\r\n row = { searchExamples: topOpportunity.SearchExamples };\r\n }\r\n\r\n return row;\r\n });\r\n\r\n return _.compact(rows);\r\n};\r\n\r\nconst getSyndicationTable = (recommendations) => {\r\n const rows = _.map(recommendations, (recommendation) => {\r\n let row;\r\n const topOpportunity = recommendation.Opportunities[0];\r\n if (topOpportunity) {\r\n row = {\r\n campaignName: topOpportunity.Target.CampaignName,\r\n adGroupName: topOpportunity.Target.AdGroupName,\r\n adoptionPercentage: topOpportunity.CompetitorAdoptionPercentage,\r\n impressionsIncrease: topOpportunity.EstimatedIncreaseInImpressions,\r\n };\r\n }\r\n\r\n return row;\r\n });\r\n\r\n return _.compact(rows);\r\n};\r\n\r\nconst getExtensionTable = (recommendations) => {\r\n const rows = _.map(recommendations, (recommendation) => {\r\n let row;\r\n const topOpportunity = recommendation.Opportunities[0];\r\n if (topOpportunity) {\r\n row = {\r\n campaignName: topOpportunity.Target.CampaignName,\r\n ctrLift: topOpportunity.CtrLift,\r\n };\r\n }\r\n\r\n return row;\r\n });\r\n\r\n return _.compact(rows);\r\n};\r\n\r\nconst getBudgetOpportunityTable = (recommendations, primaryEstimate, isShared = false) => {\r\n const rows = _.map(recommendations, (recommendation) => {\r\n let row;\r\n const topOpportunity = recommendation.Opportunities[0];\r\n if (topOpportunity) {\r\n if (isShared) {\r\n row = { entityName: topOpportunity.Shared.BudgetName };\r\n } else {\r\n row = { entityName: topOpportunity.Target.CampaignName };\r\n }\r\n if (primaryEstimate === ESTIMATE_TYPES.CONVERSIONS) {\r\n row.convIncrease = topOpportunity.EstimatedIncreaseInConversionsInt;\r\n } else {\r\n row.clicksIncrease = topOpportunity.EstimatedIncreaseInClicks;\r\n }\r\n }\r\n\r\n return row;\r\n });\r\n\r\n return _.compact(rows);\r\n};\r\n\r\nconst getRepairTable = (recommendations) => {\r\n const rows = _.map(recommendations, (recommendation) => {\r\n let row;\r\n const topOpportunity = recommendation.Opportunities[0];\r\n if (topOpportunity) {\r\n row = {\r\n adGroupName: topOpportunity.Target.AdGroupName,\r\n };\r\n }\r\n\r\n return row;\r\n });\r\n\r\n return _.compact(rows);\r\n};\r\n\r\nconst getRemoveConflictingNegativeKeywordTable = (recommendations) => {\r\n const rows = _.map(recommendations, (recommendation) => {\r\n let row;\r\n const topOpportunity = recommendation.Opportunities[0];\r\n if (topOpportunity) {\r\n row = {\r\n negativeKeyword: topOpportunity.NegativeKeyword,\r\n blockedKeyword: _.first(topOpportunity.BlockedKeywordList).Keyword,\r\n matchType: topOpportunity.NegativeKeywordMatchTypeId,\r\n blockedKeywordMatchType: _.first(topOpportunity.BlockedKeywordList).MatchTypeId,\r\n };\r\n }\r\n\r\n return row;\r\n });\r\n\r\n return _.compact(rows);\r\n};\r\n\r\nconst getResponsiveSearchAdsTable = (recommendations) => {\r\n const rows = _.map(recommendations, (recommendation) => {\r\n let row;\r\n const topOpportunity = recommendation.Opportunities[0];\r\n if (topOpportunity) {\r\n row = {\r\n adGroupName: topOpportunity.Target.AdGroupName,\r\n };\r\n }\r\n\r\n return row;\r\n });\r\n\r\n return _.compact(rows);\r\n};\r\n\r\nconst getReallocateBudgetTable = (recommendations) => {\r\n const rows = _.map(recommendations, (recommendation) => {\r\n let row;\r\n const topOpportunity = recommendation.Opportunities[0];\r\n const fromCampaign = _.find(\r\n topOpportunity.SuggestedCampaignBudgets,\r\n campaign => campaign.BudgetStatus === MOVE_BUDGET_CAMPAIGN_BUDGET_STATUS.Surplus\r\n );\r\n const toCampaign = _.find(\r\n topOpportunity.SuggestedCampaignBudgets,\r\n campaign => campaign.BudgetStatus === MOVE_BUDGET_CAMPAIGN_BUDGET_STATUS.Deficit\r\n );\r\n if (topOpportunity) {\r\n row = {\r\n fromCampaign: fromCampaign.CampaignName,\r\n toCampaign: toCampaign.CampaignName,\r\n suggestBudget: toCampaign.BudgetDeficit,\r\n clicksIncrease: topOpportunity.EstimatedIncreaseInClicks,\r\n };\r\n }\r\n\r\n return row;\r\n });\r\n\r\n return _.compact(rows);\r\n};\r\n\r\nconst getFixAdDestinationTable = (recommendations) => {\r\n const rows = _.map(recommendations, (recommendation) => {\r\n let row;\r\n const topOpportunity = recommendation.Opportunities[0];\r\n if (topOpportunity) {\r\n row = {\r\n UrlOrLandingPage: topOpportunity.UrlOrLandingPage,\r\n };\r\n }\r\n\r\n return row;\r\n });\r\n\r\n return _.compact(rows);\r\n};\r\n\r\nconst getBroadMatchKeywordTable = (samples) => {\r\n const rows = _.map(samples, (sample) => {\r\n const row = {\r\n recommendedKeyword: sample.SampleContent,\r\n };\r\n\r\n return row;\r\n });\r\n\r\n return _.compact(rows);\r\n};\r\n\r\nconst getFixAdTextTable = (recommendations) => {\r\n const rows = _.map(recommendations, (recommendation) => {\r\n let row;\r\n const opportunity = recommendation.Opportunities[0];\r\n\r\n if (opportunity) {\r\n row = {\r\n policyCode: opportunity.FlagId,\r\n numberRejectedAds:\r\n opportunity.NumberRejectedDisapprovedAds +\r\n opportunity.NumberRejectedLimitedApprovedAds,\r\n numberRejectedKeywords:\r\n opportunity.NumberRejectedDisapprovedKeywords +\r\n opportunity.NumberRejectedLimitedApprovedKeywords,\r\n };\r\n }\r\n return row;\r\n });\r\n\r\n return _.compact(rows);\r\n};\r\n\r\nconst getTrendingQueryTable = (recommendations) => {\r\n const rows = _.map(recommendations, (recommendation) => {\r\n let row;\r\n const topOpportunity = recommendation.Opportunities[0];\r\n if (topOpportunity) {\r\n row = {\r\n recommendedKeyword: topOpportunity.SuggestedKeyword,\r\n matchType: topOpportunity.MatchType,\r\n searchVolumeIncrease: topOpportunity.WoWInDecimal || topOpportunity.WoW,\r\n };\r\n }\r\n\r\n return row;\r\n });\r\n\r\n return _.compact(rows);\r\n};\r\n\r\nconst getMultiMediaAdsTable = (recommendations) => {\r\n const rows = _.map(recommendations, (recommendation) => {\r\n let row;\r\n const topOpportunity = recommendation.Opportunities[0];\r\n if (topOpportunity) {\r\n row = {\r\n adGroupName: topOpportunity.Target.AdGroupName,\r\n };\r\n }\r\n\r\n return row;\r\n });\r\n\r\n return _.compact(rows);\r\n};\r\n\r\nconst getImageExtensionTable = (recommendations) => {\r\n const rows = _.map(recommendations, (recommendation) => {\r\n let row;\r\n const topOpportunity = recommendation.Opportunities[0];\r\n if (topOpportunity) {\r\n row = {\r\n campaignName: topOpportunity.Target.CampaignName,\r\n clicksIncrease: topOpportunity.EstimatedIncreaseInClicks,\r\n };\r\n }\r\n\r\n return row;\r\n });\r\n\r\n return _.compact(rows);\r\n};\r\n\r\nconst getRepairMissingKeywordParamsTable = (recommendations) => {\r\n const rows = _.map(recommendations, (recommendation) => {\r\n let row;\r\n const topOpportunity = recommendation.Opportunities[0];\r\n if (topOpportunity) {\r\n row = {\r\n keyword: topOpportunity.Target.Keyword,\r\n impressionsIncrease: topOpportunity.EstimatedIncreaseInImpressions,\r\n impressionsCurrent: topOpportunity.CurrentImpressions,\r\n clicksIncrease: topOpportunity.EstimatedIncreaseInClicks,\r\n };\r\n }\r\n\r\n return row;\r\n });\r\n\r\n return _.compact(rows);\r\n};\r\n\r\nconst getFixNoImpressionBidTable = (recommendations) => {\r\n const rows = _.map(recommendations, (recommendation) => {\r\n let row;\r\n const topOpportunity = recommendation.Opportunities[0];\r\n if (topOpportunity) {\r\n row = {\r\n keyword: topOpportunity.Target.Keyword,\r\n suggestedBid: topOpportunity.SuggestedBid,\r\n impressionsIncrease: topOpportunity.EstimatedIncreaseInImpressions,\r\n source: topOpportunity.Source,\r\n };\r\n }\r\n\r\n return row;\r\n });\r\n\r\n return _.compact(rows);\r\n};\r\n\r\nconst getRepairUntargetedOfferTable = (recommendations) => {\r\n const rows = _.map(recommendations, (recommendation) => {\r\n let row;\r\n const topOpportunity = recommendation.Opportunities[0];\r\n if (topOpportunity) {\r\n row = {\r\n campaignName: getFieldValueFromGridData(topOpportunity.GridData, 'CampaignName'),\r\n impressionsIncrease: topOpportunity.EstimatedIncreaseInImpressions,\r\n clicksIncrease: topOpportunity.EstimatedIncreaseInClicks,\r\n targetedProductsIncrease: topOpportunity.TotalUntargetedOfferCnt,\r\n };\r\n }\r\n\r\n return row;\r\n });\r\n\r\n return _.compact(rows);\r\n};\r\n\r\nconst getImproveMultiMediaAdsTable = (recommendations) => {\r\n const rows = _.map(recommendations, (recommendation) => {\r\n let row;\r\n const opportunity = recommendation.Opportunities[0];\r\n if (opportunity) {\r\n row = {\r\n Images: opportunity.Images,\r\n Headlines: opportunity.Headlines,\r\n LongHeadlines: opportunity.LongHeadlines,\r\n Descriptions: opportunity.Descriptions,\r\n OpportunityId: opportunity.OpportunityId,\r\n };\r\n }\r\n\r\n return row;\r\n });\r\n\r\n return _.compact(rows);\r\n};\r\n\r\nconst getSSC2PMaxMigrationTable = (recommendations) => {\r\n const rows = _.map(recommendations, (recommendation) => {\r\n let row;\r\n const topOpportunity = recommendation.Opportunities[0];\r\n if (topOpportunity) {\r\n row = {\r\n clicksIncrease: topOpportunity.EstimatedIncreaseInClicks,\r\n campaignName: topOpportunity.Target.CampaignName,\r\n };\r\n }\r\n\r\n return row;\r\n });\r\n\r\n return _.compact(rows);\r\n};\r\n\r\nconst getDSA2PMaxMigrationTable = (recommendations) => {\r\n const rows = _.map(recommendations, (recommendation) => {\r\n let row;\r\n const topOpportunity = recommendation.Opportunities[0];\r\n if (topOpportunity) {\r\n row = {\r\n convIncrease: topOpportunity.EstimatedIncreaseInConversionsInt,\r\n };\r\n }\r\n\r\n return row;\r\n });\r\n\r\n return _.compact(rows);\r\n};\r\n\r\nconst getSyndicationGapTable = (recommendations) => {\r\n const rows = _.map(recommendations, (recommendation) => {\r\n let row;\r\n const topOpportunity = recommendation.Opportunities[0];\r\n if (topOpportunity) {\r\n row = {\r\n clicksIncrease: topOpportunity.EstimatedIncreaseInClicks,\r\n campaignName: topOpportunity.Target.CampaignName,\r\n convIncrease: topOpportunity.EstimatedIncreaseInConversionsInt,\r\n };\r\n }\r\n\r\n return row;\r\n });\r\n\r\n return _.compact(rows);\r\n};\r\n// #endregion chart/map/table\r\n\r\n// #region sample\r\nconst sortOpportunitiesInRecommendation = (recommendation, type) => {\r\n let sortedOpportunities = null;\r\n switch (type) {\r\n case RECOMMENDATION_TYPES.COMPETITIVE_BID:\r\n sortedOpportunities = _.sortBy(recommendation.Opportunities, 'SuggestedBid');\r\n break;\r\n case RECOMMENDATION_TYPES.DEVICE_BID_BOOST:\r\n case RECOMMENDATION_TYPES.LOCATION_BID_BOOST:\r\n sortedOpportunities = _.sortBy(recommendation.Opportunities, 'SuggestedBidBoost');\r\n break;\r\n case RECOMMENDATION_TYPES.NEW_LOCATION:\r\n sortedOpportunities = _.sortBy(recommendation.Opportunities, 'EstimatedIncreaseInClicks');\r\n break;\r\n // Budget, new keyword, syndication are 1 to 1\r\n // no need to sort other opportunities\r\n default:\r\n break;\r\n }\r\n\r\n return _.extend(\r\n {},\r\n recommendation,\r\n {\r\n Opportunities: sortedOpportunities ?\r\n sortedOpportunities.reverse() : recommendation.Opportunities,\r\n }\r\n );\r\n};\r\n\r\n/**\r\n * If DefaultOpportunityId is defined, return corresponding opportunity\r\n * If not, use top opportunity\r\n * @param {Object} sortedRecommendation - sorted recommendation\r\n * @return {Object} recommended opportunity\r\n */\r\nconst getRecommendedOpportunity = (sortedRecommendation) => {\r\n let opportunity = null;\r\n if (sortedRecommendation.DefaultOpportunityId) {\r\n opportunity = _.findWhere(\r\n sortedRecommendation.Opportunities,\r\n { OpportunityId: sortedRecommendation.DefaultOpportunityId }\r\n );\r\n } else {\r\n [opportunity] = sortedRecommendation.Opportunities;\r\n }\r\n\r\n return opportunity;\r\n};\r\n\r\nconst getActionData = (\r\n type,\r\n topRecommendation,\r\n recommendedOpportunity\r\n) => {\r\n switch (type) {\r\n case RECOMMENDATION_TYPES.BUDGET: {\r\n return [\r\n {\r\n budgetCurrent: recommendedOpportunity.CurrentBudget,\r\n budgetIncrease: recommendedOpportunity.EstimatedIncreaseInBudget,\r\n imprShareIncrease: recommendedOpportunity.EstimatedIncreaseInImprShare,\r\n },\r\n ];\r\n }\r\n case RECOMMENDATION_TYPES.COMPETITIVE_BID: {\r\n return [\r\n {\r\n keyword: recommendedOpportunity.Target.Keyword,\r\n bidCurrent: recommendedOpportunity.CurrentBid,\r\n bidSuggested: recommendedOpportunity.SuggestedBid,\r\n imprShareIncrease: recommendedOpportunity.TargetSelfImprShare -\r\n recommendedOpportunity.CurSelfImprShare,\r\n },\r\n ];\r\n }\r\n case RECOMMENDATION_TYPES.DEVICE_BID_BOOST: {\r\n return [\r\n {\r\n device: recommendedOpportunity.Device,\r\n currentBidAdjustmentPercent: recommendedOpportunity.CurrentBidBoost,\r\n suggestedBidAdjustmentPercent: recommendedOpportunity.SuggestedBidBoost,\r\n imprShareIncrease: recommendedOpportunity.EstimatedIncreaseInImprShare,\r\n },\r\n ];\r\n }\r\n case RECOMMENDATION_TYPES.LOCATION_BID_BOOST: {\r\n return [\r\n {\r\n location: recommendedOpportunity.ExpandedName || recommendedOpportunity.GeoLocationId,\r\n currentBidAdjustmentPercent: recommendedOpportunity.CurrentBidBoost,\r\n suggestedBidAdjustmentPercent: recommendedOpportunity.SuggestedBidBoost,\r\n imprShareIncrease: recommendedOpportunity.EstimatedIncreaseInImprShare,\r\n },\r\n ];\r\n }\r\n case RECOMMENDATION_TYPES.NEW_LOCATION: {\r\n return _.map(topRecommendation.Opportunities, opportunity => ({\r\n location: opportunity.Location.ExpandedName,\r\n impressionsIncrease: opportunity.EstimatedIncreaseInImpressions,\r\n }));\r\n }\r\n case RECOMMENDATION_TYPES.NEW_KEYWORD:\r\n default:\r\n return null;\r\n }\r\n};\r\n// #endregion sample\r\n\r\n// #region individual recommendation\r\nconst getOpportunity = (type, opportunity, defaultOpId) => {\r\n const opportunityId = opportunity.OpportunityId;\r\n const isDefault = opportunityId === defaultOpId;\r\n\r\n switch (type) {\r\n case RECOMMENDATION_TYPES.BUDGET:\r\n return {\r\n opportunityId,\r\n budgetCurrent: opportunity.CurrentBudget,\r\n budgetSuggested: opportunity.CurrentBudget + opportunity.EstimatedIncreaseInBudget,\r\n };\r\n case RECOMMENDATION_TYPES.COMPETITIVE_BID: {\r\n return {\r\n opportunityId,\r\n isDefault,\r\n suggestedBid: opportunity.SuggestedBid,\r\n imprShareIncrease: opportunity.TargetSelfImprShare -\r\n opportunity.CurSelfImprShare,\r\n totalImprShare: opportunity.TargetSelfImprShare,\r\n weeklyCost: opportunity.EstimatedIncreaseInCost + opportunity.CurrentCost,\r\n competitorDomain: opportunity.CompetitorDomain,\r\n competitorImprShare: opportunity.CompetitorImprShare,\r\n clicksIncrease: opportunity.EstimatedIncreaseInClicks,\r\n convIncrease: opportunity.EstimatedIncreaseInConversionsInt,\r\n };\r\n }\r\n case RECOMMENDATION_TYPES.DEVICE_BID_BOOST:\r\n case RECOMMENDATION_TYPES.LOCATION_BID_BOOST: {\r\n const competitorData = opportunity.CompetitiveInsights[0].Value[0];\r\n return {\r\n opportunityId,\r\n isDefault,\r\n suggestedBidAdjustmentPercent: opportunity.SuggestedBidBoost,\r\n imprShareIncrease: opportunity.EstimatedIncreaseInImprShare,\r\n totalImprShare: opportunity.EstimatedIncreaseInImprShare + opportunity.CurSelfImprShare,\r\n weeklyCost: opportunity.EstimatedIncreaseInCost + opportunity.CurrentCost,\r\n competitorDomain: opportunity.CompetitorDomain,\r\n competitorImprShare: competitorData.ImpressionNumber / competitorData.AuctionNumber,\r\n clicksIncrease: opportunity.EstimatedIncreaseInClicks,\r\n convIncrease: opportunity.EstimatedIncreaseInConversionsInt,\r\n };\r\n }\r\n // deprecated in Oct 2023\r\n case RECOMMENDATION_TYPES.NEW_KEYWORD: {\r\n return {\r\n opportunityId,\r\n suggestedBid: opportunity.SuggestedBid,\r\n suggestedKeyword: opportunity.SuggestedKeyword,\r\n matchType: opportunity.MatchType,\r\n monthlyQueryVolume: opportunity.MonthlyQueryVolume,\r\n };\r\n }\r\n case RECOMMENDATION_TYPES.NEW_LOCATION: {\r\n return {\r\n opportunityId,\r\n location: opportunity.Location.ExpandedName,\r\n searchQueryVolume: opportunity.QueriesFiltered,\r\n impressionsIncrease: opportunity.EstimatedIncreaseInImpressions,\r\n costIncrease: opportunity.EstimatedIncreaseInCost,\r\n clicksIncrease: opportunity.EstimatedIncreaseInClicks,\r\n };\r\n }\r\n case RECOMMENDATION_TYPES.SYNDICATION:\r\n return {\r\n opportunityId,\r\n adoptionPercent: opportunity.CompetitorAdoptionPercentage,\r\n };\r\n case RECOMMENDATION_TYPES.NEW_KEYWORD_OPPORTUNITY: {\r\n return {\r\n opportunityId,\r\n recommendedKeyword: opportunity.SuggestedKeyword,\r\n matchType: opportunity.MatchType,\r\n recommendedSource: opportunity.SourcesForBingAdsWebUi[0],\r\n };\r\n }\r\n case RECOMMENDATION_TYPES.TRENDING_QUERY: {\r\n return {\r\n opportunityId,\r\n recommendedKeyword: opportunity.SuggestedKeyword,\r\n matchType: opportunity.MatchType,\r\n monthlySearchVolume: opportunity.MonthlySearchVolume,\r\n weekoverWeek: opportunity.WoWInDecimal || opportunity.WoW,\r\n };\r\n }\r\n case RECOMMENDATION_TYPES.DYNAMIC_SEARCH_ADS: {\r\n return {\r\n opportunityId,\r\n weeklySearchesIncrease: opportunity.EstimatedIncreaseInSearches,\r\n searchExamples: opportunity.SearchExamples,\r\n };\r\n }\r\n case RECOMMENDATION_TYPES.GOOGLE_IMPORT:\r\n case RECOMMENDATION_TYPES.GOOGLE_IMPORT_SCHEDULED:\r\n case RECOMMENDATION_TYPES.FACEBOOK_IMPORT:\r\n case RECOMMENDATION_TYPES.PMAX_IMPORT: {\r\n return {\r\n opportunityId,\r\n };\r\n }\r\n case RECOMMENDATION_TYPES.SITE_LINK:\r\n case RECOMMENDATION_TYPES.CALLOUT: {\r\n return {\r\n opportunityId,\r\n ctrLift: opportunity.CtrLift,\r\n campaignName: opportunity.Target.CampaignName,\r\n impressionsIncrease: opportunity.EstimatedIncreaseInImpressions,\r\n costIncrease: opportunity.EstimatedIncreaseInCost,\r\n clicksIncrease: opportunity.EstimatedIncreaseInClicks,\r\n };\r\n }\r\n case RECOMMENDATION_TYPES.BUDGET_OPPORTUNITY:\r\n case RECOMMENDATION_TYPES.ADJUST_SHARED_BUDGET_OPPORTUNITY: {\r\n return {\r\n opportunityId,\r\n convIncrease: opportunity.EstimatedIncreaseInConversionsInt,\r\n };\r\n }\r\n case RECOMMENDATION_TYPES.REPAIR_ADS: {\r\n return {\r\n opportunityId,\r\n adGroupName: opportunity.Target.AdGroupName,\r\n campaignName: opportunity.Target.CampaignName,\r\n };\r\n }\r\n case RECOMMENDATION_TYPES.REPAIR_KEYWORD: {\r\n return {\r\n opportunityId,\r\n adGroupName: opportunity.Target.AdGroupName,\r\n campaignName: opportunity.Target.CampaignName,\r\n };\r\n }\r\n case RECOMMENDATION_TYPES.BROAD_MATCH_KEYWORD: {\r\n return {\r\n opportunityId,\r\n recommendedKeyword: opportunity.ReferenceKeyword,\r\n };\r\n }\r\n case RECOMMENDATION_TYPES.REMOVE_CONFLICTING_NEGATIVE_KEYWORD: {\r\n return {\r\n opportunityId,\r\n negativeKeyword: opportunity.NegativeKeyword,\r\n blockedKeyword: _.first(opportunity.BlockedKeywordList).Keyword,\r\n };\r\n }\r\n case RECOMMENDATION_TYPES.RESPONSIVE_SEARCH_ADS: {\r\n return {\r\n opportunityId,\r\n adGroupName: opportunity.Target.AdGroupName,\r\n };\r\n }\r\n case RECOMMENDATION_TYPES.REALLOCATE_BUDGET: {\r\n const fromCampaign = _.find(\r\n opportunity.SuggestedCampaignBudgets,\r\n campaign => campaign.BudgetStatus === MOVE_BUDGET_CAMPAIGN_BUDGET_STATUS.Surplus\r\n );\r\n const toCampaign = _.find(\r\n opportunity.SuggestedCampaignBudgets,\r\n campaign => campaign.BudgetStatus === MOVE_BUDGET_CAMPAIGN_BUDGET_STATUS.Deficit\r\n );\r\n return {\r\n opportunityId,\r\n fromCampaign: fromCampaign.CampaignName,\r\n toCampaign: toCampaign.CampaignName,\r\n suggestBudget: toCampaign.BudgetDeficit,\r\n clicksIncrease: opportunity.EstimatedIncreaseInClicks,\r\n };\r\n }\r\n case RECOMMENDATION_TYPES.FIX_AD_DESTINATION: {\r\n return {\r\n opportunityId,\r\n rejectedAd: opportunity.RejectedAd,\r\n };\r\n }\r\n case RECOMMENDATION_TYPES.FIX_AD_TEXT: {\r\n return {\r\n opportunityId,\r\n rejectionCode: opportunity.FlagId,\r\n rejectedAds: opportunity.RejectedAds,\r\n rejectedKeywords: opportunity.RejectedKeywords,\r\n };\r\n }\r\n case RECOMMENDATION_TYPES.FIX_CONVERSION_TRACKING_OPPORTUNITY: {\r\n return {\r\n opportunityId,\r\n inactiveTagCount: opportunity.NumInactiveUetTags,\r\n affectedGoal: opportunity.NumAffectedConversionGoals,\r\n };\r\n }\r\n case RECOMMENDATION_TYPES.SETUP_CONVERSION_TRACKING_OPPORTUNITY: {\r\n return {\r\n opportunityId,\r\n numImpressions: opportunity.NumImpressions,\r\n numClicks: opportunity.NumClicks,\r\n };\r\n }\r\n case RECOMMENDATION_TYPES.FIX_CONVERSION_GOAL_SETTINGS: {\r\n return {\r\n opportunityId,\r\n missingConvIncrease: opportunity.EstimatedIncreaseInConversionsInt,\r\n };\r\n }\r\n case RECOMMENDATION_TYPES.CREATE_CONVERSION_GOAL: {\r\n return {\r\n opportunityId,\r\n missingConvIncrease: opportunity.EstimatedIncreaseInConversionsInt,\r\n };\r\n }\r\n case RECOMMENDATION_TYPES.MULTIMEDIA_ADS: {\r\n return {\r\n opportunityId,\r\n adGroupName: opportunity.Target.AdGroupName,\r\n };\r\n }\r\n case RECOMMENDATION_TYPES.IMAGE_EXTENSION: {\r\n return {\r\n opportunityId,\r\n campaignName: opportunity.Target.CampaignName,\r\n clicksIncrease: opportunity.EstimatedIncreaseInClicks,\r\n };\r\n }\r\n case RECOMMENDATION_TYPES.REPAIR_MISSING_KEYWORD_PARAMS: {\r\n return {\r\n opportunityId,\r\n keyword: opportunity.Target.Keyword,\r\n impressionsIncrease: opportunity.EstimatedIncreaseInImpressions,\r\n impressionsCurrent: opportunity.CurrentImpressions,\r\n clicksIncrease: opportunity.EstimatedIncreaseInClicks,\r\n };\r\n }\r\n case RECOMMENDATION_TYPES.FIX_NO_IMPRESSION_BID: {\r\n return {\r\n opportunityId,\r\n campaignName: opportunity.Target.CampaignName,\r\n };\r\n }\r\n case RECOMMENDATION_TYPES.IMPROVE_RESPONSIVE_SEARCH_ADS: {\r\n return {\r\n opportunityId,\r\n impressionsIncrease: opportunity.EstimatedIncreaseInImpressions,\r\n clicksIncrease: opportunity.EstimatedIncreaseInClicks,\r\n };\r\n }\r\n case RECOMMENDATION_TYPES.REPAIR_UNTARGETED_OFFER: {\r\n return {\r\n opportunityId,\r\n impressionsIncrease: opportunity.EstimatedIncreaseInImpressions,\r\n impressionsCurrent: opportunity.CurrentImpressions,\r\n clicksIncrease: opportunity.EstimatedIncreaseInClicks,\r\n targetedProductsIncrease: opportunity.TotalUntargetedOfferCnt,\r\n };\r\n }\r\n case RECOMMENDATION_TYPES.IMPROVE_MULTIMEDIA_ADS: {\r\n return {\r\n opportunityId,\r\n impressionsIncrease: opportunity.EstimatedIncreaseInImpressions,\r\n clicksIncrease: opportunity.EstimatedIncreaseInClicks,\r\n };\r\n }\r\n case RECOMMENDATION_TYPES.SSC_2_PMAX_MIGRATION: {\r\n return {\r\n opportunityId,\r\n campaignName: opportunity.Target.CampaignName,\r\n };\r\n }\r\n case RECOMMENDATION_TYPES.DSA_2_PMAX_MIGRATION: {\r\n return {\r\n opportunityId,\r\n convIncrease: opportunity.EstimatedIncreaseInConversionsInt,\r\n };\r\n }\r\n case RECOMMENDATION_TYPES.SYNDICATION_GAP: {\r\n return {\r\n opportunityId,\r\n clicksIncrease: opportunity.EstimatedIncreaseInClicks,\r\n convIncrease: opportunity.EstimatedIncreaseInConversionsInt,\r\n };\r\n }\r\n default:\r\n throw new Error(`Not Implemented: ${type}`);\r\n }\r\n};\r\n\r\n\r\nconst getRecommendation = (type, recommendedOpportunity) => {\r\n const target = recommendedOpportunity.Target;\r\n\r\n let delta;\r\n let segment;\r\n let competitor;\r\n let seasonalEvent;\r\n if (type === RECOMMENDATION_TYPES.DEVICE_BID_BOOST ||\r\n type === RECOMMENDATION_TYPES.LOCATION_BID_BOOST) {\r\n const competitorData = recommendedOpportunity.CompetitiveInsights[0].Value[0];\r\n const youData = recommendedOpportunity.CompetitiveInsights[1].Value[0];\r\n\r\n competitor = recommendedOpportunity.CompetitiveInsights[0].Key;\r\n delta = (competitorData.ImpressionNumber / competitorData.AuctionNumber) -\r\n (youData.ImpressionNumber / youData.AuctionNumber);\r\n segment = recommendedOpportunity.ExpandedName || recommendedOpportunity.Device;\r\n }\r\n\r\n if (_.contains(BUDGET_OPPORTUNITY_TYPES, type)) {\r\n seasonalEvent = _.size(recommendedOpportunity.SeasonalEvents) > 0 &&\r\n recommendedOpportunity.SeasonalEvents[0].Name;\r\n }\r\n\r\n const isHighConverting = !!recommendedOpportunity.IsHighConverting;\r\n\r\n return _.extend(\r\n {},\r\n {\r\n target,\r\n competitor,\r\n delta,\r\n segment,\r\n seasonalEvent,\r\n isHighConverting,\r\n }\r\n );\r\n};\r\n// #endregion individual recommendation\r\n\r\n// #region visualData\r\nconst getSampleVisualData = ({\r\n type,\r\n topRecommendation,\r\n recommendations,\r\n primaryEstimate = null,\r\n rawSamples = null,\r\n}) => {\r\n switch (type) {\r\n case RECOMMENDATION_TYPES.BUDGET:\r\n case RECOMMENDATION_TYPES.COMPETITIVE_BID:\r\n case RECOMMENDATION_TYPES.DEVICE_BID_BOOST:\r\n case RECOMMENDATION_TYPES.LOCATION_BID_BOOST:\r\n case RECOMMENDATION_TYPES.NEW_LOCATION:\r\n return getDetailsVisualData(type, topRecommendation);\r\n // deprecated in Oct 2023\r\n case RECOMMENDATION_TYPES.NEW_KEYWORD:\r\n return getNewKeywordTable(recommendations);\r\n case RECOMMENDATION_TYPES.SYNDICATION:\r\n return getSyndicationTable(recommendations);\r\n case RECOMMENDATION_TYPES.NEW_KEYWORD_OPPORTUNITY:\r\n return getNewKeywordOpportunityTable(recommendations);\r\n case RECOMMENDATION_TYPES.TRENDING_QUERY:\r\n return getTrendingQueryTable(recommendations);\r\n case RECOMMENDATION_TYPES.DYNAMIC_SEARCH_ADS:\r\n return getDynamicSearchAdsTable(recommendations);\r\n case RECOMMENDATION_TYPES.BUDGET_OPPORTUNITY:\r\n return getBudgetOpportunityTable(\r\n recommendations,\r\n primaryEstimate\r\n );\r\n case RECOMMENDATION_TYPES.ADJUST_SHARED_BUDGET_OPPORTUNITY:\r\n return getBudgetOpportunityTable(\r\n recommendations,\r\n primaryEstimate,\r\n true\r\n );\r\n case RECOMMENDATION_TYPES.SITE_LINK:\r\n case RECOMMENDATION_TYPES.CALLOUT:\r\n return getExtensionTable(recommendations);\r\n case RECOMMENDATION_TYPES.REPAIR_ADS:\r\n case RECOMMENDATION_TYPES.REPAIR_KEYWORD:\r\n return getRepairTable(recommendations);\r\n case RECOMMENDATION_TYPES.BROAD_MATCH_KEYWORD:\r\n return getBroadMatchKeywordTable(rawSamples);\r\n case RECOMMENDATION_TYPES.REMOVE_CONFLICTING_NEGATIVE_KEYWORD:\r\n return getRemoveConflictingNegativeKeywordTable(recommendations);\r\n case RECOMMENDATION_TYPES.RESPONSIVE_SEARCH_ADS:\r\n return getResponsiveSearchAdsTable(recommendations);\r\n case RECOMMENDATION_TYPES.REALLOCATE_BUDGET:\r\n return getReallocateBudgetTable(recommendations);\r\n case RECOMMENDATION_TYPES.FIX_AD_DESTINATION:\r\n return getFixAdDestinationTable(recommendations);\r\n case RECOMMENDATION_TYPES.FIX_AD_TEXT:\r\n return getFixAdTextTable(recommendations);\r\n case RECOMMENDATION_TYPES.MULTIMEDIA_ADS:\r\n return getMultiMediaAdsTable(recommendations);\r\n case RECOMMENDATION_TYPES.IMAGE_EXTENSION:\r\n return getImageExtensionTable(recommendations);\r\n case RECOMMENDATION_TYPES.REPAIR_MISSING_KEYWORD_PARAMS:\r\n return getRepairMissingKeywordParamsTable(recommendations);\r\n case RECOMMENDATION_TYPES.FIX_NO_IMPRESSION_BID:\r\n return getFixNoImpressionBidTable(recommendations);\r\n case RECOMMENDATION_TYPES.REPAIR_UNTARGETED_OFFER:\r\n return getRepairUntargetedOfferTable(recommendations);\r\n case RECOMMENDATION_TYPES.IMPROVE_MULTIMEDIA_ADS:\r\n return getImproveMultiMediaAdsTable(recommendations);\r\n case RECOMMENDATION_TYPES.SSC_2_PMAX_MIGRATION:\r\n return getSSC2PMaxMigrationTable(recommendations);\r\n case RECOMMENDATION_TYPES.DSA_2_PMAX_MIGRATION:\r\n return getDSA2PMaxMigrationTable(recommendations);\r\n case RECOMMENDATION_TYPES.SYNDICATION_GAP:\r\n return getSyndicationGapTable(recommendations);\r\n case RECOMMENDATION_TYPES.GOOGLE_IMPORT:\r\n case RECOMMENDATION_TYPES.GOOGLE_IMPORT_SCHEDULED:\r\n case RECOMMENDATION_TYPES.FIX_CONVERSION_TRACKING_OPPORTUNITY:\r\n case RECOMMENDATION_TYPES.SETUP_CONVERSION_TRACKING_OPPORTUNITY:\r\n case RECOMMENDATION_TYPES.FIX_CONVERSION_GOAL_SETTINGS:\r\n case RECOMMENDATION_TYPES.CREATE_CONVERSION_GOAL:\r\n case RECOMMENDATION_TYPES.FACEBOOK_IMPORT:\r\n case RECOMMENDATION_TYPES.IMPROVE_RESPONSIVE_SEARCH_ADS:\r\n case RECOMMENDATION_TYPES.PMAX_IMPORT:\r\n return null;\r\n default:\r\n throw new Error(`Not Implemented: ${type}`);\r\n }\r\n};\r\n// #endregion visualData\r\n\r\nconst getGridData = (opportunities) => {\r\n let gridData;\r\n const topOpportunity = opportunities[0];\r\n if (topOpportunity) {\r\n gridData = Object.assign(topOpportunity, gridData);\r\n }\r\n return gridData;\r\n};\r\n\r\nconst getRecommendationWithDetails = (type, recommendation) => {\r\n const sortedRecommendation = sortOpportunitiesInRecommendation(recommendation, type);\r\n const recommendedOpportunity = getRecommendedOpportunity(sortedRecommendation);\r\n const data = getRecommendation(type, recommendedOpportunity);\r\n const visualData = getDetailsVisualData(type, sortedRecommendation);\r\n\r\n let estimates;\r\n if (type === RECOMMENDATION_TYPES.BUDGET ||\r\n type === RECOMMENDATION_TYPES.NEW_KEYWORD || // deprecated in Oct 2023\r\n type === RECOMMENDATION_TYPES.SYNDICATION) {\r\n estimates = getEstimates(type, recommendedOpportunity);\r\n }\r\n\r\n const currentBidAdjustmentPercent = recommendedOpportunity.CurrentBidBoost;\r\n const imprShareCurrent = recommendedOpportunity.CurSelfImprShare;\r\n const costCurrent = recommendedOpportunity.CurrentCost;\r\n const bidCurrent = recommendedOpportunity.CurrentBid;\r\n const targetGroupId = recommendedOpportunity.TargetGroupId;\r\n\r\n const opportunities = _.map(\r\n sortedRecommendation.Opportunities,\r\n rawOpportunity => getOpportunity(\r\n type,\r\n rawOpportunity,\r\n sortedRecommendation.DefaultOpportunityId\r\n )\r\n );\r\n\r\n const gridData = getGridData(opportunities);\r\n\r\n return _.extend(\r\n data,\r\n {\r\n visualData,\r\n opportunities,\r\n estimates,\r\n currentBidAdjustmentPercent,\r\n imprShareCurrent,\r\n costCurrent,\r\n bidCurrent,\r\n targetGroupId,\r\n gridData,\r\n }\r\n );\r\n};\r\n\r\nconst getRecommendationSample = ({\r\n type,\r\n rawSummary: {\r\n Samples,\r\n Recommendations,\r\n },\r\n estimates,\r\n}) => {\r\n const topRecommendation = sortOpportunitiesInRecommendation(Recommendations[0], type);\r\n const recommendedOpportunity = getRecommendedOpportunity(topRecommendation);\r\n\r\n const data = getRecommendation(type, recommendedOpportunity);\r\n\r\n const actions = getActionData(\r\n type,\r\n topRecommendation,\r\n recommendedOpportunity\r\n );\r\n\r\n const visualData = getSampleVisualData({\r\n type,\r\n topRecommendation,\r\n recommendations: Recommendations,\r\n primaryEstimate: estimates && estimates.primaryEstimate,\r\n rawSamples: Samples,\r\n });\r\n\r\n return _.extend(\r\n data,\r\n {\r\n actions,\r\n visualData,\r\n }\r\n );\r\n};\r\n\r\n/**\r\n * Normalize AdInsight Recommendation MT response\r\n * 1. extract useful fields\r\n * 2. calculate, transform, sort data\r\n * @param {Object} rawData - rawData from MT.\r\n * @param {boolean} withDetails - process recommendations data or not\r\n * @returns {Object} An object of all processed data, key is the type\r\n */\r\nexport const normalize = (rawData, withDetails = false) => {\r\n const hasDismissedSummaries =\r\n rawData.DismissTabSummaries && rawData.DismissTabSummaries.length > 0;\r\n const dismissedSummaries = hasDismissedSummaries ? _.map(rawData.DismissTabSummaries, (e) => {\r\n e.Category = 'Dismissed';\r\n return e;\r\n }) : [];\r\n const filteredSummaries = _.filter(rawData.value, e => (\r\n e.RecommendationsCount !== 0 && !TOP_POSITION_RECOMMENDATION_TYPES.includes(e.OpportunityType)));\r\n const topPositionSummaries = _.filter(rawData.value, e => TOP_POSITION_RECOMMENDATION_TYPES.includes(e.OpportunityType));\r\n\r\n const summaries = _.map([topPositionSummaries, filteredSummaries, dismissedSummaries], rawSummaries =>\r\n _.map(rawSummaries, (rawSummary) => {\r\n // static properties\r\n const category = rawSummary.Category;\r\n const type = rawSummary.OpportunityType;\r\n const level = rawSummary.AggregateLevel;\r\n const recommendationsCount = rawSummary.RecommendationsCount;\r\n const opportunityCount = rawSummary.OpportunitiesCount;\r\n const version = rawSummary.Version;\r\n const coupon = rawSummary.Coupon;\r\n const accounts = rawSummary.Accounts;\r\n const optimizationScore = rawSummary.ScoreUpLift;\r\n const isNrt = rawSummary.IsNrt;\r\n const statusId = rawSummary.StatusId;\r\n const hasAIAssetRecommendation = rawSummary.HasAIAssetRecommendationCount ?\r\n rawSummary.HasAIAssetRecommendationCount > 0 : undefined;\r\n const isAutoApplyOptIn = rawSummary.IsAutoApplyOptIn\r\n && category !== RECOMMENDATION_CATEGORIES.DISMISSED;\r\n const thirdPartyInfos = rawSummary.ThirdPartyInfos ? rawSummary.ThirdPartyInfos : undefined;\r\n\r\n // calculated properties\r\n const estimates = getEstimates(type, rawSummary);\r\n const sample = getRecommendationSample({\r\n type,\r\n rawSummary,\r\n estimates,\r\n });\r\n const recommendations = withDetails && _.map(\r\n rawSummary.Recommendations,\r\n rawRecommendation => getRecommendationWithDetails(type, rawRecommendation)\r\n );\r\n\r\n const isHighConverting = type === RECOMMENDATION_TYPES.COMPETITIVE_BID && _.every(\r\n rawSummary.Recommendations,\r\n recommendation => recommendation.Opportunities[0].IsHighConverting\r\n );\r\n\r\n const isSeasonal = _.contains(BUDGET_OPPORTUNITY_TYPES, type) &&\r\n ((rawSummary.Recommendations[0].Opportunities[0].TrackId & SEASONAL_TRACKID) != 0) && // eslint-disable-line\r\n !_.isEmpty(rawSummary.Recommendations[0].Opportunities[0].SeasonalEvents);\r\n\r\n const isFeedbackPersonalized = rawSummary.IsFeedbackPersonalized;\r\n const seasonalEntity = {\r\n seasonalEvent: rawSummary.Samples,\r\n sources: rawSummary.Sources,\r\n };\r\n\r\n let optInStatus;\r\n let applyDate;\r\n if (type === RECOMMENDATION_TYPES.RESPONSIVE_SEARCH_ADS) {\r\n optInStatus = rawSummary.IsOptIn;\r\n applyDate = rawSummary.NearestApplyDate || 0;\r\n } else if (type === RECOMMENDATION_TYPES.MULTIMEDIA_ADS ||\r\n _.contains(SUPPORT_ADINSIGHT_AUTO_APPLY_TYPES, type)) {\r\n optInStatus = rawSummary.AarOptInRecommendationCount > 0;\r\n applyDate = rawSummary.AarNearestApplyDate;\r\n }\r\n\r\n const summary = _.extend(\r\n {\r\n category,\r\n type,\r\n level,\r\n recommendationsCount,\r\n opportunityCount,\r\n estimates,\r\n sample,\r\n isHighConverting,\r\n isSeasonal,\r\n version,\r\n optInStatus: optInStatus && category !== RECOMMENDATION_CATEGORIES.DISMISSED,\r\n applyDate,\r\n accounts,\r\n optimizationScore,\r\n isNrt,\r\n statusId,\r\n hasAIAssetRecommendation,\r\n isFeedbackPersonalized,\r\n isAutoApplyOptIn,\r\n seasonalEntity,\r\n thirdPartyInfos,\r\n },\r\n recommendations && { recommendations },\r\n coupon && { coupon }\r\n );\r\n\r\n return [\r\n type,\r\n summary,\r\n ];\r\n }));\r\n\r\n return _.defaults({}, _.object(summaries[0]), _.object(summaries[1]), hasDismissedSummaries ?\r\n { Dismissed: _.object(summaries[2]) } : {});\r\n};\r\n","import _ from 'underscore';\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport $ from 'jquery';\r\nimport Promise from 'bluebird';\r\n\r\nimport { withUiBlock } from '@bingads-webui/uiblocker';\r\nimport { createAsyncToken } from '@bingads-webui-universal/primitive-utilities';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\nimport { getDisplayName } from '@bingads-webui-react/hoc-utils';\r\n\r\nimport { normalize } from '../normalize-data';\r\nimport { getPreferences, isCompetition } from '../util';\r\nimport {\r\n VIEW_TYPES,\r\n CHANNEL_TYPES,\r\n COMPETITION_SUMMARY_TOP_NUMBER,\r\n RECOMMENDATION_SUMMARY_TOP_NUMBER,\r\n CampaignType,\r\n RECOMMENDATION_TYPES,\r\n} from '../consts';\r\n\r\nexport const withGetSummary = (\r\n withDetails,\r\n needExamples = true\r\n) => (WrappedComponent) => {\r\n class HoC extends React.Component {\r\n static displayName = `withGetSummary(${getDisplayName(WrappedComponent)})`;\r\n\r\n static propTypes = {\r\n type: PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(PropTypes.string)]),\r\n viewType: PropTypes.string,\r\n recommendationType: PropTypes.string,\r\n channel: PropTypes.string.isRequired,\r\n campaignType: PropTypes.number,\r\n categoryType: PropTypes.string,\r\n dataService: PropTypes.shape({\r\n getSummary: PropTypes.func.isRequired,\r\n }).isRequired,\r\n /**\r\n * element to be covered by uiblocker when loading data.\r\n */\r\n el: PropTypes.string.isRequired,\r\n filterService: PropTypes.objectOf(PropTypes.any),\r\n /**\r\n * page size information is stored in preference under preferencesName.\r\n */\r\n preferencesName: PropTypes.string,\r\n deps: PropTypes.shape({\r\n preferencesService: PropTypes.objectOf(PropTypes.any),\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }),\r\n }),\r\n vnextDeps: PropTypes.shape({\r\n eventDispatcher: PropTypes.objectOf(PropTypes.any),\r\n }),\r\n defaultPageSize: PropTypes.number,\r\n defaultPageNumber: PropTypes.number,\r\n /**\r\n * this is default options for reload. It will use this to do first reload in mount.\r\n * For explicit call of reload, this can be overidden by argument.\r\n */\r\n defaultOptions: PropTypes.objectOf(PropTypes.any),\r\n perfMarker: PropTypes.shape({\r\n willInit: PropTypes.func.isRequired,\r\n willFetchData: PropTypes.func.isRequired,\r\n willRender: PropTypes.func.isRequired,\r\n done: PropTypes.func.isRequired,\r\n createChild: PropTypes.func.isRequired,\r\n }),\r\n withBlocker: PropTypes.bool,\r\n };\r\n\r\n static defaultProps = {\r\n campaignType: null,\r\n type: null,\r\n viewType: null,\r\n recommendationType: null,\r\n preferencesName: null,\r\n deps: null,\r\n defaultPageSize: null,\r\n defaultPageNumber: null,\r\n defaultOptions: {},\r\n filterService: null,\r\n perfMarker: {\r\n willInit: _.noop,\r\n willFetchData: _.noop,\r\n willRender: _.noop,\r\n done: _.noop,\r\n createChild() {\r\n return this;\r\n },\r\n },\r\n withBlocker: true,\r\n categoryType: '',\r\n vnextDeps: null,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.perfMarkerDone = false;\r\n this.eventDispatcherDone = false;\r\n }\r\n\r\n state = {\r\n data: {},\r\n campaignAdGroups: null,\r\n };\r\n\r\n componentDidMount = () => {\r\n // In account level recommendation detail page, it doesn't need to call summary Odata.\r\n // Because category information is included in detail Odata resposne already.\r\n if (this.props.channel === CHANNEL_TYPES.RECOMMENDATION\r\n && this.props.viewType === VIEW_TYPES.DETAILS) {\r\n this.props.perfMarker.willFetchData();\r\n } else {\r\n this.reload(this.props.defaultOptions);\r\n }\r\n };\r\n\r\n componentDidUpdate = (prevProps, prevState) => {\r\n // We only care the first render after data first turn non null\r\n if (_.isEqual(prevState.data, {})) {\r\n if (this.props.perfMarker\r\n && (this.props.channel === CHANNEL_TYPES.RECOMMENDATION\r\n || this.props.channel === CHANNEL_TYPES.MCCRECOMMENDATION)\r\n && !this.perfMarkerDone) {\r\n this.perfMarkerDone = true;\r\n this.props.perfMarker.done();\r\n }\r\n if (this.props.viewType !== VIEW_TYPES.DETAILS &&\r\n !_.isNull(this.props.vnextDeps) &&\r\n !_.isUndefined(this.props.vnextDeps.eventDispatcher)) {\r\n this.props.vnextDeps.eventDispatcher.trigger('recommendation_view_loaded');\r\n }\r\n }\r\n };\r\n\r\n componentWillUnmount = () => {\r\n this.cancel();\r\n };\r\n\r\n setData = (data, campaignAdGroups, setDataFromDetails) => {\r\n setDataFromDetails();\r\n if (_.isEqual(this.state.data, {})) {\r\n this.setState({\r\n data: normalize(data, withDetails),\r\n // Gained, Dismissed, Available\r\n overallOptimizationScoreBar: data.OverallOptimizationScoreBar,\r\n // [ScoreUpLift, Category]\r\n categoryScoreUpLifts: data.CategoryScoreUpLifts,\r\n availableCategories: data.AvailableCategories,\r\n campaignAdGroups,\r\n });\r\n }\r\n };\r\n\r\n hasLoadToken = () => !_.isUndefined(this.loadToken);\r\n\r\n reload = (op = {}) => {\r\n this.cancel();\r\n\r\n _.defaults(op, this.props.defaultOptions);\r\n\r\n const {\r\n type,\r\n viewType,\r\n recommendationType,\r\n channel,\r\n campaignType,\r\n dataService,\r\n filterService,\r\n preferencesName,\r\n deps,\r\n defaultPageNumber,\r\n defaultPageSize,\r\n categoryType,\r\n } = this.props;\r\n\r\n let top = 5;\r\n if (needExamples) {\r\n top = isCompetition(type) ?\r\n COMPETITION_SUMMARY_TOP_NUMBER :\r\n RECOMMENDATION_SUMMARY_TOP_NUMBER;\r\n }\r\n const topOption = withDetails ? {} : { top };\r\n const preferencesService = deps && deps.preferencesService;\r\n\r\n const input = _.compact([\r\n filterService && filterService.p$Initialized,\r\n preferencesService && preferencesService.initialize(),\r\n ]);\r\n Promise.all(input)\r\n .spread(() => {\r\n let where = null;\r\n let pagination = {};\r\n\r\n if (filterService) {\r\n const filterQuery = filterService.getCombinedFilter();\r\n where = filterQuery.query;\r\n }\r\n\r\n if (preferencesName && preferencesService) {\r\n const preferences = getPreferences(preferencesService, preferencesName);\r\n this.pageSize = _.isNumber(preferences.pageSize) ?\r\n preferences.pageSize : defaultPageSize;\r\n this.pageNumber = _.isNumber(op.pageNumber) ? op.pageNumber : defaultPageNumber;\r\n pagination = {\r\n top: this.pageSize,\r\n skip: this.pageNumber * this.pageSize,\r\n };\r\n }\r\n\r\n const shouldShowAlertHandler = viewType !== VIEW_TYPES.SUMMARY ||\r\n channel === CHANNEL_TYPES.COMPETITION;\r\n\r\n const options = _.defaults({}, topOption, {\r\n type,\r\n recommendationType,\r\n channel,\r\n campaignType,\r\n where,\r\n scope: op.scope,\r\n isFromApplyOrDismiss: op.isFromApplyOrDismiss,\r\n shouldShowAlertHandler,\r\n categoryType,\r\n }, pagination);\r\n\r\n if (this.props.perfMarker) {\r\n this.props.perfMarker.willFetchData();\r\n }\r\n\r\n this.loadToken = createAsyncToken(dataService\r\n .getSummary(options).finally(this.props.withBlocker ?\r\n withUiBlock(\r\n $(this.props.el),\r\n this.props.deps.i18n.getString('loadingText'),\r\n true, // shouldFocus\r\n null, // delayedLoading\r\n '1000' // overlayZIndex\r\n ) : _.noop))\r\n .on({\r\n onSuccess: ({\r\n data,\r\n campaignAdGroups,\r\n }) => {\r\n if (this.props.perfMarker) {\r\n this.props.perfMarker.willRender();\r\n }\r\n this.setState({\r\n data: normalize(data, withDetails),\r\n // Gained, Dismissed, Available\r\n overallOptimizationScoreBar: data.OverallOptimizationScoreBar,\r\n // [ScoreUpLift, Category]\r\n categoryScoreUpLifts: data.CategoryScoreUpLifts,\r\n availableCategories: data.AvailableCategories,\r\n campaignAdGroups,\r\n hasFilter: !_.isEmpty(where),\r\n });\r\n },\r\n });\r\n });\r\n };\r\n\r\n cancel = () => {\r\n if (this.loadToken) {\r\n this.loadToken.cancel();\r\n }\r\n };\r\n\r\n render = () => {\r\n // eslint-disable-next-line max-len\r\n if (this.props.viewType !== VIEW_TYPES.DETAILS && _.isEqual(this.state.data, {}) && !this.hasLoadToken()) {\r\n return null;\r\n }\r\n const {\r\n data: normalizedData,\r\n overallOptimizationScoreBar,\r\n categoryScoreUpLifts,\r\n campaignAdGroups,\r\n hasFilter,\r\n availableCategories,\r\n } = this.state;\r\n\r\n if (this.props.viewType === VIEW_TYPES.DETAILS && this.eventDispatcherDone) {\r\n if (this.props.perfMarker) {\r\n this.props.perfMarker.willRender();\r\n }\r\n }\r\n\r\n if (!this.eventDispatcherDone &&\r\n this.props.viewType === VIEW_TYPES.DETAILS &&\r\n !_.isNull(this.props.vnextDeps) &&\r\n !_.isUndefined(this.props.vnextDeps.eventDispatcher)) {\r\n this.eventDispatcherDone = true;\r\n this.props.vnextDeps.eventDispatcher.trigger('recommendation_view_loaded');\r\n }\r\n let data = _.omit(normalizedData, 'Dismissed');\r\n let dismissedData = normalizedData.Dismissed || {};\r\n // Remove DSA recommendations for PMAX campaigns\r\n if (this.props.campaignType === CampaignType.PerformanceMax) {\r\n data = _.omit(data, RECOMMENDATION_TYPES.DYNAMIC_SEARCH_ADS);\r\n dismissedData = _.omit(dismissedData, RECOMMENDATION_TYPES.DYNAMIC_SEARCH_ADS);\r\n }\r\n return ();\r\n };\r\n }\r\n\r\n return hoistNonReactStatics(HoC, WrappedComponent);\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport $ from 'jquery';\r\nimport _ from 'underscore';\r\n\r\nimport { withUiBlock } from '@bingads-webui/uiblocker';\r\nimport { createAsyncToken } from '@bingads-webui-universal/primitive-utilities';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\nimport { getDisplayName } from '@bingads-webui-react/hoc-utils';\r\n\r\nexport const withGetCount = (WrappedComponent) => {\r\n class HoC extends React.Component {\r\n static displayName = `withGetCount(${getDisplayName(WrappedComponent)})`;\r\n\r\n static propTypes = {\r\n channel: PropTypes.string.isRequired,\r\n campaignType: PropTypes.number,\r\n dataService: PropTypes.shape({\r\n getCount: PropTypes.func.isRequired,\r\n }).isRequired,\r\n /**\r\n * element to be covered by uiblocker when loading data.\r\n */\r\n el: PropTypes.string.isRequired,\r\n isGetCountByCampaignAdGroups: PropTypes.bool,\r\n };\r\n\r\n static defaultProps = {\r\n campaignType: null,\r\n isGetCountByCampaignAdGroups: false,\r\n }\r\n\r\n state = {\r\n data: null,\r\n };\r\n\r\n componentDidMount = () => {\r\n this.reload();\r\n };\r\n\r\n componentWillUnmount = () => {\r\n this.cancel();\r\n };\r\n\r\n reload = () => {\r\n this.cancel();\r\n\r\n const {\r\n channel,\r\n campaignType,\r\n dataService,\r\n isGetCountByCampaignAdGroups,\r\n } = this.props;\r\n\r\n const options = _.defaults({}, { channel, campaignType });\r\n this.loadToken = isGetCountByCampaignAdGroups ?\r\n createAsyncToken(dataService\r\n .getCountByCampaignAdGroups(this.props))\r\n .on({\r\n onSuccess: ({\r\n data,\r\n }) => {\r\n this.setState({ data });\r\n },\r\n })\r\n : createAsyncToken(dataService\r\n .getCount(options)\r\n .finally(withUiBlock($(this.props.el))))\r\n .on({\r\n onSuccess: ({\r\n data,\r\n }) => {\r\n this.setState({ data });\r\n },\r\n });\r\n };\r\n\r\n cancel = () => {\r\n if (this.loadToken) {\r\n this.loadToken.cancel();\r\n }\r\n };\r\n\r\n render = () => {\r\n if (this.state.data === null) return null;\r\n\r\n return ();\r\n };\r\n }\r\n\r\n return hoistNonReactStatics(HoC, WrappedComponent);\r\n};\r\n","import _ from 'underscore';\r\nimport React from 'react';\r\nimport $ from 'jquery';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { createAsyncToken } from '@bingads-webui-universal/primitive-utilities';\r\nimport { withUiBlock } from '@bingads-webui/uiblocker';\r\n\r\nimport {\r\n RECOMMENDATION_TYPES,\r\n APPLY_SETTINGS,\r\n APPLY_ACTION_TYPES\r\n} from '../consts';\r\n\r\nexport const withTrack = withAll => (WrappedComponent) => {\r\n class WithTrack extends React.Component {\r\n static propTypes = {\r\n dataService: PropTypes.shape({\r\n track: PropTypes.func,\r\n stopStatusPoll: PropTypes.func,\r\n }),\r\n callback: PropTypes.func,\r\n /**\r\n * HTML element that will be the target of a UI blocker\r\n */\r\n el: PropTypes.string,\r\n forwardedRef: PropTypes.func,\r\n };\r\n\r\n static defaultProps = {\r\n forwardedRef: null,\r\n dataService: {\r\n track: _.noop,\r\n stopStatusPoll: _.noop,\r\n },\r\n callback: _.noop,\r\n el: undefined,\r\n };\r\n\r\n componentWillUnmount = () => {\r\n this.cancel();\r\n };\r\n\r\n track = (op) => {\r\n this.cancel();\r\n\r\n const {\r\n dataService, el,\r\n } = this.props;\r\n\r\n let settings = null;\r\n if (withAll && _.contains([\r\n RECOMMENDATION_TYPES.DEVICE_BID_BOOST,\r\n RECOMMENDATION_TYPES.LOCATION_BID_BOOST], op.type) && op.applyOpportunitiesLevel) {\r\n settings = {\r\n '@odata.type': APPLY_SETTINGS.DEFAULT,\r\n ApplyOpportunitiesLevel: op.applyOpportunitiesLevel,\r\n };\r\n }\r\n\r\n const options = _.extend(\r\n {}, {\r\n withAll:\r\n op.userAction === APPLY_ACTION_TYPES.ACCEPT &&\r\n op.type === RECOMMENDATION_TYPES.IMAGE_EXTENSION ?\r\n false : withAll,\r\n closeUiBlock: withUiBlock($(el)),\r\n }, settings && { settings },\r\n _.pick(\r\n op,\r\n 'type',\r\n 'channel',\r\n 'userInputs',\r\n 'campaignAdGroups',\r\n 'userAction',\r\n 'reason',\r\n 'context',\r\n 'guid',\r\n 'from',\r\n 'handleRecommendationNotification',\r\n 'viewDetails',\r\n 'view',\r\n 'showAsyncApplyModal',\r\n 'totalRecommendationCount',\r\n 'closeAsyncApplyModal',\r\n 'isOptimizationScoreUsed',\r\n 'optimizationScore'\r\n )\r\n );\r\n\r\n this.loadToken = createAsyncToken(dataService\r\n .track(options))\r\n .on({\r\n onSuccess: () => {\r\n this.props.callback(op);\r\n },\r\n onCancel: () => {\r\n dataService.stopStatusPoll();\r\n },\r\n });\r\n };\r\n\r\n cancel = () => {\r\n if (this.loadToken) {\r\n this.loadToken.cancel();\r\n }\r\n };\r\n\r\n render = () => {\r\n const rest = _.omit(this.props, 'forwardedRef');\r\n\r\n return ();\r\n };\r\n }\r\n\r\n return React.forwardRef((props, ref) => );\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { createAsyncToken } from '@bingads-webui-universal/primitive-utilities';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\nimport { getDisplayName } from '@bingads-webui-react/hoc-utils';\r\nimport _ from 'underscore';\r\n\r\nimport {\r\n CHANNEL_ALL_RECOMMENDATIONS,\r\n CHANNEL_TYPES,\r\n FAC_RECOMENDATIONTYPE_FEATUREID_MAPPING,\r\n} from '../consts';\r\n\r\nexport const withCoupon = (WrappedComponent) => {\r\n class HoC extends React.Component {\r\n static displayName = `withCoupon(${getDisplayName(WrappedComponent)})`;\r\n\r\n static propTypes = {\r\n defaultOptions: PropTypes.objectOf(PropTypes.any),\r\n dataService: PropTypes.shape({\r\n getSummary: PropTypes.func.isRequired,\r\n }).isRequired,\r\n data: PropTypes.shape(_.reduce(\r\n CHANNEL_ALL_RECOMMENDATIONS[CHANNEL_TYPES.RECOMMENDATION],\r\n recommendation => ({\r\n [recommendation]: PropTypes.object,\r\n }),\r\n {}\r\n )),\r\n };\r\n\r\n static defaultProps = {\r\n defaultOptions: {},\r\n data: {},\r\n }\r\n\r\n state = {\r\n rawCouponData: null,\r\n };\r\n\r\n componentDidMount = () => {\r\n if (_.isNull(this.state.rawCouponData)\r\n && _.any(\r\n this.props.data,\r\n rec => _.has(FAC_RECOMENDATIONTYPE_FEATUREID_MAPPING, rec.type)\r\n )) {\r\n this.reload();\r\n }\r\n };\r\n\r\n componentWillUnmount = () => {\r\n this.cancel();\r\n };\r\n\r\n reload = () => {\r\n this.cancel();\r\n\r\n const {\r\n defaultOptions,\r\n dataService,\r\n } = this.props;\r\n\r\n this.loadToken = createAsyncToken(dataService\r\n .getCoupon(defaultOptions))\r\n .on({\r\n onSuccess: (rawCouponData) => {\r\n this.setState({\r\n rawCouponData,\r\n });\r\n },\r\n });\r\n };\r\n\r\n cancel = () => {\r\n if (this.loadToken) {\r\n this.loadToken.cancel();\r\n }\r\n };\r\n\r\n render = () => ();\r\n }\r\n\r\n return hoistNonReactStatics(HoC, WrappedComponent);\r\n};\r\n","import _ from 'underscore';\r\nimport { parseSync, stringifySync } from '@bingads-webui/safe-json';\r\nimport * as downloadServiceSharedComponent from '@bingads-webui/download-service';\r\nimport {\r\n InlineDownloadReportDataRepository\r\n} from '@bingads-webui-campaign/inline-download-report-data-repository';\r\n\r\nimport {\r\n NOT_SUPPORT_DOWNLOAD_TYPES,\r\n SUPPORTED_CAMPAIGN_TYPES,\r\n} from '../consts';\r\nimport { getRecommendationTypes } from '../util';\r\n\r\n/**\r\n * Service responsible for creating a download repository object and crafting the download request\r\n * to POST to odata.\r\n */\r\nexport class RecommendationDownloadService {\r\n constructor({\r\n scope,\r\n alertCenter,\r\n asyncScheduler,\r\n cacheManager,\r\n currentActivity,\r\n downloadService = downloadServiceSharedComponent,\r\n getODataErrors,\r\n i18n,\r\n odata,\r\n pageContext,\r\n permissions,\r\n isMCC = false,\r\n recommendationService = null,\r\n }) {\r\n this.repository = new InlineDownloadReportDataRepository({\r\n deps: {\r\n alertCenter,\r\n asyncScheduler,\r\n cacheManager,\r\n downloadService,\r\n getODataErrors,\r\n i18n,\r\n odata,\r\n pageContext,\r\n },\r\n isCustomerLevel: isMCC,\r\n currentActivity,\r\n });\r\n\r\n this.pageContext = pageContext;\r\n this.permissions = permissions;\r\n this.scope = scope;\r\n this.isMCC = isMCC;\r\n this.recommendationService = recommendationService;\r\n\r\n if (currentActivity) {\r\n this.currentActivity = currentActivity;\r\n this.currentActivity.trace('Initialized RecommendationDownloadService', 'RecommendationDownloadService/constructor');\r\n }\r\n }\r\n\r\n /**\r\n * Creates a download request and POSTS to odata, asynchronously polls for the status of the\r\n * request and initiates the browser download after the file has been generated.\r\n * @param {Object} [options.filterService] - Filter service library used to get combined filter.\r\n * @param {string} [options.recommendationType] - recommendation type\r\n * @param {string} [options.channel] - channel for competition or recommendation\r\n * @returns {Promise} Resolves to true if the download was successful.\r\n */\r\n download({\r\n filterService,\r\n recommendationType,\r\n campaignType,\r\n channel,\r\n }) {\r\n const ReportColumns = _.difference(\r\n getRecommendationTypes(\r\n recommendationType,\r\n channel,\r\n this.permissions,\r\n this.isMCC\r\n ),\r\n NOT_SUPPORT_DOWNLOAD_TYPES\r\n );\r\n\r\n const {\r\n CultureLcid,\r\n CurrentCustomer: {\r\n Id: CustomerId,\r\n },\r\n CurrentAccount: {\r\n Id: AccountId,\r\n AccountNumber,\r\n },\r\n } = this.pageContext;\r\n\r\n let { CurrentCampaign, CurrentAdGroup } = this.pageContext;\r\n CurrentCampaign = this.scope && this.scope.campaignId ? { Id: this.scope.campaignId } : null;\r\n CurrentAdGroup = this.scope && this.scope.adGroupId ?\r\n { Id: this.scope.adGroupId, CampaignId: this.scope.campaignId } : null;\r\n\r\n const query = filterService && filterService.getCombinedFilter().query;\r\n const CampaignReportScopes = this.getCampaignReportScopes(AccountId, CurrentCampaign, query);\r\n const AdGroupReportScopes = this.getAdGroupReportScopes(AccountId, CurrentAdGroup, query);\r\n\r\n if (this.isMCC && !_.isNull(this.recommendationService)) {\r\n return this.recommendationService.download(ReportColumns, channel);\r\n }\r\n return this.repository.download({\r\n Name: 'RecommendationsDownload',\r\n Type: 'RecommendationsDownload',\r\n ReportType: 'Recommendations',\r\n Channel: channel,\r\n CampaignTypeId: _.contains(SUPPORTED_CAMPAIGN_TYPES, campaignType) ? campaignType : null,\r\n AccountNumber,\r\n ReportColumns,\r\n Format: 'Xlsx',\r\n ReportTime: {\r\n DateRangePreset: 'AllTime',\r\n StartDate: null,\r\n EndDate: null,\r\n },\r\n CustomerId,\r\n AccountIds: [AccountId],\r\n CampaignReportScopes,\r\n AdGroupReportScopes,\r\n LCID: CultureLcid,\r\n }).catch((err) => {\r\n const errorDetails = `ErrorCode=${err.status}, Error=${stringifySync(err)}`;\r\n\r\n if (this.currentActivity) {\r\n this.currentActivity.error(`err in download, ${errorDetails}`, 'RecommendationDownloadService/Download');\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Creates an array of CampaignReportScope objects that specify the Campaigns to filter on.\r\n * @param {number} AccountId - Account Id.\r\n * @param {Object} CurrentCampaign - Current campaign scope.\r\n * @param {Object} query - Filter query that contains an array of JSON strings that describe the\r\n * campaigns to filter on.\r\n * @returns {Object[]} Campaigns to filter or empty array.\r\n */\r\n getCampaignReportScopes(AccountId, CurrentCampaign, query) {\r\n // if wunderbar scope has been set, ignore filter\r\n if (_.has(CurrentCampaign, 'Id')) {\r\n return [{ CampaignId: CurrentCampaign.Id, AccountId }];\r\n }\r\n\r\n const filteredCampaigns = query && query.Campaign && query.Campaign.$contains;\r\n\r\n return _.map(filteredCampaigns, (str) => {\r\n const campaign = parseSync(str);\r\n return campaign && {\r\n CampaignId: campaign.Id,\r\n AccountId,\r\n };\r\n });\r\n }\r\n\r\n /**\r\n * Creates an array of AdGroupReportScope objects that specify the ad groups to filter on.\r\n * @param {number} AccountId - Account Id.\r\n * @param {Object} CurrentAdGroup - Current ad group scope.\r\n * @param {Object} query - Filter query that contains an array of JSON strings that describe the\r\n * ad groups to filter on.\r\n * @returns {Object[]} Ad groups to filter or empty array.\r\n */\r\n getAdGroupReportScopes(AccountId, CurrentAdGroup, query) {\r\n // if wunderbar scope has been set, ignore filter\r\n if (_.has(CurrentAdGroup, 'Id') && _.has(CurrentAdGroup, 'CampaignId')) {\r\n return [{ AdGroupId: CurrentAdGroup.Id, CampaignId: CurrentAdGroup.CampaignId, AccountId }];\r\n }\r\n\r\n const filteredAdGroups = query && query.AdGroup && query.AdGroup.$contains;\r\n\r\n return _.map(filteredAdGroups, (str) => {\r\n const adGroup = parseSync(str);\r\n return adGroup && {\r\n AdGroupId: adGroup.Id,\r\n CampaignId: adGroup.CampaignId,\r\n AccountId,\r\n };\r\n });\r\n }\r\n}\r\n","import Promise from 'bluebird';\r\n\r\nconst MAX_POLL_ATTEMPTS = 120;\r\nconst POLL_INTERVAL_TIMEOUT = 5000;\r\n\r\nexport class PollTask {\r\n /**\r\n * Create a poll task\r\n * @param {Function} task - task need to be polled\r\n * @param {Function} isCompleted - Function to check if task completed.\r\n * @param {Function} isFailed - Function to check if task failed.\r\n * @param {Object} asyncScheduler - asyncScheduler library.\r\n * @param {number} maxPollCount - Max number of times to poll.\r\n * @param {number} pollIntervalTimeout - poll interval\r\n * @returns {Promise} Resolves to the rawData of apply result.\r\n */\r\n constructor(\r\n task,\r\n isCompleted,\r\n isFailed,\r\n asyncScheduler,\r\n maxPollCount = MAX_POLL_ATTEMPTS,\r\n pollIntervalTimeout = POLL_INTERVAL_TIMEOUT\r\n ) {\r\n this.pollCount = 0;\r\n this.maxPollCount = maxPollCount;\r\n\r\n // Define task and event handler\r\n this.recurringTask = asyncScheduler.createTask({\r\n task,\r\n schedule: pollIntervalTimeout,\r\n });\r\n this.isCompleted = isCompleted;\r\n this.isFailed = isFailed;\r\n }\r\n\r\n start = () => new Promise((resolve, reject) => {\r\n this.recurringTask.on('success', ({\r\n data,\r\n stopTask,\r\n }) => {\r\n this.pollCount += 1;\r\n if (this.pollCount > this.maxPollCount) {\r\n stopTask();\r\n reject(new Error('Poll Limit Reached'));\r\n return;\r\n }\r\n\r\n if (data) {\r\n if (this.isCompleted(data)) {\r\n stopTask();\r\n resolve(data);\r\n } else if (this.isFailed(data)) {\r\n stopTask();\r\n reject(new Error('Internal Error'));\r\n }\r\n }\r\n });\r\n\r\n this.recurringTask.on('error', ({\r\n error,\r\n stopTask,\r\n }) => {\r\n stopTask();\r\n reject(error);\r\n });\r\n\r\n this.recurringTask.on('manuallyStopped', () => {\r\n resolve();\r\n });\r\n\r\n this.recurringTask.start();\r\n })\r\n\r\n stop = () => {\r\n this.recurringTask.stop();\r\n this.recurringTask.trigger('manuallyStopped');\r\n }\r\n}\r\n","const cache = {};\r\n\r\nexport const setRecommendationCache = (key, value) => {\r\n cache[key] = value;\r\n};\r\n\r\nexport const getRecommendationCache = (key) => {\r\n if (typeof key === 'string') {\r\n return cache[key];\r\n }\r\n return undefined;\r\n};\r\n","import Promise from 'bluebird';\r\nimport _ from 'underscore';\r\nimport $ from 'jquery';\r\n\r\nimport { levelAtConstant } from '@bingads-webui-campaign/scope-constants';\r\nimport { stringifySync } from '@bingads-webui/safe-json';\r\nimport { Constants as CCUIConstants } from '@bingads-webui-clientcenter/entity-utils';\r\nimport * as downloadService from '@bingads-webui/download-service';\r\n\r\nimport {\r\n getFilteredEntitiesAndUpdateOptions,\r\n handleUnauthorizedResponse,\r\n} from '@bingads-webui-campaign/auction-insight-service';\r\nimport { withDFMCache } from '@bingads-webui/dfm-cache';\r\n\r\nimport {\r\n RECOMMENDATION_TYPES,\r\n SUPPORTED_CAMPAIGN_TYPES,\r\n TASK_STATUS,\r\n APPLY_ODATA_TYPES_MAP,\r\n FAC_RECOMMENDATION_CONFIG,\r\n FAC_RECOMENDATIONTYPE_FEATUREID_MAPPING,\r\n CHANNEL_TYPES,\r\n APPLY_ACTION_TYPES,\r\n NOT_SUPPORT_DOWNLOAD_TYPES,\r\n RECOMMENDATION_CATEGORIES,\r\n SUPPORT_ADINSIGHT_AUTO_APPLY_TYPES,\r\n INLIE_APPLY_ERROR_SUPPORT_TYPES,\r\n MCC_ACCOUNTS_CAPPING,\r\n} from '../consts';\r\n\r\nimport {\r\n getRecommendationIds,\r\n getRecommendationTypes,\r\n isCompetition,\r\n isDFMEnabled,\r\n} from '../util';\r\n\r\nimport {\r\n PollTask,\r\n} from '../poll';\r\n\r\nimport {\r\n formatPercentOneDecimal,\r\n} from '../formatter/basic-format-data';\r\n\r\nimport {\r\n setRecommendationCache,\r\n getRecommendationCache,\r\n} from '../cache';\r\n\r\nlet overallOptimizationScoreBar = {};\r\nlet applyNotificationInfo = { message: '', failedRecommendationCount: 0, userAction: '' };\r\nconst urlPrefix = 'AdInsight/V2/Customers({cid})/Accounts({aid})';\r\nconst urlPrefixMCC = 'AdInsight/V2/Customers({cid})';\r\nconst getSummaryAPI = `${urlPrefix}/Recommendation.GetRecSummaryData?$expand=Recommendations({top}{skip}{orderby}$expand=Opportunities)`;\r\nconst getSummaryTypeOnly = `${urlPrefix}/Recommendation.GetRecSummaryData`;\r\nconst getSummaryAPIOptimizationScoreNoExpand = `${urlPrefix}/Recommendation.GetRecSummaryDataWithOptimizationScore`;\r\nconst getSummaryAPIOptimizationScore = `${urlPrefix}/Recommendation.GetRecSummaryDataWithOptimizationScore?$expand=Summaries($expand=Recommendations({top}{skip}{orderby}$expand=Opportunities))`;\r\nconst getSummaryAPIOptimizationScoreWithDismissedTab = `${urlPrefix}/Recommendation.GetRecSummaryDataWithOptimizationScore?$expand=Summaries($expand=Recommendations({top}{skip}{orderby}$expand=Opportunities)),DismissTabSummaries($expand=Recommendations({top}{skip}{orderby}$expand=Opportunities))`;\r\nconst getSummaryAPIMCC = `${urlPrefixMCC}/Recommendation.GetSummaryData?$expand=Recommendations({top}{skip}{orderby}$expand=Opportunities)`;\r\nconst getHistoryAPI = `${urlPrefix}/Recommendation.GetApplyHistory?{topQuery}&{skipQuery}&$count=true&$orderby=Timestamp+desc&$filter=(TotalRecommendationCount+gt+0+or+IsAARSuperUser+eq+false)`;\r\nconst getHistoryAPIMCC = `${urlPrefixMCC}/Recommendation.GetApplyHistory?{topQuery}&{skipQuery}&$count=true&$orderby=Timestamp+desc&$filter=(TotalRecommendationCount+gt+0+or+IsAARSuperUser+eq+false)`;\r\nconst getAutoApplyOptInStatusAPI = `${urlPrefix}/Recommendation.GetRecommendationAutoApplyOptInStatus`;\r\nconst setAutoApplyOptInStatusAPI = `${urlPrefix}/Recommendation.SetRecommendationAutoApplyOptInStatus`;\r\nconst getCountAPI = `${urlPrefix}/Opportunity.GetSummaryData?$select=RecommendationsCount`;\r\nconst getStockImageAPI = '/Customers({cid})/Accounts({aid})/StockImages';\r\nconst getBulkAarUploadBlobAPI = `${urlPrefixMCC}/BulkOperationTools.GetUploadUrlForBulkEditAAROptInStatus`;\r\nconst submitBulkAarOptInStatusTaskAPI = `${urlPrefixMCC}/BulkOperationTools.SubmitBulkEditAAROptInStatusTask`;\r\nconst pollBulkEditAAROptInStatusTaskAPI = `${urlPrefixMCC}/BulkOperationTools.PollBulkEditAAROptInStatusTask`;\r\nconst fetchDownloadIdAPI = '/Recommendation.SubmitReportDataTask';\r\nconst applyAPISuffix = 'Apply';\r\nconst applyAllAPISuffix = 'ApplyAll';\r\nconst applyRecBulkAPISuffix = 'ApplyRecBulk';\r\nconst applyRecAllAPISuffix = 'ApplyRecAll';\r\nconst redismissAPI = 'Redismiss';\r\nconst trackAPISuffix = 'Track';\r\nconst FAC_STATUS_NOT_IN_PROGRESS = CCUIConstants.RecommendationAdoptionStatus.NotInProgess;\r\nconst FAC_STATUS_ACTIVE = CCUIConstants.RecommendationAdoptionStatus.Active;\r\n\r\nconst getOptions = (token, lcid, data, type = 'POST') => ({\r\n contentType: 'application/json',\r\n type,\r\n headers: {\r\n authorization: `CCMTSmallToken ${token}`,\r\n 'x-ms-lcid': `${lcid}`,\r\n },\r\n data: stringifySync(data),\r\n});\r\n\r\nconst formatUrl = (url, scope, top, skip, orderby, accountId) => url\r\n .replace('{aid}', accountId || scope.accountId)\r\n .replace('{cid}', scope.customerId)\r\n .replace(/{top}/g, _.isNumber(top) ? `$top=${top};` : '')\r\n .replace(/{skip}/g, _.isNumber(skip) ? `$skip=${skip};` : '')\r\n .replace('{topQuery}', _.isNumber(top) ? `$top=${top}` : '')\r\n .replace('{skipQuery}', _.isNumber(skip) ? `$skip=${skip}` : '')\r\n .replace(/{orderby}/g, !_.isEmpty(orderby) ? `$orderby=${_.map(orderby, i => i.join(' ')).join(',')};` : '');\r\n\r\nconst getRequestScope = (op, scope, activity) => {\r\n let campaignAdGroups = [];\r\n const { LevelAt, EntityIds } = getFilteredEntitiesAndUpdateOptions(op, scope);\r\n\r\n if (LevelAt === levelAtConstant.CAMPAIGN) {\r\n campaignAdGroups = _.map(EntityIds, id => ({ Key: id, Value: [] }));\r\n } else if (LevelAt === levelAtConstant.ADGROUP) {\r\n if (scope.levelAt !== levelAtConstant.ACCOUNT) {\r\n campaignAdGroups = [{\r\n Key: parseInt(scope.campaignId, 10),\r\n Value: EntityIds,\r\n }];\r\n } else {\r\n // in account scope with ad group filter\r\n activity.trace(\r\n 'fall back to return all recomemndations in account scope with ad group filter',\r\n 'RecommendationService/getRequestScope'\r\n );\r\n }\r\n }\r\n\r\n return campaignAdGroups;\r\n};\r\n\r\nfunction addCouponToRecommendations(rawCouponData, rawRecommendationData) {\r\n if (rawCouponData.length) {\r\n const coupon = rawCouponData[0];\r\n const couponFeatureId = coupon.FeatureId.toString();\r\n if (_.isUndefined(FAC_RECOMMENDATION_CONFIG[couponFeatureId])) {\r\n return;\r\n }\r\n const priorities = FAC_RECOMMENDATION_CONFIG[couponFeatureId].priority;\r\n\r\n const couponEligibleRec = _.chain(rawRecommendationData)\r\n .filter(rec => _.contains(priorities, rec.OpportunityType))\r\n .sortBy(rec => _.indexOf(priorities, rec.OpportunityType))\r\n .first()\r\n .value();\r\n\r\n if (couponEligibleRec) {\r\n _.extend(couponEligibleRec, { Coupon: coupon });\r\n }\r\n }\r\n}\r\n\r\nexport class RecommendationService {\r\n constructor({\r\n scope,\r\n showAlertHandler,\r\n i18n,\r\n odataPath,\r\n currentScenario,\r\n currentActivity,\r\n permissions,\r\n lcid,\r\n pageContext,\r\n ccJsData,\r\n asyncScheduler,\r\n isMCC = false,\r\n accountIdsPromise,\r\n alertCenter = {},\r\n odata = null,\r\n isNoExpand = false,\r\n newI18n,\r\n cacheManager = null,\r\n channel,\r\n }) {\r\n this.scope = scope;\r\n this.i18n = i18n;\r\n this.showAlertHandler = showAlertHandler;\r\n this.cache = {};\r\n this.currentScenario = currentScenario;\r\n this.currentActivity = currentActivity;\r\n this.odataPath = odataPath;\r\n this.permissions = permissions;\r\n this.lcid = lcid;\r\n this.isMCC = isMCC;\r\n this.isNoExpand = isNoExpand;\r\n this.accountIdsPromise = accountIdsPromise || Promise.resolve([]);\r\n this.hasAccountIdsPromise = !!accountIdsPromise;\r\n this.ccJsData = ccJsData;\r\n this.asyncScheduler = asyncScheduler;\r\n this.pollStatusTask = null;\r\n this.alertCenter = alertCenter;\r\n this.odata = odata;\r\n this.accountInfoCache = {};\r\n this.pageContext = pageContext;\r\n this.cappedAccountIdsPromise =\r\n this.accountIdsPromise.then(accountIds => accountIds.slice(0, MCC_ACCOUNTS_CAPPING));\r\n this.isOptimizationScoreOn = !isMCC && (channel === CHANNEL_TYPES.RECOMMENDATION\r\n || channel === CHANNEL_TYPES.OVERVIEW\r\n || channel === CHANNEL_TYPES.INCONTEXTCARD\r\n || channel === CHANNEL_TYPES.CAMPAIGN_SUMMARY_BAR);\r\n this.isDismissedTabEnabled = this.isOptimizationScoreOn && _.result(permissions, 'IsDismissedTabEnabled');\r\n this.newI18n = newI18n;\r\n this.cacheManager = cacheManager;\r\n }\r\n\r\n startCouponAdoption = (adoption) => {\r\n if (this.ccJsData\r\n && adoption) {\r\n return Promise.resolve(this.ccJsData.FeatureAdoptionCoupon\r\n .update(\r\n adoption.id,\r\n {\r\n adoption: {\r\n ...adoption,\r\n Status: FAC_STATUS_ACTIVE,\r\n },\r\n }\r\n ))\r\n .tapCatch((err) => {\r\n if (this.showAlertHandler) {\r\n const errorCode = err.Errors && err.Errors[0] && err.Errors[0].Code;\r\n const errorMessageKey = errorCode === 'CouponBankDepleted'\r\n ? 'FACDepletedErrorMessage'\r\n : 'GenericFACAdoptionStartErrorMessage';\r\n\r\n this.showAlertHandler({\r\n message: this.i18n.getString(errorMessageKey),\r\n level: 'Error',\r\n dismissible: true,\r\n });\r\n }\r\n });\r\n }\r\n return Promise.resolve();\r\n }\r\n\r\n getSummaryPromiseFromOption = (op, includeCoupons, campaignAdGroups) => (option) => {\r\n if (!option) {\r\n return Promise.resolve({ data: [] });\r\n }\r\n\r\n const isWithDFM = (op.channel === CHANNEL_TYPES.RECOMMENDATION\r\n || (op.channel === CHANNEL_TYPES.MCCRECOMMENDATION && !op.type))\r\n && !op.isFromApplyOrDismiss\r\n && isDFMEnabled();\r\n\r\n let fetchDataPromise;\r\n if (isWithDFM) {\r\n fetchDataPromise = () => new Promise((resolve, reject) => {\r\n $.ajax(option).then((rawData) => {\r\n resolve(rawData);\r\n }, reject);\r\n });\r\n fetchDataPromise = withDFMCache(fetchDataPromise, 'getSummaryDFM', this);\r\n } else {\r\n fetchDataPromise = new Promise((resolve, reject) => {\r\n $.ajax(option).then((rawData) => {\r\n resolve(rawData);\r\n }, reject);\r\n });\r\n }\r\n\r\n let getCouponPromise;\r\n if (op.channel !== CHANNEL_TYPES.RECOMMENDATION) {\r\n // don't take reject param, if coupon call fails, we will just not show the offer\r\n getCouponPromise = new Promise((resolve) => {\r\n if (includeCoupons\r\n && !this.isMCC\r\n && this.ccJsData) {\r\n const getCouponsActivity = this.currentScenario.getCoupons.create();\r\n\r\n getCouponsActivity.start();\r\n // if call fails, eat the error to avoid blocking workflow\r\n resolve(this.ccJsData.FeatureAdoptionCoupon\r\n .findAll({ aid: this.scope.accountId })\r\n .then((coupons) => {\r\n getCouponsActivity.stop();\r\n return _.filter(\r\n coupons,\r\n ({ Status }) =>\r\n Status === FAC_STATUS_NOT_IN_PROGRESS || Status === FAC_STATUS_ACTIVE\r\n );\r\n })\r\n .catch((err) => {\r\n if (err instanceof TypeError) {\r\n getCouponsActivity.trace(`TypeError for JsData.FeatureAdoptionCoupon, most likely due to making the request after being logged out: ${err.message}`);\r\n } else if (err === undefined) {\r\n getCouponsActivity.trace('err was undefined for getCoupons JsData response');\r\n } else if (err.name === undefined || err.message === undefined) {\r\n getCouponsActivity.trace(`likely a timeout or 400/500/unusable response from FeatureAdoptionCoupon server API,\r\n err name: ${err.name}, err.message: ${err.message}`);\r\n } else {\r\n getCouponsActivity.error(\r\n `error in getCoupons: ${err.name}: ${err.message}`,\r\n 'RecommendationService/getCoupons'\r\n );\r\n }\r\n getCouponsActivity.stop();\r\n return [];\r\n }));\r\n } else {\r\n resolve([]);\r\n }\r\n });\r\n }\r\n const getSummaryActivity = this.currentScenario.getSummary.create();\r\n\r\n getSummaryActivity.start();\r\n\r\n return (isWithDFM ? fetchDataPromise() : fetchDataPromise).then((rawData) => {\r\n getSummaryActivity.stop();\r\n return rawData;\r\n }).then((rawData) => {\r\n if (this.isOptimizationScoreOn) {\r\n let overallScoreIncrease = 0;\r\n const {\r\n message,\r\n failedRecommendationCount,\r\n allExpiredInSummary,\r\n userAction,\r\n totalRecommendationCount,\r\n } = applyNotificationInfo;\r\n\r\n // if op.type is not undefined means from detail page, and we only update current score\r\n // under 2 situations, #1 is from summay page, #2 is when user directly go to detail page\r\n if (!_.isEmpty(rawData.OverallOptimizationScoreBar)\r\n && (!op.type || (_.isEmpty(overallOptimizationScoreBar) && op.type))) {\r\n overallScoreIncrease =\r\n Number(rawData.OverallOptimizationScoreBar.Gained +\r\n rawData.OverallOptimizationScoreBar.Dismissed) -\r\n Number(overallOptimizationScoreBar.Gained +\r\n overallOptimizationScoreBar.Dismissed);\r\n overallOptimizationScoreBar = rawData.OverallOptimizationScoreBar;\r\n }\r\n\r\n if (op.isFromApplyOrDismiss\r\n && totalRecommendationCount > 0\r\n && (userAction !== APPLY_ACTION_TYPES.ACCEPT\r\n || failedRecommendationCount === 0\r\n || allExpiredInSummary\r\n )) {\r\n const level = failedRecommendationCount > 0 && !allExpiredInSummary\r\n ? 'Warning'\r\n : 'Info';\r\n this.showAlertHandler({\r\n message: !_.isString(message) ? message : `${message}${overallScoreIncrease > 0 && op.categoryType !== RECOMMENDATION_CATEGORIES.DISMISSED ?\r\n ` +${formatPercentOneDecimal(overallScoreIncrease, this.i18n)}` : ''}`,\r\n level,\r\n dismissible: true,\r\n });\r\n }\r\n }\r\n return rawData;\r\n })\r\n .then((rawData) => {\r\n if (rawData && rawData.Summaries) {\r\n return _.extend(rawData, { value: rawData.Summaries });\r\n }\r\n return rawData;\r\n })\r\n .then((rawData) => {\r\n // if loaded recommendations don't map to coupons,\r\n // don't wait for coupon promise to resolve\r\n if (includeCoupons\r\n && op.channel !== CHANNEL_TYPES.RECOMMENDATION\r\n && _.any(\r\n rawData && rawData.value,\r\n rec => _.has(FAC_RECOMENDATIONTYPE_FEATUREID_MAPPING, rec.OpportunityType)\r\n )) {\r\n return getCouponPromise.then((rawCouponData) => {\r\n addCouponToRecommendations(rawCouponData, rawData.value);\r\n\r\n return {\r\n data: rawData,\r\n campaignAdGroups,\r\n };\r\n });\r\n }\r\n\r\n return {\r\n data: rawData,\r\n campaignAdGroups,\r\n };\r\n })\r\n .then((rawData) => {\r\n // Cache recommendation summary data\r\n const isRecommendationSummaryPage =\r\n (op.channel === CHANNEL_TYPES.RECOMMENDATION\r\n || op.channel === CHANNEL_TYPES.MCCRECOMMENDATION)\r\n && _.isNull(op.type);\r\n if (this.permissions.IsRecommendationCacheDetailPageDataEnabled\r\n && isRecommendationSummaryPage) {\r\n setRecommendationCache('recommendation-summary-raw-data', rawData);\r\n }\r\n return rawData;\r\n })\r\n .catch((err) => {\r\n if (this.showAlertHandler) {\r\n this.handleAjaxError(err, option, 'getSummary', op.shouldShowAlertHandler);\r\n } else {\r\n throw (err);\r\n }\r\n // Return an object same as \"no recommendation\"\r\n // if ajax error occurs for recommendation page\r\n return op.channel === CHANNEL_TYPES.COMPETITION ? {} : {\r\n data: {\r\n CategoryScoreUpLifts: [],\r\n Id: 0,\r\n OverallOptimizationScoreBar: null,\r\n Summaries: [],\r\n value: [],\r\n },\r\n campaignAdGroups,\r\n };\r\n });\r\n }\r\n\r\n getCoupon = (op) => {\r\n // don't take reject param, if coupon call fails, we will just not show the offer\r\n const getCouponPromise = new Promise((resolve) => {\r\n if (!op.ignoreCoupons\r\n && !this.isMCC\r\n && this.ccJsData) {\r\n const getCouponsActivity = this.currentScenario.getCoupons.create();\r\n\r\n getCouponsActivity.start();\r\n // if call fails, eat the error to avoid blocking workflow\r\n resolve(this.ccJsData.FeatureAdoptionCoupon\r\n .findAll({ aid: this.scope.accountId })\r\n .then((coupons) => {\r\n getCouponsActivity.stop();\r\n return _.filter(\r\n coupons,\r\n ({ Status }) =>\r\n Status === FAC_STATUS_NOT_IN_PROGRESS || Status === FAC_STATUS_ACTIVE\r\n );\r\n })\r\n .catch((err) => {\r\n if (err instanceof TypeError) {\r\n getCouponsActivity.trace(`TypeError for JsData.FeatureAdoptionCoupon, most likely due to making the request after being logged out: ${err.message}`);\r\n } else if (err === undefined) {\r\n getCouponsActivity.trace('err was undefined for getCoupons JsData response');\r\n } else if (err.name === undefined || err.message === undefined) {\r\n getCouponsActivity.trace(`likely a timeout or 400/500/unusable response from FeatureAdoptionCoupon server API,\r\n err name: ${err.name}, err.message: ${err.message}`);\r\n } else {\r\n getCouponsActivity.error(\r\n `error in getCoupons: ${err.name}: ${err.message}`,\r\n 'RecommendationService/getCoupons'\r\n );\r\n }\r\n getCouponsActivity.stop();\r\n return [];\r\n }));\r\n } else {\r\n resolve([]);\r\n }\r\n });\r\n\r\n return getCouponPromise;\r\n }\r\n\r\n getSummary = (op) => {\r\n this.currentActivity.trace('getSummary is called', 'RecommendationService/getSummary');\r\n\r\n const includeCoupons = !op.ignoreCoupons;\r\n const campaignAdGroups = op.campaignAdGroups ||\r\n getRequestScope(op, op.scope || this.scope, this.currentActivity);\r\n\r\n const optionPromise = this.generateGetSummaryRequest(_.extend({}, op, { campaignAdGroups }));\r\n if (!optionPromise) {\r\n return Promise.resolve({ data: [] });\r\n }\r\n if (this.hasAccountIdsPromise) {\r\n return optionPromise\r\n .then(this.getSummaryPromiseFromOption(op, includeCoupons, campaignAdGroups));\r\n }\r\n\r\n return this.getSummaryPromiseFromOption(op, includeCoupons, campaignAdGroups)(optionPromise);\r\n }\r\n\r\n getSummaryRequestFromAccountIds = op => (accountIds) => {\r\n const {\r\n type,\r\n channel,\r\n campaignType,\r\n top,\r\n skip,\r\n orderby,\r\n filterOpportunity,\r\n campaignAdGroups,\r\n detailPageSetting,\r\n accountId,\r\n } = op;\r\n let data;\r\n\r\n let paginationQueryOptions;\r\n if ((channel === CHANNEL_TYPES.RECOMMENDATION\r\n || channel === CHANNEL_TYPES.MCCRECOMMENDATION)\r\n && !_.isNull(type)\r\n && type === RECOMMENDATION_TYPES.IMAGE_EXTENSION) {\r\n paginationQueryOptions = JSON.stringify({\r\n $orderby: !_.isEmpty(orderby) ? _.map(orderby, i => i.join(' ')).join(',') : undefined,\r\n $top: _.isNumber(top) ? top.toString() : undefined,\r\n $skip: _.isNumber(skip) ? skip.toString() : undefined,\r\n });\r\n }\r\n\r\n const getOptimizationScore =\r\n (channel === CHANNEL_TYPES.RECOMMENDATION\r\n || channel === CHANNEL_TYPES.INCONTEXTCARD\r\n || channel === CHANNEL_TYPES.CAMPAIGN_SUMMARY_BAR\r\n || channel === CHANNEL_TYPES.OVERVIEW)\r\n && this.isOptimizationScoreOn;\r\n const OpportunityTypes = getRecommendationIds(\r\n type,\r\n channel,\r\n this.permissions,\r\n this.isMCC\r\n );\r\n if (this.isMCC && _.isUndefined(accountId)) {\r\n if (_.isEmpty(accountIds)) {\r\n return null;\r\n }\r\n\r\n data = {\r\n Request: {\r\n Channel: channel,\r\n RecommendationTypes: OpportunityTypes,\r\n AccountIds: accountIds,\r\n DetailPageSetting: detailPageSetting,\r\n RawFilterQueryExpression: filterOpportunity,\r\n PaginationQueryOptions: paginationQueryOptions,\r\n },\r\n };\r\n } else {\r\n data = {\r\n Request: {\r\n CampaignAdGroups: campaignAdGroups,\r\n CampaignTypeId:\r\n _.contains(SUPPORTED_CAMPAIGN_TYPES, campaignType) ?\r\n campaignType : null,\r\n Channel: channel,\r\n RecommendationTypes: OpportunityTypes,\r\n RawFilterQueryExpression: filterOpportunity,\r\n PaginationQueryOptions: paginationQueryOptions,\r\n },\r\n };\r\n }\r\n\r\n if (_.has(op, 'settingOptions')) {\r\n _.extend(data.Request, { SettingOptions: op.settingOptions });\r\n }\r\n\r\n const option = getOptions(this.scope.token, this.lcid, data);\r\n\r\n let api = getSummaryAPI;\r\n if (this.isMCC && _.isUndefined(accountId)) {\r\n api = getSummaryAPIMCC;\r\n } else if (getOptimizationScore) {\r\n if (this.isNoExpand) {\r\n api = getSummaryAPIOptimizationScoreNoExpand;\r\n } else {\r\n api = this.isDismissedTabEnabled ?\r\n getSummaryAPIOptimizationScoreWithDismissedTab : getSummaryAPIOptimizationScore;\r\n }\r\n } else if (this.isNoExpand) {\r\n api = getSummaryTypeOnly;\r\n }\r\n\r\n option.url = formatUrl(\r\n `${this.odataPath}${api}`,\r\n this.scope,\r\n top,\r\n skip,\r\n orderby,\r\n accountId\r\n );\r\n return option;\r\n }\r\n\r\n generateGetSummaryRequest = (op) => {\r\n const {\r\n type,\r\n channel,\r\n } = op;\r\n const OpportunityTypes = getRecommendationIds(\r\n type,\r\n channel,\r\n this.permissions,\r\n this.isMCC\r\n );\r\n\r\n if (!channel || !OpportunityTypes || OpportunityTypes.length === 0) {\r\n return null;\r\n }\r\n if (!this.hasAccountIdsPromise) {\r\n return this.getSummaryRequestFromAccountIds(op)([]);\r\n }\r\n return this.cappedAccountIdsPromise\r\n .then(this.getSummaryRequestFromAccountIds(op)).catch((err) => {\r\n if (this.showAlertHandler) {\r\n this.handleAjaxError(err, {}, 'getAccountIds');\r\n } else {\r\n throw (err);\r\n }\r\n return null;\r\n });\r\n }\r\n\r\n getHistory = (op) => {\r\n this.currentActivity.trace('getHistory is called', 'RecommendationService/getHistory');\r\n const option = this.generateGetHistoryRequest(_.extend({}, op));\r\n const fetchDataPromise = new Promise((resolve, reject) => {\r\n $.ajax(option).then((rawData) => {\r\n resolve(rawData);\r\n }, reject);\r\n });\r\n\r\n\r\n const getHistoryActivity = this.currentScenario.getHistory.create();\r\n getHistoryActivity.start();\r\n\r\n return fetchDataPromise.then(\r\n (rawData) => {\r\n getHistoryActivity.stop();\r\n return {\r\n data: rawData,\r\n };\r\n },\r\n (err) => {\r\n if (this.showAlertHandler) {\r\n this.handleAjaxError(err, option, 'getHistory');\r\n } else {\r\n throw (err);\r\n }\r\n return {};\r\n }\r\n );\r\n }\r\n\r\n generateGetHistoryRequest = ({ top, skip }) => {\r\n const option = getOptions(this.scope.token, this.lcid, undefined, 'GET');\r\n\r\n option.url = formatUrl(`${this.odataPath}${this.isMCC ? getHistoryAPIMCC : getHistoryAPI}`, this.scope, top, skip);\r\n return option;\r\n }\r\n\r\n // getCount returns count of recommendations in account level only.\r\n getCount = (op) => {\r\n this.currentActivity.trace('getCount is called', 'RecommendationService/getCount');\r\n\r\n const option = this.generateGetCountRequest(op);\r\n if (!option) {\r\n return Promise.resolve({ data: [] });\r\n }\r\n const fetchDataPromise = new Promise((resolve, reject) => {\r\n $.ajax(option).then((rawData) => {\r\n resolve(rawData);\r\n }, reject);\r\n });\r\n\r\n const getCountActivity = this.currentScenario.getCount.create();\r\n getCountActivity.start();\r\n\r\n return fetchDataPromise.then(\r\n (rawData) => {\r\n getCountActivity.stop();\r\n return {\r\n data: rawData,\r\n };\r\n },\r\n (err) => {\r\n if (this.showAlertHandler) {\r\n this.handleAjaxError(err, option, 'getCount');\r\n } else {\r\n throw (err);\r\n }\r\n return {};\r\n }\r\n );\r\n }\r\n\r\n generateGetCountRequest = (op) => {\r\n if (_.isUndefined(op)) {\r\n return null;\r\n }\r\n\r\n const {\r\n channel,\r\n campaignType,\r\n } = op;\r\n const OpportunityTypes = getRecommendationIds(\r\n null,\r\n channel,\r\n this.permissions,\r\n this.isMCC\r\n );\r\n\r\n if (!channel || _.isEmpty(OpportunityTypes)) {\r\n return null;\r\n }\r\n\r\n const data = {\r\n Request: {\r\n Channel: channel,\r\n OpportunityTypes,\r\n CampaignTypeId:\r\n _.contains(SUPPORTED_CAMPAIGN_TYPES, campaignType) ?\r\n campaignType : null,\r\n },\r\n };\r\n const option = getOptions(this.scope.token, this.lcid, data);\r\n\r\n option.url = formatUrl(`${this.odataPath}${getCountAPI}`, this.scope);\r\n return option;\r\n }\r\n\r\n // getCountByCampaignAdGroups returns count of recommendations by given campaign and ad groups\r\n getCountByCampaignAdGroups = (op) => {\r\n this.currentActivity.trace('getCountByCampaignAdGroups is called', 'RecommendationService/getCountByCampaignAdGroups');\r\n\r\n const campaignAdGroups = op.campaignAdGroups ||\r\n getRequestScope(op, op.scope || this.scope, this.currentActivity);\r\n const option = this.generateGetCountByCampaignAdGroupsRequest(_.extend(\r\n {}, op,\r\n { campaignAdGroups }\r\n ));\r\n if (!option) {\r\n return Promise.resolve({ data: [] });\r\n }\r\n const fetchDataPromise = new Promise((resolve, reject) => {\r\n $.ajax(option).then((rawData) => {\r\n resolve(rawData);\r\n }, reject);\r\n });\r\n\r\n const getCountByCampaignAdGroupsActivity =\r\n this.currentScenario.getCountByCampaignAdGroups.create();\r\n getCountByCampaignAdGroupsActivity.start();\r\n\r\n return fetchDataPromise.then(\r\n (rawData) => {\r\n getCountByCampaignAdGroupsActivity.stop();\r\n return {\r\n data: rawData,\r\n };\r\n },\r\n (err) => {\r\n this.handleAjaxError(err, option, 'getCountByCampaignAdGroups');\r\n return {};\r\n }\r\n );\r\n }\r\n\r\n generateGetCountByCampaignAdGroupsRequest = (op) => {\r\n const {\r\n channel,\r\n campaignAdGroups,\r\n type,\r\n } = op;\r\n\r\n const OpportunityTypes = getRecommendationIds(\r\n type,\r\n channel,\r\n this.permissions,\r\n this.isMCC\r\n );\r\n\r\n if (!channel || !OpportunityTypes || OpportunityTypes.length === 0) {\r\n return null;\r\n }\r\n\r\n const data = {\r\n Request: {\r\n CampaignAdGroups: campaignAdGroups,\r\n Channel: channel,\r\n OpportunityTypes,\r\n },\r\n };\r\n const option = getOptions(this.scope.token, this.lcid, data);\r\n\r\n option.url = formatUrl(`${this.odataPath}${getCountAPI}`, this.scope);\r\n return option;\r\n }\r\n\r\n logRecommendationFailedResults = (rawData, type) => {\r\n _.chain(rawData.AggregatedResults)\r\n .filter(res => res.ErrorCode !== 0)\r\n .each(res => _.each(res.OpportunityIds, (opportunityId) => {\r\n this.currentActivity.trace(\r\n `apply recommendation failed, opportunityId = ${opportunityId}, errorCode = ${res.ErrorCode}, type = ${type}`, // eslint-disable-line\r\n 'recommendation/applyFailed'\r\n );\r\n }));\r\n }\r\n\r\n countError = (rawData) => {\r\n const totalCount = _.reduce(\r\n rawData.AggregatedResults,\r\n (memo, singleCodeResult) => memo + singleCodeResult.RecommendationCount,\r\n 0\r\n );\r\n const successfulCount = _.chain(rawData.AggregatedResults)\r\n .filter(singleCodeResult => singleCodeResult.ErrorCode === 0)\r\n .first()\r\n .result('RecommendationCount')\r\n .value() || 0;\r\n const failedCount = totalCount - successfulCount;\r\n const expiredCount = _.chain(rawData.AggregatedResults)\r\n .map(singleCodeResult => singleCodeResult.ExpiredCount)\r\n .reduce((memo, count) => memo + count, 0)\r\n .value();\r\n _.extend(rawData, {\r\n totalCount,\r\n successfulCount,\r\n failedCount,\r\n expiredCount,\r\n });\r\n }\r\n\r\n getErrors = rawData => _.uniq(_.map(\r\n rawData.AggregatedResults,\r\n item => _.pick(item, 'ErrorCode', 'ErrorMessage', 'Property')\r\n ), false, item => item.ErrorCode)\r\n\r\n dealWithInlineError = (rawData, hasInlineError) => {\r\n if (_.isFunction(hasInlineError)) {\r\n const errors = this.getErrors(rawData);\r\n if (hasInlineError(errors)) {\r\n throw errors;\r\n }\r\n }\r\n }\r\n\r\n aggregateResult = (rawData) => {\r\n if (_.isUndefined(rawData.AggregatedResults)) {\r\n _.extend(rawData, {\r\n AggregatedResults: _.chain(rawData.Results)\r\n .groupBy('ErrorCode')\r\n .map((items, key) => ({\r\n ErrorCode: parseInt(key, 10),\r\n ErrorMessage: _.first(items).ErrorMessage,\r\n OpportunityIds: _.map(items, item => item.OpportunityId),\r\n RecommendationCount: _.size(items),\r\n ExpiredCount: _.size(_.filter(items, item => item.Expired)),\r\n Property: _.first(items).Property,\r\n }))\r\n .value(),\r\n });\r\n }\r\n }\r\n\r\n dealApplyResponse = ({ rawData, op }) => {\r\n this.aggregateResult(rawData);\r\n this.countError(rawData);\r\n const { totalCount: total, failedCount: fail } = rawData;\r\n if (fail && isCompetition(op.type)) {\r\n const localizedkey = `Recommendation_${op.userAction}_Error_Message`;\r\n\r\n this.showAlertHandler({\r\n message: this.i18n.getString(localizedkey, { total, fail }),\r\n level: 'Info',\r\n dismissible: true,\r\n });\r\n }\r\n\r\n if (!isCompetition(op.type)) {\r\n if (rawData.totalCount === 0) {\r\n if (rawData.ErrorCode && rawData.ErrorCode !== 0) {\r\n // If ErrorCode is not equal to 0, the error should be notified.\r\n // Even though the totalCount, failedCount are 0.\r\n this.showAlertHandler({\r\n message: this.i18n.getString('GenericErrorMessage'),\r\n level: 'Error',\r\n dismissible: true,\r\n });\r\n }\r\n this.setApplyNotificationInfo({ message: '', failedRecommendationCount: 0, userAction: '' });\r\n\r\n return [];\r\n }\r\n\r\n this.logRecommendationFailedResults(rawData, op.type);\r\n if (_.contains(INLIE_APPLY_ERROR_SUPPORT_TYPES, op.type)) {\r\n this.dealWithInlineError(rawData, op.hasInlineError);\r\n }\r\n\r\n op.handleRecommendationNotification({\r\n i18n: this.i18n,\r\n op,\r\n rawData,\r\n showAlertHandler: this.showAlertHandler,\r\n isOptimizationScoreOn: this.isOptimizationScoreOn,\r\n setApplyNotificationInfo: this.setApplyNotificationInfo,\r\n newI18n: this.newI18n,\r\n scope: this.scope,\r\n });\r\n }\r\n\r\n return [];\r\n }\r\n\r\n stopStatusPoll = () => {\r\n if (!_.isNull(this.pollStatusTask)) {\r\n this.pollStatusTask.stop();\r\n }\r\n }\r\n\r\n track = (op) => {\r\n this.currentActivity.trace(`track is called, UserAction= ${stringifySync(op.userAction)}`, 'RecommendationService/track');\r\n\r\n // Apply/dismiss recommendation: invalidate recommendation summary data cache.\r\n // Call it early to prevent the timeout on aync apply.\r\n if (this.permissions.IsRecommendationCacheDetailPageDataEnabled\r\n && !_.isUndefined(getRecommendationCache('recommendation-summary-raw-data'))) {\r\n setRecommendationCache('recommendation-summary-raw-data', undefined);\r\n }\r\n\r\n let isAsync = false;\r\n\r\n return this.generateApplyRequest(op).then((option) => {\r\n const result = new Promise((resolve, reject) => {\r\n $.ajax(option).then((rawData) => {\r\n resolve(rawData);\r\n }, reject);\r\n });\r\n\r\n const getApplyActivity = this.currentScenario.track.create();\r\n getApplyActivity.start();\r\n\r\n return result.then((rawData = {}) => {\r\n getApplyActivity.stop();\r\n if (rawData.IsAsync) {\r\n isAsync = true;\r\n this.pollStatusTask = new PollTask(\r\n () => $.ajax(this.generateApplyStatusRequest({\r\n adoptionId: rawData.AdoptionId,\r\n })),\r\n data => data.AdoptionStatus === TASK_STATUS.COMPLETED,\r\n data => data.AdoptionStatus === TASK_STATUS.FAILED,\r\n this.asyncScheduler,\r\n 10000 // max poll count\r\n );\r\n if (_.isFunction(op.closeUiBlock)) {\r\n op.closeUiBlock();\r\n }\r\n if (_.isFunction(op.showAsyncApplyModal)) {\r\n op.showAsyncApplyModal(this.pollStatusTask);\r\n }\r\n\r\n return this.pollStatusTask.start().then((data) => {\r\n this.currentActivity.trace(`poll count: ${this.pollStatusTask.pollCount}`, 'RecommendationService/Track');\r\n return data;\r\n });\r\n }\r\n return rawData;\r\n })\r\n .then(\r\n (rawData = {}) => op.userAction !== APPLY_ACTION_TYPES.REDISMISS &&\r\n this.dealApplyResponse({ rawData, op }),\r\n (err) => {\r\n this.handleAjaxError(err, option, 'track');\r\n return [];\r\n }\r\n );\r\n }).finally(() => {\r\n if (isAsync) {\r\n if (_.isFunction(op.closeAsyncApplyModal)) {\r\n op.closeAsyncApplyModal();\r\n }\r\n } else if (_.isFunction(op.closeUiBlock)) {\r\n op.closeUiBlock();\r\n }\r\n\r\n if (this.permissions.IsRecommendationDataCacheEnabled\r\n && !_.isNull(this.cacheManager)) {\r\n // Apply/dismiss all on in context card recommendation: invalidate campaign cache.\r\n // Apply/dismiss on recommendation page: invalidate it when leaving recommendation page.\r\n if (op.channel === CHANNEL_TYPES.INCONTEXTCARD) {\r\n this.cacheManager.invalidate('Campaign');\r\n } else if (op.channel === CHANNEL_TYPES.RECOMMENDATION\r\n || op.channel === CHANNEL_TYPES.MCCRECOMMENDATION) {\r\n setRecommendationCache('need-invalidate-campaign-cache', true);\r\n }\r\n }\r\n });\r\n }\r\n\r\n getApplyAPI = (withAll, type, asyncEnabled = false, userAction) => {\r\n let suffix = asyncEnabled ? applyRecBulkAPISuffix : applyAPISuffix;\r\n\r\n if (withAll) {\r\n suffix = asyncEnabled ? applyRecAllAPISuffix : applyAllAPISuffix;\r\n } else if (\r\n (type === RECOMMENDATION_TYPES.SITE_LINK ||\r\n type === RECOMMENDATION_TYPES.CALLOUT) &&\r\n !asyncEnabled\r\n ) {\r\n suffix = trackAPISuffix; // todo: discuss with MT\r\n }\r\n\r\n if (userAction === APPLY_ACTION_TYPES.REDISMISS) {\r\n suffix = redismissAPI;\r\n }\r\n\r\n return `${this.isMCC ? urlPrefixMCC : urlPrefix}/${asyncEnabled ? 'Recommendation' : 'Opportunity'}.${suffix}`;\r\n }\r\n\r\n isTrackingOnly = (type, asyncEnabled) => (type === RECOMMENDATION_TYPES.SITE_LINK ||\r\n type === RECOMMENDATION_TYPES.CALLOUT) &&\r\n asyncEnabled;\r\n\r\n getOdataType = (withAll, type, asyncEnabled) => {\r\n const isAll = withAll ? 'ALL' : 'BULK';\r\n if (this.isMCC) {\r\n return APPLY_ODATA_TYPES_MAP[isAll].MCC;\r\n } else if (asyncEnabled) {\r\n return APPLY_ODATA_TYPES_MAP[isAll].SINGLE_ACCOUNT_ASYNC;\r\n }\r\n\r\n return APPLY_ODATA_TYPES_MAP[isAll].SINGLE_ACCOUNT;\r\n }\r\n\r\n generateApplyRequest = (op) => {\r\n const {\r\n type,\r\n channel,\r\n userAction,\r\n withAll,\r\n userInputs,\r\n campaignAdGroups,\r\n settings,\r\n reason,\r\n context,\r\n guid,\r\n totalRecommendationCount,\r\n } = op;\r\n\r\n return this.cappedAccountIdsPromise.then((accountIds) => {\r\n const asyncEnabled = this.isMCC ||\r\n (\r\n this.permissions.IsBAARecommendationsAsyncApplyEnabled &&\r\n (channel === CHANNEL_TYPES.RECOMMENDATION ||\r\n channel === CHANNEL_TYPES.INCONTEXT ||\r\n channel === CHANNEL_TYPES.INCONTEXTCARD)\r\n ) ||\r\n (\r\n this.isOptimizationScoreOn &&\r\n (channel === CHANNEL_TYPES.RECOMMENDATION ||\r\n channel === CHANNEL_TYPES.INCONTEXT ||\r\n channel === CHANNEL_TYPES.INCONTEXTCARD)\r\n );\r\n\r\n const isFromDismissTab = _.result(context, 'Category', '') === RECOMMENDATION_CATEGORIES.DISMISSED;\r\n\r\n const data = {\r\n Request: {\r\n '@odata.type': this.getOdataType(withAll, type, asyncEnabled),\r\n [`${asyncEnabled ? 'RecommendationType' : 'OpportunityType'}`]: type,\r\n AccountIds: this.isMCC ? accountIds : undefined,\r\n UserAction: userAction,\r\n UserInputs: userInputs || [],\r\n CampaignAdGroups: this.isMCC ? undefined : campaignAdGroups,\r\n Channel: channel,\r\n Settings: settings,\r\n Reason: reason,\r\n Context: JSON.stringify(context),\r\n Guid: guid,\r\n TotalRecommendationCount: asyncEnabled && withAll ? totalRecommendationCount : undefined,\r\n TrackingOnly: asyncEnabled ? this.isTrackingOnly(type, asyncEnabled) : undefined,\r\n },\r\n };\r\n\r\n if (isFromDismissTab) {\r\n data.Request.IsFromDismissTab = true;\r\n }\r\n\r\n const option = getOptions(this.scope.token, undefined, data);\r\n\r\n option.url = formatUrl(`${this.odataPath}${this.getApplyAPI(withAll, type, asyncEnabled, userAction)}`, this.scope);\r\n return option;\r\n }).catch((err) => {\r\n if (this.showAlertHandler) {\r\n this.handleAjaxError(err, {}, 'getAccountIds');\r\n } else {\r\n throw (err);\r\n }\r\n return null;\r\n });\r\n }\r\n\r\n generateApplyStatusRequest = (op) => {\r\n const {\r\n adoptionId,\r\n } = op;\r\n const option = getOptions(this.scope.token, undefined, undefined, 'GET');\r\n\r\n option.url = formatUrl(\r\n `${this.odataPath}${this.isMCC ? urlPrefixMCC : urlPrefix}/Recommendation.GetApplyStatus(Id='${adoptionId}')`,\r\n this.scope\r\n );\r\n return option;\r\n }\r\n\r\n handleAjaxError = (err, option, functionName, shouldShowAlertHandler = true) => {\r\n const errorDetails = `ErrorMessage=${stringifySync(err.message)}, ErrorStack=${stringifySync(err.stack)}, ErrorCode=${err.status}, Error=${stringifySync(err)}, Request=${stringifySync(option.data)}`;\r\n\r\n if (err.status === 0) {\r\n this.currentActivity.trace(`Request not able to be sent, ${errorDetails}`, `RecommendationService/${functionName}`);\r\n } else if (err.status === 401) {\r\n this.currentActivity.trace(`error in ${functionName}, ${errorDetails}`, `RecommendationService/${functionName}`);\r\n handleUnauthorizedResponse(err);\r\n } else {\r\n this.currentActivity.error(`error in ${functionName}, ${errorDetails}`, `RecommendationService/${functionName}`);\r\n }\r\n\r\n if (shouldShowAlertHandler) {\r\n this.showAlertHandler({\r\n message: this.i18n.getString('GenericErrorMessage'),\r\n level: 'Error',\r\n dismissible: true,\r\n });\r\n }\r\n\r\n // When it's failed to apply, set applyNotificationInfo to default value.\r\n this.setApplyNotificationInfo({ message: '', failedRecommendationCount: 0, userAction: '' });\r\n };\r\n\r\n /**\r\n * Creates a download task in MT by giving MT the adoption Id\r\n * @param {string} adoptionId - the adoption's id to download its history\r\n * @returns {Promise} Resolves to download task id if the download was successful.\r\n */\r\n fetchDownloadIdHistory = (adoptionId) => {\r\n const data = {\r\n Request: {\r\n '@odata.type': '#Microsoft.Advertiser.AdInsight.Opportunity.ODataApiModel.ApplyErrorDetailsDownloadTaskRequest',\r\n ReportType: 'ApplyErrorDetailsDownload',\r\n AdoptionId: adoptionId,\r\n },\r\n };\r\n const option = getOptions(this.scope.token, undefined, data);\r\n\r\n option.url = formatUrl(\r\n `${this.odataPath}${this.isMCC ? urlPrefixMCC : urlPrefix}${fetchDownloadIdAPI}`,\r\n this.scope\r\n );\r\n return new Promise((resolve, reject) => {\r\n $.ajax(option).then((rawData) => {\r\n resolve(rawData);\r\n }, reject);\r\n });\r\n }\r\n\r\n fetchDownloadIdRecommendation = ({\r\n recommendationType,\r\n channel,\r\n campaignType,\r\n }) => this.accountIdsPromise.then((accountIds) => {\r\n const recommendationTypes = _.difference(\r\n getRecommendationTypes(\r\n recommendationType,\r\n channel,\r\n this.permissions,\r\n this.isMCC\r\n ),\r\n NOT_SUPPORT_DOWNLOAD_TYPES\r\n );\r\n\r\n let uniqParams = {};\r\n\r\n if (this.isMCC) {\r\n uniqParams = {\r\n '@odata.type': '#Microsoft.Advertiser.AdInsight.Opportunity.ODataApiModel.MccRecommendationsDownloadTaskRequest',\r\n AccountIds: accountIds,\r\n };\r\n } else {\r\n let campaignScope = null;\r\n let adgroupScope = null;\r\n\r\n campaignScope = this.scope && this.scope.campaignId\r\n ? { CampaignId: parseInt(this.scope.campaignId, 10) }\r\n : null;\r\n adgroupScope = this.scope && this.scope.adGroupId ?\r\n {\r\n AdGroupId: parseInt(this.scope.adGroupId, 10),\r\n CampaignId: parseInt(this.scope.campaignId, 10),\r\n } : null;\r\n\r\n const scopes = {};\r\n\r\n if (adgroupScope) {\r\n scopes.AdGroupScopes = [adgroupScope];\r\n } else if (campaignScope) {\r\n scopes.CampaignScopes = [campaignScope];\r\n }\r\n\r\n uniqParams = {\r\n '@odata.type': '#Microsoft.Advertiser.AdInsight.Opportunity.ODataApiModel.RecommendationsDownloadTaskRequest',\r\n CampaignTypeId: _.contains(SUPPORTED_CAMPAIGN_TYPES, campaignType) ? campaignType : null,\r\n ...scopes,\r\n };\r\n }\r\n\r\n const data = {\r\n Request: {\r\n ReportType: 'RecommendationsDownload',\r\n Channel: channel,\r\n RecommendationTypes: recommendationTypes,\r\n ...uniqParams,\r\n },\r\n };\r\n\r\n const option = getOptions(this.scope.token, undefined, data);\r\n\r\n option.url = formatUrl(\r\n `${this.odataPath}${this.isMCC ? urlPrefixMCC : urlPrefix}${fetchDownloadIdAPI}`,\r\n this.scope\r\n );\r\n\r\n return new Promise((resolve, reject) => {\r\n $.ajax(option).then((rawData) => {\r\n resolve(rawData);\r\n }, reject);\r\n });\r\n })\r\n\r\n /**\r\n *\r\n * @param {string} id - download task id\r\n * @returns {Promise} Resolves to be the url of download file\r\n */\r\n pollFileName = id => new PollTask(\r\n () => $.ajax(this.generatePollFileNameRequest(id)),\r\n data => data.Status === TASK_STATUS.COMPLETED,\r\n data => data.Status === TASK_STATUS.FAILED,\r\n this.asyncScheduler\r\n )\r\n\r\n generatePollFileNameRequest = (id) => {\r\n const option = getOptions(this.scope.token, undefined, undefined, 'GET');\r\n\r\n option.url = formatUrl(\r\n `${this.odataPath}${this.isMCC ? urlPrefixMCC : urlPrefix}/Recommendation.PollReportDataTask(Id='${id}')`,\r\n this.scope\r\n );\r\n return option;\r\n }\r\n\r\n /**\r\n * poll server to know if file is ready and then download it\r\n * @param {string} downloadId - the id to fetch download file status\r\n * @returns {Promise} Resolves to poll Count if the download was successful.\r\n */\r\n downloadWithDownloadId = ({ Id: downloadId }) => {\r\n let alertId = null;\r\n this.currentActivity.trace(`Download task started with id: ${downloadId}`, 'RecommendationService/DownloadWithDownloadId');\r\n // show an alert saying that download request was successfully submitted\r\n alertId = this.alertCenter.showConfirmation(\r\n this.i18n.getString('GridDownloadStatusMessage'),\r\n alertId\r\n );\r\n const pollTask = this.pollFileName(downloadId);\r\n return pollTask.start()\r\n .finally(() => this.alertCenter.dismiss(alertId))\r\n .then(({ ResultFile }) => {\r\n downloadService.iframeDownload(ResultFile);\r\n return pollTask.pollCount;\r\n });\r\n }\r\n\r\n /**\r\n * download of recommendations\r\n * Creates a download request and POSTS to odata, asynchronously polls for the status of the\r\n * request and initiates the browser download after the file has been generated.\r\n * @param {array} recommendationType -\r\n * the recommendation type to be download. Null stands for all.\r\n * @param {string} channel - different channel has different supported recommendation types\r\n * @param {string} campaignType - campaign type selected in new UI\r\n * @returns {Promise} Resolves to true if the download was successful.\r\n */\r\n download = ({\r\n recommendationType,\r\n channel,\r\n campaignType,\r\n }) => this.fetchDownloadIdRecommendation({\r\n recommendationType,\r\n channel,\r\n campaignType,\r\n }).then(this.downloadWithDownloadId)\r\n .then((pollCount) => {\r\n this.currentActivity.trace(`poll count: ${pollCount}`, 'RecommendationService/Download');\r\n })\r\n .catch(err => this.handleAjaxError(err, 'download'))\r\n\r\n /**\r\n * Creates a download request and POSTS to odata, asynchronously polls for the status of the\r\n * request and initiates the browser download after the file has been generated.\r\n * @param {string} adoptionId - the adoption's id to download its history\r\n * @returns {Promise} Resolves to true if the download was successful.\r\n */\r\n downloadHistory = (adoptionId) => {\r\n this.currentActivity.trace(`Download history task started with adoption id: ${adoptionId}`, 'RecommendationService/DownloadHistory');\r\n return this.fetchDownloadIdHistory(adoptionId)\r\n .then(this.downloadWithDownloadId)\r\n .then((pollCount) => {\r\n this.currentActivity.trace(`poll count: ${pollCount}`, 'RecommendationService/DownloadHistory');\r\n })\r\n .catch(err => this.handleAjaxError(err, 'downloadHistory'));\r\n }\r\n\r\n setApplyNotificationInfo = (options) => {\r\n applyNotificationInfo = options;\r\n }\r\n\r\n getAutoApplyOptInStatus = () => {\r\n this.currentActivity.trace('getAutoApplyOptInStatus is called', 'RecommendationService/getAutoApplyOptInStatus');\r\n const option = this.generateGetAutoApplyOptInStatusRequest();\r\n const fetchDataPromise = new Promise((resolve, reject) => {\r\n $.ajax(option).then((rawData) => {\r\n resolve(rawData);\r\n }, reject);\r\n });\r\n\r\n\r\n const getAutoApplyOptInStatusActivity = this.currentScenario.getAutoApplyOptInStatus.create();\r\n getAutoApplyOptInStatusActivity.start();\r\n\r\n return fetchDataPromise.then(\r\n (rawData) => {\r\n getAutoApplyOptInStatusActivity.stop();\r\n return {\r\n data: rawData,\r\n };\r\n },\r\n (err) => {\r\n if (this.showAlertHandler) {\r\n this.handleAjaxError(err, option, 'getAutoApplyOptInStatus');\r\n } else {\r\n throw (err);\r\n }\r\n return {};\r\n }\r\n );\r\n }\r\n\r\n generateGetAutoApplyOptInStatusRequest = () => {\r\n const option = getOptions(\r\n this.scope.token, undefined,\r\n {\r\n Request: {\r\n RecommendationTypes: SUPPORT_ADINSIGHT_AUTO_APPLY_TYPES,\r\n },\r\n }\r\n );\r\n option.url = formatUrl(`${this.odataPath}${getAutoApplyOptInStatusAPI}`, this.scope);\r\n return option;\r\n }\r\n\r\n setAutoApplyOptInStatus = (op) => {\r\n this.currentActivity.trace(`setAutoApplyOptInStatus is called, isOptInStatusDelta= ${stringifySync(op.isOptInStatusDelta)}`, 'RecommendationService/setAutoApplyOptInStatus');\r\n\r\n if (_.isEmpty(op.isOptInStatusDelta)) {\r\n this.showAlertHandler({\r\n message: this.newI18n.getString(_TL_('Auto-apply preference updated.')),\r\n level: 'Info',\r\n dismissible: true,\r\n });\r\n\r\n return Promise.resolve();\r\n }\r\n\r\n const option = this.generateSetAutoApplyOptInStatusRequest(op);\r\n const result = new Promise((resolve, reject) => {\r\n $.ajax(option).then((rawData) => {\r\n resolve(rawData);\r\n }, reject);\r\n });\r\n\r\n const setAutoApplyOptInStatusActivity =\r\n this.currentScenario.setAutoApplyOptInStatus.create();\r\n setAutoApplyOptInStatusActivity.start();\r\n\r\n return result.then((rawData = {}) => {\r\n setAutoApplyOptInStatusActivity.stop();\r\n return rawData;\r\n })\r\n .then(\r\n (rawData = {}) => {\r\n const isSetAutoApplyOptInStatusSuccess = rawData.ErrorCode === 0;\r\n this.showAlertHandler({\r\n message: this.newI18n.getString(_TL_(isSetAutoApplyOptInStatusSuccess ?\r\n 'Auto-apply preference updated.' : 'Auto-apply preference failed to update. Please try again later.')),\r\n level: isSetAutoApplyOptInStatusSuccess ? 'Info' : 'Warning',\r\n dismissible: true,\r\n });\r\n },\r\n (err) => {\r\n this.handleAjaxError(err, option, 'setAutoApplyOptInStatus');\r\n return [];\r\n }\r\n );\r\n };\r\n\r\n generateSetAutoApplyOptInStatusRequest = (op) => {\r\n const AAROptInStatusList = [];\r\n _.each(op.isOptInStatusDelta, (status, type) => {\r\n AAROptInStatusList.push({ Key: type, Value: status });\r\n });\r\n\r\n const option = getOptions(this.scope.token, undefined, { Request: { AAROptInStatusList } });\r\n option.url = formatUrl(`${this.odataPath}${setAutoApplyOptInStatusAPI}`, this.scope);\r\n return option;\r\n };\r\n\r\n getStockImageUrl = (queryString) => {\r\n const culture = _.get(window, ['globalLegacyI18n', 'context', 'culture']);\r\n const url = formatUrl(`${getStockImageAPI}`, this.scope);\r\n\r\n const query = _.extend({\r\n $top: 1,\r\n $skip: 0,\r\n appName: 'AdInsight',\r\n $search: queryString,\r\n language: culture,\r\n includevertical: false,\r\n });\r\n\r\n return this.odata.get(url, _.extend({ data: query }, this.odata));\r\n };\r\n\r\n getBulkAarUploadBlobUrl = (op) => {\r\n this.currentActivity.trace(`getBulkAarUploadBlobUrl is called, fileName= ${stringifySync(op.fileName)}`, 'RecommendationService/getBulkAarUploadBlobUrl');\r\n\r\n const option = this.generateBulkAarUploadBlobUrlRequest(op);\r\n const result = new Promise((resolve, reject) => {\r\n $.ajax(option).then((rawData) => {\r\n resolve(rawData);\r\n }, reject);\r\n });\r\n\r\n const getBulkAarUploadBlobUrlActivity =\r\n this.currentScenario.getBulkAarUploadBlobUrl.create();\r\n getBulkAarUploadBlobUrlActivity.start();\r\n\r\n return result.then((rawData = {}) => {\r\n getBulkAarUploadBlobUrlActivity.stop();\r\n return rawData;\r\n })\r\n .then(\r\n rawData => ({ data: rawData }),\r\n (err) => {\r\n this.handleAjaxError(err, option, 'getBulkAarUploadBlobUrl');\r\n return [];\r\n }\r\n );\r\n };\r\n\r\n generateBulkAarUploadBlobUrlRequest = (op) => {\r\n const option = getOptions(this.scope.token, this.lcid, { Request: { UploadedFileName: op.fileName } });\r\n\r\n option.url = formatUrl(`${this.odataPath}${getBulkAarUploadBlobAPI}`, this.scope);\r\n return option;\r\n };\r\n\r\n setBulkAarUploadBlob = (url, data) => {\r\n const headers = new Headers();\r\n headers.append('Content-Type', 'application/json');\r\n headers.append('x-ms-blob-type', 'BlockBlob');\r\n\r\n return fetch(url, {\r\n headers,\r\n method: 'PUT',\r\n body: data,\r\n }).then(\r\n response => response,\r\n () => {\r\n this.showAlertHandler({\r\n message: this.newI18n.getString(_TL_('Upload failed. Please try again later.')),\r\n level: 'Error',\r\n dismissible: true,\r\n });\r\n }\r\n );\r\n };\r\n\r\n submitBulkAarOptInStatusTask = (op) => {\r\n this.currentActivity.trace(`submitBulkAarOptInStatusTask is called, fileName= ${stringifySync(op.fileName)}`, 'RecommendationService/submitBulkAarOptInStatusTask');\r\n\r\n const option = this.generateSubmitBulkAarOptInStatusTaskRequest(op);\r\n const result = new Promise((resolve, reject) => {\r\n $.ajax(option).then((rawData) => {\r\n resolve(rawData);\r\n }, reject);\r\n });\r\n\r\n const submitBulkAarOptInStatusTaskActivity =\r\n this.currentScenario.submitBulkAarOptInStatusTask.create();\r\n submitBulkAarOptInStatusTaskActivity.start();\r\n\r\n return result.then((rawData = {}) => {\r\n submitBulkAarOptInStatusTaskActivity.stop();\r\n return rawData;\r\n })\r\n .then(\r\n rawData => ({ res: rawData }),\r\n (err) => {\r\n if (err.status === 400) {\r\n this.showAlertHandler({\r\n message: err.responseJSON.error.message,\r\n level: 'Error',\r\n dismissible: true,\r\n });\r\n } else if (err.status === 401) {\r\n this.showAlertHandler({\r\n message: this.newI18n.getString(_TL_('You don\\'t have access to make updates for the account id.')),\r\n level: 'Error',\r\n dismissible: true,\r\n });\r\n } else {\r\n this.handleAjaxError(err, option, 'submitBulkAarOptInStatusTask');\r\n }\r\n return [];\r\n }\r\n );\r\n };\r\n\r\n generateSubmitBulkAarOptInStatusTaskRequest = (op) => {\r\n const option = getOptions(this.scope.token, this.lcid, { Request: { UploadedFileName: op.fileName } });\r\n\r\n option.url = formatUrl(`${this.odataPath}${submitBulkAarOptInStatusTaskAPI}`, this.scope);\r\n return option;\r\n };\r\n\r\n pollBulkAarOptInStatusTask = (op) => {\r\n this.currentActivity.trace(`pollBulkAarOptInStatusTask is called, reqId= ${stringifySync(op.reqID)}`, 'RecommendationService/pollBulkAarOptInStatusTask');\r\n\r\n this.pollStatusTask = new PollTask(\r\n () => $.ajax(this.generatepollBulkAarOptInStatusTaskRequest(op)),\r\n data => data.BulkUpdateStatus === TASK_STATUS.COMPLETED,\r\n data => data.BulkUpdateStatus === TASK_STATUS.FAILED,\r\n this.asyncScheduler,\r\n 10000 // max poll count\r\n );\r\n\r\n return this.pollStatusTask.start().then((data) => {\r\n this.currentActivity.trace(`poll count: ${this.pollStatusTask.pollCount}`, 'RecommendationService/pollBulkAarOptInStatusTask');\r\n return data;\r\n }).then(\r\n (rawData = {}) => this.dealBulkAarOptInStatusResponse({ rawData }),\r\n (err) => {\r\n this.handleAjaxError(err, null, 'pollBulkAarOptInStatusTask');\r\n return [];\r\n }\r\n );\r\n };\r\n\r\n generatepollBulkAarOptInStatusTaskRequest = (op) => {\r\n const option = getOptions(this.scope.token, this.lcid, {}, 'GET');\r\n\r\n option.url = formatUrl(`${this.odataPath}${pollBulkEditAAROptInStatusTaskAPI}(Id='${op.reqId}')`, this.scope);\r\n return option;\r\n };\r\n\r\n aggregateBulkAarResult = (rawData) => {\r\n if (_.isUndefined(rawData.AggregatedResults)) {\r\n _.extend(rawData, {\r\n AggregatedResults: _.chain(_.flatten(_.map(_.chain(rawData.Results).value(), item => _.map(item.Results, resu => ({\r\n Id: item.Id,\r\n ...resu,\r\n })))))\r\n .groupBy('ErrorCode')\r\n .map((items, key) => ({\r\n ErrorCode: parseInt(key, 10),\r\n Count: _.size(items),\r\n ...items,\r\n }))\r\n .value(),\r\n });\r\n }\r\n };\r\n\r\n countBulkError = (rawData) => {\r\n const totalCount = _.reduce(\r\n rawData.AggregatedResults,\r\n (memo, singleCodeResult) => memo + singleCodeResult.Count,\r\n 0\r\n );\r\n const successfulCount = _.filter(rawData.AggregatedResults, singleCodeResult => singleCodeResult.ErrorCode === 0).length ?\r\n _.first(_.filter(rawData.AggregatedResults, singleCodeResult => singleCodeResult.ErrorCode === 0)).Count : 0;\r\n const failedCount = totalCount - successfulCount;\r\n _.extend(rawData, {\r\n totalCount,\r\n successfulCount,\r\n failedCount,\r\n });\r\n };\r\n\r\n dealBulkAarOptInStatusResponse = ({ rawData }) => {\r\n this.aggregateBulkAarResult(rawData);\r\n this.countBulkError(rawData);\r\n\r\n if (rawData.ErrorCode !== 0) {\r\n this.showAlertHandler({\r\n message: this.newI18n.getString(_TL_('Applied fail.')),\r\n level: 'Error',\r\n dismissible: true,\r\n });\r\n } else {\r\n this.showAlertHandler({\r\n message: this.newI18n.getString(_TL_('{{successCount}} applied successfully!'), { successCount: rawData.successfulCount }),\r\n level: 'Info',\r\n dismissible: true,\r\n });\r\n }\r\n\r\n return [];\r\n };\r\n}\r\n","import _ from 'underscore';\r\nimport { recommendationConfigs } from './recommendation-configs';\r\nimport {\r\n ESTIMATE_TYPES,\r\n SUMMARY_LEVELS,\r\n RECOMMENDATION_TYPES,\r\n VISUAL_TYPES,\r\n CHANNEL_ALL_RECOMMENDATIONS,\r\n CHANNEL_TYPES,\r\n MAX_NUMBER_OF_RECOMMENDATION_SAMPLES,\r\n MAX_NUMBER_OF_RECOMMENDATION_SAMPLES_WITH_OS,\r\n} from './consts';\r\nimport {\r\n formatEntityNameForHtml,\r\n formatSummary,\r\n formatCost,\r\n formatPercent,\r\n formatPercentHundredths,\r\n truncateEntityName,\r\n truncateSingleColumnEntityURL,\r\n formatDecimal,\r\n formatVisualDataChart,\r\n formatCompetitionSampleVisualDataTable,\r\n formatLocaledSourceType,\r\n formatKeyword,\r\n getCompetitionSampleInsightTitle,\r\n getModelForCompetitionSampleAction,\r\n formatInteger,\r\n} from './formatter/index';\r\n\r\nimport { getEditorialErrorMessage } from './util';\r\n\r\nconst formatInsight = (type, sample, entityName, adGroupName, i18n) => {\r\n let insight = '';\r\n switch (type) {\r\n case RECOMMENDATION_TYPES.COMPETITIVE_BID: {\r\n const insightKey = sample.isHighConverting ?\r\n `${recommendationConfigs[type].sampleInsight}_High_Converting` :\r\n recommendationConfigs[type].sampleInsight;\r\n insight = i18n.getString(\r\n insightKey,\r\n {\r\n keyword: entityName,\r\n ad_group: adGroupName,\r\n }\r\n );\r\n break;\r\n }\r\n case RECOMMENDATION_TYPES.DEVICE_BID_BOOST:\r\n case RECOMMENDATION_TYPES.LOCATION_BID_BOOST: {\r\n insight = i18n.getString(\r\n recommendationConfigs[type].sampleInsight,\r\n {\r\n delta: formatPercent(sample.delta, i18n),\r\n segment: sample.segment,\r\n competitor_domain: sample.competitor,\r\n }\r\n );\r\n break;\r\n }\r\n case RECOMMENDATION_TYPES.SYNDICATION: {\r\n insight = i18n.getString(\r\n recommendationConfigs[type].sampleInsight,\r\n {\r\n entity_name: entityName,\r\n }\r\n );\r\n break;\r\n }\r\n case RECOMMENDATION_TYPES.BUDGET:\r\n case RECOMMENDATION_TYPES.NEW_KEYWORD: // deprecated in Oct 2023\r\n case RECOMMENDATION_TYPES.NEW_LOCATION:\r\n default: {\r\n if (recommendationConfigs[type].sampleInsight) {\r\n insight = i18n.getString(recommendationConfigs[type].sampleInsight);\r\n }\r\n break;\r\n }\r\n }\r\n\r\n return insight;\r\n};\r\n\r\nconst ONE_COLUMN_IN_TABLE = 'one-column-in-table';\r\nconst TWO_COLUMNS_IN_TABLE = 'two-columns-in-table';\r\nconst THREE_COLUMNS_IN_TABLE = 'three-columns-in-table';\r\nconst FOUR_COLUMNS_IN_TABLE = 'four-columns-in-table';\r\n\r\nconst formatSample = ({\r\n type,\r\n level,\r\n scope,\r\n recommendationsCount,\r\n estimates,\r\n sample,\r\n i18n,\r\n newI18n,\r\n currency,\r\n isOptimizationScoreOn,\r\n}) => {\r\n let insightTitle = '';\r\n\r\n // what you can do\r\n let actionTitle;\r\n let actions;\r\n let moreRecommendations;\r\n let viewRecommendations;\r\n let apply;\r\n\r\n // entity\r\n const entityName = sample.target && formatEntityNameForHtml(level, sample.target);\r\n const adGroupName = level === SUMMARY_LEVELS.KEYWORD\r\n && sample.target\r\n && formatEntityNameForHtml(SUMMARY_LEVELS.ADGROUP, sample.target);\r\n const isCompetition = CHANNEL_ALL_RECOMMENDATIONS[CHANNEL_TYPES.COMPETITION].indexOf(type) !== -1;\r\n\r\n // visual\r\n const { visualType } = recommendationConfigs[type];\r\n let { visualData } = sample;\r\n visualData = formatVisualDataChart(i18n, visualType, visualData);\r\n\r\n if (isCompetition) {\r\n insightTitle = getCompetitionSampleInsightTitle({\r\n type,\r\n i18n,\r\n entityName,\r\n recommendationsCount,\r\n sample,\r\n });\r\n\r\n // Action title and action\r\n ({ actionTitle, actions } = getModelForCompetitionSampleAction({\r\n type,\r\n i18n,\r\n recommendationsCount,\r\n level,\r\n entityName,\r\n currency,\r\n sample,\r\n }));\r\n\r\n if (visualType === VISUAL_TYPES.TABLE) {\r\n visualData = formatCompetitionSampleVisualDataTable({\r\n type,\r\n visualData,\r\n visualTableHeaders: recommendationConfigs[type].visualTableHeaders,\r\n i18n,\r\n currency,\r\n });\r\n }\r\n } else if (!recommendationConfigs[type].visualTableScope || !scope\r\n || _.contains(recommendationConfigs[type].visualTableScope, scope)) {\r\n let headers = [];\r\n if (visualType === VISUAL_TYPES.TABLE) {\r\n if (recommendationConfigs[type].useNewI18n === true) {\r\n headers = _.map(recommendationConfigs[type].visualTableHeaders, headerKey =>\r\n newI18n.getString(headerKey));\r\n } else {\r\n headers = _.map(recommendationConfigs[type].visualTableHeaders, headerKey =>\r\n i18n.getString(headerKey));\r\n }\r\n } else if (visualType === VISUAL_TYPES.ADS_PREVIEW) {\r\n headers = _.map(recommendationConfigs[type].visualTableHeaders, headerKey =>\r\n newI18n.getString(headerKey));\r\n }\r\n\r\n const values = [];\r\n let highlights = [];\r\n let alignments;\r\n let columnWidths;\r\n let maxNumberOfRecommendationSamples = isOptimizationScoreOn ?\r\n MAX_NUMBER_OF_RECOMMENDATION_SAMPLES_WITH_OS : MAX_NUMBER_OF_RECOMMENDATION_SAMPLES;\r\n\r\n if (type === RECOMMENDATION_TYPES.IMPROVE_MULTIMEDIA_ADS) {\r\n maxNumberOfRecommendationSamples = MAX_NUMBER_OF_RECOMMENDATION_SAMPLES;\r\n }\r\n\r\n switch (type) {\r\n case RECOMMENDATION_TYPES.NEW_KEYWORD_OPPORTUNITY: {\r\n _.map(_.first(sample.visualData, maxNumberOfRecommendationSamples), (row) => {\r\n values.push([\r\n formatKeyword(row.recommendedKeyword, row.matchType),\r\n formatLocaledSourceType(i18n, row.recommendedSource),\r\n ]);\r\n });\r\n highlights = [false, true];\r\n break;\r\n }\r\n case RECOMMENDATION_TYPES.TRENDING_QUERY: {\r\n _.map(_.first(sample.visualData, maxNumberOfRecommendationSamples), (row) => {\r\n values.push([\r\n formatKeyword(row.recommendedKeyword, row.matchType),\r\n {\r\n nullableArrow: true,\r\n value: `↑ ${_.isString(row.searchVolumeIncrease) ? row.searchVolumeIncrease : formatPercentHundredths(row.searchVolumeIncrease, i18n)}`,\r\n },\r\n ]);\r\n });\r\n highlights = [false, true];\r\n break;\r\n }\r\n case RECOMMENDATION_TYPES.DYNAMIC_SEARCH_ADS: {\r\n _.map(_.first(sample.visualData[0].searchExamples, maxNumberOfRecommendationSamples), (example) => { // eslint-disable-line max-len\r\n values.push([example]);\r\n });\r\n if (_.size(sample.visualData[0].searchExamples) > maxNumberOfRecommendationSamples) {\r\n values.push(['...']);\r\n }\r\n\r\n highlights = [false];\r\n break;\r\n }\r\n case RECOMMENDATION_TYPES.SITE_LINK:\r\n case RECOMMENDATION_TYPES.CALLOUT: {\r\n _.map(_.first(sample.visualData, maxNumberOfRecommendationSamples), (row) => {\r\n values.push([\r\n {\r\n enabledToolTip: true,\r\n toolTipClass: TWO_COLUMNS_IN_TABLE,\r\n value: row.campaignName,\r\n },\r\n `↑ ${formatPercentHundredths(row.ctrLift, i18n)}`,\r\n ]);\r\n });\r\n highlights = [false, true];\r\n break;\r\n }\r\n case RECOMMENDATION_TYPES.BUDGET_OPPORTUNITY:\r\n case RECOMMENDATION_TYPES.ADJUST_SHARED_BUDGET_OPPORTUNITY: {\r\n const headerKey = estimates.primaryEstimate === ESTIMATE_TYPES.CONVERSIONS ?\r\n 'Summary_Card_Action_Header_Est_Conv' : 'Summary_Card_Action_Header_Est_Clicks';\r\n headers.push(i18n.getString(headerKey));\r\n _.map(_.first(sample.visualData, maxNumberOfRecommendationSamples), (row) => {\r\n values.push([\r\n {\r\n enabledToolTip: true,\r\n toolTipClass: TWO_COLUMNS_IN_TABLE,\r\n value: row.entityName,\r\n },\r\n `+${estimates.primaryEstimate === ESTIMATE_TYPES.CONVERSIONS ?\r\n formatDecimal(row.convIncrease, i18n) : formatDecimal(row.clicksIncrease, i18n)}`,\r\n ]);\r\n });\r\n highlights = [false, true];\r\n break;\r\n }\r\n case RECOMMENDATION_TYPES.REPAIR_ADS:\r\n case RECOMMENDATION_TYPES.REPAIR_KEYWORD: {\r\n _.map(_.first(sample.visualData, maxNumberOfRecommendationSamples), (row) => {\r\n values.push([\r\n {\r\n enabledToolTip: true,\r\n toolTipClass: ONE_COLUMN_IN_TABLE,\r\n value: row.adGroupName,\r\n },\r\n ]);\r\n });\r\n highlights = [false];\r\n break;\r\n }\r\n case RECOMMENDATION_TYPES.BROAD_MATCH_KEYWORD: {\r\n _.map(_.first(sample.visualData, maxNumberOfRecommendationSamples), (row) => {\r\n values.push([\r\n row.recommendedKeyword,\r\n ]);\r\n });\r\n highlights = [false];\r\n break;\r\n }\r\n case RECOMMENDATION_TYPES.REMOVE_CONFLICTING_NEGATIVE_KEYWORD: {\r\n _.map(_.first(sample.visualData, maxNumberOfRecommendationSamples), (row) => {\r\n values.push([\r\n formatKeyword(row.negativeKeyword, row.matchType),\r\n formatKeyword(row.blockedKeyword, row.blockedKeywordMatchType),\r\n ]);\r\n });\r\n highlights = [false, false];\r\n break;\r\n }\r\n case RECOMMENDATION_TYPES.RESPONSIVE_SEARCH_ADS: {\r\n _.map(_.first(sample.visualData, maxNumberOfRecommendationSamples), (row) => {\r\n values.push([\r\n {\r\n enabledToolTip: true,\r\n toolTipClass: ONE_COLUMN_IN_TABLE,\r\n value: row.adGroupName,\r\n },\r\n ]);\r\n });\r\n highlights = [false];\r\n break;\r\n }\r\n case RECOMMENDATION_TYPES.REALLOCATE_BUDGET: {\r\n _.map(_.first(sample.visualData, maxNumberOfRecommendationSamples), (row) => {\r\n values.push([\r\n formatCost(row.suggestBudget, i18n, i18n.currency),\r\n {\r\n enabledToolTip: true,\r\n toolTipClass: FOUR_COLUMNS_IN_TABLE,\r\n value: row.fromCampaign,\r\n },\r\n {\r\n enabledToolTip: true,\r\n toolTipClass: FOUR_COLUMNS_IN_TABLE,\r\n value: row.toCampaign,\r\n },\r\n `+${formatDecimal(row.clicksIncrease, i18n)}`,\r\n ]);\r\n });\r\n alignments = ['right', 'left', 'left', 'right'];\r\n highlights = [false, false, false, true];\r\n columnWidths = ['19%', '27%', '27%', '27%'];\r\n break;\r\n }\r\n case RECOMMENDATION_TYPES.FIX_AD_DESTINATION: {\r\n _.map(_.first(sample.visualData, maxNumberOfRecommendationSamples), (row) => {\r\n values.push([\r\n truncateSingleColumnEntityURL(row.UrlOrLandingPage),\r\n ]);\r\n });\r\n highlights = [false];\r\n break;\r\n }\r\n case RECOMMENDATION_TYPES.FIX_AD_TEXT: {\r\n _.map(_.first(sample.visualData, maxNumberOfRecommendationSamples), (row) => {\r\n values.push([\r\n truncateEntityName(getEditorialErrorMessage(row.policyCode)),\r\n formatInteger(row.numberRejectedAds, i18n),\r\n formatInteger(row.numberRejectedKeywords, i18n),\r\n ]);\r\n });\r\n highlights = [false, false, false];\r\n columnWidths = ['50%', '25%', '25%'];\r\n break;\r\n }\r\n case RECOMMENDATION_TYPES.MULTIMEDIA_ADS: {\r\n _.map(_.first(sample.visualData, maxNumberOfRecommendationSamples), (row) => {\r\n values.push([\r\n {\r\n enabledToolTip: true,\r\n toolTipClass: ONE_COLUMN_IN_TABLE,\r\n value: row.adGroupName,\r\n },\r\n ]);\r\n });\r\n highlights = [false];\r\n break;\r\n }\r\n case RECOMMENDATION_TYPES.IMAGE_EXTENSION: {\r\n _.map(_.first(sample.visualData, maxNumberOfRecommendationSamples), (row) => {\r\n values.push([\r\n {\r\n enabledToolTip: true,\r\n toolTipClass: TWO_COLUMNS_IN_TABLE,\r\n value: row.campaignName,\r\n },\r\n `+${formatDecimal(row.clicksIncrease, i18n)}`,\r\n ]);\r\n });\r\n highlights = [false, true];\r\n break;\r\n }\r\n case RECOMMENDATION_TYPES.REPAIR_MISSING_KEYWORD_PARAMS: {\r\n _.map(_.first(sample.visualData, maxNumberOfRecommendationSamples), (row) => {\r\n values.push([\r\n row.keyword,\r\n `+${formatDecimal(row.impressionsIncrease, i18n)}`,\r\n ]);\r\n });\r\n highlights = [false, true];\r\n break;\r\n }\r\n case RECOMMENDATION_TYPES.FIX_NO_IMPRESSION_BID: {\r\n _.map(_.first(sample.visualData, maxNumberOfRecommendationSamples), (row) => {\r\n values.push([\r\n formatKeyword(row.keyword, row.matchType),\r\n formatCost(row.suggestedBid, i18n, i18n.currency),\r\n {\r\n nullableArrow: true,\r\n value: row.impressionsIncrease === 0 ?\r\n null : `+${formatInteger(row.impressionsIncrease, i18n)}`,\r\n },\r\n ]);\r\n });\r\n highlights = [false, false, true];\r\n columnWidths = ['50%', '25%', '25%'];\r\n break;\r\n }\r\n case RECOMMENDATION_TYPES.REPAIR_UNTARGETED_OFFER: {\r\n _.map(_.first(sample.visualData, maxNumberOfRecommendationSamples), (row) => {\r\n values.push([\r\n {\r\n enabledToolTip: true,\r\n toolTipClass: THREE_COLUMNS_IN_TABLE,\r\n value: row.campaignName,\r\n },\r\n `+${formatDecimal(row.targetedProductsIncrease, i18n)}`,\r\n {\r\n nullableArrow: true,\r\n value: row.impressionsIncrease === 0 ?\r\n null : `+${formatInteger(row.impressionsIncrease, i18n)}`,\r\n },\r\n ]);\r\n });\r\n highlights = [false, true, true];\r\n columnWidths = ['50%', '25%', '25%'];\r\n break;\r\n }\r\n case RECOMMENDATION_TYPES.IMPROVE_MULTIMEDIA_ADS: {\r\n _.map(_.first(sample.visualData, maxNumberOfRecommendationSamples), (row) => {\r\n values.push(row);\r\n });\r\n break;\r\n }\r\n case RECOMMENDATION_TYPES.SSC_2_PMAX_MIGRATION: {\r\n _.map(_.first(sample.visualData, maxNumberOfRecommendationSamples), (row) => {\r\n values.push([\r\n {\r\n enabledToolTip: true,\r\n toolTipClass: ONE_COLUMN_IN_TABLE,\r\n value: row.campaignName,\r\n },\r\n ]);\r\n });\r\n highlights = [false];\r\n break;\r\n }\r\n case RECOMMENDATION_TYPES.SYNDICATION_GAP: {\r\n _.map(_.first(sample.visualData, maxNumberOfRecommendationSamples), (row) => {\r\n values.push([\r\n {\r\n enabledToolTip: true,\r\n toolTipClass: THREE_COLUMNS_IN_TABLE,\r\n value: row.campaignName,\r\n },\r\n `+${formatDecimal(row.clicksIncrease, i18n)}`,\r\n `+${formatDecimal(row.convIncrease, i18n)}`,\r\n ]);\r\n });\r\n highlights = [false, true, true];\r\n break;\r\n }\r\n default: {\r\n break;\r\n }\r\n }\r\n if (_.size(sample.visualData) > maxNumberOfRecommendationSamples\r\n && type !== RECOMMENDATION_TYPES.DYNAMIC_SEARCH_ADS\r\n && type !== RECOMMENDATION_TYPES.IMPROVE_MULTIMEDIA_ADS) {\r\n values.push(_.map(headers, () => '...'));\r\n }\r\n\r\n if (_.isEmpty(values)) {\r\n headers.pop();\r\n }\r\n\r\n visualData = {\r\n headers,\r\n values,\r\n highlights,\r\n alignments,\r\n columnWidths,\r\n };\r\n }\r\n\r\n // insight\r\n const insight = formatInsight(type, sample, entityName, adGroupName, i18n);\r\n\r\n if (recommendationsCount > 1) {\r\n moreRecommendations = i18n.getString('Summary_Card_More_Recommendations');\r\n viewRecommendations = i18n.getString(\r\n 'Summary_Card_View_Recommendations_Multi',\r\n { n: i18n.formatDecimalToInteger(recommendationsCount) }\r\n );\r\n apply = i18n.getString('Summary_Card_Apply_All');\r\n } else {\r\n moreRecommendations = null;\r\n viewRecommendations = i18n.getString('Summary_Card_View_Recommendations');\r\n apply = i18n.getString('Button_Apply');\r\n }\r\n\r\n return {\r\n sample: {\r\n insightTitle,\r\n insight,\r\n visualType,\r\n visualData,\r\n actionTitle,\r\n actions,\r\n moreRecommendations,\r\n },\r\n viewRecommendations,\r\n apply,\r\n };\r\n};\r\n\r\n/**\r\n * @param {Object} options - options for formatting summary model\r\n * @param {string} options.type - recommendation type\r\n * @param {string} options.level - target level of the recommendation.\r\n * For example, Device bid boost and Location bid boost can target Campaign or AdGroup.\r\n * @param {string} options.scope - current scope user selected in wunderbar\r\n * @param {Object} options.sample - sample data for summary card (insight, actions)\r\n * @param {number} options.recommendationsCount - total count of recommendations\r\n * @param {boolean} options.isHighConverting - if the ALL recommendations for this type\r\n * is HighConverting.\r\n * @param {string} options.currency - currency for current account\r\n * @param {Object} options.i18n - Localization component\r\n * @return {Object} formatted model for React component to render\r\n */\r\nexport const getSummaryCardModel = (options) => {\r\n const summary = formatSummary(options);\r\n const sample = formatSample(options);\r\n\r\n return _.extend(\r\n {\r\n summary,\r\n type: options.type,\r\n level: options.level,\r\n },\r\n sample\r\n );\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\nimport { getDisplayName } from '@bingads-webui-react/hoc-utils';\r\nimport { levelAtConstant } from '@bingads-webui-campaign/scope-constants';\r\n\r\nexport function mapScope(scope) {\r\n const {\r\n accountId,\r\n adGroupId,\r\n campaignId,\r\n customerId,\r\n } = scope;\r\n let levelAt = levelAtConstant.CUSTOMER;\r\n let entityIds = [customerId];\r\n\r\n if (adGroupId) {\r\n levelAt = levelAtConstant.ADGROUP;\r\n entityIds = [adGroupId];\r\n } else if (campaignId) {\r\n levelAt = levelAtConstant.CAMPAIGN;\r\n entityIds = [campaignId];\r\n } else if (accountId) {\r\n levelAt = levelAtConstant.ACCOUNT;\r\n entityIds = [accountId];\r\n }\r\n\r\n return _.defaults({}, scope, {\r\n levelAt,\r\n entityIds,\r\n });\r\n}\r\n\r\nexport const withRecommendationsScope = (WrappedComponent) => {\r\n const HoC = (props) => {\r\n const scope = !_.isEmpty(props.scope) ? mapScope(props.scope) : null;\r\n const key = scope ?\r\n _.first(scope.entityIds) || scope.levelAt :\r\n '';\r\n return (\r\n \r\n );\r\n };\r\n\r\n HoC.displayName = `withRecommendationsScope(${getDisplayName(WrappedComponent)})`;\r\n HoC.propTypes = {\r\n scope: PropTypes.shape({\r\n accountId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n adGroupId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n campaignId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n customerId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n token: PropTypes.string,\r\n }),\r\n };\r\n HoC.defaultProps = {\r\n scope: null,\r\n };\r\n\r\n hoistNonReactStatics(HoC, WrappedComponent);\r\n\r\n return HoC;\r\n};\r\n","import { StateStore } from '@bingads-webui/state-store';\r\n\r\nexport const sharedComponentFunctionStateStore = new StateStore({});\r\n","export const COLUMNS_METRICS = {\r\n budget: 'EstimatedBudget',\r\n impression: 'EstimatedImpressions',\r\n click: 'EstimatedClicks',\r\n conversion: 'EstimatedConversions',\r\n cost: 'EstimatedCost',\r\n};\r\n\r\nexport const defaultColumnMetric = COLUMNS_METRICS.click;\r\n","import ko from 'knockout';\r\nimport _ from 'underscore';\r\n\r\nimport { KoSchema } from '@bingads-webui/ko-schema';\r\n\r\nimport { COLUMNS_METRICS } from '../view/const';\r\n\r\nfunction interpolation(y1, y2, x1, x2, x) {\r\n if (x1 !== x2) {\r\n return (((y1 - y2) / (x1 - x2)) * (x - x2)) + y2;\r\n }\r\n return y2;\r\n}\r\n\r\nexport default class ViewModel {\r\n constructor({\r\n i18n,\r\n headers,\r\n landscapes,\r\n suggestedIndex,\r\n defaultColumnIndex,\r\n defaultRowIndex,\r\n inputRowIndex,\r\n defaultBudgetValue,\r\n rawLandscapeData,\r\n currentDataRowIndex,\r\n minBudget,\r\n maxBudget,\r\n view,\r\n readOnly,\r\n isSharedBudget = false,\r\n }) {\r\n this.view = view;\r\n this.rawSuggestedBudget = rawLandscapeData[suggestedIndex][COLUMNS_METRICS.budget];\r\n this.suggestedBudgetCellValue = landscapes[suggestedIndex][COLUMNS_METRICS.budget];\r\n\r\n this.i18n = i18n;\r\n this.readOnly = readOnly;\r\n this.rawLandscapeData = rawLandscapeData;\r\n this.landscapes = landscapes;\r\n this.suggestedIndex = ko.observable(suggestedIndex);\r\n this.headers = headers;\r\n this.localizedHeaders = _.map(this.headers, header =>\r\n ((isSharedBudget && header === COLUMNS_METRICS.budget) ?\r\n i18n.getString('ColumnName_EstimatedSharedBudget') :\r\n i18n.getString(`ColumnName_${header}`)));\r\n this.isForecasting = view.isForecasting;\r\n this.selectedRowIndex = ko.observable(defaultRowIndex);\r\n this.inputRowSelected = ko.computed(() => this.selectedRowIndex() === inputRowIndex);\r\n this.currentRowIndex = ko.observable(currentDataRowIndex);\r\n this.isCurrentDataRowSelected\r\n = ko.computed(() => this.selectedRowIndex() === currentDataRowIndex);\r\n this.inputBudget = ko.observable(defaultBudgetValue);\r\n this.estimationKPIArray = ko.observable(this.getEstimationsRowData().raw);\r\n this.estimationKPIFormattedArray = ko.observable(this.getEstimationsRowData().formatted);\r\n this.showTipMessage = ko.computed(() => {\r\n if (this.inputRowSelected()) {\r\n if (this.estimationKPIArray().length > 0) {\r\n return this.inputBudget() < this.rawSuggestedBudget;\r\n }\r\n return false;\r\n }\r\n\r\n const selectedBudget = this.rawLandscapeData[this.selectedRowIndex()][COLUMNS_METRICS.budget];\r\n return selectedBudget < this.rawSuggestedBudget;\r\n });\r\n\r\n if (view.fromBudgetColumn) {\r\n this.userInputDisplayVal = ko.observable(this.i18n.formatDecimal(view.currentBudget, {\r\n minimumFractionDigits: 2,\r\n maximumFractionDigits: 2,\r\n }));\r\n this.isInputing = ko.observable(true);\r\n this.tipMessage = this.isForecasting ?\r\n i18n.getString('BudgetLandscape_Table_Budget_Tip_Forecasting').replace('{0}', this.suggestedBudgetCellValue) : // eslint-disable-line\r\n i18n.getString('BudgetLandscape_Table_Budget_Tip_Recovery').replace('{0}', this.suggestedBudgetCellValue); // eslint-disable-line\r\n } else {\r\n this.userInputDisplayVal = ko.observable('');\r\n this.isInputing = ko.observable(false);\r\n this.tipMessage = i18n.getString('BudgetLandscape_Table_Budget_Tip').replace('{0}', this.suggestedBudgetCellValue); // eslint-disable-line\r\n this.selectedColumnIndex = ko.observable(defaultColumnIndex);\r\n this.conversionSelected\r\n = ko.computed(() => this.headers[this.selectedColumnIndex()] === COLUMNS_METRICS.conversion); // eslint-disable-line\r\n this.chartTitle = ko.computed(() => {\r\n const selectedHeader = this.headers[this.selectedColumnIndex()];\r\n\r\n return isSharedBudget && selectedHeader === COLUMNS_METRICS.budget ?\r\n i18n.getString('ColumnName_EstimatedSharedBudget') :\r\n i18n.getString(`ColumnName_${selectedHeader}`);\r\n });\r\n this.selectedColumnData =\r\n ko.computed(() => _.pluck(this.rawLandscapeData, this.headers[this.selectedColumnIndex()]));\r\n }\r\n\r\n this.isInputing.subscribe((value) => {\r\n if (value) {\r\n this.selectedRowIndex(inputRowIndex);\r\n }\r\n });\r\n this.userInputDisplayVal.subscribe((value) => {\r\n this.inputBudget(i18n.isValidDecimal(value) ? i18n.parseDecimal(value) : value);\r\n this.inputBudget.validate();\r\n\r\n // need check if defaultValue\r\n if (this.inputBudget() !== '' && this.inputBudget.isValid()) {\r\n const { raw, formatted } = this.getEstimationsRowData();\r\n this.estimationKPIArray(raw);\r\n this.estimationKPIFormattedArray(formatted);\r\n } else {\r\n this.estimationKPIArray([]);\r\n this.estimationKPIFormattedArray([]);\r\n }\r\n });\r\n\r\n // validation\r\n const schema = {\r\n properties: {\r\n inputBudget: {\r\n type: 'number',\r\n required: true,\r\n default: '',\r\n minimum: minBudget,\r\n maximum: maxBudget,\r\n },\r\n },\r\n };\r\n KoSchema(this, schema, _.keys(schema.properties), {}, {}, i18n);\r\n this.inputBudget.validators.type.message = i18n.getString('ErrorMessage_InputNumericValue');\r\n this.inputBudget.validators.range.message\r\n = i18n.getString('BudgetSuggestionsValidationMsg')\r\n .replace('{0}', minBudget)\r\n .replace('{1}', i18n.currency)\r\n .replace('{2}', maxBudget)\r\n .replace('{3}', i18n.currency);\r\n this.inputBudget.validators.decimalLength.message = i18n.getString('Validation_Number_Max_Length');\r\n\r\n this.errorMessage = ko.observable('');\r\n this.showErrorMessage = ko.computed(() => {\r\n if (this.inputRowSelected() && !this.inputBudget.isValid()) {\r\n this.errorMessage(_.first(this.inputBudget.errors()));\r\n return true;\r\n }\r\n return false;\r\n });\r\n }\r\n\r\n getTableCellText(landscape, property, columnIndexExcludeRadio) {\r\n const val = landscape[property];\r\n if (columnIndexExcludeRadio === 0) {\r\n if (landscape.isSuggested) {\r\n return `${val} ${this.i18n.getString('BudgetLandscape_Comment_Recommended')}`;\r\n } else if (landscape.isCurrent) {\r\n return `${val} ${this.i18n.getString('BudgetLandscape_Comment_Current')}`;\r\n }\r\n }\r\n return val;\r\n }\r\n\r\n getTabelCellId(property, columnIndex, rowIndex) {\r\n if (columnIndex > 0 && property === 'EstimatedBudget') {\r\n return `EstimatedBudget-${rowIndex}`;\r\n }\r\n return `${property}-${rowIndex}`;\r\n }\r\n\r\n getCustomInputBudgetAriaLabel() {\r\n return this.i18n.getString('BudgetLandscape_Table_CustomInput');\r\n }\r\n\r\n getEstimationsRowData() {\r\n if (this.inputBudget() === '') {\r\n return { raw: [], formatted: [] };\r\n }\r\n\r\n let data;\r\n const inputBudget = this.inputBudget();\r\n const estimationHeaders = _.rest(this.headers); // exclude first\r\n const sorted = _.sortBy(this.rawLandscapeData, COLUMNS_METRICS.budget); // ascending\r\n const minPoint = sorted[0];\r\n const maxPoint = sorted[sorted.length - 1];\r\n const minBudget = minPoint[COLUMNS_METRICS.budget];\r\n const maxBudget = maxPoint[COLUMNS_METRICS.budget];\r\n\r\n if (inputBudget >= maxBudget) {\r\n data = _.map(estimationHeaders, header => maxPoint[header]);\r\n } else if (inputBudget <= minBudget) {\r\n data = _.map(\r\n estimationHeaders,\r\n header => (\r\n interpolation(\r\n 0, minPoint[header], // y1, y2\r\n 0, minPoint[COLUMNS_METRICS.budget], // x1, x2\r\n inputBudget\r\n )\r\n )\r\n );\r\n } else {\r\n const nextPointIndex =\r\n _.findIndex(sorted, point => point[COLUMNS_METRICS.budget] >= inputBudget);\r\n const previousPoint = sorted[nextPointIndex - 1];\r\n const nextPoint = sorted[nextPointIndex];\r\n\r\n data = _.map(\r\n estimationHeaders,\r\n header => (\r\n interpolation(\r\n previousPoint[header], nextPoint[header], // y1, y2\r\n previousPoint[COLUMNS_METRICS.budget], nextPoint[COLUMNS_METRICS.budget], // x1, x2\r\n inputBudget\r\n )\r\n )\r\n );\r\n }\r\n\r\n return {\r\n raw: data,\r\n formatted: _.map(estimationHeaders, (header, index) =>\r\n this.view.getFormattedTableCell(header, data[index])),\r\n };\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport _ from 'underscore';\r\nimport ko from 'knockout';\r\n\r\nimport {\r\n formatCost,\r\n formatBid,\r\n formatInteger,\r\n NOT_AVAILABLE_DEFAULT_STR,\r\n CONVERSION_STATUS_TYPE,\r\n} from '@bingads-webui-campaign/recommendation-core';\r\nimport { addRecommendationAlertPopup } from '@bingads-webui-campaign-react/recommendation-alert-popup';\r\nimport { triggerContainerResizing } from '@bingads-webui-campaign-react/virtual-scrollbar-recalculate-trigger';\r\n\r\nimport ViewModel from '../viewmodel/table';\r\nimport template from '../template/table.pug';\r\nimport templateForInlineEditor from '../template/tableForInlineEditor.pug';\r\n\r\nimport { COLUMNS_METRICS, defaultColumnMetric } from './const';\r\n\r\nconst COMMENT_TYPES = {\r\n SUGGESTED: 'Suggested',\r\n CURRENT: 'Current',\r\n MAXVALUE: 'MaxValue',\r\n};\r\nexport const KEYSENTER = 13;\r\n\r\nexport class BudgetLandScapeTable extends Backbone.View {\r\n initialize({\r\n opportunityData,\r\n i18n,\r\n conversionSummaryStatus,\r\n appConfig,\r\n currentBudget = null,\r\n fromBudgetColumn = false,\r\n fromCampaignTab = false,\r\n view = null,\r\n readOnly,\r\n isSharedBudget = false,\r\n // need these configuration for shell ui\r\n budgetRange = null,\r\n permissions = {},\r\n }) {\r\n this.view = view;\r\n this.opportunityId = opportunityData.OpportunityId;\r\n this.campaignId = opportunityData.Target && opportunityData.Target.CampaignId;\r\n this.opportunityData = opportunityData;\r\n this.landscapeData = _.filter(opportunityData.Landscapes, ({\r\n Comment,\r\n }) => Comment !== COMMENT_TYPES.MAXVALUE);\r\n this.currentBudget = currentBudget;\r\n this.fromBudgetColumn = fromBudgetColumn;\r\n this.fromCampaignTab = fromCampaignTab;\r\n this.i18n = i18n;\r\n this.conversionSummaryStatus = conversionSummaryStatus;\r\n this.isForecasting = opportunityData.IsForecasting;\r\n this.permissions = permissions;\r\n\r\n if (appConfig) {\r\n this.minBudget = appConfig.get('BudgetRange').DailyRange.FloorValue;\r\n this.maxBudget = appConfig.get('BudgetRange').DailyRange.CeilingValue;\r\n } else if (budgetRange) {\r\n this.minBudget = budgetRange.FloorValue;\r\n this.maxBudget = budgetRange.CeilingValue;\r\n }\r\n\r\n this.config = this.getTableConfig();\r\n const {\r\n headers,\r\n landscapes,\r\n suggestedIndex,\r\n currentDataRowIndex,\r\n defaultColumnIndex,\r\n defaultRowIndex,\r\n inputRowIndex,\r\n defaultBudgetValue,\r\n } = this.config;\r\n\r\n this.feedbackPersonalizedPopup = null;\r\n this.isInProductFeedbackLoopOn =\r\n permissions.IsRecommendationInProductFeedbackLoopEnabled &&\r\n opportunityData.IsFeedbackPersonalized;\r\n\r\n this.ko_model = new ViewModel({\r\n rawLandscapeData: this.landscapeData,\r\n i18n,\r\n headers,\r\n landscapes,\r\n suggestedIndex,\r\n currentDataRowIndex,\r\n defaultColumnIndex,\r\n defaultRowIndex,\r\n inputRowIndex,\r\n defaultBudgetValue,\r\n view: this,\r\n readOnly,\r\n isSharedBudget,\r\n minBudget: this.minBudget,\r\n maxBudget: this.maxBudget,\r\n });\r\n if (!this.fromBudgetColumn) {\r\n this.ko_model.selectedRowIndex.subscribe(() => {\r\n this.trigger('selectedRowChanged');\r\n });\r\n this.ko_model.selectedColumnIndex.subscribe(() => {\r\n this.trigger('selectedColumnChanged');\r\n });\r\n this.ko_model.estimationKPIArray.subscribe(() => {\r\n this.trigger('estimationChanged');\r\n });\r\n }\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click thead th': 'onColumnClicked',\r\n 'click tbody td': 'onColumnClicked',\r\n 'click tbody tr': 'onRowClicked',\r\n 'keydown .user-input-cell input': 'onKeyboardCustomInput',\r\n };\r\n }\r\n\r\n isValid() {\r\n if (this.ko_model.inputRowSelected()) {\r\n this.ko_model.validate();\r\n return !this.ko_model.showErrorMessage();\r\n }\r\n return true;\r\n }\r\n\r\n onColumnClicked(e) {\r\n if (this.fromBudgetColumn) {\r\n return;\r\n }\r\n const { cellIndex } = e.currentTarget;\r\n // cellIndex === 0 indicates the radio column\r\n if (cellIndex !== 0) {\r\n this.ko_model.selectedColumnIndex(e.currentTarget.cellIndex - 1);\r\n }\r\n }\r\n\r\n onRowClicked(e) {\r\n // e.currentTarget.rowIndex is from 1\r\n this.ko_model.selectedRowIndex(e.currentTarget.rowIndex - 1);\r\n }\r\n\r\n onKeyboardCustomInput(e) {\r\n if (e && e.which === KEYSENTER) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.trigger('saveCustomValueWithKeyboard');\r\n }\r\n }\r\n\r\n render() {\r\n if (this.fromBudgetColumn) {\r\n this.$el.html(templateForInlineEditor({\r\n i18n: this.i18n,\r\n currencySymbolClassName: `symbol-size-${this.i18n.getCurrencySymbol().length}`,\r\n currencySymbol: this.i18n.getCurrencySymbol(),\r\n notAvailableStr: NOT_AVAILABLE_DEFAULT_STR,\r\n }));\r\n\r\n if (this.view) {\r\n this.view.$('.input-budget-container').hide();\r\n this.view.$('.select-budget-container').attr('class', 'select-budget-container-with-landscape');\r\n }\r\n } else {\r\n this.$el.html(template({\r\n i18n: this.i18n,\r\n placeHolderText: this.i18n.getString('BudgetLandscape_Table_CustomInput'),\r\n currencySymbol: this.i18n.getCurrencySymbol(),\r\n notAvailableStr: NOT_AVAILABLE_DEFAULT_STR,\r\n }));\r\n }\r\n ko.applyBindings(this.ko_model, this.el);\r\n\r\n if (this.isInProductFeedbackLoopOn) {\r\n addRecommendationAlertPopup({\r\n alertMsg: this.i18n.getString('Recommendation_AlertMsg_FeedbackPersonalized'),\r\n iconClass: 'iconba-Insights',\r\n position: 'right',\r\n container: this.$el.find('.tooltip-container').get(0),\r\n });\r\n }\r\n\r\n if (this.fromCampaignTab) {\r\n triggerContainerResizing();\r\n }\r\n return this;\r\n }\r\n\r\n isSuggested() {\r\n return this.ko_model.selectedRowIndex() === this.config.suggestedIndex;\r\n }\r\n\r\n getSelectedNewBudget() {\r\n const selectedRow = this.ko_model.selectedRowIndex();\r\n if (selectedRow < this.landscapeData.length && selectedRow >= 0) {\r\n return this.landscapeData[selectedRow][COLUMNS_METRICS.budget];\r\n }\r\n return this.ko_model.inputBudget();\r\n }\r\n\r\n getViewModel() {\r\n return this.ko_model;\r\n }\r\n\r\n formatIntegerValue(value) {\r\n if (value < 1000) {\r\n return formatInteger(value, this.i18n);\r\n }\r\n // this is to reuse the formatBid to always 2 decimals\r\n return formatBid(value, this.i18n);\r\n }\r\n\r\n getFormattedTableCell(header, value) {\r\n let result;\r\n\r\n switch (header) {\r\n case COLUMNS_METRICS.budget:\r\n result = this.i18n.formatCurrency(value);\r\n break;\r\n case COLUMNS_METRICS.cost:\r\n result = formatCost(value, this.i18n, this.i18n.currency);\r\n break;\r\n case COLUMNS_METRICS.conversion:\r\n result = this.conversionSummaryStatus === CONVERSION_STATUS_TYPE.HAS_DATA ?\r\n this.formatIntegerValue(value, this.i18n) : NOT_AVAILABLE_DEFAULT_STR;\r\n break;\r\n default:\r\n result = this.formatIntegerValue(value, this.i18n);\r\n break;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n getTableConfig() {\r\n const { landscapeData } = this;\r\n const currentBudget = this.fromCampaignTab ?\r\n this.currentBudget : this.opportunityData.CurrentBudget;\r\n let suggestedIndex = -1;\r\n let currentDataRowIndex = -1;\r\n let headers = [\r\n COLUMNS_METRICS.budget,\r\n COLUMNS_METRICS.impression,\r\n COLUMNS_METRICS.click,\r\n COLUMNS_METRICS.conversion,\r\n COLUMNS_METRICS.cost,\r\n ];\r\n\r\n if (this.fromBudgetColumn) {\r\n headers = _.without(headers, COLUMNS_METRICS.impression, COLUMNS_METRICS.cost);\r\n\r\n if (this.conversionSummaryStatus !== CONVERSION_STATUS_TYPE.HAS_DATA) {\r\n headers = _.without(headers, COLUMNS_METRICS.conversion);\r\n }\r\n }\r\n\r\n const defaultColumnIndex = _.findIndex(headers, header => header === defaultColumnMetric);\r\n\r\n const formattedData = _.map(landscapeData, (landscape, index) => {\r\n const { Comment } = landscape;\r\n\r\n const isSuggested = Comment === COMMENT_TYPES.SUGGESTED;\r\n if (isSuggested) {\r\n suggestedIndex = index;\r\n }\r\n const isCurrent = landscape.EstimatedBudget === currentBudget;\r\n if (isCurrent) {\r\n currentDataRowIndex = index;\r\n }\r\n\r\n const result = {\r\n rawBudget: landscape[COLUMNS_METRICS.budget],\r\n isSuggested,\r\n isCurrent,\r\n currentDataRowIndex,\r\n };\r\n _.each(headers, (header) => {\r\n result[header] = this.getFormattedTableCell(header, landscape[header]);\r\n });\r\n return result;\r\n });\r\n\r\n // For inline budget suggestion view:\r\n // 1. will not show current budget row because current budget showed in input row\r\n // 2. default selected is input row\r\n // 3. input field need to be current budget value\r\n return {\r\n headers,\r\n landscapes: formattedData,\r\n suggestedIndex,\r\n currentDataRowIndex,\r\n defaultColumnIndex,\r\n defaultRowIndex: this.fromBudgetColumn ? formattedData.length : suggestedIndex,\r\n inputRowIndex: formattedData.length,\r\n defaultBudgetValue: this.fromBudgetColumn ? currentBudget.toString() : '',\r\n };\r\n }\r\n}\r\n","import _ from 'underscore';\r\n\r\nimport tooltipTemplate from '../template/tooltip.pug';\r\n\r\nconst styles = {\r\n chartColorBlue: '#0078D4',\r\n chartColorDarkBlue: '#eee',\r\n chartColorLightBlue: 'rgba(135, 206, 250, 1)',\r\n};\r\n\r\nconst barChartOptions = {\r\n chart: {\r\n type: 'bar',\r\n marginLeft: 0,\r\n marginTop: 0,\r\n marginBottom: 0,\r\n },\r\n title: {\r\n text: null,\r\n },\r\n yAxis: {\r\n tickPositions: [],\r\n gridLineWidth: 0,\r\n },\r\n legend: {\r\n enabled: false,\r\n },\r\n credits: {\r\n enabled: false,\r\n },\r\n tooltip: {\r\n enabled: true,\r\n formatter: null,\r\n },\r\n plotOptions: {\r\n bar: {\r\n animation: false,\r\n pointWidth: 25,\r\n },\r\n series: {\r\n cursor: 'pointer',\r\n point: {\r\n events: {\r\n click: null,\r\n },\r\n },\r\n states: {\r\n hover: {\r\n enabled: false,\r\n },\r\n inactive: {\r\n enabled: false,\r\n },\r\n },\r\n },\r\n },\r\n};\r\n\r\nexport function initChart({\r\n seriesName,\r\n i18n,\r\n selectedRowIndex,\r\n points,\r\n onPointClicked,\r\n budgetPoints,\r\n isBudgetColumnSelected,\r\n}) {\r\n const chartOptions = _.clone(barChartOptions);\r\n\r\n const spaceBetweenBar = 5;\r\n const pointWidthWithPadding = chartOptions.plotOptions.bar.pointWidth + spaceBetweenBar;\r\n // 4 is for space between chart outer line and first/last bar to ensure space between bar is 5px.\r\n chartOptions.chart.height = (points.length * pointWidthWithPadding) + 4;\r\n\r\n chartOptions.colors = [styles.chartColorLightBlue, styles.chartColorDarkBlue];\r\n let seriesColorChanged = false;\r\n const stylesChartColor = styles.chartColorBlue;\r\n const mappedResult = _.map(points, (point, index) => {\r\n const color = index === selectedRowIndex ? stylesChartColor : styles.chartColorDarkBlue;\r\n if (!seriesColorChanged) {\r\n chartOptions.colors = [styles.chartColorDarkBlue, stylesChartColor];\r\n seriesColorChanged = true;\r\n }\r\n return {\r\n color,\r\n y: point,\r\n };\r\n }, this);\r\n\r\n const dataMin = 0; // for the custom input\r\n const dataMax = Math.ceil(mappedResult[0].y);\r\n const positions = [];\r\n\r\n const increment = Math.ceil((dataMax - dataMin) / 40) * 10;\r\n for (let tick = 0; tick - increment < dataMax; tick += increment) {\r\n positions.push(tick);\r\n }\r\n chartOptions.yAxis.tickPositions = positions;\r\n\r\n chartOptions.series = [{\r\n name: seriesName,\r\n data: mappedResult,\r\n }];\r\n\r\n /* eslint-disable func-names */\r\n chartOptions.plotOptions.series.point.events.click = function (event) {\r\n event.stopImmediatePropagation();\r\n onPointClicked(event, this.x);\r\n };\r\n\r\n chartOptions.tooltip.formatter = function () {\r\n const value = i18n.formatDecimal(this.y);\r\n return tooltipTemplate({\r\n name: this.series.name,\r\n value,\r\n primaryMetricName: i18n.getString('ColumnName_EstimatedBudget'),\r\n primaryMetricValue: budgetPoints[this.x],\r\n showPrimaryMetric: !isBudgetColumnSelected,\r\n });\r\n };\r\n /* eslint-enable func-names */\r\n return chartOptions;\r\n}\r\n","import Backbone from 'backbone';\r\nimport ko from 'knockout';\r\nimport _ from 'underscore';\r\nimport 'highcharts';\r\n\r\nimport {\r\n CONVERSION_STATUS_TYPE,\r\n} from '@bingads-webui-campaign/recommendation-core';\r\n\r\nimport template from '../template/chart.pug';\r\nimport uetLinkTemplate from '../template/uet-link.pug';\r\nimport { initChart } from './chart-config';\r\nimport { COLUMNS_METRICS } from './const';\r\n\r\nexport class BudgetLandScapeChart extends Backbone.View {\r\n initialize({\r\n tableViewmodel,\r\n i18n,\r\n conversionSummaryStatus,\r\n legacyRouter,\r\n }) {\r\n this.tableViewmodel = tableViewmodel;\r\n this.i18n = i18n;\r\n this.conversionSummaryStatus = conversionSummaryStatus;\r\n this.legacyRouter = legacyRouter;\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click .uet-link': 'goToUET',\r\n };\r\n }\r\n\r\n goToUET() {\r\n this.legacyRouter.navigateToRoute('uettag');\r\n this.trigger('close_poputil');\r\n }\r\n\r\n render() {\r\n this.$el.html(template({\r\n i18n: this.i18n,\r\n noUET: this.conversionSummaryStatus === CONVERSION_STATUS_TYPE.NO_UET,\r\n noData: this.conversionSummaryStatus === CONVERSION_STATUS_TYPE.NO_DATA,\r\n uetLink: uetLinkTemplate({ i18n: this.i18n }),\r\n }));\r\n ko.applyBindings(this.tableViewmodel, this.el);\r\n\r\n // delay draw graph when view is rendered on page, otherwise chart width doesn't respect parent.\r\n _.defer(() => {\r\n this.redraw();\r\n });\r\n return this;\r\n }\r\n\r\n onPointClicked(e, x) {\r\n this.tableViewmodel.selectedRowIndex(x);\r\n }\r\n\r\n redraw() {\r\n const selectedColumnIndex = this.tableViewmodel.selectedColumnIndex();\r\n const isBudgetColumnSelected = selectedColumnIndex === 0;\r\n\r\n const estimations = this.tableViewmodel.estimationKPIArray();\r\n const budgetPoint = _.isEmpty(estimations) ? 0 : this.tableViewmodel.inputBudget();\r\n const selectedEstimationPoint = selectedColumnIndex === 0\r\n ? budgetPoint : (estimations[selectedColumnIndex - 1] || 0);\r\n\r\n const budgetPoints =\r\n _.pluck(this.tableViewmodel.landscapes, COLUMNS_METRICS.budget)\r\n .concat(budgetPoint);\r\n const points =\r\n this.tableViewmodel.selectedColumnData()\r\n .concat(selectedEstimationPoint);\r\n\r\n this.$('.column-chart-container').highcharts(initChart({\r\n seriesName: this.tableViewmodel.chartTitle(),\r\n selectedRowIndex: this.tableViewmodel.selectedRowIndex(),\r\n budgetPoints,\r\n points,\r\n i18n: this.i18n,\r\n onPointClicked: this.onPointClicked.bind(this),\r\n isBudgetColumnSelected,\r\n }));\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport _ from 'underscore';\r\nimport ko from 'knockout';\r\n\r\nimport {\r\n withContextualAttributeTemplate,\r\n showContextualAttribute,\r\n hideContextualAttribute,\r\n prependAccountAttribute\r\n} from '@bingads-webui-campaign/recommendation-contextual-attribute';\r\nimport { APPLY_USERINPUT_TYPES, CONTEXTUAL_ENTITY_TYPE } from '@bingads-webui-campaign/recommendation-core';\r\n\r\nimport template from '../template/index.pug';\r\nimport { BudgetLandScapeTable } from './table';\r\nimport { BudgetLandScapeChart } from './chart';\r\n\r\nexport class RecommendationInlineBudgetView extends Backbone.View {\r\n initialize({\r\n data,\r\n i18n,\r\n deps,\r\n router,\r\n isMCC,\r\n gridView,\r\n readOnly,\r\n isSharedBudget = false,\r\n gridService,\r\n }) {\r\n this.opportunityData = _.first(data.Opportunities);\r\n this.i18n = i18n;\r\n this.data = data;\r\n this.deps = deps;\r\n this.router = router;\r\n this.isMCC = isMCC;\r\n this.isSharedBudget = isSharedBudget;\r\n this.grid = { gridView };\r\n this.gridService = gridService;\r\n\r\n const conversionSummaryStatus = data.ConversionSummaryStatus;\r\n this.tableView = new BudgetLandScapeTable({\r\n i18n,\r\n conversionSummaryStatus,\r\n opportunityData: this.opportunityData,\r\n appConfig: deps.appConfig,\r\n readOnly,\r\n isSharedBudget,\r\n permissions: deps.permissions,\r\n });\r\n this.chartView = new BudgetLandScapeChart({\r\n tableViewmodel: this.tableView.getViewModel(),\r\n i18n,\r\n conversionSummaryStatus,\r\n legacyRouter: deps.legacyRouter,\r\n });\r\n this.tableView.on('selectedRowChanged selectedColumnChanged estimationChanged', () => {\r\n this.chartView.redraw();\r\n });\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click .apply': this.apply,\r\n 'click .cancel': this.cancel,\r\n 'mouseover .recommendation-inline-budget-view .contextual-tooltip': 'showContextualAttributePopup',\r\n 'mouseout .recommendation-inline-budget-view .contextual-tooltip': 'hideContextualAttributePopup',\r\n 'click .recommendation-inline-budget-view .contextual-tooltip': 'scopeRouting',\r\n };\r\n }\r\n\r\n scopeRouting(e) {\r\n this.router(e);\r\n }\r\n\r\n hideContextualAttributePopup(e) {\r\n clearTimeout(this.timerForPopupContextualAttribute);\r\n hideContextualAttribute({ e, self: this });\r\n }\r\n\r\n showContextualAttributePopup(e) {\r\n clearTimeout(this.timerForPopupContextualAttribute);\r\n this.timerForPopupContextualAttribute = setTimeout(() => {\r\n showContextualAttribute({\r\n deps: this.deps,\r\n i18n: this.i18n,\r\n e,\r\n type: this.data.OpportunityType,\r\n isExpanding: true,\r\n self: this,\r\n recommendationService: this.gridService.recommendationService,\r\n });\r\n }, 500);\r\n }\r\n\r\n render() {\r\n const { BudgetType, Shared } = this.opportunityData;\r\n const entity = withContextualAttributeTemplate({\r\n opportunityId: this.data.Opportunities[0].OpportunityId,\r\n entityName: this.isSharedBudget ?\r\n Shared.BudgetName : this.data.Target.CampaignName,\r\n entityId: this.isSharedBudget ?\r\n Shared.BudgetId : this.data.Target.CampaignId,\r\n entityType: this.isSharedBudget ?\r\n CONTEXTUAL_ENTITY_TYPE.SHARED_BUDGET : CONTEXTUAL_ENTITY_TYPE.CAMPAIGN,\r\n status: 'false', // to check whether it is 1st time to create this view\r\n isExpandingView: true,\r\n ariaLabel: this.isSharedBudget ?\r\n '' : this.i18n.getString('Click to scope to campaign {{campaignName}}', { campaignName: this.data.Target.CampaignName }),\r\n });\r\n\r\n this.$el.html(template({\r\n entityName: this.isMCC ? prependAccountAttribute({\r\n originEntity: entity,\r\n opportunityId: this.data.Opportunities[0].OpportunityId,\r\n accountId: this.data.Target.AccountId,\r\n accountName: this.data.Target.AccountName,\r\n }) : entity,\r\n budgetType: BudgetType,\r\n i18n: this.i18n,\r\n isSharedBudget: this.isSharedBudget,\r\n }));\r\n this.$('.landscape-table').html(this.tableView.render().el);\r\n this.$('.landscape-chart').html(this.chartView.render().el);\r\n\r\n ko.applyBindings(this.tableView.getViewModel(), this.$('.budget-landscape-actions')[0]);\r\n\r\n return this;\r\n }\r\n\r\n apply() {\r\n if (this.tableView.isValid()) {\r\n let userInputs = null;\r\n if (!this.tableView.isSuggested()) {\r\n userInputs = [{\r\n '@odata.type': APPLY_USERINPUT_TYPES[this.opportunityData.OpportunityType],\r\n OpportunityId: this.opportunityData.OpportunityId,\r\n NewBudget: this.tableView.getSelectedNewBudget(),\r\n }];\r\n }\r\n\r\n this.trigger('apply', _.extend({\r\n opportunities: [this.opportunityData],\r\n }, userInputs && {\r\n userInputs,\r\n }));\r\n }\r\n }\r\n\r\n cancel() {\r\n this.trigger('cancel');\r\n }\r\n\r\n hasChanged() {\r\n return this.tableView.ko_model.selectedRowIndex() !== this.tableView.config.suggestedIndex;\r\n }\r\n\r\n remove() {\r\n this.chartView.remove();\r\n this.tableView.remove();\r\n super.remove();\r\n }\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { LearnMoreLink } from '@bingads-webui-campaign-react/help';\r\nimport { MessageBar, MessageBarType } from '@bingads-webui-react/fabric-control';\r\nimport {\r\n recommendationInProductUpdateConfigs,\r\n} from '@bingads-webui-campaign/recommendation-core';\r\n\r\nexport class WarnNotificationBanner extends React.PureComponent {\r\n static propTypes = {\r\n type: PropTypes.string.isRequired,\r\n preferencesService: PropTypes.objectOf(PropTypes.any),\r\n newI18n: PropTypes.PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n cid: PropTypes.number.isRequired,\r\n uid: PropTypes.number.isRequired,\r\n aid: PropTypes.number.isRequired,\r\n isMCC: PropTypes.bool.isRequired,\r\n dataService: PropTypes.shape({\r\n setAutoApplyOptInStatus: PropTypes.func.isRequired,\r\n }).isRequired,\r\n initializeMiniGrid: PropTypes.func,\r\n isFromSummary: PropTypes.bool,\r\n isAutoApplyOptIn: PropTypes.bool,\r\n };\r\n\r\n static defaultProps = {\r\n preferencesService: null,\r\n isFromSummary: false,\r\n initializeMiniGrid: _.noop,\r\n isAutoApplyOptIn: false,\r\n };\r\n\r\n componentDidMount() {\r\n const {\r\n isFromSummary,\r\n initializeMiniGrid,\r\n } = this.props;\r\n\r\n if (isFromSummary) {\r\n initializeMiniGrid();\r\n }\r\n }\r\n\r\n render() {\r\n const {\r\n type, preferencesService, newI18n, cid, aid, uid, isMCC, isAutoApplyOptIn,\r\n } = this.props;\r\n const config = recommendationInProductUpdateConfigs[type];\r\n\r\n return (\r\n
\r\n { preferencesService && config &&\r\n config.warnNotification &&\r\n (config.warnNotificationInMCC === true ||\r\n (config.warnNotificationInMCC !== true && !isMCC)) && !isAutoApplyOptIn &&\r\n
\r\n \r\n \r\n {config.warnHelpInfo &&\r\n \r\n }\r\n \r\n
\r\n }\r\n
\r\n );\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport {\r\n getRecommendationPreferences,\r\n saveRecommendationPreferences,\r\n recommendationInProductUpdateConfigs,\r\n} from '@bingads-webui-campaign/recommendation-core';\r\nimport { IN_PRODUCT_UPDATE_RECOMMENDATIONS_VIEW_TIME } from '@bingads-webui-campaign/recommendation-preferences';\r\n\r\nexport function isShowNotificationBannerInTargetRecommendations(preferencesService, type) {\r\n const config = recommendationInProductUpdateConfigs[type];\r\n if (!_.isUndefined(config) &&\r\n !_.isUndefined(config.neverExpired) &&\r\n config.neverExpired === true) {\r\n return true;\r\n }\r\n const data = getRecommendationPreferences(preferencesService);\r\n const firstViewTime = data[IN_PRODUCT_UPDATE_RECOMMENDATIONS_VIEW_TIME.FirstViewTime];\r\n\r\n // if current time is more than 30 days after the first view time, disable it.\r\n if (firstViewTime && firstViewTime[type]) {\r\n return (Date.now() - firstViewTime[type]) < 30 * 24 * 3600 * 1000;\r\n }\r\n return false;\r\n}\r\n\r\nexport function judgeWhetherUserFirstViewNotificationBanner(preferencesService, type) {\r\n const data = getRecommendationPreferences(preferencesService);\r\n const firstViewTime =\r\n data[IN_PRODUCT_UPDATE_RECOMMENDATIONS_VIEW_TIME.FirstViewTime]; // true if viewed\r\n\r\n // we would restore for all types of recommendations\r\n return _.isUndefined(firstViewTime) || _.isUndefined(firstViewTime[type]);\r\n}\r\n\r\nexport function recordUserFirstViewTimeOfNotificationBanner(preferencesService, type) {\r\n // for e.g. firstViewTime[RAD] = 100000000, save into preference for that user\r\n saveRecommendationPreferences(\r\n {\r\n [IN_PRODUCT_UPDATE_RECOMMENDATIONS_VIEW_TIME.FirstViewTime]: { [type]: Date.now() },\r\n },\r\n preferencesService\r\n );\r\n}\r\n\r\nexport function isInProductUpdateBannerAvailable(type, permissions, summary) {\r\n if (recommendationInProductUpdateConfigs[type]) {\r\n const config = recommendationInProductUpdateConfigs[type];\r\n return (permissions[config.permission] && summary[config.available]);\r\n }\r\n return false;\r\n}\r\n\r\nexport function isAdditionalPitchingAvailable(type, permissions, summary) {\r\n if (recommendationInProductUpdateConfigs[type]) {\r\n const config = recommendationInProductUpdateConfigs[type];\r\n if (config.additionalPitchingEnabledBy === 'permission') {\r\n return permissions[config.permission];\r\n } else if (config.additionalPitchingEnabledBy === 'available') {\r\n return summary[config.available];\r\n }\r\n return false;\r\n }\r\n return false;\r\n}\r\n","/* eslint-disable no-nested-ternary */\r\n/* eslint-disable no-undef */\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 { TooltipHost, TooltipOverflowMode, DirectionalHint } from '@bingads-webui-react/fabric-control';\r\nimport {\r\n recommendationInProductUpdateConfigs,\r\n} from '@bingads-webui-campaign/recommendation-core';\r\nimport { judgeWhetherUserFirstViewNotificationBanner,\r\n isShowNotificationBannerInTargetRecommendations,\r\n recordUserFirstViewTimeOfNotificationBanner,\r\n} from './utils';\r\n\r\nexport class InProdUpdateNotificationBanner extends React.PureComponent {\r\n static propTypes = {\r\n type: PropTypes.string.isRequired,\r\n preferencesService: PropTypes.objectOf(PropTypes.any),\r\n i18n: PropTypes.PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n additionalArgs: PropTypes.objectOf(PropTypes.any),\r\n };\r\n\r\n static defaultProps = {\r\n preferencesService: null,\r\n additionalArgs: {},\r\n };\r\n\r\n render() {\r\n const {\r\n type, preferencesService, i18n, additionalArgs,\r\n } = this.props;\r\n if (preferencesService &&\r\n judgeWhetherUserFirstViewNotificationBanner(preferencesService, type)) {\r\n recordUserFirstViewTimeOfNotificationBanner(preferencesService, type);\r\n }\r\n const config = recommendationInProductUpdateConfigs[type];\r\n\r\n let notification = null;\r\n if (config) {\r\n if (config.needAdditionalArgs === true) {\r\n if (!_.isEmpty(additionalArgs)) {\r\n notification = i18n.getString(config.notification, additionalArgs);\r\n }\r\n } else {\r\n notification = i18n.getString(config.notification);\r\n }\r\n }\r\n\r\n return (\r\n
\r\n { preferencesService && config && notification &&\r\n isShowNotificationBannerInTargetRecommendations(preferencesService, type) &&\r\n
\r\n
\r\n \r\n {notification}\r\n \r\n
\r\n {config.helpTopic &&\r\n
\r\n \r\n
\r\n }\r\n
\r\n }\r\n
\r\n );\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { RECOMMENDATION_TYPES, APPLY_ACTION_TYPES } from '@bingads-webui-campaign/recommendation-core';\r\n\r\n\r\nfunction isPlural(value) {\r\n return value > 1 ? 'Plural' : 'Singular';\r\n}\r\n\r\n/**\r\n * Format Notification Localized Key of i18n\r\n * @param {number} count - count of entity\r\n * @param {Boolean} isSuccess - result of request to MT\r\n * @param {String} recommendationType - Recommendation Type\r\n * @param {String} actionType - Action Type\r\n * @return {string} formatted string\r\n */\r\n\r\nexport const formatNotificationLocalizedKey = ({\r\n count,\r\n isSuccess,\r\n recommendationType,\r\n actionType,\r\n otherInfo = {},\r\n}) => {\r\n let form = isPlural(count);\r\n const result = isSuccess ? 'Success' : 'Error';\r\n let entity = '';\r\n let zeroSucceedScenario = '';\r\n switch (recommendationType) {\r\n case RECOMMENDATION_TYPES.REPAIR_ADS:\r\n entity = 'Ad';\r\n break;\r\n case RECOMMENDATION_TYPES.REPAIR_KEYWORD:\r\n entity = 'Keyword';\r\n break;\r\n case RECOMMENDATION_TYPES.FIX_AD_DESTINATION:\r\n if (actionType === APPLY_ACTION_TYPES.ACCEPT && !_.isEmpty(otherInfo)) {\r\n entity = 'Fix_Ad_Destination';\r\n const {\r\n SuccessAdsCount = 0,\r\n SuccessKeywordsCount = 0,\r\n FailedAdsCount = 0,\r\n FailedKeywordsCount = 0,\r\n } = otherInfo;\r\n if (isSuccess) {\r\n form = `${isPlural(SuccessAdsCount)}_${isPlural(SuccessKeywordsCount)}_${isPlural(SuccessAdsCount + SuccessKeywordsCount)}`;\r\n } else {\r\n form = `${isPlural(FailedAdsCount)}_${isPlural(FailedKeywordsCount)}_${isPlural(FailedAdsCount + FailedKeywordsCount)}`;\r\n }\r\n } else {\r\n entity = 'Default';\r\n }\r\n break;\r\n default:\r\n entity = 'Default';\r\n if (count === 0) {\r\n zeroSucceedScenario = '_Zero';\r\n }\r\n }\r\n return `Recommendation_${actionType}_${entity}_${form}_${result}_Message${zeroSucceedScenario}`;\r\n};\r\n","import _ from 'underscore';\r\n\r\nimport React from 'react';\r\nimport {\r\n APPLY_ACTION_TYPES,\r\n SUMMARY_CARD,\r\n RECOMMENDATIOIN_SUMMARY_APPLY_FAILED_RESULTS,\r\n RECOMMENDATION_TYPES,\r\n RECOMMENDATION_NOTIFICATION_REJECT_REASONS,\r\n IMPORT_TYPE,\r\n ADINSIGHT_LOG_ACTION_TYPE,\r\n} from '@bingads-webui-campaign/recommendation-core';\r\nimport { getSessionStorage } from '@bingads-webui/storage';\r\nimport { formatNotificationLocalizedKey } from './formatter/format-notification';\r\n\r\nconst showLightboxNotification = ({\r\n aggregatedResult,\r\n view,\r\n}) => {\r\n view.statusLightBox.viewModel.aggregatedResult(aggregatedResult);\r\n view.statusLightBox.trigger('show');\r\n};\r\n\r\nconst getImportScheduleAndHistoryLink = (targetAccountId, scope, preferenceType) => {\r\n let queryParams = '';\r\n if (!_.isUndefined(scope.customerId) && !_.isUndefined(scope.userId)) {\r\n if (!_.isUndefined(scope.accountId)) {\r\n queryParams = `?aid=${scope.accountId}&cid=${scope.customerId}&uid=${scope.userId}&importType=${preferenceType}`;\r\n } else if (!_.isUndefined(targetAccountId)) {\r\n queryParams = `?aid=${targetAccountId}&cid=${scope.customerId}&uid=${scope.userId}&importType=${preferenceType}`;\r\n }\r\n }\r\n\r\n return `/campaign/vnext/importschedule${queryParams}`;\r\n};\r\n\r\n// TODO: separate each action type to different functions\r\nconst getNotificationMessage = ({\r\n op,\r\n i18n,\r\n totalRecommendationCount,\r\n successfulEntityCount,\r\n failedRecommendationCount,\r\n allExpired,\r\n otherInfo,\r\n newI18n = _.noop,\r\n scope = {},\r\n rawData,\r\n}) => {\r\n let message = '';\r\n switch (op.userAction) {\r\n case APPLY_ACTION_TYPES.ACCEPT: {\r\n let n = 0;\r\n if (op.type === RECOMMENDATION_TYPES.REPAIR_ADS ||\r\n op.type === RECOMMENDATION_TYPES.REPAIR_KEYWORD) {\r\n n = failedRecommendationCount === 0 ? successfulEntityCount : totalRecommendationCount;\r\n } else if (allExpired) {\r\n n = totalRecommendationCount - failedRecommendationCount;\r\n } else {\r\n n = totalRecommendationCount;\r\n }\r\n\r\n const isSuccess = failedRecommendationCount === 0 || allExpired;\r\n if (op.type === RECOMMENDATION_TYPES.SSC_2_PMAX_MIGRATION && isSuccess) {\r\n message = n === 1 ? newI18n.getString(_TL_('Done! Your {n} smart shopping campaign is now upgraded to Performance Max campaign.')).replace('{n}', n)\r\n : newI18n.getString(_TL_('Done! Your {n} smart shopping campaigns are now upgraded to Performance Max campaigns.')).replace('{n}', n);\r\n } else if (op.type === RECOMMENDATION_TYPES.PMAX_IMPORT && isSuccess) {\r\n message = (\r\n
\r\n {newI18n.getString(_TL_('Your Performance Max campaigns are scheduled to import 24 hours from now. You can review your'))}\r\n op.view.logOpportunityEvent({\r\n action: ADINSIGHT_LOG_ACTION_TYPE.REDIRECT,\r\n opportunityId: rawData.Results[0].OpportunityId,\r\n type: op.type,\r\n context: _.extend({\r\n ImportTaskId: rawData.Results[0].ImportTaskId,\r\n }, op.context),\r\n })}\r\n >\r\n {newI18n.getString(_TL_(' Import schedule & history '))}\r\n \r\n {newI18n.getString(_TL_('at any time.'))}\r\n
\r\n );\r\n } else if (op.type === RECOMMENDATION_TYPES.DSA_2_PMAX_MIGRATION && isSuccess) {\r\n message = newI18n.getString(_TL_('You\\'ve upgraded your DSA campaigns to Performance Max campaigns.'));\r\n } else {\r\n message = i18n.getString(\r\n formatNotificationLocalizedKey({\r\n count: n,\r\n isSuccess,\r\n recommendationType: op.type,\r\n actionType: op.userAction,\r\n otherInfo,\r\n }),\r\n { n, ...otherInfo }\r\n );\r\n }\r\n\r\n break;\r\n }\r\n case APPLY_ACTION_TYPES.DISMISS:\r\n case APPLY_ACTION_TYPES.UNDISMISS: {\r\n message = i18n.getString(\r\n formatNotificationLocalizedKey({\r\n count: totalRecommendationCount,\r\n isSuccess: failedRecommendationCount === 0,\r\n recommendationType: op.type,\r\n actionType: op.userAction,\r\n }),\r\n { n: failedRecommendationCount > 0 ? failedRecommendationCount : totalRecommendationCount }\r\n );\r\n break;\r\n }\r\n case APPLY_ACTION_TYPES.REJECT: {\r\n if (failedRecommendationCount) {\r\n message = i18n.getString('Recommendation_Reject_Error_Message_For_Phase2');\r\n } else {\r\n message = i18n.getString(\r\n 'Recommendation_Reject_Success_Message',\r\n { n: RECOMMENDATION_NOTIFICATION_REJECT_REASONS[op.reason ? op.reason.ReasonId : 'Other'] } //eslint-disable-line\r\n );\r\n }\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n return message;\r\n};\r\n\r\nexport const handleRecommendationNotification = ({\r\n i18n,\r\n op,\r\n rawData,\r\n showAlertHandler,\r\n isOptimizationScoreOn = false,\r\n setApplyNotificationInfo = _.noop,\r\n newI18n = _.noop,\r\n scope = {},\r\n}) => {\r\n const {\r\n totalCount: totalRecommendationCount,\r\n failedCount: failedRecommendationCount,\r\n expiredCount,\r\n successfulCount,\r\n } = rawData;\r\n const expiredRecommendationCount = expiredCount + successfulCount;\r\n let successfulEntityCount = 0;\r\n let otherInfo = {};\r\n if (op.type === RECOMMENDATION_TYPES.REPAIR_ADS) {\r\n successfulEntityCount = _.chain(rawData.Results)\r\n .first()\r\n .result('AddAdResults')\r\n .filter(result => result.BatchErrorCode === 0)\r\n .size()\r\n .value();\r\n } else if (op.type === RECOMMENDATION_TYPES.REPAIR_KEYWORD) {\r\n successfulEntityCount = _.chain(rawData.Results)\r\n .first()\r\n .result('AddKeywordResults')\r\n .filter(result => result.BatchErrorCode === 0)\r\n .size()\r\n .value();\r\n }\r\n if (op.type === RECOMMENDATION_TYPES.FIX_AD_DESTINATION) {\r\n otherInfo = {\r\n SuccessAdsCount: 0,\r\n SuccessKeywordsCount: 0,\r\n FailedAdsCount: 0,\r\n FailedKeywordsCount: 0,\r\n };\r\n _.map(rawData.Results, (item) => {\r\n otherInfo.SuccessAdsCount += item.SuccessAdsCount;\r\n otherInfo.SuccessKeywordsCount += item.SuccessKeywordsCount;\r\n otherInfo.FailedAdsCount += item.FailedAdsCount;\r\n otherInfo.FailedKeywordsCount += item.FailedKeywordsCount;\r\n });\r\n }\r\n\r\n const allExpired = expiredRecommendationCount === totalRecommendationCount;\r\n const message = getNotificationMessage({\r\n op,\r\n i18n,\r\n totalRecommendationCount,\r\n successfulEntityCount,\r\n failedRecommendationCount,\r\n allExpired,\r\n otherInfo,\r\n rawData,\r\n newI18n,\r\n scope,\r\n });\r\n\r\n const aggregatedResult = {\r\n ..._.pick(\r\n rawData,\r\n 'totalCount',\r\n 'failedCount',\r\n 'expiredCount',\r\n 'successfulCount',\r\n 'AggregatedResults'\r\n ),\r\n otherInfo,\r\n };\r\n\r\n if (op.userAction === APPLY_ACTION_TYPES.ACCEPT && failedRecommendationCount > 0) {\r\n getSessionStorage().set(RECOMMENDATIOIN_SUMMARY_APPLY_FAILED_RESULTS, {\r\n results: aggregatedResult,\r\n recommendationType: op.type,\r\n });\r\n\r\n if (op.from === SUMMARY_CARD) {\r\n if (allExpired) {\r\n if (!isOptimizationScoreOn) {\r\n showAlertHandler({\r\n message,\r\n level: 'Info',\r\n dismissible: true,\r\n });\r\n }\r\n } else {\r\n op.viewDetails(op.type)();\r\n }\r\n } else {\r\n showLightboxNotification({\r\n aggregatedResult,\r\n view: op.view,\r\n });\r\n }\r\n } else if (!isOptimizationScoreOn) {\r\n showAlertHandler({\r\n message,\r\n level: failedRecommendationCount > 0 ? 'Warning' : 'Info',\r\n dismissible: true,\r\n });\r\n }\r\n\r\n if (isOptimizationScoreOn) {\r\n if (op.userAction === APPLY_ACTION_TYPES.UNDISMISS) {\r\n showAlertHandler({\r\n message,\r\n level: failedRecommendationCount > 0 ? 'Warning' : 'Info',\r\n dismissible: true,\r\n });\r\n } else {\r\n setApplyNotificationInfo({\r\n message,\r\n totalRecommendationCount,\r\n failedRecommendationCount,\r\n allExpiredInSummary: allExpired && op.from === SUMMARY_CARD,\r\n userAction: op.userAction,\r\n });\r\n }\r\n }\r\n};\r\n","export const RECOMMENDATION_PREFERENCES = 'WebApp.RecommendationUI.Preferences';\r\nexport const RECOMMENDATION_PREFERENCES_ACCOUNT_LEVEL = 'WebApp.RecommendationUI.AccountLevelPreferences';\r\nexport const CAMPAIGN_TYPES = {\r\n DismissFeedback: 'DismissFeedback',\r\n RejectAutoApplySuggestedAds: 'RejectAutoApplySuggestedAds',\r\n};\r\n\r\nexport const PREFERENCES_ACTION_TYPES = {\r\n HidedRecommendationCards: 'HidedRecommendationCards',\r\n HidedRecommendationBanner: 'HidedRecommendationBanner',\r\n AutoRefresh: 'AutoRefresh',\r\n OptimizationScoreOnboard: 'OptimizationScoreOnboard',\r\n AAROnBoard: 'AAROnBoard',\r\n};\r\n\r\nexport const IN_PRODUCT_UPDATE_RECOMMENDATIONS_VIEW_TIME = {\r\n FirstViewTime: 'FirstViewTime',\r\n};\r\n","import _ from 'underscore';\r\nimport { merge } from '@bingads-webui-universal/primitive-utilities';\r\n\r\nimport {\r\n RECOMMENDATION_PREFERENCES,\r\n RECOMMENDATION_PREFERENCES_ACCOUNT_LEVEL,\r\n} from './consts';\r\n\r\nexport function getPreferences(preferencesService, isUserLevel = true) {\r\n const sessionData = isUserLevel ?\r\n preferencesService.findByNameAtUserLevel(RECOMMENDATION_PREFERENCES) :\r\n preferencesService.findByName(RECOMMENDATION_PREFERENCES_ACCOUNT_LEVEL);\r\n\r\n return _.result(sessionData, 'Data', {});\r\n}\r\n\r\nexport function savePreferences(preferencesService, data, isUserLevel = true) {\r\n const Data = merge(\r\n {},\r\n getPreferences(preferencesService),\r\n data\r\n );\r\n const dataPackage = {\r\n Name: isUserLevel ? RECOMMENDATION_PREFERENCES : RECOMMENDATION_PREFERENCES_ACCOUNT_LEVEL,\r\n Data,\r\n };\r\n\r\n if (isUserLevel) {\r\n preferencesService.setAtUserLevel(dataPackage);\r\n } else {\r\n preferencesService.set(dataPackage);\r\n }\r\n}\r\n","import _ from 'underscore';\r\n\r\nexport function locationRecommendationConverter({ data }) {\r\n const convertLocation = (location) => {\r\n let Type = 'Location';\r\n let CriterionKey = 'LocationCriterion';\r\n if (!_.isFinite(location.LocationId)) {\r\n Type = 'Radius';\r\n CriterionKey = 'RadiusCriterion';\r\n }\r\n return {\r\n Criterion: {\r\n [CriterionKey]: {\r\n Name: location.ExpandedName,\r\n NameTypeCombo: location.ExpandedName,\r\n ...location,\r\n },\r\n Type,\r\n BidAdjustment: 0,\r\n Status: 'Active',\r\n },\r\n CriterionType: Type,\r\n };\r\n };\r\n return {\r\n ...data,\r\n value: _.map(data.value, item => ({\r\n ...item,\r\n Id: -parseInt(_.uniqueId(), 10),\r\n isRecommendedLocation: true,\r\n Campaign: {\r\n Id: item.Target.CampaignId,\r\n Name: item.Target.CampaignName,\r\n },\r\n ...convertLocation(item.Location),\r\n })),\r\n };\r\n}\r\n","import { include } from 'underscore.string';\r\nimport Promise from 'bluebird';\r\nimport { locationRecommendationConverter } from './util/locationRecommendationConverter';\r\n\r\nexport const getOdataPath = (originalHost) => {\r\n if (include(window.location.host, 'ads')) {\r\n return '/ODataApi/';\r\n } else if (originalHost && include(originalHost, '823')) {\r\n // add this condition to not change any logic for old ui\r\n // since this package is shared both in old ui and new ui.\r\n return originalHost;\r\n }\r\n const hostReg = /(.*:)(\\d+)(\\/.*)/g;\r\n return originalHost ? originalHost.replace(hostReg, '$1823$3') : originalHost;\r\n};\r\n\r\nexport function getRecommendations({\r\n deps,\r\n scope,\r\n oppType,\r\n channel,\r\n top,\r\n skip,\r\n}) {\r\n if (oppType === 'NewLocationTargetOpportunity') return new Promise(resolve => resolve({ value: [] }));\r\n const baseUrl = `/AdInsight/V2/Customers(${scope.customerId})/Accounts(${scope.accountId})`;\r\n const actionUrl = `Opportunity.GetDetails(oppTypes=['${oppType}'],channel='${channel}')?$top=${top}&$skip=${skip}`;\r\n const url = scope.campaignId ? `${baseUrl}/Campaigns(${scope.campaignId})/${actionUrl}` : `${baseUrl}/${actionUrl}`;\r\n return deps.httpUtils.odata.get({\r\n url,\r\n ...deps.odataOptions,\r\n host: getOdataPath(deps.odataOptions && deps.odataOptions.host),\r\n }).then(data => locationRecommendationConverter({ data }));\r\n}\r\n","import _ from 'underscore';\r\nimport { getOdataPath } from '../get';\r\n\r\nfunction getTrackPayload({\r\n isAll,\r\n recommendations,\r\n recommendationType,\r\n channel,\r\n UserAction,\r\n}) {\r\n const odataType = isAll ? 'ApplyAllOpportunitiesRequest' : 'ApplyBulkOpportunitiesRequest';\r\n const inputKey = isAll ? 'UserInput' : 'UserInputs';\r\n const inputValue = isAll ? null : _.map(recommendations, recommend => ({\r\n OpportunityId: recommend.OpportunityId,\r\n }));\r\n\r\n return {\r\n Request: _.extend({}, {\r\n '@odata.type': `#Microsoft.Advertiser.AdInsight.Opportunity.Core.Adoption.Interface.Entity.${odataType}`,\r\n 'OpportunityType@odata.type': '#Microsoft.Advertiser.AdInsight.Opportunity.Schema.OpportunityType',\r\n OpportunityType: recommendationType,\r\n 'UserAction@odata.type': '#Microsoft.Advertiser.AdInsight.Opportunity.Core.Adoption.Interface.Entity.UserActionCode',\r\n UserAction,\r\n Settings: {\r\n '@odata.type': '#Microsoft.Advertiser.AdInsight.Opportunity.Core.Adoption.Interface.Entity.ApplySettings',\r\n },\r\n [inputKey]: inputValue,\r\n Channel: channel,\r\n }, isAll ? null : {\r\n 'UserInputs@odata.type': '#Collection(Microsoft.Advertiser.AdInsight.Opportunity.Core.Adoption.Interface.Entity.ApplyUserInput)',\r\n }),\r\n };\r\n}\r\n\r\nexport function adoptRecommendations({\r\n deps,\r\n isAll,\r\n recommendations,\r\n recommendationType,\r\n scope,\r\n channel,\r\n UserAction,\r\n}) {\r\n const action = isAll ? 'TrackAll' : 'Track';\r\n const uri = `/AdInsight/V2/Customers(${scope.customerId})/Accounts(${scope.accountId})/Opportunity.${action}`;\r\n return deps.httpUtils.odata.post({\r\n uri,\r\n data: getTrackPayload({\r\n isAll,\r\n recommendations,\r\n channel,\r\n UserAction,\r\n recommendationType,\r\n }),\r\n ...deps.odataOptions,\r\n host: getOdataPath(deps.odataOptions && deps.odataOptions.host),\r\n });\r\n}\r\n","import { adoptRecommendations } from './util/adoptRecommendations';\r\n\r\nexport function applyRecommendations({\r\n deps,\r\n scope,\r\n recommendationType,\r\n recommendations,\r\n isAll,\r\n channel,\r\n}) {\r\n return adoptRecommendations({\r\n deps,\r\n scope,\r\n recommendations,\r\n isAll,\r\n UserAction: '1',\r\n recommendationType,\r\n channel,\r\n });\r\n}\r\n","import { adoptRecommendations } from './util/adoptRecommendations';\r\n\r\nexport function dismissRecommendations({\r\n deps,\r\n scope,\r\n recommendationType,\r\n recommendations,\r\n isAll,\r\n channel,\r\n}) {\r\n return adoptRecommendations({\r\n deps,\r\n scope,\r\n recommendations,\r\n isAll,\r\n UserAction: '2',\r\n recommendationType,\r\n channel,\r\n });\r\n}\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { MenuItem } from '@bingads-webui-react/primitive';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\n\r\n\r\nexport function RecentReportTitle({ id }) {\r\n const i18n = useContext(I18nContext);\r\n\r\n return (\r\n \r\n {i18n.getString(_TL_('Your recent reports'))}\r\n \r\n );\r\n}\r\n\r\nRecentReportTitle.propTypes = {\r\n id: PropTypes.string,\r\n};\r\n\r\nRecentReportTitle.defaultProps = {\r\n id: undefined,\r\n};\r\n","import _ from 'underscore';\r\nimport { toIANATimeZone } from '@bingads-webui-universal/time-zone-converter';\r\n\r\nexport function reformatDate(i18n, dateStr, timeZone, skeleton = 'yMdhms') {\r\n if (_.isString(dateStr)) {\r\n const date = new Date(dateStr);\r\n const formatter = i18n.dateFormatter({\r\n skeleton,\r\n timeZone: toIANATimeZone(timeZone) || 'UTC',\r\n });\r\n\r\n return formatter(date).replace(',', '');\r\n }\r\n\r\n return dateStr;\r\n}\r\n\r\nexport const util = {\r\n reformatDate,\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { StyledBaMenuItem } from '@bingads-webui-react/global-menu';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { DirectionalHint } from '@bingads-webui-react/fabric-control';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { fromLegacyTimeZone } from '@bingads-webui-universal/time-zone-converter';\r\nimport { util } from '@bingads-webui-campaign/reports-v4-shared';\r\n\r\n\r\nfunction getReportsV4MenuItemElementsStyles() {\r\n return {\r\n ReportsV4MenuItem: {\r\n height: '48px',\r\n '& > a[role=menuitem]': {\r\n height: '48px !important',\r\n '& > div': {\r\n paddingTop: 0,\r\n width: 'auto',\r\n },\r\n },\r\n '& .ms-TooltipHost': {\r\n height: '48px',\r\n width: 'auto',\r\n display: 'flex',\r\n borderBottom: '1px solid #F3F2F1',\r\n },\r\n '& .report-v4-rencent-report-name': {\r\n display: 'inline-block',\r\n maxWidth: '230px',\r\n minWidth: '230px',\r\n overflow: 'hidden',\r\n lineHeight: '48px',\r\n whiteSpace: 'nowrap',\r\n textOverflow: 'ellipsis',\r\n },\r\n '& .report-v4-rencent-report-date': {\r\n color: '#605E5C',\r\n display: 'inline-block',\r\n marginLeft: '4px',\r\n lineHeight: '48px',\r\n },\r\n },\r\n };\r\n}\r\n\r\n\r\nconst ReStyledBaMenuItem = withDefaultStyles(\r\n props => (),\r\n getReportsV4MenuItemElementsStyles\r\n);\r\n\r\n\r\nexport function RecentReportMenuItem(props) {\r\n const {\r\n classes, report, reportTypeMapping, onClick, navigate, serverContext, closeDropdown, headerId,\r\n } = props;\r\n const i18n = useContext(I18nContext);\r\n\r\n const renderProps = {};\r\n if (report.Id) { // Saved report\r\n renderProps.pathname = `reports-v4/edit/${report.Id}`;\r\n renderProps.name = report.Name;\r\n } else { // Default report\r\n const config = reportTypeMapping[report.ReportType];\r\n if (!config) {\r\n // The report is not available due to permission or scope\r\n return null;\r\n }\r\n renderProps.pathname = config.route;\r\n renderProps.name = i18n.getString(config.name);\r\n }\r\n\r\n return (\r\n {\r\n navigate(renderProps.pathname);\r\n onClick();\r\n }}\r\n directionalHint={DirectionalHint.rightCenter}\r\n headerId={headerId}\r\n >\r\n \r\n {renderProps.name}\r\n \r\n \r\n {i18n.getString(_TL_('Last accessed'))}\r\n {' '}\r\n {report.LastAccessedAt ?\r\n util.reformatDate(i18n, report.LastAccessedAt, fromLegacyTimeZone(serverContext.CurrentAccount.TimeZone), 'yMd')\r\n : '-'}\r\n \r\n \r\n );\r\n}\r\n\r\nRecentReportMenuItem.propTypes = {\r\n serverContext: PropTypes.shape({}).isRequired,\r\n closeDropdown: PropTypes.func.isRequired,\r\n classes: PropTypes.shape({}).isRequired,\r\n report: PropTypes.shape({}).isRequired,\r\n reportTypeMapping: PropTypes.shape({}).isRequired,\r\n navigate: PropTypes.func.isRequired,\r\n onClick: PropTypes.func,\r\n headerId: PropTypes.string,\r\n};\r\n\r\nRecentReportMenuItem.defaultProps = {\r\n onClick: _.noop,\r\n headerId: undefined,\r\n};\r\n\r\n","import React from 'react';\r\nimport _ from 'underscore';\r\nimport classNames from 'classnames';\r\nimport { DirectionalHint } from '@bingads-webui-react/fabric-control';\r\nimport { StyledBaMenuItem } from '@bingads-webui-react/global-menu';\r\n\r\nfunction recursiveGeneratePropsFactory({\r\n classes, i18n, navigate, onClickDefaultReportItem,\r\n}) {\r\n return function recursiveGenerateProps({ siteMapItem }) {\r\n return siteMapItem.children.map((siteMapChild) => {\r\n const menuItem = {\r\n key: siteMapChild.id,\r\n text: i18n.getString(siteMapChild.name),\r\n };\r\n\r\n if (siteMapChild.children.length > 0) {\r\n menuItem.subMenuProps = {\r\n directionalHint: DirectionalHint.rightTopEdge,\r\n calloutProps: {\r\n preventDismissOnScroll: true,\r\n },\r\n items: recursiveGenerateProps({ siteMapItem: siteMapChild }),\r\n };\r\n } else {\r\n menuItem.onRender = (_menuItem, dismissMenu) => (\r\n dismissMenu(null, true)}\r\n customizedOnClick={() => {\r\n navigate(siteMapChild.route);\r\n onClickDefaultReportItem({ menuItem: _menuItem });\r\n }}\r\n directionalHint={DirectionalHint.rightCenter}\r\n >\r\n {i18n.getString(siteMapChild.name)}\r\n );\r\n }\r\n\r\n return menuItem;\r\n });\r\n };\r\n}\r\n\r\n\r\nexport function generateDefaultReportMenuItem({\r\n siteMap, i18n, classes, onClickDefaultReportItem, navigate, allReportsTitle,\r\n}) {\r\n const siteMapItem = _.find(siteMap[0].children, { id: 'reports-v4-default-reports' });\r\n\r\n const recursiveGenerateProps = recursiveGeneratePropsFactory({\r\n classes, i18n, navigate, onClickDefaultReportItem,\r\n });\r\n\r\n const menuText = i18n.getString(_TL_('Default reports'));\r\n\r\n const rootMenuItem = {\r\n key: 'default-reports-title',\r\n text: menuText,\r\n className: 'reports-v4-bar-default-reports',\r\n onClick: (event, menuItem) => {\r\n navigate(siteMapItem.fixedRoute);\r\n onClickDefaultReportItem({ menuItem });\r\n },\r\n split: true,\r\n 'aria-roledescription': 'split button',\r\n ariaLabel: `${allReportsTitle} ${menuText}`,\r\n subMenuProps: {\r\n directionalHint: DirectionalHint.rightTopEdge,\r\n calloutProps: {\r\n preventDismissOnScroll: true,\r\n },\r\n items: recursiveGenerateProps({ siteMapItem }),\r\n },\r\n };\r\n\r\n return rootMenuItem;\r\n}\r\n","import React from 'react';\r\nimport { DirectionalHint } from '@bingads-webui-react/fabric-control';\r\nimport _ from 'underscore';\r\nimport { StyledBaMenuItem } from '@bingads-webui-react/global-menu';\r\nimport classNames from 'classnames';\r\n\r\n\r\nexport function generateSavedReportMenuItem({\r\n savedReports, i18n, classes, navigate, onClickSavedReportItem, allReportsTitle,\r\n}) {\r\n const menuText = i18n.getString(_TL_('Saved customized reports'));\r\n\r\n const rootMenuItem = {\r\n key: 'saved-reports-title',\r\n className: 'reports-v4-bar-my-reports',\r\n text: menuText,\r\n ariaLabel: `${allReportsTitle} ${menuText}`,\r\n onClick: (event, menuItem) => {\r\n navigate('reports-v4/my-reports/');\r\n onClickSavedReportItem({ menuItem });\r\n },\r\n };\r\n\r\n if (savedReports['@odata.count'] && savedReports.value.length) {\r\n _.extend(rootMenuItem, {\r\n split: true,\r\n 'aria-roledescription': 'split button',\r\n subMenuProps: {\r\n directionalHint: DirectionalHint.rightTopEdge,\r\n calloutProps: {\r\n preventDismissOnScroll: true,\r\n },\r\n items: [],\r\n },\r\n });\r\n\r\n rootMenuItem.subMenuProps.items = savedReports.value.map(report => ({\r\n key: `saved-reports-${report.Id}`,\r\n onRender: (menuItem, dismissMenu) => (\r\n dismissMenu(null, true)}\r\n customizedOnClick={() => {\r\n navigate(`reports-v4/edit/${report.Id}`);\r\n onClickSavedReportItem({ menuItem, report });\r\n }}\r\n directionalHint={DirectionalHint.rightCenter}\r\n >\r\n {report.Name}\r\n \r\n ),\r\n }));\r\n }\r\n\r\n return rootMenuItem;\r\n}\r\n","import _ from 'underscore';\r\n\r\nexport function generateCustomReportBuilderMenuItem({\r\n siteMap, i18n, navigate, onClickCustomReportBuilderItem\r\n}) {\r\n const siteMapItem = _.find(siteMap[0].children, { id: 'reports-v4-build-custom-report' });\r\n\r\n const rootMenuItem = {\r\n key: 'custom-report-builder-title',\r\n text: i18n.getString(_TL_('Build your own report')),\r\n onClick: (event, menuItem) => {\r\n navigate(siteMapItem.route);\r\n onClickCustomReportBuilderItem({ menuItem });\r\n },\r\n };\r\n\r\n return rootMenuItem;\r\n}\r\n","import React from 'react';\r\nimport { MenuItem } from '@bingads-webui-react/primitive';\r\nimport { generateRecentReportMenuItems } from './generate-recent-report-menu-items';\r\nimport { generateDefaultReportMenuItem } from './generate-default-report-menu-item';\r\nimport { generateSavedReportMenuItem } from './generate-saved-report-menu-item';\r\nimport { generateCustomReportBuilderMenuItem } from './generate-custom-report-builder-menu-item';\r\n\r\nexport function genereateMenuProps({\r\n siteMap, classes, i18n, navigate, serverContext, permissions,\r\n recentReports, savedReports,\r\n onClickRecentReportItem,\r\n onClickDefaultReportItem,\r\n onClickSavedReportItem,\r\n onClickCustomReportBuilderItem,\r\n}) {\r\n const allReportsTitle = i18n.getString(_TL_('All reports'));\r\n const menuItems = [\r\n ...generateRecentReportMenuItems({\r\n recentReports, siteMap, classes, navigate, serverContext, onClickRecentReportItem,\r\n }),\r\n {\r\n key: 'all-reports',\r\n onRender: () => ({allReportsTitle}),\r\n },\r\n generateDefaultReportMenuItem({\r\n siteMap, i18n, classes, navigate, onClickDefaultReportItem, allReportsTitle,\r\n }),\r\n generateSavedReportMenuItem({\r\n savedReports, i18n, classes, navigate, onClickSavedReportItem, allReportsTitle,\r\n }),\r\n ...(permissions && permissions.dynamic && permissions.dynamic.CustomReportBuilder ?\r\n [generateCustomReportBuilderMenuItem({siteMap, i18n, navigate, onClickCustomReportBuilderItem})] : []\r\n )\r\n ];\r\n\r\n return {\r\n items: menuItems,\r\n };\r\n}\r\n","import React from 'react';\r\nimport _ from 'underscore';\r\nimport { buildReportTypeMapping } from '@bingads-webui-campaign/reports-v4-report-type-mapping';\r\nimport { RecentReportTitle } from './recent-reports/recent-report-title';\r\nimport { RecentReportMenuItem } from './recent-reports/recent-report-menu-item';\r\n\r\nconst maxRecentReportCount = 5;\r\n\r\nexport function generateRecentReportMenuItems({\r\n recentReports,\r\n siteMap,\r\n classes,\r\n navigate,\r\n serverContext,\r\n onClickRecentReportItem = _.noop,\r\n}) {\r\n if (recentReports['@odata.count'] && recentReports.value.length) {\r\n const headerId = 'RecentReportsTitle';\r\n\r\n const titleItem = {\r\n key: 'recent-reports-title',\r\n onRender: () => ,\r\n };\r\n\r\n const reportTypeMapping = buildReportTypeMapping(siteMap);\r\n\r\n const otherItems = recentReports.value\r\n .slice(0, maxRecentReportCount)\r\n .map(report => ({\r\n key: `recent-reports-${report.Id}-${report.ReportType}`,\r\n onRender: (menuItem, dismissMenu) => (\r\n dismissMenu(null, true)}\r\n reportTypeMapping={reportTypeMapping}\r\n classes={classes}\r\n navigate={navigate}\r\n onClick={() => onClickRecentReportItem({ menuItem, report })}\r\n serverContext={serverContext}\r\n headerId={headerId}\r\n />),\r\n }));\r\n\r\n return [\r\n titleItem,\r\n ...otherItems,\r\n ];\r\n }\r\n\r\n return [];\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport _ from 'underscore';\r\nimport Uri from 'urijs';\r\nimport { DefaultButton, DirectionalHint } from '@bingads-webui-react/fabric-control';\r\nimport { siteMapPropType, withReportsV4SiteMap } from '@bingads-webui-react/with-site-map';\r\nimport { withInstrumentation } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { getButtonClassNames, StyledHeader, getToolbarElementsStyles } from '@bingads-webui-react/global-menu';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { withI18nConsumer } from '@bingads-webui-react/i18n-context';\r\nimport { withServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { Glyphicon } from '@bingads-webui-react/primitive';\r\nimport { withRecentReports, withSavedReports } from '@bingads-webui-campaign/reports-v4-data-source';\r\nimport { ctrLoggerFactory } from '@bingads-webui-campaign/reports-v4-telemetry';\r\nimport { withReportsHistory } from '@bingads-webui-campaign/reports-v4-history';\r\nimport { genereateMenuProps } from './generate-menu-props';\r\n\r\nexport class UnthemedReportsV4DropDown extends React.PureComponent {\r\n renderDropdownIcon = () => null;\r\n\r\n renderGlyphIcon = classes => ;\r\n\r\n renderLabel = (classes, i18n, responsiveSize) => ();\r\n\r\n\r\n render() {\r\n const {\r\n classes,\r\n i18n,\r\n siteMap,\r\n responsiveSize,\r\n reportsV4History,\r\n recentReports,\r\n savedReports,\r\n instrumentation,\r\n serverContext,\r\n permissions\r\n } = this.props;\r\n\r\n const navigate = (path) => {\r\n const pathUri = new Uri(path);\r\n if (pathUri.is('absolute') === true) {\r\n reportsV4History.push(path);\r\n } else {\r\n const routeUri = new Uri(siteMap[0].absoluteRoute);\r\n if (routeUri.is('absolute') === true) {\r\n reportsV4History.push(siteMap[0].absoluteRoute.replace(siteMap[0].fixedRoute, path));\r\n } else {\r\n reportsV4History.push(siteMap[0].routePrefix + path);\r\n }\r\n }\r\n };\r\n\r\n const ctrLogger = instrumentation ? ctrLoggerFactory('ReportsV4GlobalMenu', instrumentation) : null;\r\n\r\n const menuProps =\r\n genereateMenuProps({\r\n siteMap,\r\n classes,\r\n i18n,\r\n recentReports,\r\n savedReports,\r\n navigate,\r\n serverContext,\r\n permissions,\r\n onClickRecentReportItem: ({ menuItem, report }) => {\r\n if (ctrLogger) {\r\n ctrLogger.click({\r\n target: 'RecentReport',\r\n extraData: {\r\n menuItem: _.pick(menuItem, 'key'),\r\n report: _.pick(report, 'ReportType'),\r\n },\r\n });\r\n ctrLogger.impressionFinish();\r\n }\r\n },\r\n onClickDefaultReportItem: ({ menuItem }) => {\r\n if (ctrLogger) {\r\n ctrLogger.click({\r\n target: 'DefaultReport',\r\n extraData: {\r\n menuItem: _.pick(menuItem, 'key'),\r\n },\r\n });\r\n ctrLogger.impressionFinish();\r\n }\r\n },\r\n onClickSavedReportItem: ({ menuItem, report }) => {\r\n if (ctrLogger) {\r\n ctrLogger.click({\r\n target: 'SavedReport',\r\n extraData: {\r\n menuItem: _.pick(menuItem, 'key'),\r\n report: _.pick(report, 'ReportType'),\r\n },\r\n });\r\n ctrLogger.impressionFinish();\r\n }\r\n },\r\n onClickCustomReportBuilderItem: ({ menuItem }) => {\r\n if (ctrLogger) {\r\n ctrLogger.click({\r\n target: 'CustomReportBuilder',\r\n extraData: {\r\n menuItem: _.pick(menuItem, 'key'),\r\n },\r\n });\r\n ctrLogger.impressionFinish();\r\n }\r\n },\r\n });\r\n\r\n menuProps.directionalHint = DirectionalHint.bottomRightEdge;\r\n menuProps.className = classNames([classes.menuContainer, 'global-menu-reports-v4-dropdown-menu']);\r\n menuProps.calloutProps = {\r\n preventDismissOnScroll: true,\r\n };\r\n\r\n return (\r\n this.renderLabel(classes, i18n, responsiveSize)}\r\n onRenderMenuIcon={this.renderDropdownIcon}\r\n onRenderIcon={() => this.renderGlyphIcon(classes)}\r\n onAfterMenuDismiss={() => {\r\n if (ctrLogger) {\r\n ctrLogger.impressionFinish();\r\n }\r\n }}\r\n onMenuClick={() => {\r\n if (ctrLogger) {\r\n ctrLogger.impressionStart();\r\n }\r\n }}\r\n className={classNames(getButtonClassNames(\r\n classes,\r\n ['global-menu-reports-v4-dropdown-toggle'],\r\n responsiveSize\r\n ), classes.reportsButton, 'btn', 'btn-primary')}\r\n />\r\n );\r\n }\r\n}\r\n\r\nUnthemedReportsV4DropDown.defaultProps = {\r\n recentReports: {},\r\n savedReports: {},\r\n instrumentation: undefined,\r\n};\r\n\r\nUnthemedReportsV4DropDown.propTypes = {\r\n recentReports: PropTypes.shape({}),\r\n savedReports: PropTypes.shape({}),\r\n serverContext: PropTypes.shape({}).isRequired,\r\n classes: PropTypes.shape({}).isRequired,\r\n i18n: PropTypes.shape({}).isRequired,\r\n reportsV4History: PropTypes.shape({}).isRequired,\r\n responsiveSize: PropTypes.string.isRequired,\r\n siteMap: siteMapPropType.isRequired,\r\n instrumentation: PropTypes.shape({}),\r\n};\r\n\r\nconst wrappers = [\r\n withInstrumentation,\r\n withRecentReports,\r\n withSavedReports,\r\n withI18nConsumer,\r\n withServerContext,\r\n withReportsHistory,\r\n _.partial(withDefaultStyles, _, getToolbarElementsStyles),\r\n withReportsV4SiteMap,\r\n];\r\n\r\nconst wrappersForCCUI = [\r\n withI18nConsumer,\r\n withReportsHistory,\r\n _.partial(withDefaultStyles, _, getToolbarElementsStyles),\r\n withReportsV4SiteMap,\r\n];\r\n\r\nexport const ReportsV4DropDown = _.compose(...wrappers)(UnthemedReportsV4DropDown);\r\n\r\nexport const CCUIReportsV4DropDown = _.compose(...wrappersForCCUI)(UnthemedReportsV4DropDown);\r\n","import { isFunction, noop } from 'underscore';\r\n\r\nfunction normalizeObserver(observer) {\r\n if (isFunction(observer)) {\r\n return {\r\n next: observer,\r\n };\r\n }\r\n return observer;\r\n}\r\n\r\nexport class Observable {\r\n constructor(executor) {\r\n this.executor = executor;\r\n }\r\n\r\n subscribe(observer) {\r\n const unsubscribe = this.executor(normalizeObserver(observer)) || noop;\r\n const subscription = { unsubscribe };\r\n return subscription;\r\n }\r\n}\r\n","import { Observable } from './observable';\r\n\r\nexport class ObservableDataSource {\r\n constructor({ makeCall } = {}) {\r\n this.makeCall = makeCall;\r\n }\r\n\r\n /**\r\n * When status === 'NotStarted', data === null, promise === null\r\n * When status === 'Loading', data === null, promise !== null\r\n * When status === 'Loaded', data !== null, promise === null\r\n *\r\n * @private\r\n */\r\n model = {\r\n status: 'NotStarted', // or 'Loading', 'Loaded'\r\n data: null,\r\n promise: null,\r\n }\r\n\r\n /**\r\n * the real called function when call `load` method.\r\n *\r\n * Attention: Component should not use or change this directly!\r\n *\r\n * @public\r\n */\r\n makeCall = undefined\r\n\r\n /**\r\n * @private\r\n */\r\n observers = []\r\n\r\n /**\r\n * @private\r\n */\r\n observable = new Observable((observer) => {\r\n this.observers.push(observer);\r\n\r\n const { model } = this;\r\n switch (model.status) {\r\n case 'Loaded':\r\n observer.next(model.data);\r\n break;\r\n case 'Loading':\r\n model.promise.then((data) => {\r\n observer.next(data);\r\n });\r\n break;\r\n case 'NotStarted':\r\n default:\r\n this.load().then((data) => {\r\n observer.next(data);\r\n });\r\n break;\r\n }\r\n\r\n // Leverage arrow function to auto bind `this`\r\n const unsubscribe = () => {\r\n this.observers = this.observers.filter(s => s !== observer);\r\n };\r\n\r\n return unsubscribe;\r\n });\r\n\r\n /**\r\n * subscribe to the data souce\r\n *\r\n * @public\r\n * @param {Function | { next: Function }} observer observer.\r\n * @returns {Function} unsubscribe function\r\n */\r\n subscribe(observer) {\r\n return this.observable.subscribe(observer);\r\n }\r\n\r\n\r\n /**\r\n * @private\r\n * @returns {any} the promise of `this.model`\r\n */\r\n load() {\r\n const { model } = this;\r\n\r\n model.status = 'Loading';\r\n model.data = null;\r\n model.promise = this.makeCall();\r\n\r\n model.promise.then((data) => {\r\n // once loaded, cache data\r\n model.status = 'Loaded';\r\n model.data = data;\r\n model.promise = null;\r\n });\r\n\r\n return model.promise;\r\n }\r\n\r\n /**\r\n * make all subscriptions update the data through internal call\r\n *\r\n * @public\r\n * @returns {Promise} the promise of observers update.\r\n */\r\n refresh = () => {\r\n const { model } = this;\r\n\r\n if (model.status === 'NotStarted') {\r\n // No need to refresh, ignore.\r\n return Promise.resolve();\r\n }\r\n\r\n if (model.status === 'Loading') {\r\n // Ideally, should cancel the previous request. Pseudocode:\r\n // model.promise.cancel();\r\n }\r\n\r\n return this.load().then((data) => {\r\n this.observers.forEach((observer) => {\r\n observer.next(data);\r\n });\r\n });\r\n }\r\n}\r\n","export const removeBracket = str => str.substr(1, str.length - 2);\r\n\r\nfunction removeEnum(key, op, value) {\r\n const start = value.indexOf('\\'');\r\n const end = value.length;\r\n const finalValue = value.substr(start + 1, end - start - 2);\r\n return `${key} ${op} '${finalValue}'`;\r\n}\r\n\r\nexport const odataConfigForMyReport = {\r\n odata: {\r\n custom: {\r\n Name: (op, value) => `contains(tolower(Name), '${value.toLowerCase().replace(/'/g, '\\'\\'')}')`,\r\n DateRangePreset: (op, value) => {\r\n if (value === \"Enum.DateRangePreset'Custom'\") {\r\n return `ReportTime/DateRangePreset ${op} null`;\r\n }\r\n return removeEnum('ReportTime/DateRangePreset', op, value);\r\n },\r\n Frequency: (op, value) => removeEnum('Frequency', op, value),\r\n ReportType: (op, value) => removeEnum('ReportType', op, value),\r\n },\r\n },\r\n};\r\n\r\nexport const asyncCallWithTimeout = async (asyncPromise, timeLimit) => {\r\n let timeoutHandle;\r\n\r\n const timeoutPromise = new Promise((_resolve, reject) => {\r\n timeoutHandle = setTimeout(\r\n () => reject(new Error('timeout')),\r\n timeLimit\r\n );\r\n });\r\n\r\n return Promise.race([asyncPromise, timeoutPromise]).then((result) => {\r\n clearTimeout(timeoutHandle);\r\n return result;\r\n });\r\n};\r\n","\r\nexport function toJsonAndThrowOnError(apiCall) {\r\n return async function apiCallWithThrowOnError(...args) {\r\n const res = await apiCall(...args);\r\n const bodyText = await res.text();\r\n let bodyJson;\r\n try {\r\n bodyJson = JSON.parse(bodyText);\r\n } catch (e) {\r\n throw new Error(`Response body is not a valid JSON, url: ${res.url}, status: ${res.status}, body: ${bodyText}`);\r\n }\r\n if (res.ok) {\r\n return bodyJson;\r\n }\r\n throw bodyJson;\r\n };\r\n}\r\n","/**\r\n * poll until condition is true.\r\n *\r\n * @param {*} action the action to perform periodically\r\n * @param {Function} isSuccessful a callback to check whether the result is successful\r\n * @param {Function} isFailed a callback to check whether the result is failed\r\n * @param {Number} interval poll interval in ms\r\n * @returns {Promise} void\r\n */\r\nexport async function poll(action, isSuccessful, isFailed, interval = 6000) {\r\n return new Promise(((resolve, reject) => {\r\n const timerId = setInterval(async () => {\r\n const result = await action();\r\n\r\n if (isSuccessful(result)) {\r\n clearInterval(timerId);\r\n resolve(result);\r\n }\r\n\r\n if (isFailed && isFailed(result)) {\r\n clearInterval(timerId);\r\n reject(result);\r\n }\r\n }, interval);\r\n }));\r\n}\r\n","\r\nfunction isPrivate(taskItemType) {\r\n return ['ReportUITemplate', 'ReportUITemplateTest'].includes(taskItemType);\r\n}\r\n\r\nfunction toODataFilter(taskItemTypes) {\r\n return taskItemTypes.map(type => `Type eq Enum.TaskItemType'${type}'`).join(' or ');\r\n}\r\n\r\nexport default {\r\n isPrivate,\r\n toODataFilter,\r\n};\r\n","export const errorCodeToErrorMessageMapping = {\r\n ExclusiveColumnsSelected: _TL_('Restricted column or filter combinations selected.'),\r\n InvalidId: _TL_('The report does not exist or does not belong to current user, manager account or account.'),\r\n InvalidEmail: _TL_('Invalid email address'),\r\n InvalidScope: _TL_(\"You don't have access to current manager account or account. Please choose another manager account or account.\"),\r\n TaskSchedulingInvalid: _TL_('End date cannot be earlier than start date, and given frequency must be executable at least once'),\r\n TaskThrottlingLimitReached: _TL_('You have reached the maximum allowed number of running reports. Please wait for the reports to finish and try again later.'),\r\n DatabaseTimeout: _TL_('This report has more data than we can show here. Please reduce the scope or download it.'),\r\n NotSupported: _TL_('Not supported.'),\r\n ReportGridFilterDataValueNotSupported: _TL_('The filter value is not supported.'),\r\n AccountNotAuthorized: _TL_('The specified report request contains at least one account which you have insufficient privileges to access. Please submit a report request for accounts that you are authorized to access.'),\r\n};\r\n\r\nexport const userErrorCodes = Object.keys(errorCodeToErrorMessageMapping);\r\n","import _ from 'underscore';\r\nimport { useContext } from 'react';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { FilterEntity } from '@bingads-webui/filter-entity';\r\nimport { get } from '@bingads-webui-universal/primitive-utilities';\r\nimport { useIframeDownload } from '@bingads-webui/download-service';\r\nimport { useFetch } from '@bingads-webui-campaign/react-hook-use-fetch';\r\nimport { odataConfigForMyReport } from './utils';\r\nimport { toJsonAndThrowOnError } from './to-json-and-throw-on-error';\r\nimport { poll } from './poll';\r\nimport taskTypeUtils from './task-type-utils';\r\nimport { userErrorCodes } from '../user-error-codes';\r\n\r\nconst s$ReportEmailRule = window.globalLegacySchema && window.globalLegacySchema.get('ReportEmailRule');\r\n\r\nexport const reportApiCallsFactory = _.memoize(({\r\n fetch, scope, serverContext, iframeDownload,\r\n}) => {\r\n const {\r\n cid, aid,\r\n } = scope.values;\r\n\r\n const isInternalUser = serverContext.CurrentUser.IsInternal;\r\n\r\n const urlPrefixModern = aid ?\r\n `/Customers(${cid})/Accounts(${aid})` :\r\n `/Customers(${cid})`;\r\n\r\n const urlPrefixLegacy = aid ?\r\n `/Customers(${serverContext.CurrentUser.ParentCustomerId})/Accounts(${aid})` :\r\n `/Customers(${serverContext.CurrentUser.ParentCustomerId})`;\r\n\r\n const getRecentReports = toJsonAndThrowOnError(() => {\r\n const url = `${urlPrefixModern}/TaskItems/Default.GetReportDataTaskItems(pageType=Enum.ReportDataTaskItemPageType'Recent')`;\r\n\r\n const taskItemTypes = [\r\n aid ? 'ReportUIAccountTemplate' : 'ReportUICustomerTemplate',\r\n 'ReportUITemplate',\r\n 'ReportUIUserTemplate',\r\n ];\r\n const urlSearchParams = new URLSearchParams({\r\n $top: 10,\r\n $count: true,\r\n $orderby: 'LastAccessedAt desc',\r\n customFilter: taskTypeUtils.toODataFilter(taskItemTypes),\r\n });\r\n\r\n return fetch(`${url}?${urlSearchParams}`);\r\n });\r\n\r\n\r\n const getDefaultReports = toJsonAndThrowOnError(() => {\r\n const url = `${urlPrefixModern}/TaskItems/Default.GetReportDataTaskItems(pageType=Enum.ReportDataTaskItemPageType'Default')`;\r\n\r\n const taskItemTypes = [\r\n aid ? 'ReportUIAccountTemplate' : 'ReportUICustomerTemplate',\r\n 'ReportUITemplate',\r\n 'ReportUIUserTemplate',\r\n ];\r\n const urlSearchParams = new URLSearchParams({\r\n $top: 100,\r\n $count: true,\r\n $orderby: 'LastAccessedAt desc',\r\n customFilter: taskTypeUtils.toODataFilter(taskItemTypes),\r\n });\r\n\r\n return fetch(`${url}?${urlSearchParams}`);\r\n });\r\n\r\n\r\n const getMyReports = toJsonAndThrowOnError(({\r\n type, top = 20, sort = '', filter = [], skip = 0, includeEmailType = true,\r\n }) => {\r\n const taskItemTypes = [\r\n aid ? 'ReportUIAccountTemplate' : 'ReportUICustomerTemplate',\r\n 'ReportUITemplate',\r\n 'ReportUIUserTemplate',\r\n ];\r\n if (includeEmailType) {\r\n const emailType = aid ? 'ReportAccountEmail' : 'Email';\r\n taskItemTypes.push(emailType);\r\n }\r\n\r\n const searchParams = {\r\n $top: top,\r\n $skip: skip,\r\n $count: true,\r\n customFilter: taskTypeUtils.toODataFilter(taskItemTypes),\r\n };\r\n if (filter.length > 0) {\r\n searchParams.$filter = new FilterEntity({ $and: filter }).odataV4(odataConfigForMyReport);\r\n }\r\n if (sort) {\r\n searchParams.$orderBy = sort;\r\n }\r\n const urlSearchParams = new URLSearchParams(searchParams);\r\n\r\n return fetch(`${urlPrefixModern}/TaskItems/Default.GetReportDataTaskItems(pageType=Enum.ReportDataTaskItemPageType'${type}')?${urlSearchParams}`);\r\n });\r\n\r\n const getSavedReportsForGlobalMenu = () =>\r\n getMyReports({ type: 'Saved', top: 10, includeEmailType: false });\r\n\r\n function getMyReportsCounts() {\r\n return Promise.all([\r\n getMyReports({ type: 'Saved', top: 1 }),\r\n getMyReports({ type: 'Shared', top: 1 }),\r\n ]).then(res => res.map(item => item['@odata.count']));\r\n }\r\n\r\n const getTaskItem = toJsonAndThrowOnError(async (taskItemId) => {\r\n // For internal user, always use user's parent cid\r\n // For external user, use different cid for different task item types\r\n // ReportUICustomerTemplate / ReportUIAccountTemplate: use current cid\r\n // ReportUITemplate: use user's parent cid\r\n\r\n if (isInternalUser) {\r\n return fetch(`${urlPrefixLegacy}/TaskItems(${taskItemId})`);\r\n }\r\n\r\n // Try current cid first\r\n let res = await fetch(`${urlPrefixModern}/TaskItems(${taskItemId})`);\r\n\r\n if (res.status === 400) {\r\n const body = await res.json();\r\n if (get(body, 'value[0].Code') === 'InvalidId') {\r\n // retry with user's parent cid\r\n res = await fetch(`${urlPrefixLegacy}/TaskItems(${taskItemId})`);\r\n }\r\n }\r\n\r\n return res;\r\n });\r\n\r\n\r\n const patchTaskItem = toJsonAndThrowOnError((taskItem, options = { isEmailRule: false }) => {\r\n let update = taskItem;\r\n const { isEmailRule } = options;\r\n if (isEmailRule && s$ReportEmailRule) {\r\n update = _.extend({\r\n '@odata.type': '#Model.ReportEmailRule',\r\n }, _.pick(taskItem, ..._.keys(s$ReportEmailRule.properties)));\r\n\r\n if (!update.Cron) {\r\n update.Cron = '';\r\n }\r\n\r\n // when no email needed to be sent, Cron is meaningless, so MT will reject non-empty Cron\r\n if (update.NotificationDeliveryOption) {\r\n update.NotificationDeliveryOption['@odata.type'] = '#Model.EmailNotificationDeliveryOption';\r\n } else {\r\n update.Cron = '';\r\n }\r\n\r\n // deprecated property\r\n delete update.Selection.PeriodComparisonDateRange;\r\n }\r\n\r\n const urlPrefix = taskTypeUtils.isPrivate(taskItem.Type) ?\r\n urlPrefixLegacy :\r\n urlPrefixModern;\r\n\r\n const url = `${urlPrefix}/TaskItems(${taskItem.Id})${isEmailRule ? '' : '?runNow=false'}`;\r\n\r\n return fetch(url, {\r\n method: 'PATCH',\r\n body: JSON.stringify(update),\r\n });\r\n });\r\n\r\n\r\n const deleteReportsImpl = toJsonAndThrowOnError((isModern, reports) => {\r\n const urlPrefix = isModern ? urlPrefixModern : urlPrefixLegacy;\r\n\r\n return fetch(`${urlPrefix}/TaskItems/DeleteReports`, {\r\n method: 'POST',\r\n body: JSON.stringify({ ReportIds: _.pluck(reports, 'Id') }),\r\n });\r\n });\r\n\r\n async function deleteReports(reports) {\r\n const {\r\n modernReports,\r\n legacyReports,\r\n } = _.groupBy(reports, ({ Type }) =>\r\n (taskTypeUtils.isPrivate(Type) ? 'legacyReports' : 'modernReports'));\r\n\r\n await Promise.all([\r\n modernReports && deleteReportsImpl(true, modernReports),\r\n legacyReports && deleteReportsImpl(false, legacyReports),\r\n ]);\r\n }\r\n\r\n const getReportData = toJsonAndThrowOnError((taskExecutionId, pager = { pageSize: 20, page: 1 }) => {\r\n const { page, pageSize } = pager;\r\n const urlSearchParams = new URLSearchParams({\r\n $top: pageSize,\r\n $skip: (page - 1) * pageSize,\r\n $count: true,\r\n $filter: \"TaskItem/Type eq Enum.TaskItemType'ReportUI'\",\r\n });\r\n\r\n return fetch(`${urlPrefixModern}/TaskItemExecutions(${taskExecutionId})/Default.ReportData()?${urlSearchParams}`);\r\n });\r\n\r\n\r\n const submitReportDataTaskItem = toJsonAndThrowOnError((body) => {\r\n // eslint-disable-next-line no-param-reassign\r\n delete body.ReportData.GridPagination;\r\n\r\n const prefix = taskTypeUtils.isPrivate(body.ReportData.Type) ?\r\n urlPrefixLegacy :\r\n urlPrefixModern;\r\n\r\n const searchParams = new URLSearchParams({\r\n $expand: 'TaskItemExecutions',\r\n });\r\n\r\n return fetch(`${prefix}/TaskItems/SubmitReportDataTaskItem?${searchParams}`, {\r\n method: 'POST',\r\n body: JSON.stringify(body),\r\n });\r\n });\r\n\r\n\r\n const getReportDataTaskItemExecution = toJsonAndThrowOnError((taskExecutionId, urlPrefix = urlPrefixModern) =>\r\n fetch(`${urlPrefix}/TaskItemExecutions(${taskExecutionId})/Default.PollReportDataTaskItemExecution`));\r\n\r\n\r\n async function pollReportDataTaskItemExecution(taskExecutionId, urlPrefix = urlPrefixModern) {\r\n const result = await poll(\r\n () => getReportDataTaskItemExecution(taskExecutionId, urlPrefix),\r\n r => r.Status === 'Completed',\r\n r => r.Status === 'Failed'\r\n );\r\n\r\n return result;\r\n }\r\n\r\n async function submitReportAndWaitForComplete(body) {\r\n const taskItem = await submitReportDataTaskItem(body);\r\n const taskExecutionId = taskItem.TaskItemExecutions[0].Id;\r\n const taskExecutionResult = await pollReportDataTaskItemExecution(taskExecutionId);\r\n return { taskExecutionId, taskExecutionResult };\r\n }\r\n\r\n const previewReport = toJsonAndThrowOnError((body) => {\r\n const previewUrlPrefix = aid ?\r\n `/Customers(${cid})/Accounts(${aid})` :\r\n `/Customers(${cid})/Accounts`;\r\n const url = `${previewUrlPrefix}/Default.PreviewReport`;\r\n const { ReportData } = body;\r\n\r\n const {\r\n ReportType,\r\n Id,\r\n CampaignReportScopes,\r\n UserScopes,\r\n ReportTime,\r\n ReportTimeZone,\r\n ReportColumns,\r\n Filters,\r\n ReportSorts,\r\n GridPagination,\r\n AccountIds,\r\n CustomerScopes,\r\n CollapsedRow,\r\n SchemaName,\r\n } = ReportData;\r\n\r\n const param = {\r\n '@odata.type': '#Model.ReportPreviewParameters',\r\n SchemaName,\r\n ReportType,\r\n LCID: serverContext.Omniture.Lcid,\r\n TaskId: Id,\r\n AccountIds,\r\n CampaignReportScopes,\r\n UserScopes,\r\n CustomerScopes,\r\n ReportTime,\r\n ReportTimeZone,\r\n ReportColumns,\r\n Filters,\r\n ReportSorts,\r\n GridPagination,\r\n CollapsedRow,\r\n };\r\n\r\n return fetch(url, {\r\n method: 'POST',\r\n body: JSON.stringify({\r\n reportPreviewParameters: param,\r\n }),\r\n });\r\n });\r\n\r\n\r\n const rerunReport = toJsonAndThrowOnError((report, urlPrefix) =>\r\n fetch(`${urlPrefix}/TaskItems/RerunReports`, {\r\n method: 'POST',\r\n body: JSON.stringify({ ReportIds: [report.Id] }),\r\n }));\r\n\r\n\r\n async function rerunReportAndWaitForComplete(report) {\r\n const urlPrefix = taskTypeUtils.isPrivate(report.Type) ?\r\n urlPrefixLegacy :\r\n urlPrefixModern;\r\n\r\n const rerunResult = await rerunReport(report, urlPrefix);\r\n const taskItemExecutionId = rerunResult.value[0].TaskItemExecutionId;\r\n\r\n const downloadInfo = await pollReportDataTaskItemExecution(taskItemExecutionId, urlPrefix);\r\n return downloadInfo;\r\n }\r\n\r\n\r\n async function downloadReport(body) {\r\n const taskResult = await submitReportAndWaitForComplete(body);\r\n const downloadUrl = taskResult.taskExecutionResult.ResultId;\r\n\r\n if (downloadUrl) {\r\n iframeDownload(downloadUrl);\r\n } else {\r\n throw new Error('downloadUrl is empty!');\r\n }\r\n }\r\n\r\n return {\r\n getRecentReports,\r\n getSavedReportsForGlobalMenu,\r\n getDefaultReports,\r\n getMyReports,\r\n getMyReportsCounts,\r\n getTaskItem,\r\n getReportDataTaskItemExecution,\r\n pollReportDataTaskItemExecution,\r\n getReportData,\r\n previewReport,\r\n submitReportDataTaskItem,\r\n patchTaskItem,\r\n deleteReports,\r\n rerunReportAndWaitForComplete,\r\n downloadReport,\r\n };\r\n});\r\n\r\n\r\n// custom hook for function component\r\nexport function useReportApiCalls() {\r\n const { fetch } = useFetch({ userErrorCodes });\r\n const { scope } = useContext(ScopeContext);\r\n const serverContext = useContext(ServerContext);\r\n const iframeDownload = useIframeDownload();\r\n\r\n return reportApiCallsFactory({\r\n fetch, scope, serverContext, iframeDownload,\r\n });\r\n}\r\n","import React, { useState, useEffect } from 'react';\r\nimport _ from 'underscore';\r\nimport { ObservableDataSource } from '../observable/observable-data-source';\r\nimport { useReportApiCalls } from '../report-api-calls';\r\n\r\n\r\nexport const globalMenuSavedReportsDataSource = new ObservableDataSource();\r\n\r\nconst initialize = _.once((reportApiCalls) => {\r\n globalMenuSavedReportsDataSource.makeCall = reportApiCalls.getSavedReportsForGlobalMenu;\r\n});\r\n\r\n\r\n// Custom hook for function component\r\nexport function useSavedReports() {\r\n const [data, setData] = useState(undefined);\r\n\r\n initialize(useReportApiCalls());\r\n\r\n useEffect(\r\n () => {\r\n let isMounted = true;\r\n const subscription = globalMenuSavedReportsDataSource.subscribe((newData) => {\r\n if (isMounted) {\r\n setData(newData);\r\n }\r\n });\r\n\r\n return function cleanup() {\r\n isMounted = false;\r\n subscription.unsubscribe();\r\n };\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [] // only trigger the effect on componentDidMount\r\n );\r\n\r\n return data;\r\n}\r\n\r\n// HoC for class component\r\nexport function withSavedReports(Comp) {\r\n return function CompWrapper(props) {\r\n const data = useSavedReports();\r\n\r\n return ;\r\n };\r\n}\r\n","import { ObservableDataSource } from '../observable/observable-data-source';\r\n\r\nfunction getKeyOfReport(report) {\r\n const { Id = 0, ReportType } = report;\r\n return `${Id}-${ReportType}`;\r\n}\r\n\r\nclass LoadingReportsStore {\r\n constructor() {\r\n this.reportsMap = new Map();\r\n }\r\n\r\n get() {\r\n return Array.from(this.reportsMap.values());\r\n }\r\n\r\n add(report) {\r\n const key = getKeyOfReport(report);\r\n this.reportsMap.set(key, report);\r\n }\r\n\r\n remove(report) {\r\n const key = getKeyOfReport(report);\r\n this.reportsMap.delete(key);\r\n }\r\n}\r\n\r\nexport const loadingReportsStore = new LoadingReportsStore();\r\n\r\n\r\nexport const loadingReportsDataSource = new ObservableDataSource({\r\n makeCall: () => Promise.resolve(loadingReportsStore.get()),\r\n});\r\n","import React, { useState, useEffect } from 'react';\r\nimport _ from 'underscore';\r\nimport { ObservableDataSource } from '../observable/observable-data-source';\r\nimport { subscribeAll } from '../observable/subscribe-all';\r\nimport { useReportApiCalls } from '../report-api-calls';\r\nimport { loadingReportsDataSource } from './loading-reports';\r\n\r\nexport const recentReportsDataSource = new ObservableDataSource();\r\n\r\nconst initialize = _.once((reportApiCalls) => {\r\n recentReportsDataSource.makeCall = reportApiCalls.getRecentReports;\r\n});\r\n\r\n\r\n// Custom hook for function component\r\nexport function useRecentReports() {\r\n const [data, setData] = useState();\r\n\r\n initialize(useReportApiCalls());\r\n\r\n useEffect(\r\n () => {\r\n let isMounted = true;\r\n const subscription = subscribeAll([recentReportsDataSource, loadingReportsDataSource], (([recentReportsResponse, loadingReports]) => {\r\n if (isMounted && recentReportsResponse) {\r\n const merged = [...recentReportsResponse.value];\r\n\r\n if (loadingReports) {\r\n loadingReports.forEach((loadingReport) => {\r\n const { Id = 0, ReportType } = loadingReport;\r\n const findResult = _.findWhere(merged, { Id, ReportType });\r\n\r\n if (findResult) {\r\n findResult.State = 'InProgress';\r\n } else {\r\n merged.unshift({ ...loadingReport, State: 'InProgress' });\r\n }\r\n });\r\n }\r\n\r\n const result = {\r\n ...recentReportsResponse,\r\n value: merged,\r\n };\r\n\r\n setData(result);\r\n }\r\n }));\r\n\r\n return function cleanup() {\r\n isMounted = false;\r\n subscription.unsubscribe();\r\n };\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [] // only trigger the effect on componentDidMount\r\n );\r\n\r\n return data;\r\n}\r\n\r\n\r\n// HoC for class component\r\nexport function withRecentReports(Comp) {\r\n return function CompWrapper(props) {\r\n const data = useRecentReports();\r\n\r\n return ;\r\n };\r\n}\r\n","\r\nexport function subscribeAll(observables, compute) {\r\n const subscriptions = new Array(observables.length);\r\n const dataStores = new Array(observables.length);\r\n\r\n observables.forEach((observable, index) => {\r\n const subscription = observable.subscribe((data) => {\r\n dataStores[index] = data;\r\n compute(dataStores);\r\n });\r\n\r\n subscriptions[index] = subscription;\r\n });\r\n\r\n function unsubscribe() {\r\n subscriptions.forEach((subscription) => {\r\n subscription.unsubscribe();\r\n });\r\n }\r\n\r\n return {\r\n unsubscribe,\r\n };\r\n}\r\n","import React from 'react';\r\nimport _ from 'underscore';\r\nimport { useReportApiCalls } from '../report-api-calls';\r\nimport { recentReportsDataSource } from './recent-reports';\r\nimport { loadingReportsDataSource, loadingReportsStore } from './loading-reports';\r\nimport { globalMenuSavedReportsDataSource } from './global-menu-saved-reports';\r\n\r\n\r\nfunction refreshBothOnSuccess(apiCall) {\r\n return async function wrappedApiCall(...args) {\r\n const res = await apiCall(...args);\r\n\r\n recentReportsDataSource.refresh();\r\n globalMenuSavedReportsDataSource.refresh();\r\n\r\n return res;\r\n };\r\n}\r\n\r\nfunction withCancel(promise) {\r\n let canceled = false;\r\n const wrappedPromise = new Promise((resolve, reject) => {\r\n promise.then((data) => {\r\n if (!canceled) {\r\n resolve(data);\r\n }\r\n }).catch((err) => {\r\n if (!canceled) {\r\n reject(err);\r\n }\r\n });\r\n });\r\n\r\n wrappedPromise.cancel = () => { canceled = true; };\r\n\r\n return wrappedPromise;\r\n}\r\n\r\nconst reportsApiFactory = _.memoize(({ reportApiCalls }) => {\r\n const currentCalls = {};\r\n function previewReport(body) {\r\n const report = body.ReportData;\r\n const { Id = 0, ReportType } = report;\r\n loadingReportsStore.add(report);\r\n loadingReportsDataSource.refresh();\r\n\r\n const reqKey = `${ReportType}-${Id}`;\r\n if (currentCalls[reqKey]) {\r\n currentCalls[reqKey].cancel();\r\n delete currentCalls[reqKey];\r\n }\r\n\r\n const call = withCancel(reportApiCalls.previewReport(body));\r\n currentCalls[reqKey] = call;\r\n\r\n call\r\n // No matter the call success or fail, always do these\r\n .finally(() => {\r\n loadingReportsStore.remove(report);\r\n loadingReportsDataSource.refresh();\r\n recentReportsDataSource.refresh();\r\n });\r\n\r\n return call;\r\n }\r\n\r\n\r\n const saveReport = refreshBothOnSuccess(reportApiCalls.patchTaskItem);\r\n\r\n const saveAsNewReport = refreshBothOnSuccess(reportApiCalls.submitReportDataTaskItem);\r\n\r\n const deleteReports = refreshBothOnSuccess(reportApiCalls.deleteReports);\r\n\r\n const refreshRecentReportsDataSource = () => recentReportsDataSource.refresh();\r\n\r\n return {\r\n ...reportApiCalls,\r\n previewReport,\r\n saveReport,\r\n saveAsNewReport,\r\n deleteReports,\r\n refreshRecentReportsDataSource,\r\n };\r\n});\r\n\r\n// custom hook for function component\r\nexport function useReportDataSource() {\r\n const reportApiCalls = useReportApiCalls();\r\n\r\n return reportsApiFactory({ reportApiCalls });\r\n}\r\n\r\n\r\n// HoC for class component\r\nexport function withReportDataSource(Comp) {\r\n return function CompWrapper(props) {\r\n const reportsApiProps = useReportDataSource();\r\n\r\n return ;\r\n };\r\n}\r\n","import _ from 'underscore';\r\n\r\nexport const convertOptions = (options) => {\r\n let params = {\r\n ...options,\r\n };\r\n if (typeof options === 'string') {\r\n params = { pathname: options };\r\n }\r\n return {\r\n ...params,\r\n search: params.search || window.location.search,\r\n };\r\n};\r\n\r\nfunction processValue(value) {\r\n const pattern = /^[0-9]+$/g;\r\n const SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;\r\n let isInt = _.isString(value) ? value.match(pattern) : false;\r\n let intValue;\r\n if (isInt) {\r\n intValue = parseInt(value, 10);\r\n isInt = intValue.toString() === value && intValue <= SAFE_INTEGER;\r\n }\r\n return isInt ? intValue : value;\r\n}\r\n\r\nexport const getQuery = () => {\r\n const urlParams = new URLSearchParams(window.location.search);\r\n const entries = urlParams.entries();\r\n const result = {};\r\n // eslint-disable-next-line no-restricted-syntax\r\n for (const [key, value] of entries) {\r\n result[key] = processValue(value);\r\n }\r\n return result;\r\n};\r\n","import React from 'react';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { convertOptions, getQuery } from './shared';\r\n\r\nexport function useReportsHistory(props = {}) {\r\n const legacyHistory = useHistory();\r\n const history = props.history || legacyHistory;\r\n\r\n return {\r\n ...history,\r\n push: (options) => {\r\n history.push(convertOptions(options));\r\n },\r\n replace: (options) => {\r\n history.replace(convertOptions(options));\r\n },\r\n query: getQuery(),\r\n };\r\n}\r\n\r\n\r\nexport function withReportsHistory(Comp) {\r\n return function CompWrapper(props) {\r\n const reportsHistoryProps = useReportsHistory(props);\r\n return ;\r\n };\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Link as SharedLink } from 'react-router-dom';\r\nimport { convertOptions } from './shared';\r\n\r\nexport const Link = props => ;\r\n\r\nLink.propTypes = {\r\n to: PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.shape({}),\r\n ]).isRequired,\r\n};\r\n","import _ from 'underscore';\r\n\r\n// Do not wrap the function by _.memoize or _.once, because siteMap can change based on scope.\r\nexport function buildReportTypeMapping(siteMap, id = 'reports-v4-default-reports') {\r\n const mapping = {};\r\n const defaultReportItem = _.findWhere(siteMap[0].children, { id });\r\n\r\n defaultReportItem.children.forEach((category) => {\r\n category.children.forEach((report) => {\r\n mapping[report.apiKey] = {\r\n name: report.name,\r\n route: report.route,\r\n };\r\n });\r\n });\r\n\r\n return mapping;\r\n}\r\n\r\nexport function buildCustomReportTypeMapping(siteMap) {\r\n const mapping = {};\r\n const pageId = siteMap[0].id === 'reporting' ? 'reporting-template-reports' : 'reports-v4-default-reports';\r\n const defaultReportItem = _.findWhere(siteMap[0].children, { id: pageId });\r\n\r\n defaultReportItem.children.forEach((category) => {\r\n category.children.forEach((report) => {\r\n mapping[report.apiKey] = {\r\n name: report.name,\r\n route: report.route.includes('create') ? report.route.replace('reports-v4', 'reporting') : report.route,\r\n };\r\n });\r\n });\r\n\r\n return mapping;\r\n}\r\n","import _ from 'underscore';\r\nimport React, { useContext, useEffect } from 'react';\r\nimport { generateGuid } from '@bingads-webui-universal/primitive-utilities';\r\nimport { InstrumentationContext } from '@bingads-webui-react/hoc-with-instrumentation';\r\n\r\n\r\nconst activityFactory = _.memoize((instrumentation) => {\r\n const schema = {\r\n scenario: [\r\n {\r\n name: 'ReportsV4Telemetry',\r\n value: 'ReportsV4Telemetry',\r\n activity: [\r\n { name: 'CtrLogger', value: 'CtrLogger' },\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n instrumentation.addScenario(schema);\r\n\r\n const scenario = instrumentation.ReportsV4Telemetry.create();\r\n const activity = scenario.CtrLogger.create();\r\n\r\n return activity;\r\n});\r\n\r\n// !!! Important: do not reorder the arguments, _.memorize takes the first argument as cache key\r\nfunction ctrLoggerFactoryImpl(componentName, instrumentation) {\r\n if (!instrumentation) {\r\n throw new Error('instrumentation is not specified!');\r\n }\r\n\r\n if (!componentName) {\r\n throw new Error('componentName is not specified!');\r\n }\r\n\r\n const activity = activityFactory(instrumentation);\r\n\r\n let impressionId;\r\n\r\n function impressionStart() {\r\n if (!impressionId) {\r\n impressionId = generateGuid();\r\n\r\n activity.trace({\r\n componentName,\r\n event: 'ImpressionStart',\r\n impressionId,\r\n });\r\n }\r\n }\r\n\r\n function impressionFinish() {\r\n if (impressionId) {\r\n activity.trace({\r\n componentName,\r\n event: 'ImpressionFinish',\r\n impressionId,\r\n });\r\n\r\n impressionId = undefined;\r\n }\r\n }\r\n\r\n function click({ target, extraData, parentTarget }) {\r\n if (impressionId) {\r\n activity.trace({\r\n componentName,\r\n event: 'Click',\r\n target,\r\n extraData,\r\n impressionId,\r\n parentTarget,\r\n });\r\n }\r\n }\r\n\r\n return {\r\n impressionStart,\r\n impressionFinish,\r\n click,\r\n };\r\n}\r\n\r\nexport const ctrLoggerFactory = _.memoize(ctrLoggerFactoryImpl);\r\n\r\n\r\nexport function useCtrLogger(componentName, autoStart = true) {\r\n const instrumentation = useContext(InstrumentationContext);\r\n const ctrLogger = ctrLoggerFactory(componentName, instrumentation);\r\n\r\n useEffect(() => {\r\n if (autoStart) {\r\n ctrLogger.impressionStart();\r\n\r\n return function cleanup() {\r\n ctrLogger.impressionFinish();\r\n };\r\n }\r\n\r\n return undefined;\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n return ctrLogger;\r\n}\r\n\r\n\r\nexport function withCtrLogger(Comp, componentName, autoStart = true) {\r\n return function CompWithCtrLogger(props) {\r\n const ctrLogger = useCtrLogger(componentName, autoStart);\r\n\r\n return ;\r\n };\r\n}\r\n","export const levelAtConstant = {\r\n CUSTOMER: 'Customer',\r\n ACCOUNT: 'Account',\r\n CAMPAIGN: 'Campaign',\r\n ADGROUP: 'AdGroup',\r\n KEYWORD: 'Keyword',\r\n};\r\n","import { getSessionStorage } from '@bingads-webui/storage';\r\nimport { getEntityFromScope } from '@bingads-webui/edm-campaign';\r\n\r\nexport const storeSeasonalityAdjustmentName = ({ id, name }) => {\r\n getSessionStorage().set(`SeasonalityAdjustmentNameAndId${id}`, name);\r\n};\r\n\r\nexport const getSeasonalityAdjustmentName = id => getSessionStorage().get(`SeasonalityAdjustmentNameAndId${id}`);\r\n\r\nexport const seasonalityPredicateValueNameGetter = name =>\r\n (name === 'SeasonalityAdjustmentId' || name === 'DataExclusionId'\r\n ? (item) => {\r\n const seasonalityName = getSessionStorage().get(`SeasonalityAdjustmentNameAndId${item}`);\r\n\r\n if (!seasonalityName) {\r\n return item;\r\n }\r\n return seasonalityName;\r\n } : undefined);\r\n\r\n// Data exclusion is a special \"SeasonalityAdjustment\"\r\nconst getSeasonalityAdjustmentLike = ({ id, scope, jsdata }) => {\r\n const { currentAccount } = getEntityFromScope(scope);\r\n return jsdata.SeasonalityAdjustment.find(\r\n id,\r\n {\r\n entitySet: currentAccount.SeasonalityAdjustments,\r\n queryParameters: {\r\n query: {\r\n $select: 'Name',\r\n },\r\n },\r\n }\r\n );\r\n};\r\n\r\nexport const updateSeasonalityNameFromMT = ({\r\n id, scope, i18n, jsdata,\r\n}) => getSeasonalityAdjustmentLike({ id, scope, jsdata }).then((response) => {\r\n storeSeasonalityAdjustmentName({ id, name: response.Name });\r\n}).catch(() => {\r\n storeSeasonalityAdjustmentName({ id, name: i18n.getString(_TL_('(deleted)')) });\r\n});\r\n","/**\r\n * @see [SegmentationType]{@link https://msasg.visualstudio.com/Bing_Ads/_git/AdsAppsMT#path=%2Fprivate%2FCampaign%2FMT%2FSource%2FInterface%2FEntity%2FAggregator2%2FSegmentationType.cs&version=GBmaster&_a=contents}\r\n */\r\nexport const Day = 'Day';\r\nexport const Week = 'Week';\r\nexport const Month = 'Month';\r\nexport const Quarter = 'Quarter';\r\nexport const Year = 'Year';\r\nexport const DayOfTheWeek = 'DayOfTheWeek';\r\nexport const HourOfTheDay = 'HourOfTheDay';\r\nexport const DeviceType = 'DeviceType';\r\nexport const Network = 'Network';\r\nexport const TopVsOther = 'TopVsOther';\r\nexport const DeliveredMatchType = 'DeliveredMatchType';\r\nexport const BiddedMatchType = 'BiddedMatchType';\r\nexport const Medium = 'Medium';\r\nexport const Currency = 'Currency';\r\nexport const DeviceOS = 'DeviceOS';\r\nexport const AdPosition = 'AdPosition';\r\nexport const DomainType = 'DomainType';\r\nexport const GoalType = 'GoalType';\r\nexport const GoalName = 'GoalName';\r\nexport const GoalCategory = 'GoalCategory';\r\nexport const AudienceType = 'AudienceType';\r\nexport const AudienceName = 'AudienceName';\r\nexport const AdScenario = 'AdScenario';\r\n\r\n/**\r\n * @see [Segment]{@link https://msasg.visualstudio.com/Bing_Ads/_git/AdInsights#path=%2Fprivate%2FMTv2%2FInterfaces%2FAuctionInsight%2FAuctionInsightCommon.cs&version=GBmaster&_a=contents}\r\n */\r\nexport const Hour = 'Hour';\r\n// These segmentation types are defined using same name in Campaign OData & Auction Insight\r\n// export const Day = 'Day';\r\n// export const Week = 'Week';\r\n// export const Month = 'Month';\r\n// export const Quarter = 'Quarter';\r\n// export const Year = 'Year';\r\nexport const DayOfWeek = 'DayOfWeek';\r\nexport const Device = 'Device';\r\nexport const HourOfDay = 'HourOfDay';\r\n","import _ from 'underscore';\r\nimport * as segmentationType from './segmentation-type';\r\n\r\nexport const segmentationTypeEnum = _.keys(segmentationType);\r\n\r\nexport const campaignSegmentationTypeEnum = [\r\n segmentationType.Day,\r\n segmentationType.Week,\r\n segmentationType.Month,\r\n segmentationType.Quarter,\r\n segmentationType.Year,\r\n segmentationType.DayOfTheWeek,\r\n // not used yet\r\n // segmentationType.HourOfTheDay\r\n segmentationType.DeviceType,\r\n segmentationType.Network,\r\n segmentationType.TopVsOther,\r\n // not used yet\r\n // segmentationType.DeliveredMatchType\r\n // not used yet\r\n // segmentationType.BiddedMatchType\r\n // not used yet\r\n // segmentationType.Medium\r\n // not used yet\r\n // segmentationType.Currency\r\n // not used yet\r\n // segmentationType.DeviceOS\r\n // not used yet\r\n // segmentationType.AdPosition\r\n // not used yet\r\n // segmentationType.DomainType\r\n segmentationType.GoalName,\r\n segmentationType.GoalType,\r\n segmentationType.GoalCategory,\r\n segmentationType.AudienceName,\r\n segmentationType.AudienceType,\r\n];\r\n\r\n/**\r\n * @see [Segment]{@link https://msasg.visualstudio.com/Bing_Ads/_git/AdInsights#path=%2Fprivate%2FMTv2%2FInterfaces%2FAuctionInsight%2FAuctionInsightCommon.cs&version=GBmaster&_a=contents}\r\n */\r\nexport const adinsightSegmentationTypeEnum = [\r\n // not used yet\r\n // segmentationType.Hour\r\n segmentationType.Day,\r\n segmentationType.Week,\r\n segmentationType.Month,\r\n segmentationType.Quarter,\r\n segmentationType.Year,\r\n segmentationType.DayOfWeek,\r\n segmentationType.Device,\r\n segmentationType.HourOfDay,\r\n];\r\n\r\n/**\r\n * Segmentation Types that have to do with a period of time only\r\n */\r\nexport const timeSegmentationTypeEnum = [\r\n segmentationType.Day,\r\n segmentationType.Week,\r\n segmentationType.Month,\r\n segmentationType.Quarter,\r\n segmentationType.Year,\r\n segmentationType.DayOfTheWeek,\r\n // not used yet\r\n // segmentationType.HourOfTheDay\r\n];\r\n","import { todayNYearsAgo } from '@bingads-webui-universal/primitive-utilities';\r\n\r\nimport * as segmentationType from './segmentation-type';\r\n\r\nconst diffDay = (start, end) => Math.round((end - start) / 86400000);\r\n\r\nexport function isTimeRangeValid(segmentType, {\r\n start = null,\r\n end = null,\r\n compared = {},\r\n} = {}) {\r\n const { start: comparedStart, end: comparedEnd } = compared || {};\r\n // The first date that BI has segmentation data, offset by 1 day to ensure no timezone issues.\r\n const goalSegmentStartDate = new Date('October 26, 2017 00:00:00');\r\n // The first date that BI has segmentation data, offset by 1 day to ensure no timezone issues.\r\n const audienceSegmentStartDate = new Date('January 05, 2018 00:00:00');\r\n\r\n // If time range control didn't initialize successfully, we will just pass data directly to MT\r\n if (!start || !end) {\r\n return true;\r\n }\r\n\r\n let totalRange = diffDay(start, end);\r\n\r\n if (comparedStart && comparedEnd) {\r\n totalRange += diffDay(comparedStart, comparedEnd);\r\n }\r\n\r\n const oneYearAgo = todayNYearsAgo(end, 1);\r\n const threeYearsAgo = todayNYearsAgo(end, 3);\r\n const withinThreeYears = start >= threeYearsAgo;\r\n const moreThanOneYear = oneYearAgo >= start;\r\n\r\n switch (segmentType) {\r\n case segmentationType.Day:\r\n return totalRange < 16;\r\n case segmentationType.Week:\r\n return totalRange >= 7 && totalRange < 16 * 7;\r\n case segmentationType.Month:\r\n return totalRange >= 30 && totalRange < 16 * 30;\r\n case segmentationType.Quarter:\r\n return totalRange > 90 && withinThreeYears;\r\n case segmentationType.Year:\r\n return moreThanOneYear && withinThreeYears;\r\n case segmentationType.HourOfTheDay:\r\n case segmentationType.HourOfDay:\r\n // HourOfDay supports any range in recent 30 days\r\n // based on time zone, it could be 31 days difference\r\n return diffDay(start, new Date()) <= 31;\r\n case segmentationType.GoalName:\r\n case segmentationType.GoalType:\r\n case segmentationType.GoalCategory:\r\n return start >= goalSegmentStartDate;\r\n case segmentationType.AudienceName:\r\n case segmentationType.AudienceType:\r\n return start >= audienceSegmentStartDate;\r\n default:\r\n return true;\r\n }\r\n}\r\n","import * as segmentationType from './segmentation-type';\r\n\r\n// Same structure as we used in @bingads-webui/json-tree-parser\r\nexport const segmentationTree = [{\r\n name: 'None',\r\n}, {\r\n name: 'Time',\r\n children: [{\r\n name: segmentationType.Day,\r\n }, {\r\n name: segmentationType.Week,\r\n }, {\r\n name: segmentationType.Month,\r\n }, {\r\n name: segmentationType.Quarter,\r\n }, {\r\n name: segmentationType.Year,\r\n }, {\r\n name: segmentationType.DayOfTheWeek,\r\n }, {\r\n name: segmentationType.DayOfWeek,\r\n }, {\r\n name: segmentationType.HourOfDay,\r\n permission: 'IsBAACompetitionEnabled',\r\n }],\r\n}, {\r\n name: 'Audience',\r\n permission: 'IsAudienceSegmentationSupported',\r\n children: [{\r\n name: segmentationType.AudienceName,\r\n }, {\r\n name: segmentationType.AudienceType,\r\n }],\r\n}, {\r\n name: 'Goal',\r\n permission: 'IsSegmentationGoalTypeSupported',\r\n children: [{\r\n name: segmentationType.GoalName,\r\n }, {\r\n name: segmentationType.GoalType,\r\n }, {\r\n name: segmentationType.GoalCategory,\r\n }],\r\n}, {\r\n name: segmentationType.DeviceType,\r\n}, {\r\n name: segmentationType.Device,\r\n}, {\r\n name: segmentationType.Network,\r\n}, {\r\n name: segmentationType.TopVsOther,\r\n}, {\r\n name: segmentationType.AdScenario,\r\n permission: 'IsVerticalAdsReportingPhase1Enabled',\r\n}];\r\n","import _ from 'underscore';\r\nimport { get } from '@bingads-webui-universal/primitive-utilities';\r\nimport * as segmentationType from './segmentation-type';\r\n\r\nconst typeWithSameTexts = {\r\n [segmentationType.DayOfWeek]: segmentationType.DayOfTheWeek,\r\n [segmentationType.HourOfDay]: segmentationType.HourOfTheDay,\r\n [segmentationType.Device]: segmentationType.DeviceType,\r\n};\r\n\r\nconst keys = {\r\n None: 'Segment_Dropdown_None',\r\n Time: 'Segment_Dropdown_Time',\r\n [segmentationType.Day]: 'Segment_Dropdown_Day',\r\n [segmentationType.Week]: 'Segment_Dropdown_Week',\r\n [segmentationType.Month]: 'Segment_Dropdown_Month',\r\n [segmentationType.Quarter]: 'Segment_Dropdown_Quarter',\r\n [segmentationType.Year]: 'Segment_Dropdown_Year',\r\n [segmentationType.DayOfTheWeek]: 'Segment_Dropdown_Day_Of_Week',\r\n [segmentationType.HourOfTheDay]: 'Segment_Dropdown_Hour_Of_Day',\r\n Audience: 'Segment_Dropdown_Audience',\r\n [segmentationType.AudienceName]: 'Segment_Dropdown_Audience_Name',\r\n [segmentationType.AudienceType]: 'Segment_Dropdown_Audience_Category',\r\n Goal: 'Segment_Dropdown_Conversions',\r\n [segmentationType.GoalName]: 'Segment_Dropdown_Goal_Name',\r\n [segmentationType.GoalType]: 'Segment_Dropdown_Goal_Type',\r\n [segmentationType.GoalCategory]: 'Segment_Dropdown_Goal_Category',\r\n [segmentationType.DeviceType]: 'Segment_Dropdown_Device_Type',\r\n [segmentationType.Network]: 'Segment_Dropdown_Network',\r\n [segmentationType.TopVsOther]: 'Segment_Dropdown_Top_Other',\r\n [segmentationType.AdScenario]: 'Segment_Dropdown_Ad_Scenario',\r\n};\r\n\r\nconst valueKeys = {\r\n DayOfTheWeek: {\r\n Sunday: 'WeekDay_1',\r\n Monday: 'WeekDay_2',\r\n Tuesday: 'WeekDay_3',\r\n Wednesday: 'WeekDay_4',\r\n Thursday: 'WeekDay_5',\r\n Friday: 'WeekDay_6',\r\n Saturday: 'WeekDay_7',\r\n },\r\n\r\n DeviceType: {\r\n Unknown: 'Segment_Device_Type_Unknown',\r\n Computer: 'Segment_Device_Type_Computer',\r\n PC: 'Segment_Device_Type_Computer',\r\n SmartPhone: 'Segment_Device_Type_Smartphone',\r\n NonsmartPhone: 'Segment_Device_Type_NonSmartphone',\r\n Tablet: 'Segment_Device_Type_Tablet',\r\n ConnectedTV: 'Segment_Device_Type_ConnectedTV',\r\n },\r\n\r\n Network: {\r\n Unknown: 'Segment_Network_Unknown',\r\n BingAndYahooSearch: 'Segment_Network_BingAndYahoo',\r\n MicrosoftSitesAndSelectTraffic: 'Segment_Network_MicrosoftSitesAndSelectTraffic',\r\n SyndicatedSearchPartners: 'Segment_Network_SyndicatedSearch',\r\n AOLSearch: 'Segment_Network_AOL',\r\n InHouse: 'Segment_Network_InHouse',\r\n Content: 'Segment_Network_Content',\r\n Audience: 'Segment_Network_Audience',\r\n CrossNetwork: 'Segment_Network_CrossNetwork',\r\n },\r\n\r\n TopVsOther: {\r\n Unknown: 'Segment_Page_Position_Unknown',\r\n BingAndYahooSearchTop: 'Segment_Page_Position_BingYahooTop',\r\n BingAndYahooSearchOther: 'Segment_Page_Position_BingYahooOther',\r\n SyndicatedSearchPartnersTop: 'Segment_Page_Position_SyndicatedTop',\r\n SyndicatedSearchPartnersOther: 'Segment_Page_Position_SyndicatedOther',\r\n AOLSearchTop: 'Segment_Page_Position_AOL_Top',\r\n AOLSearchOther: 'Segment_Page_Position_AOL_Other',\r\n ContentNetwork: 'Segment_Page_Position_Content',\r\n AudienceNetwork: 'Segment_Page_Position_Audience_Network',\r\n MicrosoftSitesAndSelectTrafficTop: 'Segment_Page_Position_MicrosoftSitesAndSelectTrafficTop',\r\n MicrosoftSitesAndSelectTrafficOther: 'Segment_Page_Position_MicrosoftSitesAndSelectTrafficOther',\r\n CrossNetwork: 'Segment_Page_Position_CrossNetwork',\r\n InHouseTop: 'Segment_Page_Position_InHouseTop',\r\n InHouseOther: 'Segment_Page_Position_InHouseOther',\r\n },\r\n\r\n GoalType: {\r\n DestinationURL: 'UnifiedEventTracking_Goals_DestinationGoal',\r\n Duration: 'UnifiedEventTracking_Goals_DurationGoal',\r\n PageVisit: 'UnifiedEventTracking_Goals_PageViewsPerVisitGoal',\r\n Custom: 'UnifiedEventTracking_Goals_EventGoal',\r\n AppInstall: 'UnifiedEventTracking_Goals_ApplicationInstallGoal',\r\n MultiStage: 'UnifiedEventTracking_Goals_MultiStageGoal',\r\n OfflineConversion: 'UnifiedEventTracking_Goals_OfflineConversionGoal',\r\n InStoreTransaction: 'UnifiedEventTracking_Goals_InStoreTransactionGoal',\r\n HotelBooking: 'UnifiedEventTracking_Goals_HotelBookingGoal',\r\n },\r\n\r\n AudienceType: {\r\n RemarketingList: 'Segment_Audience_RemarketingList',\r\n InMarket: 'Segment_Audience_InMarket',\r\n Custom: 'Segment_Audience_Custom',\r\n SimilarToRemarketingList: 'Segment_Audience_SimilarToRemarketingList',\r\n Product: 'Segment_Audience_Product',\r\n CustomerList: 'Segment_Audience_CustomerList',\r\n CombinedList: 'Segment_Audience_CombinedList',\r\n PredictiveTargeting: 'Segment_Audience_PredictiveTargeting',\r\n ContextualTargeting: 'Segment_Audience_ContextualTargeting',\r\n ImpressionBasedRemarketingList: 'Segment_Audience_ImpressionBasedRemarketingList',\r\n UsersNotInAudienceSegments: 'Segment_Audience_UsersNotInAudienceSegments',\r\n },\r\n\r\n GoalCategory: {\r\n AddToCart: 'Segment_Goal_Category_AddToCart',\r\n BeginCheckout: 'Segment_Goal_Category_BeginCheckout',\r\n BookAppointment: 'Segment_Goal_Category_BookAppointment',\r\n Contact: 'Segment_Goal_Category_Contact',\r\n Download: 'Segment_Goal_Category_Download',\r\n GetDirections: 'Segment_Goal_Category_GetDirections',\r\n InStoreVisit: 'Segment_Goal_Category_InStoreVisit',\r\n Other: 'Segment_Goal_Category_Other',\r\n OutboundClick: 'Segment_Goal_Category_OutboundClick',\r\n PageView: 'Segment_Goal_Category_PageView',\r\n Purchase: 'Segment_Goal_Category_Purchase',\r\n RequestQuote: 'Segment_Goal_Category_RequestQuote',\r\n SignUp: 'Segment_Goal_Category_SignUp',\r\n SubmitLeadForm: 'Segment_Goal_Category_SubmitLeadForm',\r\n Subscribe: 'Segment_Goal_Category_Subscribe',\r\n Unassigned: 'Segment_Goal_Category_Unassigned',\r\n },\r\n\r\n [segmentationType.AdScenario]: {\r\n AutoAd: 'Segment_AdScenario_AutoAd',\r\n CreditCardAd: 'Segment_AdScenario_CreditCardAd',\r\n Other: 'Segment_AdScenario_Other',\r\n TourActivityAd: 'Segment_AdScenario_TourActivityAd',\r\n HealthInsuranceAd: 'Segment_AdScenario_HealthInsuranceAd',\r\n InsuranceServiceAd: 'Segment_AdScenario_InsuranceServiceAd',\r\n CruiseAd: 'Segment_AdScenario_CruiseAd',\r\n RealEstateServiceAd: 'Segment_AdScenario_RealEstateServiceAd',\r\n FinancialAdvisorAd: 'Segment_AdScenario_FinancialAdvisorAd',\r\n TaxServiceAd: 'Segment_AdScenario_TaxServiceAd',\r\n DoctorClinicAd: 'Segment_AdScenario_DoctorClinicAd',\r\n MortgageLenderAd: 'Segment_AdScenario_MortgageLenderAd',\r\n DebitCardAd: 'Segment_AdScenario_DebitCardAd',\r\n HomeServiceAd: 'Segment_AdScenario_HomeServiceAd',\r\n JobListingAd: 'Segment_AdScenario_JobListingAd',\r\n LegalServiceAd: 'Segment_AdScenario_LegalServiceAd',\r\n },\r\n};\r\n\r\n_.each(typeWithSameTexts, (defined, notDefined) => {\r\n keys[notDefined] = keys[defined];\r\n valueKeys[notDefined] = valueKeys[defined];\r\n});\r\n\r\nexport function localizeSegmentationType({\r\n i18n,\r\n type,\r\n}) {\r\n return i18n.getString(keys[type]);\r\n}\r\n\r\nexport function localizeSegmentationValue({\r\n i18n,\r\n type,\r\n value,\r\n}) {\r\n if (_.contains([\r\n segmentationType.HourOfTheDay,\r\n segmentationType.HourOfDay,\r\n ], type)) {\r\n const hour = parseInt(value, 10);\r\n\r\n if (hour === 0) {\r\n return i18n.getString('ImprovedAdScheduling_12AM_Start_Of_Day');\r\n }\r\n\r\n return i18n.getString(`ImprovedAdScheduling_${hour > 12 ? hour - 12 : hour}${hour < 12 ? 'AM' : 'PM'}`);\r\n } else if (_.contains([\r\n segmentationType.AudienceName,\r\n segmentationType.GoalName,\r\n ], type) || _.isNaN(Date.parse(value))) {\r\n const key = get(valueKeys, [type, value]);\r\n\r\n const localized = key ? i18n.getString(key) : value;\r\n\r\n if (type === segmentationType.AudienceName && localized === 'Users not in audience segments') {\r\n return i18n.getString('Segment_Audience_NoUser');\r\n }\r\n\r\n return localized;\r\n } else if (type !== segmentationType.Year) {\r\n const localized = i18n.formatDate(new Date(value), {\r\n timeZone: 'UTC',\r\n skeleton: 'yMd',\r\n });\r\n\r\n if (type === segmentationType.Week) {\r\n return i18n.getString('Segment_Week_Of_Date', { date: localized });\r\n }\r\n\r\n return localized;\r\n }\r\n\r\n return value;\r\n}\r\n","import _ from 'underscore';\r\nimport { segmentationTree } from './segmentation-tree';\r\n\r\nexport function isSegmentationTypeSupported({\r\n type,\r\n permissions = {},\r\n tree = segmentationTree,\r\n}) {\r\n return _.any(tree, ({ permission, children, name }) => {\r\n if (permission && !permissions[permission]) {\r\n return false;\r\n }\r\n\r\n if (children) {\r\n return isSegmentationTypeSupported({\r\n type,\r\n permissions,\r\n tree: children,\r\n });\r\n }\r\n\r\n return name === type;\r\n });\r\n}\r\n","import _ from 'underscore';\r\nimport { segmentationTypeEnum } from './segmentation-type-enum';\r\nimport { segmentationTree } from './segmentation-tree';\r\n\r\n// Return value has structure same as\r\n// 1. we used in @bingads-webui/json-tree-parser\r\n// 2. segmentationTree\r\nexport function getSupportedSegmentationTree({\r\n permissions = {},\r\n segmentationTypes = segmentationTypeEnum,\r\n}) {\r\n const isSupported = type => _.contains(['None', ...segmentationTypes], type);\r\n const hasPermission = permission => !permission || permissions[permission];\r\n\r\n return _.compact(_.map(segmentationTree, ({ permission, children, name }) => {\r\n if (!hasPermission(permission)) {\r\n return null;\r\n }\r\n\r\n if (children) {\r\n const allowed = _.filter(\r\n children,\r\n childItem => isSupported(childItem.name) && hasPermission(childItem.permission)\r\n );\r\n\r\n return _.isEmpty(allowed) ? null : {\r\n name,\r\n children: allowed,\r\n };\r\n }\r\n\r\n if (isSupported(name)) {\r\n return { name };\r\n }\r\n\r\n return null;\r\n }));\r\n}\r\n","import _ from 'underscore';\r\nimport { View } from 'backbone';\r\nimport template from './template.pug';\r\n\r\nexport class StatusPopupView extends View {\r\n events() {\r\n return {\r\n 'click .statuschangelink': this.onClick,\r\n };\r\n }\r\n\r\n /**\r\n * initialize view settings\r\n *\r\n * @param {Object} param - An object containing these default options for view:\r\n * @param {Object} param.statusOptions - status options to be shown in view\r\n * it should be an array of { name, value } objects\r\n * value is the value to be returned to user when status updated\r\n * name is the one to be used to generate text & icon style based, in the format of\r\n * text/title: search by key EntityStatus_$(name)\r\n * iconClass: status$(name)_icon\r\n * textClass: status$(name)\r\n * @param {Object} param.currentStatus - currentStatus, related to the {value} in statusOptions\r\n * @param {Object} param.i18n - the localization settings, by default return the provided key\r\n * @returns {void} void\r\n */\r\n initialize({\r\n statusOptions = [{ name: 'Enabled', value: 'Active' }, { name: 'Paused', value: 'UserPaused' }],\r\n currentStatus,\r\n i18n,\r\n }) {\r\n this.options = {\r\n items: this.getItemsForRender(statusOptions, i18n),\r\n i18n,\r\n currentStatus,\r\n };\r\n super.initialize(this.options);\r\n this.currentStatus = currentStatus;\r\n }\r\n\r\n /**\r\n * initialize status setting for rendering\r\n *\r\n * @param {Array} statusOptions - status options to be shown in view\r\n * it should be an array of { name, value } objects\r\n * value is the value to be returned to user when status updated\r\n * name is the one to be used to generate text & icon style based, in the format of\r\n * text/title: search by key EntityStatus_$(name)\r\n * iconClass: status$(name)_icon\r\n * textClass: status$(name)\r\n * @param {Object} i18n - the localization settings, by default return the provided key\r\n * @returns {Array} items for rendering, which includes\r\n * {text, title, iconClass, textClass, value} got based on name & value of statusOptions\r\n */\r\n getItemsForRender(statusOptions, i18n) {\r\n return _.map((statusOptions), (option) => {\r\n const iconClassPrefix = `status${option.name}`;\r\n\r\n return {\r\n title: i18n.getString(`EntityStatus_${option.name}`),\r\n text: i18n.getString(`EntityStatus_${option.name}`),\r\n iconClass: option.iconClass || `${iconClassPrefix}_icon`,\r\n textClass: iconClassPrefix,\r\n value: option.value || option.name,\r\n ariaLabel: i18n.getString(`EntityStatus_AriaLabel_${option.name}`),\r\n };\r\n });\r\n }\r\n\r\n render() {\r\n this.$el.html(template(this.options));\r\n\r\n return this;\r\n }\r\n\r\n setFocus() {\r\n this.$(`.clickable[data-value=\"${this.currentStatus}\"]`).focus();\r\n }\r\n\r\n onClick(event) {\r\n this.trigger('close', event.currentTarget.dataset.value);\r\n }\r\n}\r\n","import Promise from 'bluebird';\r\nimport { GridCustomizedPopupEditor } from '@bingads-webui-campaign/grid-customized-popup-editor';\r\nimport { StatusPopupView } from './status-popup-view';\r\n\r\n/**\r\n * Renders the popup editor for Status property.\r\n *\r\n * @param {String} currentStatus - current status of the item\r\n * @param {Array} param.statusOptions - status options to be shown in view\r\n * it should be an array of { name, value } objects\r\n * value is the value to be returned to user when status updated\r\n * name is the one to be used to generate text & icon style based, in the format of\r\n * text/title: search by key EntityStatus_$(name)\r\n * iconClass: status$(name)_icon\r\n * textClass: status$(name)\r\n * @param {Object} position - object to indicate the position of the table cell.\r\n * @param {Object} param.i18n - the localization settings, by default return the provided key\r\n * @param {String} param.className - allow custom class name for the container\r\n * @param {Boolean} param.isForVNext -- is being used for vNext grid\r\n * @param {boolean} param.adjustTopPosition - whether to adjust top position,\r\n default true\r\n * @return {Object} A promise that will resolve with the selected data.\r\n */\r\nexport function renderStatusPopupEditor({\r\n currentStatus, statusOptions, position, i18n, className, isForVNext, adjustTopPosition = true,\r\n}) {\r\n const statusPopupView = new StatusPopupView({\r\n currentStatus,\r\n statusOptions,\r\n i18n,\r\n }).render();\r\n\r\n const popupEditor = new GridCustomizedPopupEditor({\r\n editorView: statusPopupView,\r\n cellPosition: position,\r\n className: className || 'status-popupeditor',\r\n renderBelow: true,\r\n adjustTopPosition,\r\n parentContainerSelector: isForVNext ? '.grid-and-disclaim-container' : null,\r\n }).render();\r\n\r\n return new Promise((resolve) => {\r\n popupEditor.on('close', status => resolve(status));\r\n });\r\n}\r\n","import _ from 'underscore';\r\nimport {\r\n getPerformanceColumns,\r\n conversionsColumns,\r\n conversionsColumnsWithFluctuation,\r\n getConversionColumns,\r\n competitiveColumns,\r\n callDetailsColumns,\r\n ColumnAveragePosition,\r\n ColumnCallForwarding,\r\n ColumnClickSharePercent,\r\n ColumnTotalSpend,\r\n ColumnTopImpressionRate,\r\n ColumnAbsoluteTopImpressionRate,\r\n ColumnAuctionLostToAdQualityPercent,\r\n ColumnAuctionLostToLandingPercent,\r\n ColumnAuctionLostToBidPercent,\r\n ColumnExactMatchImpressionSharePercent,\r\n ColumnTopImpressionSharePercent,\r\n ColumnTopImpressionShareLostToBudget,\r\n ColumnTopImpressionShareLostToRank,\r\n ColumnAbsoluteTopImpressionSharePercent,\r\n ColumnAbsoluteTopImpressionShareLostToBudget,\r\n ColumnAbsoluteTopImpressionShareLostToRank,\r\n ColumnViewThroughConversions,\r\n ColumnViewThroughConversionsCredit,\r\n ColumnAudienceAuctionWonPercent,\r\n ColumnAudienceTopISLostToBudgetPercent,\r\n ColumnAudienceTopISLostToRankPercent,\r\n ColumnRelativeCTR,\r\n ColumnViewThroughConversionsRevenue,\r\n ColumnViewThroughConversionsCPA,\r\n ColumnViewThroughPartialConversionsCPA,\r\n ColumnViewThroughConversionsReturnOnAdSpend,\r\n ColumnViewThroughConversionsRate,\r\n ColumnViewThroughPartialConversionsRate,\r\n ColumnNewCustomerConversions,\r\n ColumnNewCustomerRevenue,\r\n ColumnNewCustomerConversionRate,\r\n ColumnNewCustomerCPA,\r\n ColumnNewCustomerRevenueOnAdSpend,\r\n} from '@bingads-webui-campaign/campaignui-common-columns';\r\nimport { getColumnConversions } from '@bingads-webui-campaign/column-conversions';\r\n\r\nclass CategoryConfigBuilder {\r\n /**\r\n * Builder class helps to generate a category config for projection-grid\r\n * column chooser plugin\r\n * @param {Object} options -\r\n * @param {ColumnsConfigBuilder} options.columnsBuilder - The parent columns builder\r\n * @param {string} options.name - Name of the category\r\n */\r\n constructor({ columnsBuilder, name }) {\r\n this.columnsBuilder = columnsBuilder;\r\n this.name = name;\r\n this.columns = [];\r\n }\r\n\r\n /**\r\n * Add a single column to the category\r\n * @param {Class} Column - The column class to Add\r\n * @returns {CategoryConfigBuilder} - The builder itself\r\n */\r\n addColumn(Column) {\r\n this.columns.push(Column);\r\n return this;\r\n }\r\n\r\n /**\r\n * Add a list of columns to the category\r\n * @param {Class[]} columns - The column classes\r\n * @returns {CategoryConfigBuilder} - The builder itself\r\n */\r\n addColumns(columns) {\r\n _.each(columns, Column => this.addColumn(Column));\r\n return this;\r\n }\r\n\r\n /**\r\n * Get the category config\r\n * @param {Object} options -\r\n * @param {I18n} options.i18n - I18n provider\r\n * @param {permissions} options.permissions - the permissions\r\n * @returns {Object} - The category config\r\n */\r\n getCategoryConfig({ i18n, permissions }) {\r\n return {\r\n name: i18n.getString(this.name),\r\n options: _.map(this.columns, (Column) => {\r\n const { name, title } = new Column({ i18n, permissions });\r\n return {\r\n key: name,\r\n name: title,\r\n selectOption: this.columnsBuilder.isColumnLocked(Column) ? 'locked' : 'optional',\r\n };\r\n }),\r\n };\r\n }\r\n}\r\n\r\nexport class ColumnsConfigBuilder {\r\n /**\r\n * Builder class helps to generate columns config and column chooser plugin\r\n * config for projection-grid\r\n * @param {Object} options -\r\n * @param {Object} options.Permissions - Permissions\r\n */\r\n constructor(options) {\r\n this.categories = [];\r\n this.locked = [];\r\n this.helpIds = {};\r\n\r\n let IsVideoAdsPerfMetricsEnabled = false; //eslint-disable-line\r\n let isCPSEnabled = false; //eslint-disable-line\r\n let isInstallPerformanceColumnsEnabled = false; //eslint-disable-line\r\n let isAppCampaignNewCampaignGridColumnsEnabled = false;\r\n let isNewCustomerAcquisitionColumnsEnabled = false; //eslint-disable-line\r\n try {\r\n IsVideoAdsPerfMetricsEnabled = options.Permissions.IsVideoAdsPerfMetricsEnabled; //eslint-disable-line\r\n isCPSEnabled = options.Permissions.dynamic && options.Permissions.dynamic.CPSReporting; //eslint-disable-line\r\n isInstallPerformanceColumnsEnabled = options.Permissions.dynamic && options.Permissions.dynamic.InstallPerformanceColumns; //eslint-disable-line\r\n isAppCampaignNewCampaignGridColumnsEnabled = options.Permissions.dynamic && options.Permissions.dynamic.AppCampaignNewCampaignGridColumns; //eslint-disable-line\r\n isNewCustomerAcquisitionColumnsEnabled = options.Permissions.dynamic && options.Permissions.dynamic.NewCustomerAcquisition; //eslint-disable-line\r\n } catch (e) { } //eslint-disable-line\r\n\r\n this.isVideoAdsPerfMetricsEnabled = IsVideoAdsPerfMetricsEnabled;\r\n this.isCPSEnabled = isCPSEnabled;\r\n this.isInstallPerformanceColumnsEnabled = isInstallPerformanceColumnsEnabled;\r\n this.isAppCampaignNewCampaignGridColumnsEnabled = isAppCampaignNewCampaignGridColumnsEnabled;\r\n this.isNewCustomerAcquisitionColumnsEnabled = isNewCustomerAcquisitionColumnsEnabled;\r\n\r\n this.performanceColumns = getPerformanceColumns({\r\n IsVideoAdsPerfMetricsEnabled,\r\n });\r\n }\r\n\r\n /**\r\n * Add a column category\r\n * @param {string} name - Name of the category\r\n * @param {CategoryDirectorCallback} director - A callback to direct the category buidler\r\n * @returns {ColumnsConfigBuilder} - The builder itself\r\n */\r\n addCategory(name, director) {\r\n const categoryBuilder = new CategoryConfigBuilder({ columnsBuilder: this, name });\r\n\r\n this.categories.push(categoryBuilder);\r\n /**\r\n * @callback ColumnsConfigBuilder\r\n * @param {CategoryConfigBuilder} categoryBuilder - The builder to create a column category\r\n * @returns {void}\r\n */\r\n director(categoryBuilder);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Set the locked columns\r\n * @param {Class[]} columns - The classes of the locked columns\r\n * @returns {ColumnsConfigBuilder} - The builder itself\r\n */\r\n setLockedColumns(columns) {\r\n this.locked.push(...columns);\r\n return this;\r\n }\r\n\r\n /**\r\n * Check if a clumn is locked\r\n * @param {Class} column - The column to check\r\n * @returns {boolean} - True if the column is locked\r\n */\r\n isColumnLocked(column) {\r\n return _.contains(this.locked, column);\r\n }\r\n\r\n /**\r\n * Set the selected columns\r\n * @param {Class[]} columns - The classes of the selected columns\r\n * @returns {ColumnsConfigBuilder} - The builder itself\r\n */\r\n setSelectedColumns(columns) {\r\n this.selected = columns;\r\n return this;\r\n }\r\n\r\n /**\r\n * Create the columns config\r\n * @param {Object} options - The column constructor options\r\n * @returns {Object[]} - A list of column config\r\n */\r\n getColumnsConfig(options) {\r\n return _.chain(this.categories)\r\n .map(_.property('columns'))\r\n .concat(this.locked)\r\n .flatten()\r\n .uniq()\r\n .map(Column => new Column(options).toJSON())\r\n .value();\r\n }\r\n\r\n /**\r\n * Create the columns config for column conversion\r\n * which compensate for legacy shared column oject\r\n * @param {Object} options - The column constructor options\r\n * @returns {Object[]} - A list of column config\r\n */\r\n getAllColumns(options) {\r\n return _.chain(this.categories)\r\n .map(_.property('columns'))\r\n .concat(this.locked)\r\n .flatten()\r\n .uniq()\r\n .map(Column => new Column(options))\r\n .value();\r\n }\r\n\r\n /**\r\n * Create the column chooser config\r\n * @param {Object} options -\r\n * @param {I18n} options.i18n - The i18n provider\r\n * @param {boolean} options.patchQuery -\r\n * True if the column chooser will patch the query with $select option\r\n * @param {Object} options.Columns -\r\n * The preference JSData resource to get saved columns\r\n * @param {Object} options.SelectedColumns -\r\n * The preference JSData resource to get current selected columns\r\n * @param {Object} options.LegacyColumns -\r\n * The preference JSData resource to get legacy saved columns\r\n * @param {Object} options.SelectedColumns -\r\n * The preference JSData resource to get current selected columns\r\n * @param {Object} options.LegacyGridFlag\r\n * The preference JSData resource to get the migration flag of legacy grid\r\n * @param {Object} options.nameFromLegacy\r\n * The hash object to map legacy column name to new grid column name\r\n * @param {Object} options.mandatoryProperties -\r\n * A property array which is not appear in column chooser but in $select option\r\n * @param {Object} options.CustomColumns -\r\n * The preference JSData resource to get custom columns\r\n * @param {Object} options.customColumnConfig -\r\n * A hash containing column chooser configuration for custom columns\r\n * @param {Object} options.permissions -\r\n * The permissions, may be null.\r\n * @returns {Object} - The column chooser config object\r\n */\r\n getColumnChooserConfig({\r\n i18n,\r\n patchQuery,\r\n Columns,\r\n SelectedColumns,\r\n LegacyColumns,\r\n LegacySelectedColumns,\r\n LegacyGridFlag,\r\n nameFromLegacy,\r\n mandatoryProperties = [],\r\n CustomColumns,\r\n customColumnConfig,\r\n permissions = {},\r\n }) {\r\n const { dynamic = {} } = permissions;\r\n const {\r\n ColumnConversion: IsColumnConversionEnabled,\r\n } = dynamic;\r\n\r\n return {\r\n categories: _.map(\r\n this.categories,\r\n category => category.getCategoryConfig({ i18n, permissions })\r\n ),\r\n selected: _.map(this.selected, Column => new Column({ i18n }).name),\r\n locked: _.map(this.locked, Column => new Column({ i18n }).name),\r\n\r\n ...IsColumnConversionEnabled ? {\r\n columnConversions: getColumnConversions(this.getAllColumns({ i18n })),\r\n } : {},\r\n\r\n patchQuery: Boolean(patchQuery),\r\n Columns,\r\n SelectedColumns,\r\n LegacyColumns,\r\n LegacySelectedColumns,\r\n LegacyGridFlag,\r\n nameFromLegacy,\r\n i18n,\r\n mandatoryProperties,\r\n CustomColumns,\r\n customColumnConfig,\r\n };\r\n }\r\n\r\n // Helper function\r\n addCategoryWithoutSomeColumns(unfilteredColumns, categoryName, blacklist) {\r\n const filteredColumns =\r\n _.reject(unfilteredColumns, column => _.contains(blacklist, column));\r\n return this.addCategory(categoryName, category => category.addColumns(filteredColumns));\r\n }\r\n\r\n /**\r\n * Add the performance category for ad groups\r\n * @returns {ColumnsConfigBuilder} - The builder itself\r\n */\r\n addPerformanceCategoryForAdGroups({\r\n IsAvgPositionDeprecationPhase2Enabled,\r\n }) {\r\n const perfColumns = getPerformanceColumns({\r\n IsVideoAdsPerfMetricsEnabled: this.isVideoAdsPerfMetricsEnabled,\r\n isCPSEnabled: this.isCPSEnabled,\r\n });\r\n const columns = _.chain(perfColumns)\r\n .union([\r\n ColumnTopImpressionRate,\r\n ColumnAbsoluteTopImpressionRate,\r\n ])\r\n .value();\r\n\r\n return this.addCategoryWithoutSomeColumns(columns, 'Performance', _.compact([\r\n IsAvgPositionDeprecationPhase2Enabled && ColumnAveragePosition,\r\n ]));\r\n }\r\n\r\n /**\r\n * Add the performance category for campaign\r\n * @returns {ColumnsConfigBuilder} - The builder itself\r\n */\r\n addPerformanceCategoryForCampaign({\r\n withFluctuations,\r\n IsAvgPositionDeprecationPhase2Enabled,\r\n getCampaignTypeGlobalFilter,\r\n } = {}) {\r\n const campaignTypeGloabalFilter = _.isFunction(getCampaignTypeGlobalFilter) && getCampaignTypeGlobalFilter();\r\n\r\n // app campaign related perf columns to be included when global gilter is set to App campaign (128) or All (65535)\r\n const includeAppCampaignColumns = campaignTypeGloabalFilter === 128 || campaignTypeGloabalFilter === 65535;\r\n\r\n const perfColumns = getPerformanceColumns({\r\n withFluctuations,\r\n IsVideoAdsPerfMetricsEnabled: this.isVideoAdsPerfMetricsEnabled,\r\n isCPSEnabled: this.isCPSEnabled,\r\n isAppCampaignNewCampaignGridColumnsEnabled: this.isAppCampaignNewCampaignGridColumnsEnabled && includeAppCampaignColumns,\r\n });\r\n\r\n const columns = _.union(perfColumns, [\r\n ColumnTopImpressionRate,\r\n ColumnAbsoluteTopImpressionRate,\r\n ]);\r\n\r\n return this.addCategoryWithoutSomeColumns(columns, 'Performance', _.compact([\r\n IsAvgPositionDeprecationPhase2Enabled && ColumnAveragePosition,\r\n ]));\r\n }\r\n\r\n /**\r\n * Add the performance category for ads\r\n * @returns {ColumnsConfigBuilder} - The builder itself\r\n */\r\n addPerformanceCategoryForAd({\r\n IsAvgPositionDeprecationPhase2Enabled,\r\n IsAvgPositionDeprecationPhase1Enabled,\r\n }) {\r\n const withProminence = _.union(\r\n this.performanceColumns,\r\n IsAvgPositionDeprecationPhase1Enabled ? [\r\n ColumnTopImpressionRate,\r\n ColumnAbsoluteTopImpressionRate,\r\n ] : []\r\n );\r\n return this.addCategoryWithoutSomeColumns(withProminence, 'Performance', _.compact([\r\n ColumnTotalSpend,\r\n IsAvgPositionDeprecationPhase2Enabled && ColumnAveragePosition,\r\n ]));\r\n }\r\n\r\n /**\r\n * Add the performance category for positive keywords grid\r\n * @returns {ColumnsConfigBuilder} - The builder itself\r\n */\r\n addPerformanceCategoryForKeywords({\r\n IsAvgPositionDeprecationPhase2Enabled,\r\n }) {\r\n const columns = _.chain(this.performanceColumns)\r\n .union([\r\n ColumnTopImpressionRate,\r\n ColumnAbsoluteTopImpressionRate,\r\n ])\r\n .difference([\r\n ColumnTotalSpend,\r\n ])\r\n .value();\r\n\r\n return this.addCategoryWithoutSomeColumns(columns, 'Performance', _.compact([\r\n IsAvgPositionDeprecationPhase2Enabled && ColumnAveragePosition,\r\n ]));\r\n }\r\n\r\n /**\r\n * Add the performance category for demographics grids\r\n * @returns {ColumnsConfigBuilder} - The builder itself\r\n */\r\n addPerformanceCategoryForDemographics({\r\n IsAvgPositionDeprecationPhase2Enabled,\r\n IsAvgPositionDeprecationPhase1Enabled,\r\n }) {\r\n const withProminence = _.union(\r\n this.performanceColumns,\r\n IsAvgPositionDeprecationPhase1Enabled ? [\r\n ColumnTopImpressionRate,\r\n ColumnAbsoluteTopImpressionRate,\r\n ] : []\r\n );\r\n\r\n return this.addCategoryWithoutSomeColumns(withProminence, 'Performance', _.compact([\r\n ColumnTotalSpend,\r\n IsAvgPositionDeprecationPhase2Enabled && ColumnAveragePosition,\r\n ]));\r\n }\r\n\r\n /**\r\n * Add the conversions category (add all conversion metrics when pilot is enabled)\r\n * @returns {ColumnsConfigBuilder} - The builder itself\r\n */\r\n addConversionsCategory({\r\n withFluctuations,\r\n withPartialConversions,\r\n IsViewThroughConversionEnabled,\r\n IsViewThroughConversionsRevenueEnabled,\r\n IsColumnConversionEnabled,\r\n ColumnFilter,\r\n isCPSEnabled,\r\n isInstallColumnsEnabled,\r\n isConversionValueRuleColumnsEnabled,\r\n } =\r\n {\r\n withFluctuations: false,\r\n IsViewThroughConversionEnabled: false,\r\n IsViewThroughConversionsRevenueEnabled: false,\r\n ColumnFilter: null,\r\n isCPSEnabled: false,\r\n isInstallColumnsEnabled: false,\r\n isConversionValueRuleColumnsEnabled: false,\r\n }) {\r\n let columnsToUse;\r\n if (IsColumnConversionEnabled) {\r\n const baseConversionColumns =\r\n getConversionColumns({\r\n withFluctuations,\r\n withPartialConversions,\r\n isCPSEnabled,\r\n isInstallColumnsEnabled,\r\n isConversionValueRuleColumnsEnabled,\r\n isNewCustomerAcquisitionColumnsEnabled: this.isNewCustomerAcquisitionColumnsEnabled,\r\n });\r\n columnsToUse = [\r\n ...baseConversionColumns,\r\n\r\n ...(IsViewThroughConversionEnabled && withPartialConversions ?\r\n [ColumnViewThroughConversionsCredit] : []),\r\n\r\n ...(IsViewThroughConversionEnabled && !withPartialConversions ?\r\n [ColumnViewThroughConversions] : []),\r\n\r\n ...(IsViewThroughConversionsRevenueEnabled && withPartialConversions ? [\r\n ColumnViewThroughConversionsRevenue,\r\n ColumnViewThroughPartialConversionsCPA,\r\n ColumnViewThroughConversionsReturnOnAdSpend,\r\n ColumnViewThroughPartialConversionsRate,\r\n ] : []),\r\n\r\n ...(IsViewThroughConversionsRevenueEnabled && !withPartialConversions ? [\r\n ColumnViewThroughConversionsRevenue,\r\n ColumnViewThroughConversionsCPA,\r\n ColumnViewThroughConversionsReturnOnAdSpend,\r\n ColumnViewThroughConversionsRate,\r\n ] : []),\r\n\r\n ...(this.isNewCustomerAcquisitionColumnsEnabled ? [\r\n ColumnNewCustomerConversions,\r\n ColumnNewCustomerRevenue,\r\n ColumnNewCustomerConversionRate,\r\n ColumnNewCustomerCPA,\r\n ColumnNewCustomerRevenueOnAdSpend,\r\n ] : []),\r\n ];\r\n } else {\r\n columnsToUse = [\r\n ...(withFluctuations ? conversionsColumnsWithFluctuation : conversionsColumns),\r\n ...(IsViewThroughConversionEnabled ? [ColumnViewThroughConversions] : []),\r\n ...(IsViewThroughConversionsRevenueEnabled ? [\r\n ColumnViewThroughConversionsRevenue,\r\n ColumnViewThroughConversionsCPA,\r\n ColumnViewThroughConversionsReturnOnAdSpend,\r\n ColumnViewThroughConversionsRate,\r\n ] : []),\r\n ];\r\n }\r\n\r\n if (typeof (ColumnFilter) === 'function') {\r\n columnsToUse = _.filter(columnsToUse, (value, key, index) =>\r\n ColumnFilter(conversionsColumns, value, key, index));\r\n }\r\n\r\n return this.addCategory('Conversions', category => category.addColumns(columnsToUse));\r\n }\r\n\r\n /**\r\n * Add the competitive category\r\n * @returns {ColumnsConfigBuilder} - The builder itself\r\n */\r\n addCompetitiveCategoryForKeywords() {\r\n const columns = _.chain(competitiveColumns)\r\n .union([\r\n ColumnExactMatchImpressionSharePercent,\r\n ColumnTopImpressionSharePercent,\r\n ColumnTopImpressionShareLostToBudget,\r\n ColumnTopImpressionShareLostToRank,\r\n ColumnAbsoluteTopImpressionSharePercent,\r\n ColumnAbsoluteTopImpressionShareLostToBudget,\r\n ColumnAbsoluteTopImpressionShareLostToRank,\r\n ])\r\n .difference([\r\n ColumnAuctionLostToAdQualityPercent,\r\n ColumnAuctionLostToLandingPercent,\r\n ColumnAuctionLostToBidPercent,\r\n ])\r\n .value();\r\n\r\n return this.addCategory('Competitive', category => category.addColumns(columns));\r\n }\r\n\r\n /**\r\n * Add the competitive category for campaign or ad groups grid\r\n * @returns {ColumnsConfigBuilder} - The builder itself\r\n */\r\n addCompetitiveCategoryForCampaignOrAdGroups({\r\n IsAudienceSOVEnabled,\r\n }) {\r\n const columns = _.chain(competitiveColumns)\r\n .union([\r\n ColumnExactMatchImpressionSharePercent,\r\n ColumnTopImpressionSharePercent,\r\n ColumnTopImpressionShareLostToBudget,\r\n ColumnTopImpressionShareLostToRank,\r\n ColumnAbsoluteTopImpressionSharePercent,\r\n ColumnAbsoluteTopImpressionShareLostToBudget,\r\n ColumnAbsoluteTopImpressionShareLostToRank,\r\n ])\r\n .union(IsAudienceSOVEnabled ? [\r\n ColumnAudienceAuctionWonPercent,\r\n ColumnAudienceTopISLostToBudgetPercent,\r\n ColumnAudienceTopISLostToRankPercent,\r\n ColumnRelativeCTR,\r\n ] : [])\r\n .difference([\r\n ColumnAuctionLostToAdQualityPercent,\r\n ColumnAuctionLostToLandingPercent,\r\n ColumnAuctionLostToBidPercent,\r\n ])\r\n .value();\r\n\r\n return this.addCategory('Competitive', category => category.addColumns(columns));\r\n }\r\n\r\n /**\r\n * Add the competitive category for performance targets\r\n * @returns {ColumnsConfigBuilder} - The builder itself\r\n */\r\n addCompetitiveCategoryForPerformanceTargets() {\r\n return this.addCategoryWithoutSomeColumns(competitiveColumns, 'Competitive', [ColumnClickSharePercent]);\r\n }\r\n\r\n /**\r\n * Add the call details category\r\n * @returns {ColumnsConfigBuilder} - The builder itself\r\n */\r\n addCallDetailsCategory() {\r\n return this.addCategory('CallDetails', category => category.addColumns(callDetailsColumns));\r\n }\r\n\r\n /**\r\n * Add the call details category for campaigns\r\n * @returns {ColumnsConfigBuilder} - The builder itself\r\n */\r\n addCallDetailsCategoryForCampaigns() {\r\n return this.addCategoryWithoutSomeColumns(callDetailsColumns, 'CallDetails', [ColumnCallForwarding]);\r\n }\r\n\r\n /**\r\n * Add the call details category for performance targets\r\n * @returns {ColumnsConfigBuilder} - The builder itself\r\n */\r\n addCallDetailsCategoryForPerformanceTargets() {\r\n return this.addCategoryWithoutSomeColumns(callDetailsColumns, 'CallDetails', [ColumnCallForwarding]);\r\n }\r\n}\r\n","import _ from 'underscore';\r\n\r\nexport function updateGridQuery(gridView, filter, refresh = true, skipFilterOptions = false) {\r\n const currentQuery = gridView.get('query');\r\n let newQuery = null;\r\n\r\n if (filter && filter.query && !_.isEmpty(filter.query)) {\r\n newQuery = _.defaults({\r\n filter: filter.query,\r\n options: _.defaults({\r\n filterOptions: skipFilterOptions ? undefined : _.extend(filter.odataOptions, _.pick(filter, 'schema')),\r\n }, currentQuery.options),\r\n }, currentQuery);\r\n } else {\r\n newQuery = _.omit(currentQuery, 'filter');\r\n }\r\n\r\n gridView.set({\r\n query: newQuery,\r\n });\r\n\r\n if (refresh) {\r\n gridView.refresh(true);\r\n }\r\n}\r\n","/* eslint-disable no-param-reassign */\r\n\r\nimport Promise from 'bluebird';\r\nimport _ from 'underscore';\r\n\r\nimport { FilterAgent } from '@bingads-webui/filter-agent';\r\nimport { fromFilterEntityToLegacyFilter } from '@bingads-webui-campaign/filter-converter';\r\nimport { updateGridQuery } from '../query-util';\r\n\r\nfunction propagateWaterfallFilterToLegacyGrids({\r\n filter,\r\n waterfallEvent,\r\n legacyGridName,\r\n legacyDeps: {\r\n config,\r\n stateManager,\r\n preferences,\r\n },\r\n}) {\r\n const legacyWaterfall = filter && !_.isEmpty(filter.query) ?\r\n fromFilterEntityToLegacyFilter(filter) : null;\r\n const usePreferencesService = _.result(config.get('Permissions'), 'IsUsePreferencesServiceEnabled');\r\n\r\n // set stateManager for legacy grid that need waterfall filter value\r\n const setPromise = [];\r\n const data = {\r\n FilterExpressions: legacyWaterfall,\r\n Id: '',\r\n Name: `${legacyGridName}Filter`,\r\n };\r\n\r\n if (usePreferencesService === true) {\r\n const prefix = config.get('StateManagerKeyPrefix');\r\n const preferenceData = {\r\n Name: `${prefix}${legacyGridName}_quickfilter`,\r\n Data: data,\r\n };\r\n\r\n setPromise.push(preferences.setAtUserLevel(preferenceData));\r\n }\r\n\r\n setPromise.push(stateManager.setItem('permanent', `${legacyGridName}_quickfilter`, data));\r\n\r\n Promise.all(setPromise).then(() => {\r\n window.App.trigger(waterfallEvent);\r\n });\r\n}\r\n\r\nfunction showExceededSaveLimitError(i18n, filterConfig, tabView) {\r\n const errMsg = i18n.getString('Error_Campaign_API_FiltersExceedsMaxCount')\r\n .replace('{0}', filterConfig.maxSavedFilterLimit);\r\n tabView.alertHelper.showAlert(errMsg);\r\n}\r\n\r\nexport function initializeFilterAgent({\r\n tabView,\r\n gridView,\r\n toolbar,\r\n legacyDeps,\r\n customFilterUIChangeListener,\r\n gridToolbarGroup,\r\n legacyGridName,\r\n}) {\r\n const { filterConfig } = tabView;\r\n const { i18n } = filterConfig;\r\n const isLabelEnabled = _.isObject(filterConfig.entitySchema.properties.Labels);\r\n\r\n filterConfig.menu = _.defaults({\r\n customItems: isLabelEnabled ? [\r\n {\r\n type: 'dropdown-divider',\r\n },\r\n {\r\n text: i18n.getString('Filter_By_Label'),\r\n onClick: () => {\r\n tabView.filterAgent.showFilterEditor({\r\n Labels: {\r\n $containsall: undefined,\r\n },\r\n });\r\n },\r\n },\r\n ] : [],\r\n }, filterConfig.menu);\r\n\r\n tabView.filterAgent = new FilterAgent(_.extend(filterConfig, {\r\n toolbarView: toolbar,\r\n filterService: tabView.filterService,\r\n }));\r\n\r\n tabView.listenTo(tabView.filterAgent, 'filter-ui-change', (state) => {\r\n if (customFilterUIChangeListener) {\r\n customFilterUIChangeListener(state);\r\n } else {\r\n tabView.setState(_.extend(tabView.getState(), state));\r\n tabView.viewModel.showToolBar(state.showToolBar);\r\n\r\n // do the hide/show toolbar operation\r\n if (state.showToolBar && gridToolbarGroup) {\r\n gridToolbarGroup.showAllToolbars();\r\n } else if (!state.showToolBar && gridToolbarGroup) {\r\n gridToolbarGroup.hideAllToolbars();\r\n }\r\n if (state.showFilterBar) {\r\n tabView.setChild('filter-bar', tabView.filterAgent.getFilterBar());\r\n }\r\n if (state.showFilterEditor) {\r\n tabView.setChild('filter-editor', tabView.filterAgent.getFilterEditor());\r\n }\r\n }\r\n gridView.refresh();\r\n });\r\n\r\n // TODO: switch this to use filter service, so that we don't rely on the UI\r\n // elements of the FilterAgent to be ready before apply filter to the gridView\r\n tabView.listenTo(tabView.filterAgent, 'filter-state-changed', ({ filter, quickFilter }, subStatus) => {\r\n updateGridQuery(gridView, filter);\r\n\r\n if (subStatus === 'quick-filter-applied' && quickFilter && filterConfig.waterfallEvent) {\r\n propagateWaterfallFilterToLegacyGrids({\r\n filter: quickFilter,\r\n waterfallEvent: filterConfig.waterfallEvent,\r\n legacyGridName: legacyGridName || tabView.getChild('grid').grid.config.legacyGridName,\r\n legacyDeps,\r\n });\r\n }\r\n });\r\n\r\n tabView.listenTo(tabView.filterAgent, 'filter-operation-failed', (errorData) => {\r\n if (errorData.message === 'ExceededSaveLimit') {\r\n showExceededSaveLimitError(i18n, filterConfig, tabView);\r\n } else {\r\n tabView.alertHelper.showUnknownError();\r\n }\r\n });\r\n\r\n tabView.listenTo(tabView.filterAgent, 'filter-max-reached', () => {\r\n showExceededSaveLimitError(i18n, filterConfig, tabView);\r\n });\r\n}\r\n","import _ from 'underscore';\r\nimport Promise from 'bluebird';\r\n\r\nexport default ({\r\n gridName,\r\n dateUtil,\r\n state,\r\n getSegPreference,\r\n getSegType,\r\n segmentTimeChecker,\r\n fetchPaginationConfig,\r\n customColumnPreference,\r\n}) => {\r\n const formatDate = date => dateUtil.format(date, 'M/d/yyyy');\r\n const services = [state.getPromise('$daterange'), fetchPaginationConfig(gridName, 50)];\r\n if (getSegPreference && _.isFunction(getSegPreference)) {\r\n services.push(getSegPreference(gridName));\r\n }\r\n if (customColumnPreference) {\r\n services.push(customColumnPreference.getCustomColumnsPreference(gridName));\r\n }\r\n\r\n return Promise\r\n .all(services)\r\n .spread(((dateRange, { pageSize, orderbyInfo, sortableHeader }) => {\r\n const result = {\r\n dataSource: {\r\n query: {},\r\n options: {},\r\n },\r\n pageable: {},\r\n plugins: {\r\n pagination: {},\r\n },\r\n };\r\n\r\n result.pageable.pageSize = pageSize;\r\n result.plugins.pagination.pageSize = pageSize;\r\n\r\n result.dataSource.query.endDate = formatDate(dateRange.end);\r\n result.dataSource.query.startDate = formatDate(dateRange.start);\r\n\r\n if (dateRange.compared) {\r\n result.dataSource.query.comparisonEndDate = formatDate(dateRange.compared.end);\r\n result.dataSource.query.comparisonStartDate = formatDate(dateRange.compared.start);\r\n }\r\n\r\n if (getSegType && _.isFunction(getSegType)) {\r\n const segType = getSegType(gridName);\r\n if (segType && segType.segmentationType !== 'None' && segmentTimeChecker.isTimeRangeValid(segType.segmentationType)) {\r\n result.dataSource.query.SegmentationTypes = segType.segmentationType;\r\n }\r\n }\r\n\r\n if (orderbyInfo && orderbyInfo.length > 0) {\r\n result.dataSource.orderby = orderbyInfo;\r\n result.sortableHeader = _.pick(sortableHeader, 'name', 'directionIndex');\r\n }\r\n\r\n return result;\r\n }));\r\n};\r\n","/* istanbul ignore file */\r\nimport $ from 'jquery';\r\nimport _ from 'underscore';\r\nimport { AlertHelper } from '@bingads-webui-campaign/alert-helper';\r\nimport { withUiBlock } from '@bingads-webui/uiblocker';\r\n\r\n// complex fields will impact value of other fields\r\nconst complexFields = ['EndDate', 'Status'];\r\n\r\nfunction normalizeDate(i18n, value) {\r\n return value ? i18n.formatDate(new Date(value), { raw: 'MM/dd/yyyy', timeZone: 'UTC' }) : null;\r\n}\r\n\r\nexport function inlineEditSave({\r\n id,\r\n fieldName,\r\n updatedItem,\r\n additionalPayload = {},\r\n disableBulk = false,\r\n refreshGrid = false,\r\n}, {\r\n view,\r\n gridView,\r\n resource,\r\n scenario,\r\n i18n,\r\n i18nErrors,\r\n editorView,\r\n editorViewCallbackAfterUpdate,\r\n importNotificationCallback,\r\n isDateType = false,\r\n customBlockerTarget = null,\r\n}) {\r\n const payload = _.clone(additionalPayload);\r\n // grid load will get date with ISO format: 2018-04-05T00:00:00.000Z,\r\n // we use bulk upsert api to do inline update, but bulk upsert cannot use the ISO format\r\n // as MT seems doing some sepcial transformation with this format\r\n // to fix this, we upsert with a MM/dd/yyyy format, but update grid with ISO format\r\n const $el = gridView ? gridView.$el : view.grid.gridView.$el;\r\n const uiBlockerTarget = customBlockerTarget ? $(customBlockerTarget) : $el;\r\n\r\n if (updatedItem) {\r\n payload[fieldName] = isDateType ? normalizeDate(i18n, updatedItem[fieldName]) : updatedItem[fieldName];\r\n } else {\r\n payload[fieldName] = null;\r\n }\r\n\r\n resource\r\n .update(id, payload, disableBulk ? undefined : { adapter: 'bulk' })\r\n .finally(withUiBlock(uiBlockerTarget))\r\n .then(() => {\r\n if (editorViewCallbackAfterUpdate && _.isFunction(editorViewCallbackAfterUpdate)) {\r\n editorViewCallbackAfterUpdate();\r\n }\r\n\r\n // show import related notifications if any\r\n if (importNotificationCallback && _.isFunction(importNotificationCallback)) {\r\n importNotificationCallback();\r\n }\r\n\r\n if (refreshGrid || _.contains(complexFields, fieldName)) {\r\n view.grid.gridView.refresh(true);\r\n } else if (updatedItem) {\r\n view.grid.gridView.trigger('didEdit', updatedItem);\r\n }\r\n })\r\n .catch((response) => {\r\n const errorMapping = {};\r\n const unexpectedError = i18n.getString('ErrorNumber_-1');\r\n\r\n if (!response || !response.errors) {\r\n errorMapping[fieldName] = unexpectedError;\r\n } else {\r\n const errors = i18nErrors.getBulkApiErrors(response.errors, scenario);\r\n\r\n if (!errors || !errors[0] || !errors[0].message) {\r\n errorMapping[fieldName] = unexpectedError;\r\n } else {\r\n errorMapping[fieldName] = errors[0].message;\r\n }\r\n }\r\n\r\n if (editorView && _.isFunction(editorView.setErrors)) {\r\n editorView.setErrors(errorMapping);\r\n } else {\r\n const alertHelper = new AlertHelper({ i18n });\r\n alertHelper.showError(errorMapping[fieldName]);\r\n }\r\n });\r\n}\r\n\r\n","import * as PopupEditor from '@bingads-webui/popup-editor';\r\n\r\nexport function InlineEditableColumnPrompt({\r\n position, item, i18n, fieldName, customValidators = null, schema, saveModel,\r\n}) {\r\n PopupEditor.prompt({\r\n position,\r\n i18n,\r\n schema,\r\n model: item,\r\n fields: [fieldName],\r\n hasLabels: false,\r\n template: 'inline',\r\n customValidators,\r\n saveModel,\r\n parentContainerSelector: '.grid-and-disclaim-container',\r\n });\r\n}\r\n","import { parseIntBase64 } from '@bingads-webui-universal/primitive-utilities';\r\n\r\nexport function parseCompactedKeywords(selectedKeywordIds, matchTypes) {\r\n const matchTypeValues = {\r\n Exact: 1,\r\n Phrase: 2,\r\n Broad: 3,\r\n Content: 5,\r\n Predictive: 9,\r\n };\r\n const keywords = [];\r\n\r\n if (selectedKeywordIds && selectedKeywordIds.length > 0) {\r\n const keywordGroups = selectedKeywordIds.split(';');\r\n\r\n keywordGroups.forEach((group, index) => {\r\n if (group.length > 0) {\r\n const biddedMatchType = matchTypeValues[matchTypes[index]];\r\n group.split(',').forEach((item) => {\r\n keywords.push({\r\n KeywordId: parseIntBase64(item),\r\n BiddedMatchType: biddedMatchType,\r\n });\r\n });\r\n }\r\n });\r\n }\r\n\r\n return keywords;\r\n}\r\n\r\nexport const getTargetEntity = (event, view) => {\r\n const key = view.keyOfElement(event.target);\r\n\r\n return view.itemWithKey(key);\r\n};\r\n","\r\nexport function getGridDataParams(appConfig) {\r\n const currentCustomer = appConfig.get('CurrentCustomer');\r\n const currentCustomerId = currentCustomer ? currentCustomer.Id : undefined;\r\n const gridDataParameters = {};\r\n\r\n if (currentCustomerId) {\r\n gridDataParameters.CurrentCustomerId = currentCustomerId;\r\n }\r\n\r\n return gridDataParameters;\r\n}\r\n","import _ from 'underscore';\r\n\r\nfunction onAfterFindAll(options, data = {}) {\r\n if (_.any(data.errors, err => err.Code === 'TooMuchDataToDownload')) {\r\n this.showTooMuchDataError = true;\r\n }\r\n return data;\r\n}\r\n\r\nexport function setUpErrorHandling({\r\n gridView,\r\n dataSource,\r\n i18n,\r\n scope,\r\n}) {\r\n const view = gridView;\r\n // eslint-disable-next-line no-param-reassign\r\n dataSource.options.afterFindAll = _.bind(onAfterFindAll, view);\r\n view.showTooMuchDataError = false;\r\n view.tooMuchDataErrorText = (scope && scope.campaignId ?\r\n i18n.getString('Grid_SearchTerm_TooMuchDataError_CmpLvl') :\r\n i18n.getString('Grid_SearchTerm_TooMuchDataError'));\r\n}\r\n\r\n","import _ from 'underscore';\r\nimport { parseSync } from '@bingads-webui/safe-json';\r\n\r\nconst headlinePositionKey = ['Headline1', 'Headline2', 'Headline3', 'None'];\r\nconst descriptionPositionKey = ['Description1', 'Description2', 'None'];\r\n\r\nfunction endWithPeriod(text) {\r\n if ('.?!'.indexOf(text.slice(-1)) === -1) {\r\n return `${text}.`;\r\n }\r\n\r\n return text;\r\n}\r\n\r\nexport function combineDescriptions(textPart1, textPart2) {\r\n if (_.isEmpty(textPart1) && _.isEmpty(textPart2)) {\r\n return '';\r\n }\r\n\r\n if (_.isEmpty(textPart1)) {\r\n return endWithPeriod(textPart2);\r\n }\r\n\r\n if (_.isEmpty(textPart2)) {\r\n return endWithPeriod(textPart1);\r\n }\r\n\r\n let combinedText;\r\n\r\n if ('.?!'.indexOf(textPart1.slice(-1)) > -1) {\r\n combinedText = `${textPart1} ${textPart2}`;\r\n } else {\r\n combinedText = `${textPart1}. ${textPart2}`;\r\n }\r\n\r\n return endWithPeriod(combinedText);\r\n}\r\n\r\nexport function combineDescriptionArray(desArray) {\r\n if (!_.isArray(desArray)) {\r\n return '';\r\n }\r\n\r\n if (desArray.length < 2) {\r\n return desArray[0];\r\n }\r\n\r\n return combineDescriptions(desArray[0], desArray[1]);\r\n}\r\n\r\nexport function getPreviewList(data, positionKey) {\r\n if (!_.isArray(data)) {\r\n return [];\r\n }\r\n\r\n const list = _.mapObject(_.invert(positionKey), () => []);\r\n _.each(data, (item) => {\r\n if (!_.isEmpty(_.result(item, 'Text')) && _.has(list, item.PinnedField)) {\r\n list[item.PinnedField].push(item.Text);\r\n }\r\n });\r\n\r\n const dist = _.map(\r\n _.reject(positionKey, i => i === 'None'),\r\n (key) => {\r\n if (_.size(list[key]) > 0) {\r\n return _.first(list[key]);\r\n }\r\n return list.None.shift();\r\n }\r\n );\r\n\r\n return _.compact(dist);\r\n}\r\n\r\nexport function getTitlePreview(headlines) {\r\n return getPreviewList(headlines, headlinePositionKey).join(' | ');\r\n}\r\n\r\nexport function getDescPreview(descriptions) {\r\n return combineDescriptionArray(getPreviewList(descriptions, descriptionPositionKey));\r\n}\r\n\r\nfunction getMoreHint(assets, property, i18n) {\r\n const list = getPreviewList(assets, property === 'Headlines' ? headlinePositionKey : descriptionPositionKey);\r\n return assets.length > list.length ?\r\n i18n.getString('RSA_Count_More').replace('{{count}}', assets.length - list.length) : '';\r\n}\r\n\r\nexport function getMoreTitleHint(headlines, i18n) {\r\n return getMoreHint(headlines, 'Headlines', i18n);\r\n}\r\n\r\nexport function getMoreDescHint(descriptions, i18n) {\r\n return getMoreHint(descriptions, 'Descriptions', i18n);\r\n}\r\n\r\nfunction getMoreHintFromJson(jsonString, property, i18n) {\r\n let values = parseSync(jsonString);\r\n if (!_.isEmpty(values)) {\r\n values = _.map(values, value => parseSync(value));\r\n return getMoreHint(values, property, i18n);\r\n }\r\n return '';\r\n}\r\n\r\nexport function getMoreTitleHintFromJson(jsonString, i18n) {\r\n return getMoreHintFromJson(jsonString, 'Headlines', i18n);\r\n}\r\n\r\nexport function getMoreDescHintFromJson(jsonString, i18n) {\r\n return getMoreHintFromJson(jsonString, 'Descriptions', i18n);\r\n}\r\n\r\nfunction getPreviewFromJson(jsonString, property) {\r\n let values = parseSync(jsonString);\r\n let preview;\r\n\r\n if (!_.isEmpty(values)) {\r\n values = _.map(values, value => parseSync(value));\r\n preview = (property === 'Headlines') ? getTitlePreview(values) : getDescPreview(values);\r\n } else {\r\n preview = jsonString;\r\n }\r\n\r\n return preview;\r\n}\r\n\r\nexport function getTitlePreviewFromJson(headlineValue) {\r\n return getPreviewFromJson(headlineValue, 'Headlines');\r\n}\r\n\r\nexport function getDescPreviewFromJson(descriptionValue) {\r\n return getPreviewFromJson(descriptionValue, 'Descriptions');\r\n}\r\n","let hoverTimeout;\r\nconst hoverDelay = 500;\r\n\r\nexport function handleShowRejectionReasonEnter(thisArg, callback, event) {\r\n const callbackBinded = callback.bind(thisArg, event);\r\n hoverTimeout = setTimeout(() => {\r\n callbackBinded();\r\n }, hoverDelay);\r\n}\r\n\r\nexport function handleShowRejectionReasonLeave(thisArg, callback, event) {\r\n clearTimeout(hoverTimeout);\r\n const callbackBinded = callback.bind(thisArg, event);\r\n callbackBinded();\r\n}\r\n","import _ from 'underscore';\r\nimport { FilterEntity } from '@bingads-webui/filter-entity';\r\nimport { getParameter } from '@bingads-webui/url-util';\r\n\r\n// 2 special urls used by the UCM.\r\n// https://ads.microsoft.com/campaign/Ads.m?filterDisapprovedAds=True&aid=123&cid=1234\r\n// https://ads.microsoft.com/campaign/Keyword.m?filterDisapprovedKeywords=True&aid=123&cid=1234\r\n\r\n// In the feature, may use the '&find=filterKey'in the url.\r\nfunction getFilterKeyFromUrl() {\r\n if (getParameter('filterDisapprovedAds') === 'True') {\r\n return 'filterDisapprovedAds';\r\n }\r\n if (getParameter('filterDisapprovedKeywords') === 'True') {\r\n return 'filterDisapprovedKeywords';\r\n }\r\n\r\n return getParameter('find');\r\n}\r\n\r\nexport function applyFilterFromUrl(filterService, urlFilterMap) {\r\n const filterExpression = getFilterKeyFromUrl();\r\n if (_.isEmpty(filterExpression)) {\r\n return;\r\n }\r\n\r\n let filterObject = null;\r\n\r\n if (_.isUndefined(urlFilterMap)) {\r\n filterObject = JSON.parse(filterExpression);\r\n } else if (_.has(urlFilterMap, filterExpression)) {\r\n filterObject = urlFilterMap[filterExpression];\r\n } else return;\r\n\r\n const urlFilterEntity = FilterEntity.fromLegacy(filterObject, {\r\n entitySchema: filterService.entitySchema,\r\n odata: filterService.odataOptions,\r\n });\r\n\r\n filterService.setEditableFilter(urlFilterEntity.query);\r\n}\r\n\r\nexport function appendScopeParameter(uri, scope) {\r\n if (scope.values.uid) {\r\n uri.addQuery('uid', scope.values.uid);\r\n }\r\n if (scope.values.cid) {\r\n uri.addQuery('cid', scope.values.cid);\r\n }\r\n if (scope.values.aid) {\r\n uri.addQuery('aid', scope.values.aid);\r\n }\r\n}\r\n","function convertDateBetweenTimeZones(date, i18n, {\r\n from,\r\n to,\r\n}) {\r\n const dateString = i18n.formatDate(date, {\r\n timeZone: from,\r\n });\r\n\r\n return i18n.parseDate(dateString, {\r\n timeZone: to,\r\n });\r\n}\r\n\r\nexport function convertMachineDateToUTCDate(date, i18n) {\r\n return convertDateBetweenTimeZones(date, i18n, { from: null, to: 'UTC' });\r\n}\r\n\r\nexport function convertUTCDateToMachineDate(date, i18n) {\r\n return convertDateBetweenTimeZones(date, i18n, { from: 'UTC', to: null });\r\n}\r\n\r\nexport function formatDate(date, i18n) {\r\n return i18n.dateFormatter({ timeZone: 'UTC' })(new Date(date));\r\n}\r\n\r\nexport function displayDate(date, noDateMessage, i18n) {\r\n if (date) {\r\n return formatDate(date, i18n);\r\n }\r\n\r\n return i18n.getString(noDateMessage);\r\n}\r\n\r\nexport function getCurrentDate() {\r\n const now = new Date();\r\n return new Date(now.getFullYear(), now.getMonth(), now.getDate());\r\n}\r\n","import _ from 'underscore';\r\nimport { getColumnConversions, buildSortingConversions } from '@bingads-webui-campaign/column-conversions';\r\n\r\nconst ColumnConversionEnabledFeatures = {\r\n summary_tab_campaign: true,\r\n summary_tab_ad_group: true,\r\n summary_tab_ad: true,\r\n summary_tab_keyword: true,\r\n summary_tab_demographics: true,\r\n settings_locations: true,\r\n settings_ad_schedule: true,\r\n settings_devices: true,\r\n DsaTarget: true,\r\n DsaSearchTerm: true,\r\n AutomatedExtension: true,\r\n AdExtensionAssociation: true,\r\n DimensionsGrid: true,\r\n feed_items: true,\r\n audience_associations_level: true,\r\n ConversionGoalsGrid: true,\r\n SharedBudgetSummaryGrid: true,\r\n SharedBudgetEditGrid: true,\r\n summary_tab_search_term: true,\r\n target_devices_grid: true,\r\n PerformanceGrid: true,\r\n newProductGroupsGrid: true,\r\n PortfolioBidStrategyGrid: true,\r\n};\r\n\r\nexport function validateOrder(preferenceConfig, columns, featureName, permissions) {\r\n const { dynamic = {} } = permissions || {};\r\n const {\r\n ColumnConversion: IsColumnConversionEnabled,\r\n } = dynamic;\r\n const preference = preferenceConfig;\r\n const sourceOrderbyInfo = preference &&\r\n ((preference.dataSource && preference.dataSource.orderby) || preference.orderbyInfo);\r\n if (IsColumnConversionEnabled && ColumnConversionEnabledFeatures[featureName]) {\r\n let patchedOrderbyInfo = sourceOrderbyInfo;\r\n if (preference.sortableHeader) {\r\n const columnConversions = getColumnConversions(columns);\r\n const { applySortingInfoConversion } = buildSortingConversions(columnConversions);\r\n const { sortableHeader, orderbyInfo } = applySortingInfoConversion({\r\n sortableHeader: preference.sortableHeader,\r\n orderbyInfo: sourceOrderbyInfo,\r\n });\r\n preference.sortableHeader = sortableHeader;\r\n patchedOrderbyInfo = orderbyInfo;\r\n }\r\n\r\n if (patchedOrderbyInfo) {\r\n const sortableColumns = _.chain(columns)\r\n .filter(column => column.sortable)\r\n .map(column => column.sortable.key)\r\n .value();\r\n\r\n const updatedOrder = [];\r\n _.each(patchedOrderbyInfo, (order) => {\r\n if (_.contains(sortableColumns, order.key)) {\r\n updatedOrder.push(order);\r\n }\r\n });\r\n\r\n if (preference && preference.dataSource && preference.dataSource.orderby) {\r\n preference.dataSource.orderby = updatedOrder;\r\n } else if (preference.orderbyInfo) {\r\n preference.orderbyInfo = updatedOrder;\r\n }\r\n }\r\n } else if (sourceOrderbyInfo) {\r\n const sortableColumns = _.chain(columns)\r\n .filter(column => column.sortable)\r\n .map(column => column.sortable.key)\r\n .value();\r\n\r\n const updatedOrder = [];\r\n _.each(sourceOrderbyInfo, (order) => {\r\n if (_.contains(sortableColumns, order.key)) {\r\n updatedOrder.push(order);\r\n }\r\n });\r\n\r\n if (preference.dataSource && preference.dataSource.orderby) {\r\n preference.dataSource.orderby = updatedOrder;\r\n if (_.isEmpty(preference.dataSource.orderby)) {\r\n delete preference.sortableHeader;\r\n }\r\n } else if (preference.orderbyInfo) {\r\n preference.orderbyInfo = updatedOrder;\r\n }\r\n }\r\n}\r\n","import rocketImage from './media/rocket.svg';\r\n\r\nexport const getNewUiWelcomeStyles = () => ({\r\n newUINavigationPreferenceDialog: {\r\n '& .ms-Dialog-header': {\r\n height: 198,\r\n backgroundPositionY: 'bottom',\r\n backgroundImage: `url(\"${rocketImage}\")`,\r\n backgroundRepeat: 'no-repeat',\r\n backgroundColor: '#C7E0F4',\r\n backgroundSize: 'contain',\r\n },\r\n\r\n '& .ms-Dialog-inner': {\r\n padding: 0,\r\n },\r\n\r\n '& .ms-Dialog-button--close': {\r\n color: '#005A9E',\r\n padding: 'unset',\r\n width: 'unset',\r\n height: 'unset',\r\n\r\n '& .ms-Button-flexContainer': {\r\n width: 'unset',\r\n height: 'unset',\r\n\r\n '& .ms-Button-icon': {\r\n margin: 'unset',\r\n },\r\n },\r\n },\r\n\r\n '& .ms-Dialog-button--close:hover, & .ms-Dialog-button--close:active': {\r\n backgroundColor: '#C7E0F4',\r\n },\r\n\r\n '& .ms-Dialog-button, .ms-Dialog-button:hover': {\r\n color: '#0078d4',\r\n backgroundColor: 'transparent',\r\n },\r\n\r\n '& .custom-content-wrapper': {\r\n background: '#0078d4',\r\n color: '#ffffff',\r\n padding: 18,\r\n\r\n '& a': {\r\n color: 'white',\r\n textDecorationLine: 'underline',\r\n },\r\n\r\n '& .hiddenSpan': {\r\n display: 'none',\r\n },\r\n\r\n '& .title': {\r\n fontWeight: 600,\r\n fontSize: '20px',\r\n lineHeight: '27px',\r\n marginBottom: 14,\r\n },\r\n\r\n '& .ms-Dialog-actions': {\r\n background: '#0078d4',\r\n marginTop: '24px 0 0 0',\r\n\r\n '& .ms-Dialog-actionsRight': {\r\n display: 'flex',\r\n textAlign: 'left !important',\r\n margin: 'unset',\r\n\r\n '& .ms-Dialog-action': {\r\n margin: 'unset',\r\n },\r\n\r\n '& .ms-Button--primary': {\r\n border: '1px solid white',\r\n },\r\n\r\n '& .lets-go, & .lets-go:hover, & .lets-go:focus:after': {\r\n border: '1px solid white',\r\n color: '#0078d4',\r\n },\r\n\r\n '& button': {\r\n marginRight: 11,\r\n },\r\n },\r\n },\r\n },\r\n\r\n },\r\n});\r\n","import _ from 'underscore';\r\n\r\n// allow feature name for url filter\r\nexport const allowedUrlFilterFeatureName = [\r\n 'AdGrid',\r\n 'KeywordGrid',\r\n 'AudienceAssociationGrid',\r\n 'AudienceGrid',\r\n 'ConversionGoalsGrid',\r\n 'ProductGrid',\r\n 'CampaignsGrid',\r\n 'AdgroupGrid',\r\n 'UETTagsGrid',\r\n 'PerformanceGrid',\r\n];\r\nexport const allowedUrlFilterKeys = ['filterExpressions', 'filterAlias', 'filterArguments'];\r\n\r\n// usually sitemap and feature name map are 1:1\r\n// sometimes one sitemap can map to multi url filter feature name\r\nexport const sitemapIdToFeatureName = {\r\n ads: ['AdGrid'],\r\n keywords: ['KeywordGrid'],\r\n audiences: ['AudienceAssociationGrid'],\r\n 'audiences-library': ['AudienceGrid'],\r\n 'conversion-goals': ['ConversionGoalsGrid'],\r\n products: ['ProductGrid'],\r\n campaigns: ['CampaignsGrid'],\r\n adgroups: ['AdgroupGrid'],\r\n 'uet-tag': ['UETTagsGrid'],\r\n performance: ['PerformanceGrid'],\r\n};\r\n\r\nexport const urlFilterType = _.reduce(allowedUrlFilterFeatureName, (memo, featureName) => _.extend(memo, { [featureName]: `UrlFilter_${featureName}` }), {});\r\n\r\nexport const featureNameToUrlFilter = urlFilterType;\r\n","import _ from 'underscore';\r\nimport { storeSeasonalityAdjustmentName } from '@bingads-webui-campaign/seasonality-id-name-utils';\r\n\r\nconst editorialRejectionReasonFilter = (params, i18n) => {\r\n let flagIds = [];\r\n let formatDate = null;\r\n\r\n if (_.isString(params)) {\r\n const items = params.split(';');\r\n\r\n if (items.length > 1) {\r\n flagIds = _.map(items[0].split(','), item => parseInt(item, 10));\r\n formatDate = items[1] && i18n.parseDate(items[1], { raw: 'yyyy-MM-dd' });\r\n } else if (items.length === 1 && params.match('\\\\d{4}-\\\\d{2}-\\\\d{2}')) {\r\n // only filter for date\r\n formatDate = i18n.parseDate(params, { raw: 'yyyy-MM-dd' });\r\n } else {\r\n flagIds = _.map(items[0].split(','), item => parseInt(item, 10));\r\n }\r\n } else if (_.isFinite(params)) {\r\n flagIds = [parseInt(params, 10)];\r\n }\r\n\r\n const filters = [...(flagIds.length > 0 ? [{\r\n SelectedColumn: 'EditorialRejectionFlagId',\r\n SelectedOperator: 'EnumSelection',\r\n Values: flagIds,\r\n }] : []),\r\n ...(formatDate ? [{\r\n SelectedColumn: 'EditorialRejectionDate',\r\n SelectedOperator: 'GreaterOrEqual',\r\n Values: [formatDate],\r\n }] : [])];\r\n\r\n return filters.length ? filters : null;\r\n};\r\n\r\nexport const featureIdToFilterAlias = {\r\n AdGrid: {\r\n filterDisapprovedAds: [{\r\n SelectedColumn: 'EditorialStatus',\r\n SelectedOperator: 'EnumSelection',\r\n Values: [\"Enum.EditorialStatus'Rejected'\"],\r\n }, {\r\n SelectedColumn: 'IsAppealPending',\r\n SelectedOperator: 'Equal',\r\n Values: ['false'],\r\n }],\r\n filterAdResourceInvalidAds: [{\r\n SelectedColumn: 'AdResourceStatusId',\r\n SelectedOperator: 'Equal',\r\n Values: [\"Enum.AdResourceStatus'Invalid'\"],\r\n }],\r\n filterGoogleImportedVideoNeedRepair: [{\r\n SelectedColumn: 'AdResourceStatusId',\r\n SelectedOperator: 'Equal',\r\n Values: [\"Enum.AdResourceStatus'GoogleImportedVideoNeedRepair'\"],\r\n }],\r\n filterDisapprovedOrApprovedLimitedAds: [{\r\n SelectedColumn: 'DeliveryStatus',\r\n SelectedOperator: 'EnumSelection',\r\n Values: [\"Enum.DeliveryStatus'EditorialRejected'\", \"Enum.DeliveryStatus'EditorialApprovedLimited'\"],\r\n }],\r\n editorialRejectionReason: editorialRejectionReasonFilter,\r\n filterHeadlinesAssetId: paramString =>\r\n [{\r\n SelectedColumn: 'HeadlinesAssetId',\r\n SelectedOperator: 'Contains',\r\n Values: [paramString],\r\n }],\r\n filterDescriptionsAssetId: paramString =>\r\n [{\r\n SelectedColumn: 'DescriptionsAssetId',\r\n SelectedOperator: 'Contains',\r\n Values: [paramString],\r\n }],\r\n },\r\n KeywordGrid: {\r\n filterDisapprovedKeywords: [{\r\n SelectedColumn: 'EditorialStatus',\r\n SelectedOperator: 'EnumSelection',\r\n Values: [\"Enum.EditorialStatus'Rejected'\"],\r\n }, {\r\n SelectedColumn: 'IsAppealPending',\r\n SelectedOperator: 'Equal',\r\n Values: ['false'],\r\n }],\r\n filterDisapprovedOrApprovedLimitedKeywords: [{\r\n SelectedColumn: 'DeliveryStatus',\r\n SelectedOperator: 'EnumSelection',\r\n Values: [\"Enum.DeliveryStatus'EditorialRejected'\", \"Enum.DeliveryStatus'EditorialApprovedLimited'\"],\r\n }],\r\n editorialRejectionReason: editorialRejectionReasonFilter,\r\n },\r\n CampaignsGrid: {\r\n budgetCappedCampaigns: [{\r\n SelectedColumn: 'DeliveryStatus',\r\n SelectedOperator: 'EnumSelection',\r\n Values: [\"Enum.DeliveryStatus'BudgetSuggestions'\"],\r\n }],\r\n newCampaignBudgetSuggestion: [{\r\n SelectedColumn: 'DeliveryStatus',\r\n SelectedOperator: 'EnumSelection',\r\n Values: [\r\n \"Enum.DeliveryStatus'CampaignBudgetPaused'\",\r\n \"Enum.DeliveryStatus'BudgetSuggestions'\",\r\n ],\r\n }],\r\n newCampaign01: campaignName => ([{\r\n SelectedColumn: 'CampaignName',\r\n SelectedOperator: 'Contains',\r\n Values: [campaignName],\r\n }]),\r\n filterBidStrategy: (value, i18n, permissions) => {\r\n const isInPilot = _.chain(permissions).result('dynamic').result('PortfolioBidStrategy', false).value();\r\n const bidStrategyName = `${value}`; // Convert to string\r\n const isValid = !_.isEmpty(bidStrategyName);\r\n\r\n return isInPilot && isValid ? [{\r\n SelectedColumn: 'BidStrategyName',\r\n SelectedOperator: 'Equal',\r\n Values: [bidStrategyName],\r\n }] : [];\r\n },\r\n filterSeasonalityCampaignType: (campaignType) => {\r\n const campaignTypeList = campaignType.split(',');\r\n return [{\r\n SelectedColumn: 'CampaignType',\r\n SelectedOperator: 'EnumSelection',\r\n Values: campaignTypeList,\r\n }];\r\n },\r\n filterSeasonalityId: (options) => {\r\n const re = /^(\\d+), (.*)/;\r\n const matches = re.exec(options);\r\n const id = parseInt(matches[1], 10);\r\n const name = matches[2];\r\n\r\n storeSeasonalityAdjustmentName({ id, name });\r\n return [{\r\n SelectedColumn: 'SeasonalityAdjustmentId',\r\n SelectedOperator: 'Equal',\r\n Values: [id],\r\n }];\r\n },\r\n filterDataExclusionId: (options) => {\r\n const re = /^(\\d+), (.*)/;\r\n const matches = re.exec(options);\r\n const id = parseInt(matches[1], 10);\r\n const name = matches[2];\r\n\r\n storeSeasonalityAdjustmentName({ id, name });\r\n return [{\r\n SelectedColumn: 'DataExclusionId',\r\n SelectedOperator: 'Equal',\r\n Values: [id],\r\n }];\r\n },\r\n },\r\n AudienceAssociationGrid: {\r\n hcRem01: audienceId => ([{\r\n SelectedColumn: 'AudienceStatus',\r\n SelectedOperator: 'EnumSelection',\r\n Values: ['161', '165'],\r\n },\r\n ...audienceId === '' ? [] : [{\r\n SelectedColumn: 'AudienceId',\r\n SelectedOperator: 'Equal',\r\n Values: [audienceId],\r\n }],\r\n ]),\r\n hcRem02: audienceId => ([{\r\n SelectedColumn: 'AudienceStatus',\r\n SelectedOperator: 'EnumSelection',\r\n Values: ['161'],\r\n },\r\n {\r\n SelectedColumn: 'AudienceCriterionBidMultiplier',\r\n SelectedOperator: 'Equal',\r\n Values: [0],\r\n },\r\n ...audienceId === '' ? [] : [{\r\n SelectedColumn: 'AudienceId',\r\n SelectedOperator: 'Equal',\r\n Values: [audienceId],\r\n }],\r\n ]),\r\n alertsCanobidadj01: [{\r\n SelectedColumn: 'AudienceCriterionBidMultiplier',\r\n SelectedOperator: 'Equal',\r\n Values: [0],\r\n }],\r\n alertsCainactive01: [{\r\n SelectedColumn: 'AudienceStatus',\r\n SelectedOperator: 'EnumSelection',\r\n Values: ['162'],\r\n }],\r\n alertsCanobidadj02: [{\r\n SelectedColumn: 'AudienceStatus',\r\n SelectedOperator: 'EnumSelection',\r\n Values: ['161'],\r\n }, {\r\n SelectedColumn: 'AudienceCriterionBidMultiplier',\r\n SelectedOperator: 'Equal',\r\n Values: [0],\r\n }],\r\n },\r\n AudienceGrid: {\r\n newAssociation01: associationId => ([{\r\n SelectedColumn: 'Id',\r\n SelectedOperator: 'Equal',\r\n Values: [associationId],\r\n }]),\r\n },\r\n UETTagsGrid: {\r\n alertsUetinactive01: [{\r\n SelectedColumn: 'TrackingStatus',\r\n SelectedOperator: 'EnumSelection',\r\n Values: [\"Enum.TagTrackingStatus'Unverified'\", \"Enum.TagTrackingStatus'Inactive'\"],\r\n }, {\r\n SelectedColumn: 'AudiencesCount',\r\n SelectedOperator: 'Greater',\r\n Values: [0],\r\n }],\r\n alertsUetinactive02: [{\r\n SelectedColumn: 'TrackingStatus',\r\n SelectedOperator: 'EnumSelection',\r\n Values: [\"Enum.TagTrackingStatus'Unverified'\", \"Enum.TagTrackingStatus'Inactive'\"],\r\n }, {\r\n SelectedColumn: 'GoalsCount',\r\n SelectedOperator: 'Greater',\r\n Values: [0],\r\n }],\r\n alertsUetinactive03: [{\r\n SelectedColumn: 'TrackingStatus',\r\n SelectedOperator: 'EnumSelection',\r\n Values: [\"Enum.TagTrackingStatus'Unverified'\", \"Enum.TagTrackingStatus'Inactive'\"],\r\n }, {\r\n SelectedColumn: 'AudiencesCount',\r\n SelectedOperator: 'Equal',\r\n Values: [0],\r\n }, {\r\n SelectedColumn: 'GoalsCount',\r\n SelectedOperator: 'Equal',\r\n Values: [0],\r\n }],\r\n recommendationUetinactive: [{\r\n SelectedColumn: 'TrackingStatus',\r\n SelectedOperator: 'EnumSelection',\r\n Values: [\"Enum.TagTrackingStatus'Inactive'\"],\r\n }, {\r\n SelectedColumn: 'GoalsCount',\r\n SelectedOperator: 'Greater',\r\n Values: [0],\r\n }],\r\n alertsUetactive01: [{\r\n SelectedColumn: 'TrackingStatus',\r\n SelectedOperator: 'EnumSelection',\r\n Values: [\"Enum.TagTrackingStatus'Active'\"],\r\n }, {\r\n SelectedColumn: 'AudiencesCount',\r\n SelectedOperator: 'Equal',\r\n Values: [0],\r\n }],\r\n alertsUetactive02: [{\r\n SelectedColumn: 'TrackingStatus',\r\n SelectedOperator: 'EnumSelection',\r\n Values: [\"Enum.TagTrackingStatus'Active'\"],\r\n }, {\r\n SelectedColumn: 'GoalsCount',\r\n SelectedOperator: 'Equal',\r\n Values: [0],\r\n }],\r\n alertsCgnorecent01: [{\r\n SelectedColumn: 'TrackingStatus',\r\n SelectedOperator: 'EnumSelection',\r\n Values: [\"Enum.TagTrackingStatus'NoRecentConversion'\"],\r\n }],\r\n alertsSanoassociation01: [{\r\n SelectedColumn: 'TrackingStatus',\r\n SelectedOperator: 'EnumSelection',\r\n Values: [\"Enum.TagTrackingStatus'Active'\"],\r\n }, {\r\n SelectedColumn: 'AssociationsCount',\r\n SelectedOperator: 'Equal',\r\n Values: [0],\r\n }],\r\n },\r\n ConversionGoalsGrid: {\r\n unverifiedGoals: [{\r\n SelectedColumn: 'TrackingStatus',\r\n SelectedOperator: 'EnumSelection',\r\n Values: [\"Enum.GoalTrackingStatus'Unverified'\"],\r\n }],\r\n },\r\n};\r\n","import {\r\n intersection,\r\n some,\r\n keys,\r\n reduce,\r\n map,\r\n object,\r\n} from 'underscore';\r\nimport { convertFilterEntityToExpressions } from '@bingads-webui/filter-commons';\r\nimport { editorialErrorCodeToErrorMessageMapping } from '@bingads-webui-campaign/api-errors';\r\n\r\nconst rejectionIds = [\r\n 3,\r\n 4,\r\n 5,\r\n 7,\r\n 9,\r\n 10,\r\n 14,\r\n 16,\r\n 17,\r\n 18,\r\n 19,\r\n 20,\r\n 22,\r\n 23,\r\n 25,\r\n 26,\r\n 28,\r\n 31,\r\n 32,\r\n 33,\r\n 35,\r\n 38,\r\n 40,\r\n 41,\r\n 42,\r\n 46,\r\n 48,\r\n 49,\r\n 50,\r\n 51,\r\n 52,\r\n 54,\r\n 55,\r\n 59,\r\n 62,\r\n 63,\r\n 64,\r\n 65,\r\n 66,\r\n 67,\r\n 85,\r\n 88,\r\n 89,\r\n 90,\r\n 91,\r\n 92,\r\n 93,\r\n 94,\r\n 95,\r\n 96,\r\n 100,\r\n 101,\r\n 102,\r\n 103,\r\n 104,\r\n 105,\r\n 106,\r\n 107,\r\n 108,\r\n 109,\r\n 110,\r\n 111,\r\n 112,\r\n 113,\r\n 114,\r\n 115,\r\n 116,\r\n 117,\r\n 118,\r\n 119,\r\n 120,\r\n 121,\r\n 122,\r\n 123,\r\n 124,\r\n 125,\r\n 128,\r\n 129,\r\n 130,\r\n 131,\r\n 132,\r\n 133,\r\n 134,\r\n 135,\r\n 136,\r\n 137,\r\n 138,\r\n 139,\r\n 140,\r\n 141,\r\n 142,\r\n 143,\r\n 144,\r\n 145,\r\n 146,\r\n 147,\r\n 148,\r\n 149,\r\n 150,\r\n 151,\r\n 152,\r\n 153,\r\n 154,\r\n 156,\r\n 157,\r\n 158,\r\n 159,\r\n 160,\r\n 161,\r\n 162,\r\n 163,\r\n 164,\r\n 165,\r\n 166,\r\n 176,\r\n 177,\r\n 178,\r\n 179,\r\n 180,\r\n 182,\r\n 183,\r\n 184,\r\n 198,\r\n 199,\r\n 237,\r\n 238,\r\n 239,\r\n 242,\r\n 243,\r\n 248,\r\n 250,\r\n 251,\r\n 255,\r\n 256,\r\n 257,\r\n 258,\r\n 259,\r\n 260,\r\n 261,\r\n 262,\r\n 263,\r\n 264,\r\n 265,\r\n 266,\r\n 267,\r\n 268,\r\n 269,\r\n 270,\r\n 271,\r\n 272,\r\n 273,\r\n 274,\r\n 275,\r\n 276,\r\n 277,\r\n 278,\r\n 279,\r\n 280,\r\n 281,\r\n 282,\r\n 283,\r\n 284,\r\n 285,\r\n 286,\r\n 287,\r\n 288,\r\n 289,\r\n 290,\r\n 291,\r\n 295,\r\n 299,\r\n 303,\r\n 307,\r\n 311,\r\n 315,\r\n 319,\r\n 323,\r\n 327,\r\n 331,\r\n 335,\r\n 339,\r\n 340,\r\n 341,\r\n 342,\r\n 343,\r\n 344,\r\n 345,\r\n 346,\r\n 347,\r\n 348,\r\n 349,\r\n 351,\r\n 5158,\r\n 5159,\r\n 5160,\r\n 5161,\r\n 5162,\r\n 5163,\r\n 5164,\r\n 5165,\r\n 5166,\r\n 5167,\r\n 5198,\r\n 5199,\r\n 5200,\r\n 5201,\r\n 5202,\r\n 5203,\r\n 5204,\r\n 5212,\r\n 8141,\r\n 8142,\r\n 8155,\r\n 8159,\r\n 8163,\r\n 8168,\r\n 8174,\r\n 8180,\r\n 8186,\r\n 8192,\r\n 8198,\r\n 8204,\r\n 8210,\r\n 8216,\r\n 8222,\r\n 8228,\r\n 8234,\r\n 8240,\r\n 8246,\r\n 8252,\r\n 8258,\r\n 8264,\r\n 8270,\r\n 8276,\r\n 8292,\r\n 8298,\r\n 8304,\r\n 8310,\r\n 8316,\r\n 8322,\r\n 8328,\r\n 8334,\r\n 8340,\r\n 8346,\r\n 8352,\r\n 8358,\r\n 8364,\r\n 8370,\r\n 8376,\r\n 8382,\r\n 8388,\r\n 8394,\r\n 8400,\r\n 8406,\r\n 8412,\r\n 8418,\r\n 8424,\r\n 8430,\r\n 8436];\r\n\r\nconst getLocalizedRejectionReasons = i18n => map(rejectionIds, (id) => {\r\n const formatKey = `Error_Editorial_Raw_${id}`;\r\n const formatKeyWithSurfix = `Error_Editorial_Raw_${id}_1`;\r\n const defaultKey = 'EditorialReasons_Default';\r\n const localizedKey = editorialErrorCodeToErrorMessageMapping[formatKey] ||\r\n editorialErrorCodeToErrorMessageMapping[formatKeyWithSurfix] ||\r\n editorialErrorCodeToErrorMessageMapping[defaultKey];\r\n\r\n return i18n.getString(localizedKey);\r\n});\r\n\r\nexport const getLocalizedEditorialRejectionReasons = (i18n) => {\r\n const localizedRejectionReasons = getLocalizedRejectionReasons(i18n);\r\n\r\n return object(rejectionIds, localizedRejectionReasons);\r\n};\r\n\r\nexport const getDisabledSaveFilterButtonWithReasonFunc =\r\n (i18n, readOnlyProperties) => ({ editableFilter } = {}) => {\r\n let disabledSaveFilter = false;\r\n\r\n if (editableFilter && editableFilter.query) {\r\n const editableExpressions = convertFilterEntityToExpressions(editableFilter);\r\n // hide editable filter when there is readonly properities\r\n const filterKeys = reduce(editableExpressions, (memo, item) => [...keys(item), ...memo], []);\r\n disabledSaveFilter = some(intersection(filterKeys, readOnlyProperties));\r\n }\r\n\r\n if (disabledSaveFilter) {\r\n return i18n.getString(_TL_('remove read-only filter to enable save filter button'));\r\n }\r\n\r\n return '';\r\n };\r\n","import _ from 'underscore';\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withGlobalFilter } from '@bingads-webui-campaign-react/global-filter-context';\r\nimport { withI18nConsumer } from '@bingads-webui-react/i18n-context';\r\nimport { QueryParam, withScope } from '@bingads-webui-react/scope-service';\r\nimport { withSiteMap, findSiteMap } from '@bingads-webui-campaign-react/with-site-map';\r\nimport { featureIdToFilterAlias, sitemapIdToFeatureName, featureNameToUrlFilter, allowedUrlFilterKeys } from '@bingads-webui-campaign/url-filter-metadata';\r\n\r\nclass URLFilterInternal extends React.PureComponent {\r\n componentDidMount() {\r\n this.checkUrlFilter();\r\n }\r\n\r\n componentDidUpdate() {\r\n this.checkUrlFilter();\r\n }\r\n\r\n onUrlFilterChange = (filterExpressions, featureName) => {\r\n this.props.updateUrlFilter({\r\n filterType: featureNameToUrlFilter[featureName],\r\n filter: filterExpressions,\r\n });\r\n }\r\n\r\n getFilterExpressionsFromFilterAlias = (filterAlias, filterArguments) => {\r\n let formatAlias = filterAlias;\r\n\r\n if (_.isFunction(filterAlias)) {\r\n formatAlias = filterArguments ? filterAlias(filterArguments, this.props.i18n, this.props.permissions) : filterAlias(this.props.i18n, this.props.permissions);\r\n }\r\n\r\n if (_.isObject(formatAlias)) {\r\n return JSON.stringify(formatAlias);\r\n }\r\n\r\n return formatAlias;\r\n }\r\n\r\n checkUrlFilter = () => {\r\n const { scope, siteMap } = this.props;\r\n const { values, location } = scope;\r\n const currentRoute = location.pathname.replace('/campaign/vnext/', '');\r\n // find the child router feature id\r\n const currentSiteMap = this.props.findSiteMap(siteMap, s => s.route === currentRoute && (!s.children || s.children.length === 0));\r\n const siteMapId = currentSiteMap ? currentSiteMap.id : null;\r\n const filterKeys = _.intersection(_.keys(values), allowedUrlFilterKeys);\r\n const supportFeatureNames = siteMapId && sitemapIdToFeatureName[siteMapId];\r\n\r\n if (_.isEmpty(filterKeys) || !supportFeatureNames) {\r\n return;\r\n }\r\n\r\n _.each(supportFeatureNames, (featureName) => {\r\n const allowedFilterAlias = featureIdToFilterAlias[featureName];\r\n let filterExpressions = '';\r\n if (_.indexOf(filterKeys, 'filterAlias') !== -1 && allowedFilterAlias) {\r\n const { filterAlias, filterArguments = '' } = values;\r\n filterExpressions = allowedFilterAlias[filterAlias] ?\r\n this.getFilterExpressionsFromFilterAlias(allowedFilterAlias[filterAlias], filterArguments) :\r\n '';\r\n } else if (_.indexOf(filterKeys, 'filterExpressions') !== -1) {\r\n // eslint-disable-next-line prefer-destructuring\r\n filterExpressions = values.filterExpressions;\r\n }\r\n\r\n if (filterExpressions) {\r\n this.onUrlFilterChange(filterExpressions, featureName);\r\n }\r\n });\r\n }\r\n\r\n render() {\r\n return null;\r\n }\r\n}\r\n\r\nURLFilterInternal.defaultProps = {\r\n findSiteMap,\r\n};\r\n\r\nURLFilterInternal.propTypes = {\r\n scope: PropTypes.instanceOf(QueryParam).isRequired,\r\n siteMap: PropTypes.arrayOf(PropTypes.shape({\r\n name: PropTypes.string.isRequired,\r\n })).isRequired,\r\n updateUrlFilter: PropTypes.func.isRequired,\r\n findSiteMap: PropTypes.func,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.object,\r\n }).isRequired,\r\n};\r\n\r\nexport const URLFilter = withSiteMap(withScope(withGlobalFilter(withI18nConsumer(URLFilterInternal))));\r\n","import $ from 'jquery';\r\nimport _ from 'underscore';\r\nimport { http } from '@bingads-webui/http-util';\r\nimport { versionStore, scopeStore } from '@bingads-webui-campaign/global-context-store';\r\nimport eventDispatcher from '@bingads-webui-component-legacy/event-dispatcher/index';\r\n\r\nexport class VersionCheck {\r\n /**\r\n * initialize Version Check Class\r\n * @param {object} [deps] - provide dep injection for version check\r\n * @returns {void}\r\n */\r\n constructor({\r\n deps = {\r\n httpUtil: http,\r\n },\r\n version = '',\r\n }) {\r\n this.version = version;\r\n this.deps = deps;\r\n this.task = null;\r\n this.checkFrequency = 5 * 1000 * 60;\r\n }\r\n\r\n checkVersion() {\r\n const {\r\n aid,\r\n cid,\r\n uid,\r\n } = _.chain(scopeStore.state).result('scope').result('values', {}).value();\r\n this.url = `/campaign/API/Updates/get?__adcenterAJAX=true&aid=${aid}&cid=${cid}&uid=${uid}`;\r\n\r\n return this.deps.httpUtil.get(this.url).then(data =>\r\n _.chain(data).result('Messages').result('Version', '').value()).catch(() => this.version).then((version) => {\r\n if (this.version !== version) {\r\n this.version = version;\r\n versionStore.setState({ newVersion: version });\r\n eventDispatcher.trigger('new-version-available');\r\n }\r\n });\r\n }\r\n\r\n start() {\r\n this.stop();\r\n this.task = setInterval(() => {\r\n try {\r\n this.checkVersion();\r\n // eslint-disable-next-line no-empty\r\n } catch (e) {}\r\n }, this.checkFrequency);\r\n\r\n $(window).on('unload', () => this.stop());\r\n }\r\n\r\n stop() {\r\n if (this.task !== null) {\r\n clearInterval(this.task);\r\n this.task = null;\r\n }\r\n }\r\n}\r\n\r\nexport const versionCheckInstance = new VersionCheck({});\r\n","import React, { Fragment, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Text } from '@bingads-webui-react/fabric-control';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\n\r\nconst textStyle = {\r\n root: {\r\n color: '#A80000',\r\n lineHeight: '24px',\r\n },\r\n};\r\n\r\nexport const ErrorString = ({\r\n error,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n return (\r\n \r\n \r\n {error && i18n.getString(error)}\r\n \r\n );\r\n};\r\n\r\nErrorString.propTypes = {\r\n error: PropTypes.string.isRequired,\r\n};\r\n","import React, { useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { Stack, FontIcon, Label } from '@bingads-webui-react/fabric-control';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ErrorString } from './error-string';\r\n\r\n\r\nexport const TitleBar = (props) => {\r\n const {\r\n title, error, isActive, setActiveKeys, id, activeKeys, setActiveCallback, disableExpand,\r\n } = props;\r\n const i18n = useContext(I18nContext);\r\n\r\n const renderTitle = () => {\r\n let titleTpl = null;\r\n if (typeof title === 'string') {\r\n titleTpl = ;\r\n } else {\r\n titleTpl = React.cloneElement(title, { isActive });\r\n }\r\n\r\n return titleTpl;\r\n };\r\n\r\n const renderError = () => {\r\n if (!error || typeof error === 'string') {\r\n return ;\r\n }\r\n return React.cloneElement(error);\r\n };\r\n\r\n const onClickHandler = () => {\r\n if (disableExpand) {\r\n return;\r\n }\r\n if (isActive) {\r\n const tempActiveKeys = activeKeys.filter(item => item !== id);\r\n setActiveKeys(tempActiveKeys);\r\n } else {\r\n setActiveKeys([...activeKeys, id]);\r\n }\r\n setActiveCallback();\r\n };\r\n\r\n const onKeyPressHandler = (e) => {\r\n if (e.key === 'Enter' || e.keyCode === 13 || e.which === 13) {\r\n onClickHandler(e);\r\n }\r\n };\r\n\r\n const ariaTitle = useMemo(() => {\r\n if (typeof title === 'string') {\r\n return title;\r\n } else if (title && title.props && !_.isEmpty(title.props.titleKey)) {\r\n return title.props.titleKey;\r\n }\r\n return '';\r\n }, [title]);\r\n\r\n return (\r\n { onClickHandler(e); }} >\r\n \r\n {renderTitle()}\r\n \r\n \r\n \r\n { !disableExpand &&\r\n { onKeyPressHandler(e); }}\r\n aria-expanded={isActive}\r\n role=\"button\"\r\n />}\r\n \r\n \r\n
\r\n {renderError()}\r\n
\r\n
\r\n );\r\n};\r\n\r\nTitleBar.propTypes = {\r\n id: PropTypes.string.isRequired,\r\n error: PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.node,\r\n ]),\r\n title: PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.node,\r\n ]).isRequired,\r\n isActive: PropTypes.bool.isRequired,\r\n activeKeys: PropTypes.arrayOf(PropTypes.string),\r\n setActiveKeys: PropTypes.func.isRequired,\r\n setActiveCallback: PropTypes.func,\r\n disableExpand: PropTypes.bool,\r\n};\r\nTitleBar.defaultProps = {\r\n activeKeys: [],\r\n disableExpand: false,\r\n error: '',\r\n setActiveCallback() {},\r\n};\r\n\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\n\r\nexport const Content = (props) => {\r\n const {\r\n children, isActive, noOverflowHidden, relativePosition,\r\n } = props;\r\n const contentOverflowClassName = noOverflowHidden ? '': 'collapse-content-overflow-hidden';\r\n const positionClassName = relativePosition ? 'collapse-content-position-relative' : '';\r\n const contentVisibilityClassName = isActive ? 'content-show' : 'content-hide';\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\nContent.propTypes = {\r\n isActive: PropTypes.bool.isRequired,\r\n children: PropTypes.node.isRequired,\r\n noOverflowHidden: PropTypes.bool,\r\n relativePosition: PropTypes.bool,\r\n};\r\n\r\nContent.defaultProps = {\r\n noOverflowHidden: false,\r\n relativePosition: false,\r\n};\r\n\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\n\r\nexport const Details = (props) => {\r\n const {\r\n children, isActive,\r\n } = props;\r\n const detailsVisibilityClassName = isActive ? 'details-hide' : 'details-show';\r\n\r\n return (\r\n
\r\n {children}\r\n
\r\n );\r\n};\r\n\r\nDetails.propTypes = {\r\n isActive: PropTypes.bool.isRequired,\r\n children: PropTypes.node.isRequired,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { Stack } from '@bingads-webui-react/fabric-control';\r\nimport { TitleBar } from './title-bar';\r\nimport { Content } from './content';\r\nimport { Details } from './details';\r\n\r\nexport const Panel = (props) => {\r\n const {\r\n title, children, isActive, setActiveKeys, id, activeKeys, error, setActiveCallback, onFocus, disableExpand, details, noOverflowHidden,\r\n } = props;\r\n\r\n return (\r\n onFocus()}>\r\n \r\n {children}\r\n {details &&
{details}
}\r\n
\r\n );\r\n};\r\n\r\nPanel.propTypes = {\r\n id: PropTypes.string,\r\n title: PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.node,\r\n ]).isRequired,\r\n isActive: PropTypes.bool,\r\n disableExpand: PropTypes.bool,\r\n children: PropTypes.node.isRequired,\r\n setActiveKeys: PropTypes.func,\r\n onFocus: PropTypes.func,\r\n error: PropTypes.string,\r\n activeKeys: PropTypes.arrayOf(PropTypes.string),\r\n setActiveCallback: PropTypes.func,\r\n details: PropTypes.node,\r\n noOverflowHidden: PropTypes.bool,\r\n};\r\n\r\nPanel.defaultProps = {\r\n id: '',\r\n error: '',\r\n activeKeys: [],\r\n setActiveKeys() { },\r\n isActive: false,\r\n setActiveCallback() { },\r\n onFocus() { },\r\n disableExpand: false,\r\n details: null,\r\n noOverflowHidden: false,\r\n};\r\n","import { helpbuttonStyle } from '@bingads-webui-campaign-react/common-styles';\r\n\r\nexport const getStyles = (_, core) => ({\r\n collapseContainer: {\r\n padding: 0,\r\n '& .helpbutton': helpbuttonStyle(core)['.helpbutton'],\r\n '& .helpbutton::before': helpbuttonStyle(core)['.helpbutton::before'],\r\n position: 'relative',\r\n '& .fixed-collapse-panel': {\r\n paddingTop: '8px',\r\n marginBottom: '8px',\r\n position: 'relative',\r\n boxShadow: '0px 0.3px 0.9px rgba(0, 0, 0, 0.1), 0px 1.6px 3.6px rgba(0, 0, 0, 0.13)',\r\n borderRadius: '2px',\r\n backgroundColor: `${core && core.palette && core.palette.white}`,\r\n },\r\n '& .collapse-panel': {\r\n marginBottom: '8px',\r\n position: 'relative',\r\n boxShadow: '0px 0.3px 0.9px rgba(0, 0, 0, 0.1), 0px 1.6px 3.6px rgba(0, 0, 0, 0.13)',\r\n borderRadius: '2px',\r\n backgroundColor: `${core && core.palette && core.palette.white}`,\r\n },\r\n '& .collapse-content': {\r\n wordWrap: 'break-word',\r\n '&.content-hide': {\r\n height: '0',\r\n marginBottom: '0',\r\n visibility: 'hidden',\r\n },\r\n '&.content-show': {\r\n height: 'auto',\r\n marginBottom: '24px',\r\n },\r\n '& .error': {\r\n wordWrap: 'normal',\r\n },\r\n },\r\n '& .collapse-content-details': {\r\n '&.details-hide': {\r\n display: 'none',\r\n },\r\n },\r\n '& .collapse-content-overflow-hidden': {\r\n overflow: 'hidden',\r\n },\r\n '& .collapse-content-position-relative': {\r\n position: 'relative',\r\n },\r\n '& .collapse-title-bar': {\r\n minHeight: '72px',\r\n position: 'relative',\r\n userSelect: 'none',\r\n padding: '24px 0',\r\n '& .title-item': {\r\n overflow: 'hidden',\r\n },\r\n '& .collapse-title, & .collapse-title label, & .collapse-title label span': {\r\n fontSize: '18px',\r\n marginBottom: 0,\r\n padding: 0,\r\n lineHeight: '24px',\r\n '& .helpbutton': {\r\n verticalAlign: 'initial',\r\n },\r\n },\r\n '& .collapse-title label': {\r\n marginLeft: '9px',\r\n },\r\n '& .inactive-text': {\r\n color: `${core && core.palette && core.palette.neutralTertiary}`,\r\n },\r\n '& .error-string-wrapper': {\r\n position: 'absolute',\r\n right: '46px',\r\n },\r\n },\r\n\r\n\r\n '& .hide': {\r\n display: 'none',\r\n },\r\n },\r\n});\r\n\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Stack, Label } from '@bingads-webui-react/fabric-control';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ErrorString } from './error-string';\r\n\r\nexport const FixedTitleBar = (props) => {\r\n const {\r\n title, error,\r\n } = props;\r\n const i18n = useContext(I18nContext);\r\n\r\n const renderTitle = () => {\r\n let titleTpl = null;\r\n if (typeof title === 'string') {\r\n titleTpl = ;\r\n } else {\r\n titleTpl = React.cloneElement(title);\r\n }\r\n\r\n return titleTpl;\r\n };\r\n\r\n const renderError = () => {\r\n if (!error || typeof error === 'string') {\r\n return ;\r\n }\r\n return React.cloneElement(error);\r\n };\r\n\r\n return (\r\n \r\n \r\n {renderTitle()}\r\n \r\n
\r\n {renderError()}\r\n
\r\n
\r\n );\r\n};\r\n\r\nFixedTitleBar.propTypes = {\r\n error: PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.node,\r\n ]),\r\n title: PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.node,\r\n ]).isRequired,\r\n};\r\nFixedTitleBar.defaultProps = {\r\n error: '',\r\n};\r\n\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { Stack } from '@bingads-webui-react/fabric-control';\r\nimport { FixedTitleBar } from './fixed-title-bar';\r\nimport { Content } from './content';\r\n\r\nexport const FixedPanel = (props) => {\r\n const {\r\n title, children, id, error, onFocus, noOverflowHidden, relativePosition,\r\n } = props;\r\n\r\n return (\r\n \r\n {title && }\r\n {children}\r\n \r\n );\r\n};\r\n\r\nFixedPanel.propTypes = {\r\n id: PropTypes.string,\r\n title: PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.node,\r\n ]),\r\n children: PropTypes.node.isRequired,\r\n onFocus: PropTypes.func,\r\n error: PropTypes.string,\r\n noOverflowHidden: PropTypes.bool,\r\n relativePosition: PropTypes.bool,\r\n};\r\n\r\nFixedPanel.defaultProps = {\r\n id: '',\r\n error: '',\r\n title: null,\r\n onFocus() { },\r\n noOverflowHidden: false,\r\n relativePosition: false,\r\n};\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { Stack } from '@bingads-webui-react/fabric-control';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { Panel } from './panel';\r\nimport { getStyles } from './style';\r\nimport { FixedPanel } from './fixed-panel';\r\n\r\nexport const Collapse = (props) => {\r\n const {\r\n className,\r\n activeKeys,\r\n setActiveKeys,\r\n checkItems,\r\n skipItemsTypeCheck,\r\n allPanelItems,\r\n } = props;\r\n\r\n const classes = useDefaultStyles(getStyles);\r\n const i18n = useContext(I18nContext);\r\n const renderPanels = () => {\r\n const newChildren = [];\r\n React.Children.forEach(props.children, (child, index) => {\r\n if (!child) {\r\n return;\r\n }\r\n const { type: childType, key } = child;\r\n if (!skipItemsTypeCheck && !(childType.name === Panel.name || childType.displayName === Panel.name || childType.name === FixedPanel.name || childType.displayName === FixedPanel.name)) {\r\n // eslint-disable-next-line no-console\r\n console.warn('Warning: The child component type of Collapse must be Panel or FixedPanel');\r\n return;\r\n }\r\n\r\n if (checkItems && !allPanelItems.includes(key)) return;\r\n\r\n const isActive = activeKeys && activeKeys.indexOf(key) > -1;\r\n const newProps = {\r\n id: key === undefined ? index : key,\r\n activeKeys,\r\n isActive,\r\n setActiveKeys,\r\n };\r\n\r\n newChildren.push(React.cloneElement(child, newProps));\r\n });\r\n\r\n if (checkItems && allPanelItems.length === 0) {\r\n return (
{i18n.getString(_TL_('There is no target supported'))}
);\r\n }\r\n\r\n return newChildren;\r\n };\r\n\r\n return (\r\n \r\n {renderPanels()}\r\n \r\n );\r\n};\r\n\r\nCollapse.propTypes = {\r\n className: PropTypes.string,\r\n activeKeys: PropTypes.arrayOf(PropTypes.string),\r\n allPanelItems: PropTypes.arrayOf(PropTypes.string),\r\n setActiveKeys: PropTypes.func.isRequired,\r\n children: PropTypes.node.isRequired,\r\n checkItems: PropTypes.bool,\r\n skipItemsTypeCheck: PropTypes.bool,\r\n};\r\n\r\nCollapse.defaultProps = {\r\n className: '',\r\n activeKeys: [],\r\n checkItems: false,\r\n skipItemsTypeCheck: false,\r\n allPanelItems: [],\r\n};\r\n","import React, { useContext, useMemo, useCallback } from 'react';\r\nimport { withCollapseAdapter } from '@bingads-webui-campaign-react/validated-form-cards';\r\nimport classNames from 'classnames';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n AccordionCard,\r\n FormCardBody,\r\n FormCardHeader,\r\n Spacer,\r\n FormCardError,\r\n AccordionButton,\r\n FormCardSummary,\r\n FormCard,\r\n} from '@bingads-webui-fluent-component/form-cards';\r\nimport { makeStyles } from '@fluentui/react-components';\r\nimport { Label } from '@bingads-webui-react/fluent-controls';\r\nimport { CustomExpandableActuator } from '@bingads-webui-campaign-react/actuator';\r\nimport { withContainerPropInjectingErrorHandling } from '@bingads-webui-campaign-react/error-handling';\r\n\r\nconst useClasses = makeStyles({\r\n root: {\r\n marginBottom: '8px',\r\n },\r\n});\r\n\r\nexport const ValidatedPanelInternal = ({\r\n title,\r\n children,\r\n open,\r\n id,\r\n ...rest\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const classes = useClasses();\r\n\r\n const shouldRenderSummary = useMemo(() => title && title.props && title.props.details, [title]);\r\n\r\n const renderTitle = useCallback(() => {\r\n let titleTpl = null;\r\n if (typeof title === 'string') {\r\n titleTpl = ;\r\n } else {\r\n titleTpl = React.cloneElement(title, { details: null, isActive: open });\r\n }\r\n\r\n return titleTpl;\r\n }, [title, open, i18n]);\r\n\r\n const renderSummary = useCallback(() => {\r\n let summaryTpl = null;\r\n\r\n const titleDetails = title.props.details;\r\n if (typeof titleDetails === 'string') {\r\n summaryTpl = ;\r\n } else {\r\n summaryTpl = React.cloneElement(titleDetails);\r\n }\r\n\r\n return summaryTpl;\r\n }, [title, i18n]);\r\n\r\n return (\r\n \r\n \r\n {renderTitle()}\r\n \r\n \r\n \r\n \r\n {shouldRenderSummary && !open && {renderSummary()}}\r\n \r\n {children}\r\n \r\n \r\n );\r\n};\r\n\r\nexport const ValidatedPanel = withCollapseAdapter(withContainerPropInjectingErrorHandling(ValidatedPanelInternal, [CustomExpandableActuator]));\r\n\r\n\r\nexport const ValidatedFixedPanelInternal = ({\r\n title,\r\n children,\r\n id,\r\n ...rest\r\n}) => {\r\n const classes = useClasses();\r\n\r\n return (\r\n \r\n \r\n {title}\r\n \r\n \r\n {children}\r\n \r\n \r\n );\r\n};\r\n\r\nexport const ValidatedFixedPanel = withContainerPropInjectingErrorHandling(ValidatedFixedPanelInternal);\r\n","import React, { useContext, Fragment } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { Text, Stack } from '@bingads-webui-react/fabric-control';\r\nimport { Toggle } from '@bingads-webui-react/fabric-with-signal';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\n\r\nexport const ToggleTitle = (props) => {\r\n const i18n = useContext(I18nContext);\r\n const {\r\n titleKey, topicKey, handleChangeToggle, isChecked, isActive, id,\r\n } = props;\r\n\r\n const labeContent = (\r\n { e.stopPropagation(); }} onKeyPress={(e) => { e.stopPropagation(); }}>\r\n {i18n.getString(titleKey)}\r\n {topicKey && }\r\n \r\n );\r\n\r\n const onChange = (e, value) => {\r\n if (isActive || (!isActive && isChecked)) {\r\n e.stopPropagation();\r\n }\r\n handleChangeToggle(e, value);\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {props.details}\r\n \r\n \r\n \r\n\r\n \r\n );\r\n};\r\n\r\nToggleTitle.propTypes = {\r\n id: PropTypes.string,\r\n details: PropTypes.string,\r\n titleKey: PropTypes.string.isRequired,\r\n topicKey: PropTypes.string.isRequired,\r\n isActive: PropTypes.bool,\r\n handleChangeToggle: PropTypes.func.isRequired,\r\n isChecked: PropTypes.bool,\r\n};\r\n\r\nToggleTitle.defaultProps = {\r\n id: '',\r\n details: '',\r\n isActive: false,\r\n isChecked: false,\r\n};\r\n","import React, { useContext, Fragment } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { Label, Text, Stack } from '@bingads-webui-react/fabric-control';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\nimport _ from 'underscore';\r\n\r\nconst recommendedTagStyles = {\r\n padding: '4px 8px',\r\n background: '#EFF6FC',\r\n borderRadius: 4,\r\n color: '#106EBE',\r\n fontWeight: 600,\r\n fontSize: 14,\r\n marginRight: 20,\r\n};\r\n\r\nexport const TextTitle = (props) => {\r\n const i18n = useContext(I18nContext);\r\n const {\r\n isActive, titleKey, topicKey, icon, iconStyles, iconAltText, as: HeadingComponent, headingClassName, isRecommended, headingRole, headingLevel,\r\n } = props;\r\n return (\r\n \r\n \r\n \r\n {icon && {iconAltText}}\r\n \r\n {isRecommended && (
{i18n.getString(_TL_('Recommended'))}
)}\r\n
\r\n \r\n {props.details}\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nTextTitle.propTypes = {\r\n titleKey: PropTypes.string.isRequired,\r\n topicKey: PropTypes.string,\r\n details: PropTypes.string,\r\n isActive: PropTypes.bool,\r\n icon: PropTypes.string,\r\n iconAltText: PropTypes.string,\r\n as: PropTypes.elementType,\r\n headingClassName: PropTypes.string,\r\n iconStyles: PropTypes.shape({}),\r\n isRecommended: PropTypes.bool,\r\n headingRole: PropTypes.string,\r\n headingLevel: PropTypes.string,\r\n};\r\n\r\nTextTitle.defaultProps = {\r\n topicKey: undefined,\r\n details: '',\r\n isActive: false,\r\n icon: undefined,\r\n iconAltText: '',\r\n as: 'span',\r\n headingClassName: '',\r\n iconStyles: {},\r\n isRecommended: false,\r\n headingRole: '',\r\n headingLevel: '',\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Text } from '@bingads-webui-react/fabric-control';\r\n\r\nconst textStyle = {\r\n root: {\r\n color: '#A80000',\r\n lineHeight: '24px',\r\n },\r\n};\r\n\r\nexport const TitleBarError = ({\r\n error,\r\n}) => (\r\n \r\n {error}\r\n \r\n);\r\n\r\nTitleBarError.propTypes = {\r\n error: PropTypes.string.isRequired,\r\n};\r\n","import { useState, useCallback } from 'react';\r\n\r\nexport const useCollapseState = (allSections, expandedSections) => {\r\n const [activeSections, setActiveSections] = useState(expandedSections);\r\n\r\n const flipExpandAllState = useCallback(() => {\r\n if (activeSections.length) {\r\n setActiveSections([]);\r\n } else {\r\n setActiveSections(allSections);\r\n }\r\n }, [activeSections.length, allSections]);\r\n\r\n const expandAll = useCallback(() => {\r\n setActiveSections(allSections);\r\n }, [allSections]);\r\n\r\n return [allSections, activeSections, setActiveSections, flipExpandAllState, expandAll];\r\n};\r\n","import { union } from 'underscore';\r\nimport { Panel as BootstrapPanel } from 'react-bootstrap';\r\nimport { BootstrapExpandableActuator, CustomExpandableActuator } from '@bingads-webui-campaign-react/actuator';\r\nimport { withContainerRenderingErrorHandling, withContainerPropInjectingErrorHandling } from '@bingads-webui-campaign-react/error-handling';\r\nimport { withFluentSwitcher } from '@bingads-webui-react/fluent-version-switcher';\r\n\r\nimport { Collapse } from './components/collapse/collapse';\r\nimport { Panel } from './components/collapse/panel';\r\nimport { FixedPanel } from './components/collapse/fixed-panel';\r\nimport { ValidatedPanel as ValidatedPanelV2, ValidatedFixedPanel as ValidatedFixedPanelV2 } from './components/panel-v2-shim';\r\n\r\nCollapse.Panel = Panel;\r\nCollapse.FixedPanel = FixedPanel;\r\nexport { Collapse };\r\nexport { ToggleTitle } from './components/common/toggle-title';\r\nexport { TextTitle } from './components/common/text-title';\r\nexport { TitleBarError } from './components/common/title-bar-error';\r\n\r\nexport * from './components/collapse/use-collapse-state';\r\n\r\nexport const collapseExpander = ({ setActiveKeys }) => (key) => {\r\n setActiveKeys(activeKeys => union(activeKeys, [key]));\r\n};\r\n\r\nexport const getPanelErrorProps = ({ needsAttention }) => (needsAttention ? {\r\n error: _TL_(\"* Something's wrong\"),\r\n} : {});\r\n\r\nexport const ValidatedFixedPanelV1 = withContainerPropInjectingErrorHandling(Collapse.FixedPanel);\r\nexport const ValidatedPanelV1 = withContainerPropInjectingErrorHandling(Collapse.Panel, [CustomExpandableActuator]);\r\nexport const ValidatedBootstrapPanel = withContainerRenderingErrorHandling(BootstrapPanel, [BootstrapExpandableActuator]);\r\n\r\nexport const ValidatedPanel = withFluentSwitcher(ValidatedPanelV1, ValidatedPanelV2);\r\nexport const ValidatedFixedPanel = withFluentSwitcher(ValidatedFixedPanelV1, ValidatedFixedPanelV2);\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 (budgetString) {pug_html = pug_html + \"\\u003Cdiv class=\\\"contextual-tooltip-container\\\"\\u003E\\u003Cdiv class=\\\"contextual-content\\\"\\u003E\\u003Cdiv\\u003E\" + (pug.escape(null == (pug_interp = budgetString) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"budgetString\" in locals_for_with?locals_for_with.budgetString:typeof budgetString!==\"undefined\"?budgetString:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"contextual-tooltip-container\\\"\\u003E\\u003Cdiv class=\\\"contextual-content\\\"\\u003E\\u003Cspan\\u003E\\u003Cdiv class=\\\"status\\\" data-bind=\\\"text: adgroupDeliveryStatusTitle\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\\u003E\\u003Cspan data-bind=\\\"attr: { class: eligibleStatusIcon() ? 'statusEnabled_icon' : 'status_warning' }, visible: showStatusIcon\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Ch6 data-bind=\\\"text: adgroupDeliveryStatus\\\"\\u003E\\u003C\\u002Fh6\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (adgroupDeliveryStatus, adgroupDeliveryStatusTitle, eligibleStatusIcon, showStatusIcon) {pug_html = pug_html + \"\\u003Cdiv class=\\\"contextual-tooltip-container\\\"\\u003E\\u003Cdiv class=\\\"contextual-content\\\"\\u003E\\u003Cdiv\\u003E\\u003Cspan class=\\\"status\\\"\\u003E\" + (pug.escape(null == (pug_interp = adgroupDeliveryStatusTitle) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\nif (showStatusIcon) {\nif (eligibleStatusIcon) {\npug_html = pug_html + \"\\u003Cspan class=\\\"status-icon iconba iconba-Completed\\\"\\u003E\\u003C\\u002Fspan\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cspan class=\\\"status-icon iconba iconba-Warning\\\"\\u003E\\u003C\\u002Fspan\\u003E\";\n}\n}\npug_html = pug_html + \"\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = adgroupDeliveryStatus) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"adgroupDeliveryStatus\" in locals_for_with?locals_for_with.adgroupDeliveryStatus:typeof adgroupDeliveryStatus!==\"undefined\"?adgroupDeliveryStatus:undefined,\"adgroupDeliveryStatusTitle\" in locals_for_with?locals_for_with.adgroupDeliveryStatusTitle:typeof adgroupDeliveryStatusTitle!==\"undefined\"?adgroupDeliveryStatusTitle:undefined,\"eligibleStatusIcon\" in locals_for_with?locals_for_with.eligibleStatusIcon:typeof eligibleStatusIcon!==\"undefined\"?eligibleStatusIcon:undefined,\"showStatusIcon\" in locals_for_with?locals_for_with.showStatusIcon:typeof showStatusIcon!==\"undefined\"?showStatusIcon:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"contextual-tooltip-container\\\"\\u003E\\u003Cdiv class=\\\"contextual-content\\\"\\u003E\\u003Cspan\\u003E\\u003Ch6 data-bind=\\\"text: reachSize\\\"\\u003E\\u003C\\u002Fh6\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (reachSize) {pug_html = pug_html + \"\\u003Cdiv class=\\\"contextual-tooltip-container\\\"\\u003E\\u003Cdiv class=\\\"contextual-content\\\"\\u003E\\u003Cdiv\\u003E\" + (pug.escape(null == (pug_interp = reachSize) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"reachSize\" in locals_for_with?locals_for_with.reachSize:typeof reachSize!==\"undefined\"?reachSize:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"contextual-tooltip-container\\\"\\u003E\\u003Cdiv class=\\\"contextual-content\\\"\\u003E\\u003Cspan\\u003E\\u003Cdiv class=\\\"status\\\" data-bind=\\\"text: campaignDeliveryStatusTitle\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\\u003E\\u003Cspan data-bind=\\\"attr: { class: eligibleStatusIcon() ? 'statusEnabled_icon' : 'iconba iconba-Warning status_warning' }, visible: showStatusIcon\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Ch6 data-bind=\\\"text: campaignDeliveryStatus\\\"\\u003E\\u003C\\u002Fh6\\u003E\\u003C\\u002Fdiv\\u003E\\u003Ch6 data-bind=\\\"text: campaignType\\\"\\u003E\\u003C\\u002Fh6\\u003E\\u003Ch6 data-bind=\\\"text: campaignBudget\\\"\\u003E\\u003C\\u002Fh6\\u003E\\u003Ch6 data-bind=\\\"text: campaignBiddingType\\\"\\u003E\\u003C\\u002Fh6\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (campaignBiddingType, campaignBudget, campaignDeliveryStatus, campaignDeliveryStatusTitle, campaignType, eligibleStatusIcon, showStatusIcon) {pug_html = pug_html + \"\\u003Cdiv class=\\\"contextual-tooltip-container\\\"\\u003E\\u003Cdiv class=\\\"contextual-content\\\"\\u003E\\u003Cdiv\\u003E\\u003Cspan class=\\\"status\\\"\\u003E\" + (pug.escape(null == (pug_interp = campaignDeliveryStatusTitle) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\nif (showStatusIcon) {\nif (eligibleStatusIcon) {\npug_html = pug_html + \"\\u003Cspan class=\\\"status-icon iconba iconba-Completed\\\"\\u003E\\u003C\\u002Fspan\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cspan class=\\\"status-icon iconba iconba-Warning\\\"\\u003E\\u003C\\u002Fspan\\u003E\";\n}\n}\npug_html = pug_html + \"\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = campaignDeliveryStatus) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\\u003E\" + (pug.escape(null == (pug_interp = campaignType) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv\\u003E\" + (pug.escape(null == (pug_interp = campaignBudget) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv\\u003E\" + (pug.escape(null == (pug_interp = campaignBiddingType) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"campaignBiddingType\" in locals_for_with?locals_for_with.campaignBiddingType:typeof campaignBiddingType!==\"undefined\"?campaignBiddingType:undefined,\"campaignBudget\" in locals_for_with?locals_for_with.campaignBudget:typeof campaignBudget!==\"undefined\"?campaignBudget:undefined,\"campaignDeliveryStatus\" in locals_for_with?locals_for_with.campaignDeliveryStatus:typeof campaignDeliveryStatus!==\"undefined\"?campaignDeliveryStatus:undefined,\"campaignDeliveryStatusTitle\" in locals_for_with?locals_for_with.campaignDeliveryStatusTitle:typeof campaignDeliveryStatusTitle!==\"undefined\"?campaignDeliveryStatusTitle:undefined,\"campaignType\" in locals_for_with?locals_for_with.campaignType:typeof campaignType!==\"undefined\"?campaignType:undefined,\"eligibleStatusIcon\" in locals_for_with?locals_for_with.eligibleStatusIcon:typeof eligibleStatusIcon!==\"undefined\"?eligibleStatusIcon:undefined,\"showStatusIcon\" in locals_for_with?locals_for_with.showStatusIcon:typeof showStatusIcon!==\"undefined\"?showStatusIcon: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 (campaigns, campaignsTitle) {pug_html = pug_html + \"\\u003Cdiv class=\\\"contextual-tooltip-container\\\"\\u003E\\u003Cdiv class=\\\"contextual-content\\\"\\u003E\\u003Cdiv class=\\\"campaigns\\\"\\u003E\\u003Cdiv class=\\\"title\\\"\\u003E\" + (pug.escape(null == (pug_interp = campaignsTitle) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\n// iterate campaigns\n;(function(){\n var $$obj = campaigns;\n if ('number' == typeof $$obj.length) {\n for (var index = 0, $$l = $$obj.length; index < $$l; index++) {\n var val = $$obj[index];\nif (index < 5) {\npug_html = pug_html + \"\\u003Cdiv\\u003E\" + (pug.escape(null == (pug_interp = val.CampaignName) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\n}\nelse\nif (index === 5) {\npug_html = pug_html + \"\\u003Cdiv\\u003E\" + (pug.escape(null == (pug_interp = '...') ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\n}\n }\n } else {\n var $$l = 0;\n for (var index in $$obj) {\n $$l++;\n var val = $$obj[index];\nif (index < 5) {\npug_html = pug_html + \"\\u003Cdiv\\u003E\" + (pug.escape(null == (pug_interp = val.CampaignName) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\n}\nelse\nif (index === 5) {\npug_html = pug_html + \"\\u003Cdiv\\u003E\" + (pug.escape(null == (pug_interp = '...') ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\n}\n }\n }\n}).call(this);\n\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"campaigns\" in locals_for_with?locals_for_with.campaigns:typeof campaigns!==\"undefined\"?campaigns:undefined,\"campaignsTitle\" in locals_for_with?locals_for_with.campaignsTitle:typeof campaignsTitle!==\"undefined\"?campaignsTitle: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 (accountName, ariaLabel, entityCampaignId, entityId, entityName, entityType, isExpandingView, opportunityId, pageUrls, status) {pug_html = pug_html + (\"\\u003Ca\" + (pug.attr(\"aria-label\", ariaLabel, true, true)) + \"\\u003E\\u003Cdiv class=\\\"contextual-inline\\\"\\u003E\\u003Cspan\" + (\" class=\\\"contextual-tooltip\\\"\"+pug.attr(\"data-entityid\", entityId, true, true)+pug.attr(\"data-type\", entityType, true, true)+pug.attr(\"data-opportunityid\", opportunityId, true, true)+pug.attr(\"data-status\", status, true, true)+pug.attr(\"data-entityCampaignId\", entityCampaignId, true, true)+pug.attr(\"data-accountName\", accountName, true, true)+pug.attr(\"data-pageUrls\", pageUrls, true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = entityName) ? \"\" : pug_interp)));\nif (isExpandingView) {\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes(['expanding-contextual-attribute-'+opportunityId+'-'+entityId], [true]), false, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes(['contextual-attribute-'+opportunityId+'-'+entityId], [true]), false, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fa\\u003E\";}.call(this,\"accountName\" in locals_for_with?locals_for_with.accountName:typeof accountName!==\"undefined\"?accountName:undefined,\"ariaLabel\" in locals_for_with?locals_for_with.ariaLabel:typeof ariaLabel!==\"undefined\"?ariaLabel:undefined,\"entityCampaignId\" in locals_for_with?locals_for_with.entityCampaignId:typeof entityCampaignId!==\"undefined\"?entityCampaignId:undefined,\"entityId\" in locals_for_with?locals_for_with.entityId:typeof entityId!==\"undefined\"?entityId:undefined,\"entityName\" in locals_for_with?locals_for_with.entityName:typeof entityName!==\"undefined\"?entityName:undefined,\"entityType\" in locals_for_with?locals_for_with.entityType:typeof entityType!==\"undefined\"?entityType:undefined,\"isExpandingView\" in locals_for_with?locals_for_with.isExpandingView:typeof isExpandingView!==\"undefined\"?isExpandingView:undefined,\"opportunityId\" in locals_for_with?locals_for_with.opportunityId:typeof opportunityId!==\"undefined\"?opportunityId:undefined,\"pageUrls\" in locals_for_with?locals_for_with.pageUrls:typeof pageUrls!==\"undefined\"?pageUrls: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 (message) {pug_html = pug_html + \"\\u003Cdiv class=\\\"contextual-tooltip-container\\\"\\u003E\\u003Cdiv class=\\\"contextual-content\\\"\\u003E\\u003Cdiv\\u003E\" + (pug.escape(null == (pug_interp = message) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"message\" in locals_for_with?locals_for_with.message:typeof message!==\"undefined\"?message: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 (Urls) {pug_html = pug_html + \"\\u003Cdiv class=\\\"contextual-tooltip-container\\\"\\u003E\\u003Cdiv class=\\\"contextual-content\\\"\\u003E\";\n// iterate Urls\n;(function(){\n var $$obj = Urls;\n if ('number' == typeof $$obj.length) {\n for (var index = 0, $$l = $$obj.length; index < $$l; index++) {\n var val = $$obj[index];\npug_html = pug_html + \"\\u003Clabel\\u003E\" + (pug.escape(null == (pug_interp = \"URL \" + (index+1) + \":\") ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003Cdiv class=\\\"urlContainer\\\"\\u003E\\u003Cspan class=\\\"url\\\"\\u003E\" + (pug.escape(null == (pug_interp = val) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\";\n }\n } else {\n var $$l = 0;\n for (var index in $$obj) {\n $$l++;\n var val = $$obj[index];\npug_html = pug_html + \"\\u003Clabel\\u003E\" + (pug.escape(null == (pug_interp = \"URL \" + (index+1) + \":\") ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003Cdiv class=\\\"urlContainer\\\"\\u003E\\u003Cspan class=\\\"url\\\"\\u003E\" + (pug.escape(null == (pug_interp = val) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\";\n }\n }\n}).call(this);\n\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"Urls\" in locals_for_with?locals_for_with.Urls:typeof Urls!==\"undefined\"?Urls: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 (goalType, goalTypeLabel, i18n, scopeName, trackingStatus) {var resxKey = 'UnifiedEventTracking_Goals_TrackingStatus_Enum_' + trackingStatus\nvar statusStr = i18n.getString(resxKey)\npug_html = pug_html + \"\\u003Cdiv class=\\\"contextual-tooltip-container\\\"\\u003E\\u003Cdiv class=\\\"contextual-content\\\"\\u003E\\u003Cdiv\\u003E\\u003Cspan class=\\\"labelItem\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString(\"UnifiedEventTracking_TrackingStatus\")+': ') ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\nif (trackingStatus === 'Unverified' || trackingStatus === 'NoRecentConversion' || trackingStatus === 'TagInactive' || trackingStatus === 'InactiveDueToTagUnavailable') {\npug_html = pug_html + \"\\u003Cspan style=\\\"color:#D90026;\\\"\\u003E\" + (pug.escape(null == (pug_interp = statusStr) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\n}\nelse\nif (trackingStatus === 'RecordingConversions') {\npug_html = pug_html + \"\\u003Cspan style=\\\"color:#5CB85C;\\\"\\u003E\" + (pug.escape(null == (pug_interp = statusStr) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv\\u003E\\u003Cspan class=\\\"labelItem\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString(\"SharedLibrary_GridColumn_Scope\")+': ') ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = scopeName) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\\u003E\\u003Cspan class=\\\"labelItem\\\"\\u003E\" + (pug.escape(null == (pug_interp = goalTypeLabel+': ') ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = goalType) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"goalType\" in locals_for_with?locals_for_with.goalType:typeof goalType!==\"undefined\"?goalType:undefined,\"goalTypeLabel\" in locals_for_with?locals_for_with.goalTypeLabel:typeof goalTypeLabel!==\"undefined\"?goalTypeLabel:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"scopeName\" in locals_for_with?locals_for_with.scopeName:typeof scopeName!==\"undefined\"?scopeName:undefined,\"trackingStatus\" in locals_for_with?locals_for_with.trackingStatus:typeof trackingStatus!==\"undefined\"?trackingStatus: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 (createdBy, importedCampaigns, limitedByBudgetCampaigns, status, when) {pug_html = pug_html + \"\\u003Cdiv class=\\\"contextual-tooltip-container\\\"\\u003E\\u003Cdiv class=\\\"contextual-content\\\"\\u003E\\u003Cdiv class=\\\"importedTaskItem\\\"\\u003E\\u003Cdiv\\u003E\" + (null == (pug_interp = status) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"createdBy\\\"\\u003E\" + (null == (pug_interp = createdBy) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv\\u003E\" + (null == (pug_interp = when) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv\\u003E\" + (null == (pug_interp = importedCampaigns) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv\\u003E\" + (null == (pug_interp = limitedByBudgetCampaigns) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"createdBy\" in locals_for_with?locals_for_with.createdBy:typeof createdBy!==\"undefined\"?createdBy:undefined,\"importedCampaigns\" in locals_for_with?locals_for_with.importedCampaigns:typeof importedCampaigns!==\"undefined\"?importedCampaigns:undefined,\"limitedByBudgetCampaigns\" in locals_for_with?locals_for_with.limitedByBudgetCampaigns:typeof limitedByBudgetCampaigns!==\"undefined\"?limitedByBudgetCampaigns:undefined,\"status\" in locals_for_with?locals_for_with.status:typeof status!==\"undefined\"?status:undefined,\"when\" in locals_for_with?locals_for_with.when:typeof when!==\"undefined\"?when:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"contextual-tooltip-container\\\"\\u003E\\u003Cdiv class=\\\"contextual-content\\\"\\u003E\\u003Cspan\\u003E\\u003Ch6 data-bind=\\\"text: keywordQualityScore\\\"\\u003E\\u003C\\u002Fh6\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (keywordQualityScore) {pug_html = pug_html + \"\\u003Cdiv class=\\\"contextual-tooltip-container\\\"\\u003E\\u003Cdiv class=\\\"contextual-content\\\"\\u003E\\u003Cdiv\\u003E\" + (pug.escape(null == (pug_interp = keywordQualityScore) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"keywordQualityScore\" in locals_for_with?locals_for_with.keywordQualityScore:typeof keywordQualityScore!==\"undefined\"?keywordQualityScore: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 (displayPopupclarityEventGoalSettings) {pug_html = pug_html + \"\\u003Cdiv class=\\\"contextual-tooltip-container\\\"\\u003E\\u003Cdiv class=\\\"contextual-content\\\"\\u003E\";\n// iterate displayPopupclarityEventGoalSettings\n;(function(){\n var $$obj = displayPopupclarityEventGoalSettings;\n if ('number' == typeof $$obj.length) {\n for (var pug_index0 = 0, $$l = $$obj.length; pug_index0 < $$l; pug_index0++) {\n var val = $$obj[pug_index0];\npug_html = pug_html + \"\\u003Cdiv class=\\\"clarityEventGoalSettingsContainer\\\"\\u003E\\u003Cdiv class=\\\"clarityEventGoalSettings\\\"\\u003E\" + (null == (pug_interp = val.clarityEventGoalSetting) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"sourceURL\\\"\\u003E\" + (pug.escape(null == (pug_interp = val.sourceURL) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n }\n } else {\n var $$l = 0;\n for (var pug_index0 in $$obj) {\n $$l++;\n var val = $$obj[pug_index0];\npug_html = pug_html + \"\\u003Cdiv class=\\\"clarityEventGoalSettingsContainer\\\"\\u003E\\u003Cdiv class=\\\"clarityEventGoalSettings\\\"\\u003E\" + (null == (pug_interp = val.clarityEventGoalSetting) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"sourceURL\\\"\\u003E\" + (pug.escape(null == (pug_interp = val.sourceURL) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n }\n }\n}).call(this);\n\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"displayPopupclarityEventGoalSettings\" in locals_for_with?locals_for_with.displayPopupclarityEventGoalSettings:typeof displayPopupclarityEventGoalSettings!==\"undefined\"?displayPopupclarityEventGoalSettings: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 (displayPopupImageUrls, maxNumOfDisplayPopupImage, numOfImages, openEditPanel, viewMore) {pug_html = pug_html + \"\\u003Cdiv class=\\\"contextual-tooltip-container\\\"\\u003E\\u003Cdiv class=\\\"contextual-content\\\"\\u003E\\u003Cdiv\" + (\" class=\\\"moreImages\\\"\"+pug.attr(\"style\", pug.style({'min-height': `${75 * displayPopupImageUrls.length + (numOfImages > maxNumOfDisplayPopupImage ? 8 : 0)}px`}), true, true)) + \"\\u003E\";\n// iterate displayPopupImageUrls\n;(function(){\n var $$obj = displayPopupImageUrls;\n if ('number' == typeof $$obj.length) {\n for (var index = 0, $$l = $$obj.length; index < $$l; index++) {\n var imageUrl = $$obj[index];\npug_html = pug_html + \"\\u003Cimg\" + (pug.attr(\"src\", imageUrl, true, true)+\" width=\\\"114\\\" height=\\\"60\\\"\") + \"\\u003E\";\n }\n } else {\n var $$l = 0;\n for (var index in $$obj) {\n $$l++;\n var imageUrl = $$obj[index];\npug_html = pug_html + \"\\u003Cimg\" + (pug.attr(\"src\", imageUrl, true, true)+\" width=\\\"114\\\" height=\\\"60\\\"\") + \"\\u003E\";\n }\n }\n}).call(this);\n\nif (numOfImages > maxNumOfDisplayPopupImage) {\npug_html = pug_html + \"\\u003Cdiv\" + (\" class=\\\"viewMore\\\"\"+pug.attr(\"onclick\", openEditPanel, true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = viewMore) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"displayPopupImageUrls\" in locals_for_with?locals_for_with.displayPopupImageUrls:typeof displayPopupImageUrls!==\"undefined\"?displayPopupImageUrls:undefined,\"maxNumOfDisplayPopupImage\" in locals_for_with?locals_for_with.maxNumOfDisplayPopupImage:typeof maxNumOfDisplayPopupImage!==\"undefined\"?maxNumOfDisplayPopupImage:undefined,\"numOfImages\" in locals_for_with?locals_for_with.numOfImages:typeof numOfImages!==\"undefined\"?numOfImages:undefined,\"openEditPanel\" in locals_for_with?locals_for_with.openEditPanel:typeof openEditPanel!==\"undefined\"?openEditPanel:undefined,\"viewMore\" in locals_for_with?locals_for_with.viewMore:typeof viewMore!==\"undefined\"?viewMore:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"contextual-tooltip-container\\\"\\u003E\\u003Cdiv class=\\\"contextual-content\\\"\\u003E\\u003Cspan\\u003E\\u003Ch6 data-bind=\\\"text: negativeKeywordList\\\"\\u003E\\u003C\\u002Fh6\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (negativeKeywordList) {pug_html = pug_html + \"\\u003Cdiv class=\\\"contextual-tooltip-container\\\"\\u003E\\u003Cdiv class=\\\"contextual-content\\\"\\u003E\\u003Cdiv\\u003E\" + (pug.escape(null == (pug_interp = negativeKeywordList) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"negativeKeywordList\" in locals_for_with?locals_for_with.negativeKeywordList:typeof negativeKeywordList!==\"undefined\"?negativeKeywordList:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"contextual-tooltip-container\\\"\\u003E\\u003Cdiv class=\\\"contextual-content\\\"\\u003E\\u003Cspan\\u003E\\u003Ch6 data-bind=\\\"text: campaignsCount\\\"\\u003E\\u003C\\u002Fh6\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (campaignsCount) {pug_html = pug_html + \"\\u003Cdiv class=\\\"contextual-tooltip-container\\\"\\u003E\\u003Cdiv class=\\\"contextual-content\\\"\\u003E\\u003Cdiv\\u003E\" + (pug.escape(null == (pug_interp = campaignsCount) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"campaignsCount\" in locals_for_with?locals_for_with.campaignsCount:typeof campaignsCount!==\"undefined\"?campaignsCount: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 (message) {pug_html = pug_html + \"\\u003Cdiv class=\\\"contextual-tooltip-container\\\"\\u003E\\u003Cdiv class=\\\"contextual-content\\\"\\u003E\\u003Cdiv\\u003E\" + (pug.escape(null == (pug_interp = message) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"message\" in locals_for_with?locals_for_with.message:typeof message!==\"undefined\"?message: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, noData, noUET, uetLink) {pug_mixins[\"chart\"] = pug_interp = function(){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Cdiv class=\\\"column-chart-title\\\"\\u003E\\u003Cspan data-bind=\\\"text: chartTitle\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"column-chart-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n};\npug_html = pug_html + \"\\u003C!-- ko ifnot: conversionSelected--\\u003E\\u003Cdiv\\u003E\";\npug_mixins[\"chart\"]();\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003C!-- \\u002Fko--\\u003E\\u003C!-- ko if : conversionSelected--\\u003E\\u003Cdiv class=\\\"anchor\\\"\\u003E\";\nif (noUET || noData) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"column-chart-title\\\"\\u003E\\u003Cspan data-bind=\\\"text: chartTitle\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"no-conversion-chart\\\"\\u003E\\u003Cdiv\\u003E\\u003Cdiv class=\\\"chart-nodata-icon chart-nodata\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\nif (noUET) {\npug_html = pug_html + \"\\u003Cdiv\\u003E\\u003Cdiv class=\\\"description\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BudgetLandscape_ConversionStatus_0_line1')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"description\\\"\\u003E\" + (null == (pug_interp = i18n.getString('BudgetLandscape_ConversionStatus_0_line2').replace('{0}', uetLink)) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse\nif (noData) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"description\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BudgetLandscape_ConversionStatus_1')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_mixins[\"chart\"]();\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003C!-- \\u002Fko--\\u003E\";}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"noData\" in locals_for_with?locals_for_with.noData:typeof noData!==\"undefined\"?noData:undefined,\"noUET\" in locals_for_with?locals_for_with.noUET:typeof noUET!==\"undefined\"?noUET:undefined,\"uetLink\" in locals_for_with?locals_for_with.uetLink:typeof uetLink!==\"undefined\"?uetLink: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 (budgetType, entityName, i18n, isSharedBudget) {pug_html = pug_html + \"\\u003Cdiv class=\\\"recommendation-inline-budget-view\\\"\\u003E\";\nif (isSharedBudget) {\npug_html = pug_html + \"\\u003Ch5 class=\\\"shared-budget-info\\\"\\u003E\" + (null == (pug_interp = i18n.getString('Details_View_Increase_Shared_Budget', { entity_name: entityName })) ? \"\" : pug_interp) + \"\\u003C\\u002Fh5\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Ch5\\u003E\" + (null == (pug_interp = i18n.getString('Details_View_Increase_Budget', { entity_name: entityName })) ? \"\" : pug_interp) + \"\\u003C\\u002Fh5\\u003E\\u003Ch5\\u003E\\u003Cspan class=\\\"grid-disabled\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BudgetLandscape_CurrentBudgetType', { budget_type: i18n.getString(`BudgetType_${budgetType}`) })) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fh5\\u003E\";\n}\npug_html = pug_html + \"\\u003Cdiv class=\\\"budget-landscape-container\\\"\\u003E\\u003Cdiv class=\\\"landscape-table\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"landscape-chart\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"budget-landscape-actions\\\"\\u003E\\u003Cdiv class=\\\"movable-margin\\\" data-bind=\\\"visible: !showErrorMessage() && !showTipMessage()\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cbutton class=\\\"btn btn-primary btn-hero apply\\\" data-bind=\\\"disable:readOnly || isCurrentDataRowSelected() || showErrorMessage()\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Apply')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fbutton\\u003E\\u003Cbutton class=\\\"btn btn-default cancel\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Cancel')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fbutton\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"budgetType\" in locals_for_with?locals_for_with.budgetType:typeof budgetType!==\"undefined\"?budgetType:undefined,\"entityName\" in locals_for_with?locals_for_with.entityName:typeof entityName!==\"undefined\"?entityName:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"isSharedBudget\" in locals_for_with?locals_for_with.isSharedBudget:typeof isSharedBudget!==\"undefined\"?isSharedBudget: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 (currencySymbol, notAvailableStr, placeHolderText) {pug_html = pug_html + \"\\u003Ctable class=\\\"text-right vertical-align-middle\\\"\\u003E\\u003Cthead\\u003E\\u003Cth\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = '') ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fth\\u003E\\u003C!--ko foreach: localizedHeaders--\\u003E\\u003Cth data-bind=\\\"css: { "text-left": $index() === 0, "text-right": $index() > 0, "selected": $root.selectedColumnIndex() === $index()}\\\"\\u003E\\u003Cspan data-bind=\\\"text: $data\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fth\\u003E\\u003C!--\\u002Fko--\\u003E\\u003C\\u002Fthead\\u003E\\u003Ctbody\\u003E\\u003C!--ko foreach: landscapes--\\u003E\\u003Ctr data-bind=\\\"css:{"selected": $root.selectedRowIndex() === $index()}\\\"\\u003E\\u003Ctd\\u003E\\u003Cinput type=\\\"radio\\\" data-bind=\\\"value: $index, checked: $root.selectedRowIndex\\\"\\u003E\\u003C\\u002Ftd\\u003E\\u003C!--ko foreach: $root.headers--\\u003E\\u003Ctd data-bind=\\\"css: { "text-left": $index() === 0, "text-right": $index() > 0, "selected": $root.selectedColumnIndex() === $index()}\\\"\\u003E\\u003Cspan data-bind=\\\"text: $root.getTableCellText($parent, $data, $index())\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C!--ko if: $parent.isSuggested && $index() === 0--\\u003E\\u003Cspan class=\\\"tooltip-container\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C!--\\u002Fko--\\u003E\\u003C\\u002Ftd\\u003E\\u003C!--\\u002Fko--\\u003E\\u003C\\u002Ftr\\u003E\\u003C!--\\u002Fko--\\u003E\\u003Ctr class=\\\"input-row\\\" data-bind=\\\"css:{"selected": inputRowSelected}\\\"\\u003E\\u003Ctd\\u003E\\u003Cinput type=\\\"radio\\\" data-bind=\\\"value: landscapes.length, checked: selectedRowIndex\\\"\\u003E\\u003C\\u002Ftd\\u003E\\u003Ctd class=\\\"text-left user-input-cell\\\"\\u003E\\u003Cdiv class=\\\"user-input\\\"\\u003E\\u003Cspan\" + (pug.attr(\"class\", pug.classes([\"currency-symbol\",`symbol-size-${currencySymbol.length}`], [false,true]), false, true)+\" data-bind=\\\"css: {error: showErrorMessage()}\\\"\") + \"\\u003E\" + (pug.escape(null == (pug_interp = currencySymbol) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cinput\" + (\" type=\\\"text\\\"\"+pug.attr(\"placeholder\", placeHolderText, true, true)+\" data-bind=\\\"value: userInputDisplayVal, hasFocus: inputRowSelected, valueUpdate: 'keyup', css: {error: showErrorMessage()}\\\"\") + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Ftd\\u003E\\u003C!--ko foreach: localizedHeaders.slice(1)--\\u003E\\u003Ctd data-bind=\\\"css: { "selected": $root.selectedColumnIndex() === $index() + 1}\\\"\\u003E\\u003C!--ko if: $root.estimationKPIFormattedArray().length === 0--\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = notAvailableStr) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C!--\\u002Fko--\\u003E\\u003C!-- ko if: $root.estimationKPIFormattedArray().length \\u003E 0--\\u003E\\u003Cspan data-bind=\\\"text: $root.estimationKPIFormattedArray()[$index()]\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C!--\\u002Fko--\\u003E\\u003C\\u002Ftd\\u003E\\u003C!--\\u002Fko--\\u003E\\u003C\\u002Ftr\\u003E\\u003C\\u002Ftbody\\u003E\\u003C\\u002Ftable\\u003E\\u003Cdiv class=\\\"error-message\\\" data-bind=\\\"visible: showErrorMessage()\\\"\\u003E\\u003Cspan class=\\\"error\\\" data-bind=\\\"text: errorMessage\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"tip-message\\\" data-bind=\\\"visible: showTipMessage()\\\"\\u003E\\u003Cspan class=\\\"status_warning status iconba iconba-Warning\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"grid-disabled\\\" data-bind=\\\"text: tipMessage\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"currencySymbol\" in locals_for_with?locals_for_with.currencySymbol:typeof currencySymbol!==\"undefined\"?currencySymbol:undefined,\"notAvailableStr\" in locals_for_with?locals_for_with.notAvailableStr:typeof notAvailableStr!==\"undefined\"?notAvailableStr:undefined,\"placeHolderText\" in locals_for_with?locals_for_with.placeHolderText:typeof placeHolderText!==\"undefined\"?placeHolderText: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 (currencySymbol, currencySymbolClassName, notAvailableStr) {pug_html = pug_html + \"\\u003Ctable class=\\\"text-right vertical-align-middle\\\"\\u003E\\u003Cthead\\u003E\\u003Ctr\\u003E\\u003Cth\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = '') ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fth\\u003E\\u003C!--ko foreach: localizedHeaders--\\u003E\\u003Cth data-bind=\\\"css: { "text-left": $index() === 0, "text-right": $index() > 0}\\\"\\u003E\\u003Cspan data-bind=\\\"text: $data\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fth\\u003E\\u003C!--\\u002Fko--\\u003E\\u003C\\u002Ftr\\u003E\\u003C\\u002Fthead\\u003E\\u003Ctbody\\u003E\\u003C!--ko foreach: landscapes--\\u003E\\u003Ctr data-bind=\\\"visible: $root.currentRowIndex() !== $index(), css:{"selected": $root.selectedRowIndex() === $index()}\\\"\\u003E\\u003Ctd\\u003E\\u003Cinput type=\\\"radio\\\" data-bind=\\\"value: $index(), checked: $root.selectedRowIndex(), attr: {"aria-labelledby": "EstimatedBudget-" + $index(), "aria-describedby": "EstimatedClicks-" + $index()}\\\"\\u003E\\u003C\\u002Ftd\\u003E\\u003C!--ko foreach: $root.headers--\\u003E\\u003Ctd data-bind=\\\"css: { "text-left": $index() === 0, "text-right": $index() > 0}\\\"\\u003E\\u003Cspan data-bind=\\\"text: $root.getTableCellText($parent, $data, $index()), attr: {"id": $root.getTabelCellId($data, $index(), $parentContext.$index())}\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Ftd\\u003E\\u003C!--\\u002Fko--\\u003E\\u003C\\u002Ftr\\u003E\\u003C!--\\u002Fko--\\u003E\\u003Ctr class=\\\"input-row\\\" data-bind=\\\"css:{"selected": inputRowSelected()}\\\"\\u003E\\u003Ctd\\u003E\\u003Cinput type=\\\"radio\\\" data-bind=\\\"value: landscapes.length, checked: selectedRowIndex(), attr: {"aria-label": $root.getCustomInputBudgetAriaLabel()}\\\"\\u003E\\u003C\\u002Ftd\\u003E\\u003Ctd class=\\\"text-left user-input-cell\\\"\\u003E\\u003Cdiv class=\\\"user-input\\\"\\u003E\\u003Cspan\" + (pug.attr(\"class\", pug.classes([\"currency-symbol\",currencySymbolClassName], [false,true]), false, true)+\" data-bind=\\\"css: {error: showErrorMessage()}\\\"\") + \"\\u003E\" + (pug.escape(null == (pug_interp = currencySymbol) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cinput type=\\\"text\\\" data-bind=\\\"value: userInputDisplayVal, hasFocus: inputRowSelected(), valueUpdate: "keyup", css: {error: showErrorMessage()}, attr: {"aria-label": userInputDisplayVal}\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Ftd\\u003E\\u003C!--ko foreach: localizedHeaders.slice(1)--\\u003E\\u003Ctd\\u003E\\u003C!--ko if: $root.estimationKPIFormattedArray().length === 0--\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = notAvailableStr) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C!--\\u002Fko--\\u003E\\u003C!-- ko if: $root.estimationKPIFormattedArray().length \\u003E 0--\\u003E\\u003Cspan data-bind=\\\"text: $root.estimationKPIFormattedArray()[$index()]\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C!--\\u002Fko--\\u003E\\u003C\\u002Ftd\\u003E\\u003C!--\\u002Fko--\\u003E\\u003C\\u002Ftr\\u003E\\u003C\\u002Ftbody\\u003E\\u003C\\u002Ftable\\u003E\\u003Cdiv class=\\\"error-message\\\" data-bind=\\\"visible: showErrorMessage()\\\"\\u003E\\u003Cspan class=\\\"error\\\" data-bind=\\\"text: errorMessage\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"tip-message\\\" data-bind=\\\"visible: showTipMessage()\\\"\\u003E\\u003Cspan class=\\\"status-icon iconba iconba-Warning\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"grid-disabled\\\" data-bind=\\\"text: tipMessage\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"currencySymbol\" in locals_for_with?locals_for_with.currencySymbol:typeof currencySymbol!==\"undefined\"?currencySymbol:undefined,\"currencySymbolClassName\" in locals_for_with?locals_for_with.currencySymbolClassName:typeof currencySymbolClassName!==\"undefined\"?currencySymbolClassName:undefined,\"notAvailableStr\" in locals_for_with?locals_for_with.notAvailableStr:typeof notAvailableStr!==\"undefined\"?notAvailableStr: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 (name, primaryMetricName, primaryMetricValue, showPrimaryMetric, value) {if (showPrimaryMetric) {\npug_html = pug_html + \"\\u003Cp\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = primaryMetricName) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = ': ') ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = primaryMetricValue) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fp\\u003E\\u003Cbr\\u003E\";\n}\npug_html = pug_html + \"\\u003Cp\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = name) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = ': ') ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = value) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fp\\u003E\";}.call(this,\"name\" in locals_for_with?locals_for_with.name:typeof name!==\"undefined\"?name:undefined,\"primaryMetricName\" in locals_for_with?locals_for_with.primaryMetricName:typeof primaryMetricName!==\"undefined\"?primaryMetricName:undefined,\"primaryMetricValue\" in locals_for_with?locals_for_with.primaryMetricValue:typeof primaryMetricValue!==\"undefined\"?primaryMetricValue:undefined,\"showPrimaryMetric\" in locals_for_with?locals_for_with.showPrimaryMetric:typeof showPrimaryMetric!==\"undefined\"?showPrimaryMetric:undefined,\"value\" in locals_for_with?locals_for_with.value:typeof value!==\"undefined\"?value:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n) {pug_html = pug_html + \"\\u003Ca class=\\\"uet-link\\\" href=\\\"javascript:void(0);\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BudgetLandscape_ConversionStatus_0_linkText')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\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 (currentStatus, items) {pug_html = pug_html + \"\\u003Cul class=\\\"grid\\\" role=\\\"menu\\\"\\u003E\";\n// iterate items\n;(function(){\n var $$obj = items;\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 + \"\\u003Cli class=\\\"statuschangesubtask\\\" role=\\\"presentation\\\"\\u003E\\u003Cspan\" + (\" class=\\\"statuschangelink clickable\\\"\"+pug.attr(\"title\", item.title, true, true)+pug.attr(\"data-value\", item.value, true, true)+\" role=\\\"menuitem\\\" tabindex=\\\"0\\\"\"+pug.attr(\"aria-label\", item.ariaLabel, true, true)) + \"\\u003E\\u003Cspan\" + (pug.attr(\"class\", pug.classes([\"statuschange-icon\",item.iconClass], [false,true]), false, true)) + \"\\u003E\\u003C\\u002Fspan\\u003E\";\nif (currentStatus === item.value) {\npug_html = pug_html + \"\\u003Cstrong\" + (pug.attr(\"class\", pug.classes([item.textClass], [true]), false, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = item.text) ? \"\" : pug_interp)) + \"\\u003C\\u002Fstrong\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cspan\" + (pug.attr(\"class\", pug.classes([item.textClass], [true]), false, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = item.text) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fli\\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 + \"\\u003Cli class=\\\"statuschangesubtask\\\" role=\\\"presentation\\\"\\u003E\\u003Cspan\" + (\" class=\\\"statuschangelink clickable\\\"\"+pug.attr(\"title\", item.title, true, true)+pug.attr(\"data-value\", item.value, true, true)+\" role=\\\"menuitem\\\" tabindex=\\\"0\\\"\"+pug.attr(\"aria-label\", item.ariaLabel, true, true)) + \"\\u003E\\u003Cspan\" + (pug.attr(\"class\", pug.classes([\"statuschange-icon\",item.iconClass], [false,true]), false, true)) + \"\\u003E\\u003C\\u002Fspan\\u003E\";\nif (currentStatus === item.value) {\npug_html = pug_html + \"\\u003Cstrong\" + (pug.attr(\"class\", pug.classes([item.textClass], [true]), false, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = item.text) ? \"\" : pug_interp)) + \"\\u003C\\u002Fstrong\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cspan\" + (pug.attr(\"class\", pug.classes([item.textClass], [true]), false, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = item.text) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fli\\u003E\";\n }\n }\n}).call(this);\n\npug_html = pug_html + \"\\u003C\\u002Ful\\u003E\";}.call(this,\"currentStatus\" in locals_for_with?locals_for_with.currentStatus:typeof currentStatus!==\"undefined\"?currentStatus:undefined,\"items\" in locals_for_with?locals_for_with.items:typeof items!==\"undefined\"?items: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\\u003E\\u003Cdiv class=\\\"custom-content\\\"\\u003E\\u003Cdiv data-ref=\\\"subEditView\\\"\\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)) + \"\\u003E\\u003Cinput\" + (\" class=\\\"grid-popupeditor-cancel btn btn-default grid-edit-menu\\\"\"+\" type=\\\"button\\\"\"+pug.attr(\"value\", i18n.getString('Cancel'), true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cul class=\\\"grid-error-list hide\\\"\\u003E\\u003Cdiv class=\\\"grid-error spritedimage\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cspan class=\\\"error grid-error-message\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Ful\\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 (direction, html) {pug_html = pug_html + \"\\u003Cdiv class=\\\"column-header-container\\\"\\u003E\";\nif (direction < 0) {\npug_html = pug_html + \"\\u003Cspan class=\\\"sort-indicator glyphicon glyphicon-arrow-down\\\"\\u003E\\u003C\\u002Fspan\\u003E\";\n}\nelse\nif (direction > 0) {\npug_html = pug_html + \"\\u003Cspan class=\\\"sort-indicator glyphicon glyphicon-arrow-up\\\"\\u003E\\u003C\\u002Fspan\\u003E\";\n}\npug_html = pug_html + (null == (pug_interp = html) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\";}.call(this,\"direction\" in locals_for_with?locals_for_with.direction:typeof direction!==\"undefined\"?direction:undefined,\"html\" in locals_for_with?locals_for_with.html:typeof html!==\"undefined\"?html:undefined));;return pug_html;};\nmodule.exports = template;"],"names":["JsDataQueryConverter","_createClass","_classCallCheck","key","value","queryParams","Promise","query","this","translateParams","_","options","orderByParams","orderBy","normalizeOrderBy","map","_ref","_ref2","_slicedToArray","params","omit","extend","offset","skip","limit","take","where","filter","translateOrderBy","orderby","Boolean","_this","arguments","length","undefined","memo","item","direction","Error","concat","push","QueryBuilder","_Observable","decorators","_ref$initialQuery","initialQuery","_ref$builderConfig","builderConfig","generateJsDataQuery","featureName","_ref$logActivity","logActivity","error","_callSuper","lastQuery","_inherits","newQuery","bodyParameters","convert","notify","_this2","cloneDeep","dataQuery","decorator","run","then","handleNewQuery","bind","catch","e","stack","name","Observable","Decorator","_ref$expectedDeps","expectedDeps","_ref$deps","deps","missing","join","verifyDepsExist","savedValue","getValueAsync","buildQuery","getSelectQuery","savedColumnNames","lockedColumnNames","columnMap","IsAvgPositionDeprecationPhase2Enabled","includes","hasTopImpressionRate","hasAbsoluteTopImpressionRate","column","validNames","uniq","selectedCols","Array","prototype","apply","ColumnChooserDecorator","_Decorator","columnsMap","defaultColumns","lockedColumns","_ref$customColumnsEna","customColumnsEnabled","_ref$IsAvgPositionDep","_ref$IsColumnConversi","IsColumnConversionEnabled","columnConversions","_ref$comparisonPoPCol","comparisonPoPColumns","state","Columns","ColumnChooserPreference","SelectedColumns","CustomColumns","CustomColumnPreference","getCustomColumnPreferenceStore","fetchSortInfo","_buildColumnAndSortin","buildColumnAndSortingConversions","applyColumnConversions","applySortingInfoConversion","customColumnsRecord","allCustomColumns","get","customColumnsMap","customColumnGridKeyFromId","id","preferenceKey","promises","findAll","grid","getCustomColumnPreferenceName","project","columnsPromise","warmCache","selection","savedColumns","getPromise","_ref3","_ref3$","dateRange","sortInfo","orderbyInfo","sortableHeader","_ref4","savedColumnsRecord","selectedColumns","extractCustomColumnsInfo","transformedQueryParams","select","compared","start","sort","patchedOrderbyInfo","DateFilterDecorator","_ref$isOdataActionSou","isOdataActionSource","dateUtil","currentRange","date","format","startDate","endDate","end","comparisonStartDate","comparisonEndDate","addDateRangeToQueryParams","changeEntitySet","_this$currentRange","formatDateInQuery","_this$currentRange2","gridDataParameters","DateRange","StartDate","formatDateInEntitySet","EndDate","ComparisonDateRange","filterOptionsExtensions","dateFormat","shortDateFormat","FilterDecorator","filterService","ignoreColumns","appConfig","appState","ReportEmailRule","setFilterByReportEmailRule","refreshSource","getCombinedFilter","p$Initialized","filterQuery","_this3","transformedFilterQuery","keys","filterOptions","odataOptions","schema","merge","GridDataParametersDecorator","entitySet","preloadOptions","_ref$isCustomerHierac","isCustomerHierachyRequest","_ref$loadDirectlyLink","loadDirectlyLinkedAccounts","_ref$accountModes","accountModes","_ref$associationType","associationType","_ref$adExtensionTypes","adExtensionTypes","_objectSpread","$call","ALLOWED_PAGE_SIZES","PaginationDecorator","defaultPageSize","fetchPaginationConfig","pageSize","pageNumber","SegmentationDecorator","getSegType","SegmentationPreference","getSegPreference","segType","SegmentationTypes","segmentationType","addSegmentToQuery","addSegmentToEntity","SortingDecorator","_buildSortingConversi","buildSortingConversions","ChartDataParametersDecorator","pageState","pageContext","chartDataAdapter","inlineChartPreference","getPreferencesAndDefaults","chartParams","performanceTimeSeriesParameters","formatPreferenceValue","replaceAtom","atom","oldKey","newKey","newAtom","_defineProperty","decoratorMap","columnChooser","dateFilter","segment","pagination","sorting","chartDataParameters","dataExclusionFilterProcessor","DataExclusionFilterProcessorDecorator","resolve","finalWhere","finalQuery","$and","forEach","index","array","replaceKeyOfQuery","targetRoasFilterProcessor","TargetRoasFilterProcessorDecorator","filterTargetRoas","Object","qKey","parseFloat","toFixed","replaceTargetRoasOfQuery","getDecoratorInstances","commonConfig","obj","decoratorInstance","hasDecoratorConfiguration","QueryBuilderFactory","decoratorInstances","getAjaxStubLogger","instrumentation","ajaxStubScenario","create","ajaxStubActivity","ajax","trace","getRequestPayloadLogger","addScenario","scenario","activity","ReportsV4DataSource","reqestLogger","RequestPayload","responseLogger","Response","readBody","_x","_readBody","_asyncToGenerator","_regeneratorRuntime","mark","_callee2","response","bodyText","wrap","_context2","prev","next","text","sent","json","JSON","parse","stop","fetchFactory","host","path","oDataToken","sessionId","lcid","pageTrackingId","redirectUrl","_ref2$applicationName","applicationName","_ref2$userErrorCodes","userErrorCodes","ajaxStubLogger","_getRequestPayloadLog","beforeFetch","fetchContext","startTime","getTimestamp","httpMethod","method","requestId","headers","body","url","afterFetch","_fetchContext$instrum","instrument","userError","status","find","code","isUserError","duration","serverPerf","serializeFunc","serializeResponse","res","count","ok","stringify","statusText","window","location","href","_fetch","_callee","finalHeaders","finalOptions","finalUrl","_args","_context","generateGuid","authorization","fetch","abrupt","t0","toString","_x2","useFetch","_ref3$userErrorCodes","serverContext","useContext","ServerContext","InstrumentationContext","domain","NonAzureDomain","ServicesEndpoints","CampaignAPI","Token","Omniture","SessionId","Lcid","PageTrackingId","ErrorHandlerFactory","i18n","errorCodeToErrorMessageMapping","errorResponseBody","allErrorsHandled","errorDescriptor","errorCode","Code","mappedErrorText","getString","errorText","Message","notificationApi","showWarning","_TL_","ErrorHandlePipeFactory","_len","handleFunctions","_key","handleFunction","createErrorHandlePipe","createTryNotifyAdsApiError","createNotifyGeneralError","ViewModel","campaignDeliveryStatusTitle","ko","campaignDeliveryStatus","campaignType","campaignBudget","campaignBiddingType","eligibleStatusIcon","showStatusIcon","CONTEXTUAL_DELIVERY_STATUS","formatCost","currency","setPosition","$el","css","CheckDocBottomMargin","CampaignContextualAttributeView","_Backbone$View","targetId","campaignId","viewModel","html","template","el","container","children","jsdata","Campaign","Id","$eq","updateAttribute","DeliveryStatus","CampaignType","Budget","Amount","BiddingScheme","Type","finally","withUiBlock","$","className","Backbone","campaignsCount","formatInteger","SharedBudgetContextualAttributeView","sharedBudgetId","AssociationCount","adgroupDeliveryStatusTitle","adgroupDeliveryStatus","AdGroupContextualAttributeView","adgroupId","AdGroup","keywordQualityScore","KeywordContextualAttributeView","keywordId","Keyword","QualityScore","OverallQualityScore","reachSize","AudienceContextualAttributeView","audienceId","Audience","Reach","negativeKeywordList","NegativeKeywordListContextualAttributeView","CampaignContextualAttributeViewVNext","isMCC","recommendationService","showDeliveryStatusPopup","recommendationAccountId","edmCampaign","currentCustomer","Accounts","$withKey","Number","Campaigns","deliveryStatus","type","budget","biddingType","currentActivity","outerHTML","SharedBudgetContextualAttributeViewVNext","Budgets","AdGroupContextualAttributeViewVNext","AdGroups","KeywordContextualAttributeViewVNext","Keywords","qualityScore","AudienceContextualAttributeViewVNext","Audiences","NegativeKeywordListContextualAttributeViewVNext","GoalContextualAttributeView","scope","accountName","s$i18n","newI18n","goalId","cid","advertiserCustomerId","aid","odata","scopeName","trackingStatus","TrackingStatus","isAccountLevel","IsAccountLevel","goalType","acctname","goalTypeLabel","AccountContextualAttributeView","accountId","Account","dailyBudget","DailyBudget","budgetString","CurrentSettingContextualAttributeView","message","SuggestedSettingContextualAttributeView","GeneratedFromContextualAttributeView","pageUrls","Urls","MoreImagesContextualAttributeView","images","gridView","imagesWithoutFirstImage","slice","displayPopupImageUrls","image","AssetIdString","ThumbnailURL","imageUrlToUse","ImageURL","indexOfResizeInfo","indexOf","substr","resizeQueryString","openEditPanel","trigger","numOfImages","maxNumOfDisplayPopupImage","viewMore","numOfRemaininfImage","MoreConversionClarityButtonsContextualAttributeView","conversionClarityButtons","conversionClarityButtonsWithoutFirst","displayPopupclarityEventGoalSettings","conversionClarityButton","SourceURL","Text","buttonTextElement","clarityEventGoalSetting","replace","sourceURL","ImportTaskItemContextualAttributeView","taskItemId","budgetAdjustmentOption","TaskItem","$filter","importScheduleConstants","FILTER_ALL_BUT_DELETED","taskItem","State","creator","ModifiedBy","Name","dateTime","Date","ModifiedAt","config","time","createdBy","when","importFreqColDataToTemplate","importedCampaigns","AdWordsImportContext","CampaignIds","limitedByBudgetCampaigns","BudgetConstrainedCampaignsCount","CampaignsContextualAttributeView","campaignsTitle","campaigns","BudgetAdjustmentOptionConstrainedCampaigns","withContextualAttributeTemplate","opportunityId","entityName","entityId","entityType","entityCampaignId","isExpandingView","_ref$ariaLabel","ariaLabel","self","contextualAttributeViewTemplate","DeliveryStatusPopupFactory","showRejectionPopup","event","getCustomTemplate","isContextualAttributeForRecommendation","popoverId","view","showContextualAttribute","_elMapper","_contextualAttributeM","_ref2$isMCC","_ref2$isExpanding","isExpanding","target","elMapper","RECOMMENDATION_TYPES","REPAIR_ADS","REPAIR_KEYWORD","CALLOUT","SITE_LINK","BUDGET_OPPORTUNITY","ADJUST_SHARED_BUDGET_OPPORTUNITY","RESPONSIVE_SEARCH_ADS","MULTIMEDIA_ADS","REALLOCATE_BUDGET","DYNAMIC_SEARCH_ADS","SETUP_CONVERSION_TRACKING_OPPORTUNITY","FIX_CONVERSION_GOAL_SETTINGS","contextualAttributeMapper","CONTEXTUAL_ENTITY_TYPE","CAMPAIGN","ADGROUP","KEYWORD","AUDIENCE","NEGATIVE_KEYWORD_LIST","SHARED_BUDGET","ACCOUNT","GOAL","CURRENT_SETTING","SUGGESTED_SETTING","GENERATED_FROM","MORE_IMAGES","MORE_CONVERSION_CLARITY_BUTTONS","IMPORTED_TASK_ITEM","CAMPAIGNS","contextual","data","parents","attr","recommendation","itemWithKey","Target","AccountId","Opportunities","render","show","hideContextualAttribute","relatedTarget","closest","prependAccountAttribute","originEntity","accountEntity","ESTIMATE_TYPES","IMPRESSION_SHARE","IMPRESSIONS","QUERY_VOLUME","COST","CLICKS","CTR","CONVERSIONS","WEEKLY_SEARCHES","REJECTED_ADS","REJECTED_KEYWORDS","MISSING_CONVERSIONS","TARGETED_PRODUCTS","NO_SYMBOL_ESTIMATE_TYPES","SUMMARY_CARD","RECOMMENDATIOIN_SUMMARY_APPLY_FAILED_RESULTS","BUDGET","COMPETITIVE_BID","DEVICE_BID_BOOST","LOCATION_BID_BOOST","NEW_KEYWORD","BROAD_MATCH_KEYWORD","GOOGLE_IMPORT","GOOGLE_IMPORT_SCHEDULED","NEW_KEYWORD_OPPORTUNITY","TRENDING_QUERY","REMOVE_CONFLICTING_NEGATIVE_KEYWORD","FIX_AD_TEXT","FIX_AD_DESTINATION","FIX_CONVERSION_TRACKING_OPPORTUNITY","CREATE_CONVERSION_GOAL","FACEBOOK_IMPORT","IMAGE_EXTENSION","REPAIR_MISSING_KEYWORD_PARAMS","FIX_NO_IMPRESSION_BID","IMPROVE_RESPONSIVE_SEARCH_ADS","REPAIR_UNTARGETED_OFFER","IMPROVE_MULTIMEDIA_ADS","SSC_2_PMAX_MIGRATION","PMAX_IMPORT","DSA_2_PMAX_MIGRATION","SYNDICATION_GAP","BUDGET_OPPORTUNITY_TYPES","RECOMMENDATION_IDS","_RECOMMENDATION_IDS","NEW_LOCATION","SYNDICATION","ESTIMATE_STRINGS","_ESTIMATE_STRINGS","SUMMARY_LEVELS","levelAtConstant","VISUAL_TYPES","SEARCH_TERMS_CHART","COLUMN_CHART","LINE_CHART","LINE_WEEKLY_CHART","LINE_COLUMN_CHART","TABLE","MAP","ADS_PREVIEW","VISUAL_TABLE_ENABLED_SCOPES","CUSTOMER","CHANNEL_TYPES","COMPETITION","RECOMMENDATION","INCONTEXT","INCONTEXTCARD","OVERVIEW","MCCRECOMMENDATION","MCCOVERVIEW","AUTO_APPLY_REC_SETTING","CAMPAIGN_SUMMARY_BAR","SEARCHINSIGHT","RECOMMENDATIONS","CHANNEL_ALL_RECOMMENDATIONS","NOT_SUPPORT_DOWNLOAD_TYPES","NOT_SUPPORT_DISMISS_TYPES","APPLY_ODATA_TYPES","APPLY_ODATA_TYPES_MAP","ALL","MCC","SINGLE_ACCOUNT","SINGLE_ACCOUNT_ASYNC","OPTIMIZATION_SCORE","BULK","APPLY_USERINPUT_TYPES","_APPLY_USERINPUT_TYPE","APPLY_ACTION_TYPES","ACCEPT","DISMISS","REJECT","REDISMISS","UNDISMISS","SETTING_OPTIONS","UPDATE_FROM_CAMPAIGN","REJECTION_DATE_LAST_NINETY_DAYS","NONE","COMPETITION_RECOMMENDATION_FEATURE_NAME","COMPETITION_RECOMMENDATION_PREFERENCES","COMPETITION_RECOMMENDATION_PAGE_SIZES","RECOMMENDATION_PAGE_SIZES","RECOMMENDATION_IMAGE_EXTENSION_PAGE_SIZES","RECOMMENDATION_IMAGE_EXTENSION_PAGE_SIZES_TEN","RECOMMENDATION_IMAGE_EXTENSION_PAGE_SIZES_TWENTY","COMPETITION_DEFAULT_PAGE_SIZE","APPLY_SETTINGS","MAX_NUMBER_OF_RECOMMENDATION_SAMPLES","MATCH_TYPE_IDS","EXACT","PHRASE","BROAD","MATCH_TYPE","MAP_HEIGHT","ADINSIGHT_LOG_API_NAME","ADINSIGHT_LOG_ACTION_TYPE","VIEW","VIEWEDIT","CUSTOM","CLICK_CATEGORY","CLICK_RECS","CLICK_APPLYALL","IMPRESSION","FEEDBACK","DOWNLOAD","HIDE","VIEW_EXTERNAL","CLICK_DISMISSALL","REDIRECT","SUMMARY_APPLY_ALL_ENABLED","_SUMMARY_APPLY_ALL_EN","IMPORTCENTER_RECOMMENDATION_TYPES","RECOMMENDATION_CATEGORIES","REPAIRS","BIDS","KEYWORDS","ADS","DISMISSED","RECOMMENDATION_CATEGORIES_IDS","RECOMMENDATION_CATEGORIES_WORDING","NOT_AVAILABLE_DEFAULT_STR","CONVERSION_STATUS_TYPE","NO_UET","NO_DATA","HAS_DATA","RECOMMENDATION_DISMISS_FEEDBACK_TYPE","_RECOMMENDATION_DISMI","RECOMMENDATION_NOTIFICATION_ERRORCODE","Recommendation_Error_53505","hasLearnMore","helpId","Recommendation_Error_53504","Recommendation_Error_53521","Recommendation_Error_53517","Recommendation_Error_53508","Recommendation_Error_53507","Recommendation_Error_52505","Recommendation_Error_52511","Recommendation_Error_52512","Recommendation_Error_51501","Recommendation_Error_93001","Recommendation_Error_93114","Recommendation_Error_7","Recommendation_Error_1010","Recommendation_Error_21000","Recommendation_Error_1001519","Recommendation_Error_1001518","Recommendation_Error_1001515","Recommendation_Error_1001516","Recommendation_Error_1001531","Recommendation_Error_1001215","Recommendation_Error_1001231","Recommendation_Error_1001201","Recommendation_Error_1001100","Recommendation_Error_1004329","Recommendation_Error_1004314","Recommendation_Error_93214","Recommendation_Error_93222","Recommendation_Error_93223","Recommendation_Error_93234","Recommendation_Error_93272","Recommendation_Error_93237","Recommendation_Error_93239","Recommendation_Error_93271","Recommendation_Error_93274","Recommendation_Error_56028","Recommendation_Error_93233","Recommendation_Error_93277","RECOMMENDATION_NOTIFICATION_REJECT_REASONS","NotInterested","OtherSolution","DoNotUnderstand","NotApplicable","SpendNoMore","UseOtherSolution","ManualBidding","NotAlignGoal","NotImprovePerf","Other","RECOMMENDATION_SOURCE_FOR_SORT_TYPES","CROSS_LEVEL_TYPES","VIEW_TYPES","SUMMARY","DETAILS","HISTORY","AUTO_APPLY_SETTINGS","AUTO_APPLY_BULK_UPLOAD","SUPPORTED_CAMPAIGN_TYPES","MOVE_BUDGET_CAMPAIGN_BUDGET_STATUS","Deficit","Surplus","DOWNLOAD_SCOPE","INDIVIDUAL","TASK_STATUS","FAC_FEATURE_ID","CONVERSION_TRACKING","CALLOUTCARD_GOOGLE_IMPORT","CALLOUTCARD_PINTEREST_IMPORT","CALLOUTCARD_FACEBOOK_IMPORT","AUTO_BIDDING_MAX_CLICKS","AUTO_BIDDING_MAX_CONVERSIONS","SHOPPING_CAMPAIGN","ORDERBY_DIRECTION","ASCENDING","DESCENDING","FILTERBY","UNDEFINED","GREATER_THAN","GREATER_EQUAL","LESS_THAN","LESS_EQUAL","PAGINATION_ORDERBY","DEFAULT","FAC_RECOMMENDATION_CONFIG","couponTitleActionKey","couponDescriptionTitleKey","couponDescriptionKey","couponTagMessageKey","couponLightboxTitle","priority","FAC_RECOMENDATIONTYPE_FEATUREID_MAPPING","mapping","featureId","_toConsumableArray","recType","TYPE_DESCRIPTION_TABLE","DATE_FILTER","LAST_90","LAST_180","FILTER_TO_TIME","setting","GOAL_OPERATOR_TYPES_STRING_VALUES","EqualTo","EqualsTo","Contains","BeginsWith","RegularExpression","LessThan","GreaterThan","ADGROUP_TYPES","SearchStandard","SearchDynamic","AUTO_APPLY_TYPES","AUTO_APPLY_TYPES_NAMES","SUPPORT_ADINSIGHT_AUTO_APPLY_TYPES","HISTORY_PAGE_TAB_TYPES","MANUAL","AUTO","IMPORT_TYPE","GOOGLE","FACEBOOK","ISSUE_TYPES","GA_NO_PILOTING_TYPES","MCC_NOT_SUPPORTED_TYPE","CAMPAIGN_ODATA_ERROR_BASELINE","INLIE_APPLY_ERROR_SUPPORT_TYPES","MCC_ACCOUNTS_CAPPING","RECOMMENDATION_SUMMARY_TOP_NUMBER","isFilterSearchStandardAdgroupRecommendationType","recommendationType","RECOMMENDATION_AUTO_APPLY_SETTINGS_TOOLTIPS","helpText","TOP_POSITION_RECOMMENDATION_TYPES","generateSchema","properties","budgetSuggested","required","default","minimum","DailyRange","FloorValue","maximum","CeilingValue","suggestedBid","percentOptions","minimumFractionDigits","maximumFractionDigits","percentOptionsOneDecimal","percentOptionsHundredths","monetaryOptions","compact","impreAndClicksOptions","formatCurrency","formatPercent","formatDecimal","formatPercentOneDecimal","formatPercentHundredths","formatBid","truncateEntityName","smartTruncate","position","campaignNameHtml","campaignName","fullAdGroupNameHtml","adGroupName","adGroupNameHtml","keywordHtml","keyword","formatEntityNameForHtml","level","CampaignName","AdGroupName","formatEntityType","recommendationsCount","form","replacePlaceholders","settings","_ref$model","model","useLevelInComputingEntityName","useCampaignName","useAdGroupName","useOpportunityCount","compareWithCompetitor","useSegment","isHighConverting","_model$opportunities","opportunities","competitor","delta","localizedKey","templateValues","opportunity_count","formattedName","entity_name","competitor_domain","buildSimpleFormFields","labelProcessor","oneRow","formattedValue","propertyName","property","propertyValue","field","formatter","items","placeHolder","val","_ref5","formatMatchType","matchType","formatMatchTypeStr","toUpperCase","getRecommendationPreferences","preferencesService","isUserLevel","getPreferences","saveRecommendationPreferences","savePreferences","isCompetition","competitionTypes","isRecommendationTypeEnabled","channel","permissions","supportedTypes","urlUtil","isEnabledByUrlParameter","IsRecommendationTypeBudgetEnabled","IsRecommendationTypeImageExtensionEnabled","IsRecommendationTypeRepairMissingKeywordParamsEnabled","IsFixNoImpressionBidRecommendationEnabled","IsRecommendationTypeImproveResponsiveSearchAdsEnabled","IsRecommendationTypePmaxImportEnabled","IsRecommendationTypeDSA2PMaxMigrationEnabled","IsRecommendationTypeSyndicationGapEnabled","getRecommendationTypes","types","getRecommendationIds","enabledTypes","sessionData","findByNameAtUserLevel","Data","setAtUserLevel","isReadOnly","IsReadOnlyUser","levelWeight","isParentLevel","getIncreaseSymbol","normal","arrow","isPositive","extra","top","outerHeight","document","height","dismissFeedback","op","_op$feedback","feedback","preference","reason","rejectAutoApplySuggestedAds","context","guid","expireTime","api","typeId","action","input","CAMPAIGN_TYPES","RejectAutoApplySuggestedAds","DismissFeedback","hideInContextRecommendation","levelAt","isCardView","PREFERENCES_ACTION_TYPES","HidedRecommendationCards","HidedRecommendationBanner","preferences","levelPreferences","result","isShowAutoApplyFeedback","now","getChannel","isInContext","isOverviewPage","inContextCard","groupUserInputs","userInputs","groupedInputs","userInput","oppo","OpportunityId","Key","parseInt","Value","getIconClasses","statusId","classes","cur","getNewTextConfigByPermission","newConfig","configType","recommendationNewTextConfigs","permission","getShiftedDate","shift","setDate","getDate","toISOString","getDestUrlData","destUrlCurrentSetting","destUrlSuggestedSetting","goalOperatorTypes","currentDestinationURLOperatorName","DestinationURLOperatorCode","DestinationURLOperatorName","currentDestinationUrl","DestinationUrl","suggestedDestinationURLOperatorName","suggestedDestinationUrl","getEventData","eventCurrentSetting","eventSuggestedSetting","categoryTitle","currentCategoryName","Category","currentCategoryOperatorName","CategoryOperatorCode","CategoryOperatorName","suggestedCategoryName","suggestedCategoryOperatorName","actionTitle","currentActionName","Action","currentActionOperatorName","ActionOperatorCode","ActionOperatorName","suggestedActionName","suggesteActionOperatorName","labelTitle","currentLabelName","Label","currentLabelOperatorName","LabelOperatorCode","LabelOperatorName","suggestedLabelName","suggestedLabelOperatorName","valueTitle","currentValueName","currentValueOperatorName","ValueOperatorCode","ValueOperatorName","suggestedValueName","suggesteValueOperatorName","isPlural","getEditorialErrorMessage","policyCode","policyErrorStr","editorialErrorMessage","editorialErrorCodeToErrorMessageMapping","EditorialReasons_Default","getImageExtensionPageSize","IsRecommendationIncreaseImageExtensionPageSizePhase2Enabled","IsRecommendationIncreaseImageExtensionPageSizePhase1Enabled","getFieldValueFromGridData","gridData","campaignGridData","adGroupProductPartitionGridData","ProductCondition1","Bid","Priority","StoreId","buildActionGridDataForBidBoost","useBid","bidCurrent","currentBidAdjustmentPercent","imprShareCurrent","costCurrent","formatCostWithi18n","formatPercentWithi18n","formatBidWithi18n","formatDecimalWithi18n","bodies","opportunity","newBidOrAdjustment","suggestedBidAdjustmentPercent","competitorImprShareIncrease","imprShareIncrease","competitorTotalImprShare","totalImprShare","competitorWeeklyCost","weeklyCost","competitorImprShare","clicksIncrease","convIncrease","competitorDomain","currentBidOrAdjustment","currentTotalImprShare","currentWeeklyCost","ZERO_PERCENT","recommendationConfigs","_recommendationConfig","summaryTitle","summaryIconClasses","summaryIconClassesVNext","detailDescription","detailPitching","detailHelpId","sampleInsight","sampleActionHeaders","primaryEstimateType","secondaryEstimateType","costEstimateType","isPrimaryFromToEnabled","visualType","insightTitle","actionDataInForm","label","actionGrid","dataBuilder","columns","header","isIncrease","autoHide","enableCheckedIcon","singleSelection","hasLastRowAsCurrent","postprocessor","targetGroupId","actionDataInGrid","pop","actionTitleExtraForm","visualTableHeaders","visualData","enum","recommendedLoc","searchQueryVolume","imprIncrease","impressionsIncrease","costIncrease","helpTopics","useProgressBar","helpQuery","visualTableScope","primaryIncreaseNullable","isEstimate","detailLinkType","isDynamicText","useNewI18n","configs","BlockedKeywordsColumn","recommendationInProductUpdateConfigs","available","notification","additionalPitching","additionalPitchingEnabledBy","helpTopic","needAdditionalArgs","neverExpired","recommendationDynamicTextConfigs","defaultConfig","additionDetailPitchingConfig","formatEstimateValue","formatEstimates","estimates","inDetailsView","_recommendationConfig2","secondPrimaryEstimateType","isDoublePrimary","tertiaryEstimateType","bindedFormatValue","primaryEstimate","secondPrimaryEstimate","secondPrimaryString","secondPrimaryIncrease","primaryString","primaryIncreaseNumber","primaryIncrease","increaseSymbol","primaryIncreaseSymbol","primaryPts","hasFrom","primaryFrom","primaryFromString","primaryTo","primaryToString","isPositivePrimary","secondaryIncrease","secondaryString","isPositiveSecondary","tertiaryIncrease","tertiaryString","spendIncrease","spendString","estimateNote","showEstimates","formatted","formatLocaledSourceType","source","convertedSource","formatLocaledSeasonalEventType","seasonEvent","arr","split","convertedSeasonEvent","word","charAt","formatKeyword","formatCoupon","coupon","couponConfig","FeatureId","titleAction","descriptionTitle","description","tagMessage","getCurrencyText","currencyCode","amount","Math","floor","CouponValue","maxFractionDigits","hideCurrencyCode","cost","ceil","CouponUpfrontSpend","expirationDate","toLocaleDateString","descriptionShort","rawData","formatSummary","sample","_options$isHighConver","_options$isSeasonal","isSeasonal","isNrt","hasAIAssetRecommendation","isFeedbackPersonalized","showAutoApplyBanner","isAutoApplyRecommendationEnabled","thirdPartyInfos","recommendationConfig","i18nToUse","title","entity_type","descriptionKey","pitchingKey","isScopeToThis","n","seasonalEvent","iconClasses","iconClassesVNext","pitching","clicks","withThis","cpcCondition","cpcIncrease","cpcStatus","paramWithoutEstimates","paramWithEstimates","ctrLift","abs","sources","source1","source2","source3","SampleContent","formatPictchingSource","seasonalEntity","linkType","needNRTDisclaimer","chartTypes","formatVisualDataChart","category","localizeCategory","formatOutOf","formatActions","actions","row","fromString","budgetFrom","budgetCurrent","budgetTo","budgetIncrease","bidFrom","bidTo","bidSuggested","bidBoostFrom","bidBoostTo","device","formatCampaignBulkApiError","errors","addedValue","ErrorNumber","ErrorCode","ErrorMessage","Property","getModelForAllRecommendations","recommendations","getModelForInsight","commonOptionsForAction","fields","getModelForFormAction","localizedHeaders","selectedRowIndex","isDefault","selectedRow","getModelForGridAction","getDetailsSummary","summary","getDetailsViewModel","withAdsAutoApply","WrappedComponent","HoC","_React$Component","args","campaignAutoApplyStatus","componentDidMount","reload","componentWillUnmount","cancel","loadToken","createAsyncToken","props","dataService","getAutoApplyOptInStatus","on","onSuccess","setState","RecommendationType","IsOptIn","showIntermediateView","_jsx","React","displayName","getDisplayName","defaultProps","hoistNonReactStatics","withImgAutoRetrieve","allowCrawlImagesFromLandingPage","_this$props","AllowCrawlImagesFromLandingPage","withGetAutoApplyOptInStatus","optInStatus","parsedData","propsId","filterData","filterCategory","recommendationCustomizedDataFilterFunc","matcher","withFilterCategory","getEstimates","entity","EstimatedIncreaseInCost","EstimatedIncreaseInClicks","CurSelfImprShare","EstimatedIncreaseInImprShare","imprShareTotal","EstimatedIncreaseInConversionsInt","clicksCurrent","CurrentClicks","EstimatedIncreaseInImpressions","ctrCurrent","CurrentCtr","ctrIncrease","EstimatedIncreaseInCtr","CtrLift","EstimatedIncreaseInCpc","convCurrent","CurrentConversionsInt","impressionsCurrent","CurrentImpressions","weeklySearchesIncrease","EstimatedIncreaseInSearches","CurrentCost","NumberRejectedAds","NumberRejectedKeywords","missingConvIncrease","targetedProductsIncrease","SumofTotalUntargetedOfferCnt","formatDate","day","hour","kendo","GetImpressionSharePoints","points","point","primarySegment","Day","Hour","AuctionNumber","ImpressionNumber","normalizeLocation","estimatedIncreaseInImpressions","estimatedIncreaseInClicks","queriesFiltered","queriesPassedLocationFiltering","Criterion","LocationCriterion","CountryCode","LocationId","Latitude","Longitude","LocationType","ExpandedName","QueriesFiltered","QueriesPassedLocationFiltering","getBidBoostChartData","isDeviceBidBoost","firstOpportunity","youData","CompetitiveInsights","youPoint","competitorData","CompetitorDomain","unshift","selectedMetric","Device","getDetailsVisualData","ReferenceCompetitor","primarySegmentType","segmentData","getBudgetChartData","IsHighConverting","metric","ClickNumber","ConversionNumber","secondaryMetric","getCompetitiveBidChartData","included","ExistingLocations","excluded","ExcludedLocations","recommended","Location","getNewLocationMapData","getBudgetOpportunityTable","isShared","rows","topOpportunity","Shared","BudgetName","sortOpportunitiesInRecommendation","sortedOpportunities","reverse","getRecommendedOpportunity","sortedRecommendation","DefaultOpportunityId","getRecommendation","recommendedOpportunity","SeasonalEvents","getSampleVisualData","topRecommendation","_ref3$primaryEstimate","_ref3$rawSamples","rawSamples","suggestedKeyword","SuggestedKeyword","monthlyQueryVolume","MonthlyQueryVolume","SuggestedBid","getNewKeywordTable","adoptionPercentage","CompetitorAdoptionPercentage","getSyndicationTable","recommendedKeyword","MatchType","recommendedSource","SourcesForBingAdsWebUi","getNewKeywordOpportunityTable","searchVolumeIncrease","WoWInDecimal","WoW","getTrendingQueryTable","searchExamples","SearchExamples","getDynamicSearchAdsTable","getExtensionTable","getRepairTable","samples","getBroadMatchKeywordTable","negativeKeyword","NegativeKeyword","blockedKeyword","BlockedKeywordList","NegativeKeywordMatchTypeId","blockedKeywordMatchType","MatchTypeId","getRemoveConflictingNegativeKeywordTable","getResponsiveSearchAdsTable","fromCampaign","SuggestedCampaignBudgets","campaign","BudgetStatus","toCampaign","suggestBudget","BudgetDeficit","getReallocateBudgetTable","UrlOrLandingPage","getFixAdDestinationTable","FlagId","numberRejectedAds","NumberRejectedDisapprovedAds","NumberRejectedLimitedApprovedAds","numberRejectedKeywords","NumberRejectedDisapprovedKeywords","NumberRejectedLimitedApprovedKeywords","getFixAdTextTable","getMultiMediaAdsTable","getImageExtensionTable","getRepairMissingKeywordParamsTable","Source","getFixNoImpressionBidTable","GridData","TotalUntargetedOfferCnt","getRepairUntargetedOfferTable","Images","Headlines","LongHeadlines","Descriptions","getImproveMultiMediaAdsTable","getSSC2PMaxMigrationTable","getDSA2PMaxMigrationTable","getSyndicationGapTable","getRecommendationWithDetails","CurrentBidBoost","CurrentBid","TargetGroupId","rawOpportunity","defaultOpId","CurrentBudget","EstimatedIncreaseInBudget","TargetSelfImprShare","CompetitorImprShare","SuggestedBidBoost","adoptionPercent","monthlySearchVolume","MonthlySearchVolume","weekoverWeek","ReferenceKeyword","rejectedAd","RejectedAd","rejectionCode","rejectedAds","RejectedAds","rejectedKeywords","RejectedKeywords","inactiveTagCount","NumInactiveUetTags","affectedGoal","NumAffectedConversionGoals","numImpressions","NumImpressions","numClicks","NumClicks","getOpportunity","assign","getGridData","getRecommendationSample","_ref4$rawSummary","rawSummary","Samples","Recommendations","GeoLocationId","getActionData","normalize","withDetails","hasDismissedSummaries","DismissTabSummaries","dismissedSummaries","filteredSummaries","RecommendationsCount","OpportunityType","topPositionSummaries","summaries","rawSummaries","applyDate","AggregateLevel","opportunityCount","OpportunitiesCount","version","Version","Coupon","accounts","optimizationScore","ScoreUpLift","IsNrt","StatusId","HasAIAssetRecommendationCount","isAutoApplyOptIn","IsAutoApplyOptIn","ThirdPartyInfos","rawRecommendation","TrackId","IsFeedbackPersonalized","Sources","NearestApplyDate","AarOptInRecommendationCount","AarNearestApplyDate","Dismissed","withGetSummary","needExamples","campaignAdGroups","viewType","perfMarker","willFetchData","defaultOptions","componentDidUpdate","prevProps","prevState","perfMarkerDone","done","vnextDeps","eventDispatcher","setData","setDataFromDetails","overallOptimizationScoreBar","OverallOptimizationScoreBar","categoryScoreUpLifts","CategoryScoreUpLifts","availableCategories","AvailableCategories","hasLoadToken","preferencesName","defaultPageNumber","categoryType","topOption","initialize","spread","shouldShowAlertHandler","isFromApplyOrDismiss","getSummary","withBlocker","willRender","hasFilter","_this$state","normalizedData","eventDispatcherDone","dismissedData","willInit","createChild","withGetCount","isGetCountByCampaignAdGroups","getCountByCampaignAdGroups","getCount","withTrack","withAll","WithTrack","track","applyOpportunitiesLevel","ApplyOpportunitiesLevel","userAction","closeUiBlock","callback","onCancel","stopStatusPoll","rest","ref","forwardedRef","withCoupon","rawCouponData","rec","getCoupon","RecommendationDownloadService","alertCenter","asyncScheduler","cacheManager","_ref$downloadService","downloadService","downloadServiceSharedComponent","getODataErrors","_ref$isMCC","_ref$recommendationSe","repository","InlineDownloadReportDataRepository","isCustomerLevel","ReportColumns","_this$pageContext","CultureLcid","CustomerId","CurrentCustomer","_this$pageContext$Cur","CurrentAccount","AccountNumber","_this$pageContext2","CurrentCampaign","CurrentAdGroup","adGroupId","CampaignId","CampaignReportScopes","getCampaignReportScopes","AdGroupReportScopes","getAdGroupReportScopes","download","ReportType","Channel","CampaignTypeId","Format","ReportTime","DateRangePreset","AccountIds","LCID","err","errorDetails","stringifySync","filteredCampaigns","$contains","str","parseSync","AdGroupId","filteredAdGroups","adGroup","PollTask","task","isCompleted","isFailed","maxPollCount","pollIntervalTimeout","reject","recurringTask","stopTask","pollCount","createTask","schedule","cache","setRecommendationCache","getRecommendationCache","applyNotificationInfo","failedRecommendationCount","urlPrefix","urlPrefixMCC","getSummaryAPI","getSummaryTypeOnly","getSummaryAPIOptimizationScoreNoExpand","getSummaryAPIOptimizationScore","getSummaryAPIOptimizationScoreWithDismissedTab","getSummaryAPIMCC","getHistoryAPI","getHistoryAPIMCC","getAutoApplyOptInStatusAPI","setAutoApplyOptInStatusAPI","getCountAPI","getBulkAarUploadBlobAPI","submitBulkAarOptInStatusTaskAPI","pollBulkEditAAROptInStatusTaskAPI","fetchDownloadIdAPI","FAC_STATUS_NOT_IN_PROGRESS","CCUIConstants","RecommendationAdoptionStatus","NotInProgess","FAC_STATUS_ACTIVE","Active","getOptions","token","contentType","formatUrl","customerId","i","getRequestScope","_getFilteredEntitiesA","getFilteredEntitiesAndUpdateOptions","LevelAt","EntityIds","RecommendationService","showAlertHandler","odataPath","currentScenario","ccJsData","accountIdsPromise","_ref$alertCenter","_ref$odata","_ref$isNoExpand","isNoExpand","_ref$cacheManager","startCouponAdoption","adoption","FeatureAdoptionCoupon","update","Status","tapCatch","errorMessageKey","Errors","dismissible","getSummaryPromiseFromOption","includeCoupons","option","fetchDataPromise","getCouponPromise","isWithDFM","previousRoute","history","isDFMEnabled","withDFMCache","getCouponsActivity","getCoupons","coupons","TypeError","getSummaryActivity","isOptimizationScoreOn","overallScoreIncrease","_applyNotificationInf","allExpiredInSummary","totalRecommendationCount","Gained","Summaries","rawRecommendationData","couponFeatureId","priorities","couponEligibleRec","sortBy","first","addCouponToRecommendations","isRecommendationSummaryPage","IsRecommendationCacheDetailPageDataEnabled","handleAjaxError","ignoreCoupons","optionPromise","generateGetSummaryRequest","hasAccountIdsPromise","getSummaryRequestFromAccountIds","accountIds","paginationQueryOptions","filterOpportunity","detailPageSetting","$orderby","$top","$skip","getOptimizationScore","OpportunityTypes","Request","RecommendationTypes","DetailPageSetting","RawFilterQueryExpression","PaginationQueryOptions","CampaignAdGroups","SettingOptions","settingOptions","isDismissedTabEnabled","cappedAccountIdsPromise","getHistory","generateGetHistoryRequest","getHistoryActivity","generateGetCountRequest","getCountActivity","generateGetCountByCampaignAdGroupsRequest","getCountByCampaignAdGroupsActivity","logRecommendationFailedResults","AggregatedResults","each","OpportunityIds","countError","totalCount","singleCodeResult","RecommendationCount","successfulCount","failedCount","expiredCount","ExpiredCount","reduce","getErrors","dealWithInlineError","hasInlineError","aggregateResult","Results","groupBy","Expired","dealApplyResponse","total","fail","localizedkey","setApplyNotificationInfo","handleRecommendationNotification","pollStatusTask","isAsync","generateApplyRequest","getApplyActivity","IsAsync","generateApplyStatusRequest","adoptionId","AdoptionId","AdoptionStatus","showAsyncApplyModal","closeAsyncApplyModal","IsRecommendationDataCacheEnabled","invalidate","getApplyAPI","asyncEnabled","suffix","isTrackingOnly","getOdataType","isAll","_Request","IsBAARecommendationsAsyncApplyEnabled","isFromDismissTab","IsFromDismissTab","functionName","handleUnauthorizedResponse","fetchDownloadIdHistory","fetchDownloadIdRecommendation","_ref6","recommendationTypes","uniqParams","campaignScope","adgroupScope","scopes","AdGroupScopes","CampaignScopes","pollFileName","generatePollFileNameRequest","downloadWithDownloadId","_ref7","downloadId","alertId","showConfirmation","pollTask","dismiss","_ref8","ResultFile","_ref9","downloadHistory","generateGetAutoApplyOptInStatusRequest","getAutoApplyOptInStatusActivity","setAutoApplyOptInStatus","isOptInStatusDelta","generateSetAutoApplyOptInStatusRequest","setAutoApplyOptInStatusActivity","isSetAutoApplyOptInStatusSuccess","AAROptInStatusList","getStockImageUrl","queryString","culture","appName","$search","language","includevertical","getBulkAarUploadBlobUrl","fileName","generateBulkAarUploadBlobUrlRequest","getBulkAarUploadBlobUrlActivity","UploadedFileName","setBulkAarUploadBlob","Headers","append","submitBulkAarOptInStatusTask","generateSubmitBulkAarOptInStatusTaskRequest","submitBulkAarOptInStatusTaskActivity","responseJSON","pollBulkAarOptInStatusTask","reqID","generatepollBulkAarOptInStatusTaskRequest","BulkUpdateStatus","dealBulkAarOptInStatusResponse","reqId","aggregateBulkAarResult","resu","Count","countBulkError","_ref10","successCount","accountInfoCache","ONE_COLUMN_IN_TABLE","TWO_COLUMNS_IN_TABLE","THREE_COLUMNS_IN_TABLE","FOUR_COLUMNS_IN_TABLE","formatSample","moreRecommendations","viewRecommendations","out_of","getCompetitionSampleInsightTitle","_getModelForCompetiti","headerKey","highlights","values","getModelForCompetitionSampleAction","formattedVisualData","alignments","formattedAdoptionPercentage","adoptionValue","percentValue","formatCompetitionSampleVisualDataTable","columnWidths","maxNumberOfRecommendationSamples","nullableArrow","example","enabledToolTip","toolTipClass","insight","insightKey","ad_group","formatInsight","formatDecimalToInteger","getSummaryCardModel","mapScope","entityIds","withRecommendationsScope","_createElement","sharedComponentFunctionStateStore","StateStore","COLUMNS_METRICS","defaultColumnMetric","interpolation","y1","y2","x1","x2","x","landscapes","suggestedIndex","defaultColumnIndex","defaultRowIndex","inputRowIndex","defaultBudgetValue","rawLandscapeData","currentDataRowIndex","minBudget","maxBudget","readOnly","_ref$isSharedBudget","isSharedBudget","rawSuggestedBudget","suggestedBudgetCellValue","isForecasting","inputRowSelected","currentRowIndex","isCurrentDataRowSelected","inputBudget","estimationKPIArray","getEstimationsRowData","raw","estimationKPIFormattedArray","showTipMessage","fromBudgetColumn","userInputDisplayVal","currentBudget","isInputing","tipMessage","selectedColumnIndex","conversionSelected","chartTitle","selectedHeader","selectedColumnData","subscribe","isValidDecimal","parseDecimal","validate","isValid","_this$getEstimationsR","KoSchema","validators","range","decimalLength","errorMessage","showErrorMessage","landscape","columnIndexExcludeRadio","isSuggested","isCurrent","columnIndex","rowIndex","estimationHeaders","sorted","minPoint","maxPoint","nextPointIndex","previousPoint","nextPoint","getFormattedTableCell","COMMENT_TYPES","BudgetLandScapeTable","opportunityData","conversionSummaryStatus","_ref$currentBudget","_ref$fromBudgetColumn","_ref$fromCampaignTab","fromCampaignTab","_ref$view","_ref$budgetRange","budgetRange","_ref$permissions","landscapeData","Landscapes","Comment","IsForecasting","getTableConfig","_this$config","feedbackPersonalizedPopup","isInProductFeedbackLoopOn","IsRecommendationInProductFeedbackLoopEnabled","ko_model","currentTarget","cellIndex","which","preventDefault","stopPropagation","templateForInlineEditor","currencySymbolClassName","getCurrencySymbol","currencySymbol","notAvailableStr","hide","placeHolderText","addRecommendationAlertPopup","alertMsg","iconClass","triggerContainerResizing","formatIntegerValue","formattedData","EstimatedBudget","rawBudget","styles","barChartOptions","chart","marginLeft","marginTop","marginBottom","yAxis","tickPositions","gridLineWidth","legend","enabled","credits","tooltip","plotOptions","bar","animation","pointWidth","series","cursor","events","click","states","hover","inactive","BudgetLandScapeChart","tableViewmodel","legacyRouter","navigateToRoute","noUET","noData","uetLink","uetLinkTemplate","redraw","isBudgetColumnSelected","estimations","budgetPoint","selectedEstimationPoint","budgetPoints","highcharts","seriesName","onPointClicked","chartOptions","pointWidthWithPadding","colors","seriesColorChanged","stylesChartColor","mappedResult","color","y","dataMax","positions","increment","tick","stopImmediatePropagation","tooltipTemplate","primaryMetricName","primaryMetricValue","showPrimaryMetric","initChart","RecommendationInlineBudgetView","router","gridService","ConversionSummaryStatus","tableView","chartView","getViewModel","clearTimeout","timerForPopupContextualAttribute","setTimeout","_this$opportunityData","BudgetType","BudgetId","AccountName","budgetType","NewBudget","getSelectedNewBudget","remove","_superPropGet","WarnNotificationBanner","_React$PureComponent","isFromSummary","initializeMiniGrid","_this$props2","uid","warnNotification","warnNotificationInMCC","_jsxs","MessageBar","messageBarType","MessageBarType","severeWarning","delayedRender","dangerouslySetInnerHTML","__html","warnHelpInfo","LearnMoreLink","topic","linkText","isShowNotificationBannerInTargetRecommendations","firstViewTime","IN_PRODUCT_UPDATE_RECOMMENDATIONS_VIEW_TIME","FirstViewTime","isInProductUpdateBannerAvailable","isAdditionalPitchingAvailable","InProdUpdateNotificationBanner","additionalArgs","judgeWhetherUserFirstViewNotificationBanner","recordUserFirstViewTimeOfNotificationBanner","TooltipHost","content","overflowMode","TooltipOverflowMode","Parent","directionalHint","DirectionalHint","bottomCenter","HelpPopup","formatNotificationLocalizedKey","isSuccess","actionType","_ref$otherInfo","otherInfo","zeroSucceedScenario","_otherInfo$SuccessAds","SuccessAdsCount","_otherInfo$SuccessKey","SuccessKeywordsCount","_otherInfo$FailedAdsC","FailedAdsCount","_otherInfo$FailedKeyw","FailedKeywordsCount","getImportScheduleAndHistoryLink","targetAccountId","preferenceType","userId","_ref3$isOptimizationS","_ref3$setApplyNotific","_ref3$newI18n","_ref3$scope","expiredRecommendationCount","successfulEntityCount","BatchErrorCode","size","allExpired","_ref2$newI18n","_ref2$scope","onClick","logOpportunityEvent","ImportTaskId","ReasonId","getNotificationMessage","aggregatedResult","getSessionStorage","set","results","from","viewDetails","statusLightBox","showLightboxNotification","RECOMMENDATION_PREFERENCES","RECOMMENDATION_PREFERENCES_ACCOUNT_LEVEL","AutoRefresh","OptimizationScoreOnboard","AAROnBoard","findByName","dataPackage","locationRecommendationConverter","isRecommendedLocation","CriterionKey","NameTypeCombo","CriterionType","convertLocation","getOdataPath","originalHost","include","getRecommendations","oppType","baseUrl","actionUrl","httpUtils","getTrackPayload","UserAction","odataType","inputKey","inputValue","recommend","Settings","adoptRecommendations","uri","post","applyRecommendations","dismissRecommendations","RecentReportTitle","I18nContext","MenuItem","util","reformatDate","dateStr","timeZone","skeleton","dateFormatter","toIANATimeZone","ReStyledBaMenuItem","withDefaultStyles","StyledBaMenuItem","customizedClass","classNames","ReportsV4MenuItem","paddingTop","width","display","borderBottom","maxWidth","minWidth","overflow","lineHeight","whiteSpace","textOverflow","RecentReportMenuItem","report","reportTypeMapping","navigate","closeDropdown","headerId","renderProps","pathname","route","menuItem","toggleable","menuItemKey","calloutPlacement","customizedOnClick","rightCenter","LastAccessedAt","fromLegacyTimeZone","TimeZone","generateDefaultReportMenuItem","siteMap","onClickDefaultReportItem","allReportsTitle","siteMapItem","recursiveGenerateProps","siteMapChild","subMenuProps","rightTopEdge","calloutProps","preventDismissOnScroll","onRender","_menuItem","dismissMenu","recursiveGeneratePropsFactory","menuText","fixedRoute","generateSavedReportMenuItem","savedReports","onClickSavedReportItem","rootMenuItem","generateCustomReportBuilderMenuItem","onClickCustomReportBuilderItem","genereateMenuProps","recentReports","onClickRecentReportItem","menuItems","_ref$onClickRecentRep","titleItem","buildReportTypeMapping","otherItems","generateRecentReportMenuItems","dynamic","CustomReportBuilder","UnthemedReportsV4DropDown","renderDropdownIcon","renderGlyphIcon","Glyphicon","multiLevelDropDownButtonIcon","glyph","renderLabel","responsiveSize","StyledHeader","multiLevelDropDownLabel","reportsV4History","ctrLogger","ctrLoggerFactory","menuProps","Uri","is","absoluteRoute","routePrefix","extraData","impressionFinish","bottomRightEdge","menuContainer","DefaultButton","persistMenu","onRenderText","onRenderMenuIcon","onRenderIcon","onAfterMenuDismiss","onMenuClick","impressionStart","getButtonClassNames","reportsButton","wrappers","withInstrumentation","withRecentReports","withSavedReports","withI18nConsumer","withServerContext","withReportsHistory","getToolbarElementsStyles","withReportsV4SiteMap","wrappersForCCUI","ReportsV4DropDown","executor","observer","unsubscribe","isFunction","normalizeObserver","noop","ObservableDataSource","makeCall","promise","observers","observable","load","s","refresh","removeEnum","finalValue","odataConfigForMyReport","custom","toLowerCase","Frequency","toJsonAndThrowOnError","apiCall","_apiCallWithThrowOnError","bodyJson","poll","_x3","_poll","isSuccessful","interval","_args2","timerId","setInterval","clearInterval","isPrivate","taskItemType","toODataFilter","taskItemTypes","ExclusiveColumnsSelected","InvalidId","InvalidEmail","InvalidScope","TaskSchedulingInvalid","TaskThrottlingLimitReached","DatabaseTimeout","NotSupported","ReportGridFilterDataValueNotSupported","AccountNotAuthorized","s$ReportEmailRule","globalLegacySchema","reportApiCallsFactory","iframeDownload","_scope$values","isInternalUser","CurrentUser","IsInternal","urlPrefixModern","urlPrefixLegacy","ParentCustomerId","getRecentReports","urlSearchParams","URLSearchParams","$count","customFilter","taskTypeUtils","getDefaultReports","getMyReports","_ref2$top","_ref2$sort","_ref2$filter","_ref2$skip","_ref2$includeEmailTyp","includeEmailType","emailType","searchParams","FilterEntity","odataV4","$orderBy","getTaskItem","patchTaskItem","isEmailRule","Cron","NotificationDeliveryOption","Selection","PeriodComparisonDateRange","deleteReportsImpl","isModern","reports","ReportIds","_deleteReports","_$groupBy","modernReports","legacyReports","all","getReportData","taskExecutionId","pager","page","submitReportDataTaskItem","ReportData","GridPagination","prefix","$expand","getReportDataTaskItemExecution","pollReportDataTaskItemExecution","_pollReportDataTaskItemExecution","_callee3","_args3","_context3","r","submitReportAndWaitForComplete","_x4","_submitReportAndWaitForComplete","_callee4","taskExecutionResult","_context4","TaskItemExecutions","previewReport","previewUrlPrefix","UserScopes","ReportTimeZone","Filters","ReportSorts","CustomerScopes","CollapsedRow","param","SchemaName","TaskId","reportPreviewParameters","rerunReport","_rerunReportAndWaitForComplete","_callee5","rerunResult","taskItemExecutionId","downloadInfo","_context5","TaskItemExecutionId","_downloadReport","_callee6","taskResult","downloadUrl","_context6","ResultId","getSavedReportsForGlobalMenu","getMyReportsCounts","deleteReports","rerunReportAndWaitForComplete","_x5","downloadReport","_x6","useReportApiCalls","ScopeContext","useIframeDownload","globalMenuSavedReportsDataSource","reportApiCalls","Comp","_useState","useState","_useState2","useEffect","isMounted","subscription","newData","useSavedReports","getKeyOfReport","_report$Id","loadingReportsStore","LoadingReportsStore","reportsMap","Map","delete","loadingReportsDataSource","recentReportsDataSource","useRecentReports","observables","compute","subscriptions","dataStores","subscribeAll","recentReportsResponse","loadingReports","merged","loadingReport","_loadingReport$Id","findResult","refreshBothOnSuccess","_wrappedApiCall","reportsApiFactory","currentCalls","saveReport","saveAsNewReport","add","reqKey","call","canceled","wrappedPromise","withCancel","refreshRecentReportsDataSource","useReportDataSource","withReportDataSource","reportsApiProps","convertOptions","search","processValue","intValue","SAFE_INTEGER","MAX_SAFE_INTEGER","isInt","match","getQuery","_step","entries","_iterator","_createForOfIteratorHelper","_step$value","f","useReportsHistory","legacyHistory","useHistory","reportsHistoryProps","Link","SharedLink","to","apiKey","buildCustomReportTypeMapping","pageId","activityFactory","ReportsV4Telemetry","CtrLogger","componentName","impressionId","parentTarget","useCtrLogger","autoStart","withCtrLogger","storeSeasonalityAdjustmentName","getSeasonalityAdjustmentName","seasonalityPredicateValueNameGetter","seasonalityName","updateSeasonalityNameFromMT","currentAccount","getEntityFromScope","SeasonalityAdjustment","SeasonalityAdjustments","queryParameters","$select","getSeasonalityAdjustmentLike","Week","Month","Quarter","Year","DayOfTheWeek","HourOfTheDay","DeviceType","Network","TopVsOther","DeliveredMatchType","BiddedMatchType","Medium","Currency","DeviceOS","AdPosition","DomainType","GoalType","GoalName","GoalCategory","AudienceType","AudienceName","AdScenario","DayOfWeek","HourOfDay","segmentationTypeEnum","campaignSegmentationTypeEnum","adinsightSegmentationTypeEnum","timeSegmentationTypeEnum","diffDay","round","isTimeRangeValid","segmentType","_ref$start","_ref$end","_ref$compared","comparedStart","comparedEnd","goalSegmentStartDate","audienceSegmentStartDate","totalRange","oneYearAgo","todayNYearsAgo","withinThreeYears","moreThanOneYear","segmentationTree","typeWithSameTexts","_keys","None","Time","valueKeys","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Unknown","Computer","PC","SmartPhone","NonsmartPhone","Tablet","ConnectedTV","BingAndYahooSearch","MicrosoftSitesAndSelectTraffic","SyndicatedSearchPartners","AOLSearch","InHouse","Content","CrossNetwork","BingAndYahooSearchTop","BingAndYahooSearchOther","SyndicatedSearchPartnersTop","SyndicatedSearchPartnersOther","AOLSearchTop","AOLSearchOther","ContentNetwork","AudienceNetwork","MicrosoftSitesAndSelectTrafficTop","MicrosoftSitesAndSelectTrafficOther","InHouseTop","InHouseOther","DestinationURL","Duration","PageVisit","Custom","AppInstall","MultiStage","OfflineConversion","InStoreTransaction","HotelBooking","RemarketingList","InMarket","SimilarToRemarketingList","Product","CustomerList","CombinedList","PredictiveTargeting","ContextualTargeting","ImpressionBasedRemarketingList","UsersNotInAudienceSegments","AddToCart","BeginCheckout","BookAppointment","Contact","Download","GetDirections","InStoreVisit","OutboundClick","PageView","Purchase","RequestQuote","SignUp","SubmitLeadForm","Subscribe","Unassigned","AutoAd","CreditCardAd","TourActivityAd","HealthInsuranceAd","InsuranceServiceAd","CruiseAd","RealEstateServiceAd","FinancialAdvisorAd","TaxServiceAd","DoctorClinicAd","MortgageLenderAd","DebitCardAd","HomeServiceAd","JobListingAd","LegalServiceAd","localizeSegmentationType","localizeSegmentationValue","localized","isSegmentationTypeSupported","_ref$tree","tree","defined","notDefined","getSupportedSegmentationTree","_ref$segmentationType","segmentationTypes","isSupported","hasPermission","allowed","childItem","StatusPopupView","_View","_ref$statusOptions","statusOptions","currentStatus","getItemsForRender","iconClassPrefix","textClass","focus","dataset","View","renderStatusPopupEditor","isForVNext","_ref$adjustTopPositio","adjustTopPosition","statusPopupView","popupEditor","GridCustomizedPopupEditor","editorView","cellPosition","renderBelow","parentContainerSelector","CategoryConfigBuilder","columnsBuilder","Column","addColumn","_Column","selectOption","isColumnLocked","ColumnsConfigBuilder","categories","locked","helpIds","IsVideoAdsPerfMetricsEnabled","isCPSEnabled","isInstallPerformanceColumnsEnabled","isAppCampaignNewCampaignGridColumnsEnabled","isNewCustomerAcquisitionColumnsEnabled","Permissions","CPSReporting","InstallPerformanceColumns","AppCampaignNewCampaignGridColumns","NewCustomerAcquisition","isVideoAdsPerfMetricsEnabled","performanceColumns","getPerformanceColumns","director","categoryBuilder","_this$locked","selected","flatten","toJSON","patchQuery","LegacyColumns","LegacySelectedColumns","LegacyGridFlag","nameFromLegacy","_ref3$mandatoryProper","mandatoryProperties","customColumnConfig","_ref3$permissions","_permissions$dynamic","ColumnConversion","getCategoryConfig","getColumnConversions","getAllColumns","unfilteredColumns","categoryName","blacklist","filteredColumns","addCategory","addColumns","perfColumns","union","ColumnTopImpressionRate","ColumnAbsoluteTopImpressionRate","addCategoryWithoutSomeColumns","ColumnAveragePosition","withFluctuations","getCampaignTypeGlobalFilter","campaignTypeGloabalFilter","includeAppCampaignColumns","IsAvgPositionDeprecationPhase1Enabled","withProminence","ColumnTotalSpend","difference","columnsToUse","IsViewThroughConversionEnabled","IsViewThroughConversionsRevenueEnabled","ColumnFilter","isInstallColumnsEnabled","isConversionValueRuleColumnsEnabled","withPartialConversions","baseConversionColumns","getConversionColumns","ColumnViewThroughConversionsCredit","ColumnViewThroughConversions","ColumnViewThroughConversionsRevenue","ColumnViewThroughPartialConversionsCPA","ColumnViewThroughConversionsReturnOnAdSpend","ColumnViewThroughPartialConversionsRate","ColumnViewThroughConversionsCPA","ColumnViewThroughConversionsRate","ColumnNewCustomerConversions","ColumnNewCustomerRevenue","ColumnNewCustomerConversionRate","ColumnNewCustomerCPA","ColumnNewCustomerRevenueOnAdSpend","conversionsColumnsWithFluctuation","conversionsColumns","competitiveColumns","ColumnExactMatchImpressionSharePercent","ColumnTopImpressionSharePercent","ColumnTopImpressionShareLostToBudget","ColumnTopImpressionShareLostToRank","ColumnAbsoluteTopImpressionSharePercent","ColumnAbsoluteTopImpressionShareLostToBudget","ColumnAbsoluteTopImpressionShareLostToRank","ColumnAuctionLostToAdQualityPercent","ColumnAuctionLostToLandingPercent","ColumnAuctionLostToBidPercent","IsAudienceSOVEnabled","ColumnAudienceAuctionWonPercent","ColumnAudienceTopISLostToBudgetPercent","ColumnAudienceTopISLostToRankPercent","ColumnRelativeCTR","ColumnClickSharePercent","callDetailsColumns","ColumnCallForwarding","updateGridQuery","skipFilterOptions","currentQuery","showExceededSaveLimitError","filterConfig","tabView","errMsg","maxSavedFilterLimit","alertHelper","showAlert","initializeFilterAgent","toolbar","legacyDeps","customFilterUIChangeListener","gridToolbarGroup","legacyGridName","isLabelEnabled","entitySchema","Labels","menu","customItems","filterAgent","showFilterEditor","$containsall","FilterAgent","toolbarView","listenTo","getState","showToolBar","showAllToolbars","hideAllToolbars","showFilterBar","setChild","getFilterBar","getFilterEditor","subStatus","quickFilter","waterfallEvent","_ref$legacyDeps","stateManager","legacyWaterfall","fromFilterEntityToLegacyFilter","usePreferencesService","setPromise","FilterExpressions","preferenceData","setItem","App","propagateWaterfallFilterToLegacyGrids","getChild","errorData","showUnknownError","gridName","segmentTimeChecker","customColumnPreference","services","getCustomColumnsPreference","dataSource","pageable","plugins","complexFields","inlineEditSave","fieldName","updatedItem","_ref$additionalPayloa","additionalPayload","_ref$disableBulk","disableBulk","_ref$refreshGrid","refreshGrid","resource","i18nErrors","editorViewCallbackAfterUpdate","importNotificationCallback","_ref2$isDateType","isDateType","_ref2$customBlockerTa","customBlockerTarget","payload","uiBlockerTarget","normalizeDate","adapter","errorMapping","unexpectedError","getBulkApiErrors","setErrors","AlertHelper","showError","InlineEditableColumnPrompt","_ref$customValidators","customValidators","saveModel","PopupEditor","hasLabels","parseCompactedKeywords","selectedKeywordIds","matchTypes","matchTypeValues","Exact","Phrase","Broad","Predictive","keywords","group","biddedMatchType","KeywordId","parseIntBase64","getTargetEntity","keyOfElement","getGridDataParams","currentCustomerId","CurrentCustomerId","onAfterFindAll","showTooMuchDataError","setUpErrorHandling","afterFindAll","tooMuchDataErrorText","headlinePositionKey","descriptionPositionKey","endWithPeriod","combineDescriptions","textPart1","textPart2","combineDescriptionArray","desArray","getPreviewList","positionKey","list","PinnedField","dist","getTitlePreview","headlines","getDescPreview","descriptions","getMoreHint","assets","getMoreTitleHint","getMoreDescHint","getMoreHintFromJson","jsonString","getMoreTitleHintFromJson","getPreviewFromJson","preview","getTitlePreviewFromJson","headlineValue","getDescPreviewFromJson","descriptionValue","hoverTimeout","appendScopeParameter","addQuery","hoverDelay","handleShowRejectionReasonEnter","thisArg","callbackBinded","handleShowRejectionReasonLeave","convertDateBetweenTimeZones","dateString","parseDate","convertMachineDateToUTCDate","convertUTCDateToMachineDate","displayDate","noDateMessage","getCurrentDate","getFullYear","getMonth","ColumnConversionEnabledFeatures","summary_tab_campaign","summary_tab_ad_group","summary_tab_ad","summary_tab_keyword","summary_tab_demographics","settings_locations","settings_ad_schedule","settings_devices","DsaTarget","DsaSearchTerm","AutomatedExtension","AdExtensionAssociation","DimensionsGrid","feed_items","audience_associations_level","ConversionGoalsGrid","SharedBudgetSummaryGrid","SharedBudgetEditGrid","summary_tab_search_term","target_devices_grid","PerformanceGrid","newProductGroupsGrid","PortfolioBidStrategyGrid","validateOrder","preferenceConfig","_ref$dynamic","sourceOrderbyInfo","_applySortingInfoConv","sortableColumns","sortable","updatedOrder","order","getNewUiWelcomeStyles","newUINavigationPreferenceDialog","backgroundPositionY","backgroundImage","rocketImage","backgroundRepeat","backgroundColor","backgroundSize","padding","margin","background","textDecorationLine","fontWeight","fontSize","textAlign","border","marginRight","allowedUrlFilterKeys","sitemapIdToFeatureName","ads","audiences","products","adgroups","performance","urlFilterType","featureNameToUrlFilter","editorialRejectionReasonFilter","flagIds","filters","SelectedColumn","SelectedOperator","Values","featureIdToFilterAlias","AdGrid","filterDisapprovedAds","filterAdResourceInvalidAds","filterGoogleImportedVideoNeedRepair","filterDisapprovedOrApprovedLimitedAds","editorialRejectionReason","filterHeadlinesAssetId","paramString","filterDescriptionsAssetId","KeywordGrid","filterDisapprovedKeywords","filterDisapprovedOrApprovedLimitedKeywords","CampaignsGrid","budgetCappedCampaigns","newCampaignBudgetSuggestion","newCampaign01","filterBidStrategy","isInPilot","bidStrategyName","filterSeasonalityCampaignType","filterSeasonalityId","matches","exec","filterDataExclusionId","AudienceAssociationGrid","hcRem01","hcRem02","alertsCanobidadj01","alertsCainactive01","alertsCanobidadj02","AudienceGrid","newAssociation01","associationId","UETTagsGrid","alertsUetinactive01","alertsUetinactive02","alertsUetinactive03","recommendationUetinactive","alertsUetactive01","alertsUetactive02","alertsCgnorecent01","alertsSanoassociation01","unverifiedGoals","rejectionIds","getLocalizedEditorialRejectionReasons","localizedRejectionReasons","formatKey","formatKeyWithSurfix","getLocalizedRejectionReasons","object","getDisabledSaveFilterButtonWithReasonFunc","readOnlyProperties","editableFilter","disabledSaveFilter","editableExpressions","convertFilterEntityToExpressions","filterKeys","some","intersection","URLFilterInternal","onUrlFilterChange","filterExpressions","updateUrlFilter","filterType","getFilterExpressionsFromFilterAlias","filterAlias","filterArguments","formatAlias","checkUrlFilter","currentRoute","currentSiteMap","findSiteMap","siteMapId","supportFeatureNames","allowedFilterAlias","_values$filterArgumen","URLFilter","withSiteMap","withScope","withGlobalFilter","versionCheckInstance","VersionCheck","httpUtil","http","_ref$version","checkFrequency","_$chain$result$result","scopeStore","versionStore","newVersion","checkVersion","textStyle","root","ErrorString","Fragment","variant","block","nowrap","TitleBar","isActive","setActiveKeys","activeKeys","setActiveCallback","disableExpand","onClickHandler","tempActiveKeys","ariaTitle","useMemo","titleKey","Stack","horizontal","verticalAlign","horizontalAlign","Item","grow","tokens","childrenGap","FontIcon","iconName","tabIndex","onKeyPress","keyCode","onKeyPressHandler","role","contentOverflowClassName","noOverflowHidden","positionClassName","relativePosition","contentVisibilityClassName","Details","detailsVisibilityClassName","Panel","onFocus","details","getStyles","core","collapseContainer","helpbuttonStyle","boxShadow","borderRadius","palette","white","wordWrap","visibility","minHeight","userSelect","neutralTertiary","right","FixedTitleBar","FixedPanel","Collapse","checkItems","skipItemsTypeCheck","allPanelItems","useDefaultStyles","classnames","newChildren","child","childType","newProps","console","warn","renderPanels","useClasses","makeStyles","ValidatedPanel","withCollapseAdapter","withContainerPropInjectingErrorHandling","open","_objectWithoutProperties","_excluded","shouldRenderSummary","renderTitle","useCallback","renderSummary","titleDetails","AccordionCard","FormCardHeader","Spacer","FormCardError","AccordionButton","FormCardSummary","FormCardBody","CustomExpandableActuator","ValidatedFixedPanel","_excluded2","FormCard","ToggleTitle","topicKey","handleChangeToggle","isChecked","labeContent","Toggle","inlineLabel","onChange","checked","recommendedTagStyles","TextTitle","icon","iconStyles","iconAltText","HeadingComponent","as","headingClassName","isRecommended","headingRole","headingLevel","src","alt","style","TitleBarError","useCollapseState","allSections","expandedSections","activeSections","setActiveSections","flipExpandAllState","expandAll","collapseExpander","getPanelErrorProps","needsAttention","ValidatedFixedPanelV1","ValidatedPanelV1","ValidatedBootstrapPanel","withContainerRenderingErrorHandling","BootstrapPanel","BootstrapExpandableActuator","withFluentSwitcher","ValidatedPanelV2","ValidatedFixedPanelV2","pug","module","exports","locals","pug_interp","pug_html","locals_for_with","escape","$$obj","$$l","resxKey","statusStr","pug_index0","imageUrl","pug_mixins","attributes","budget_type"],"sourceRoot":""}