{"version":3,"file":"static/js/application.async.non-landing~c84e23cb.f334f2a0.chunk.js","mappings":"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","sources":["../../../node_modules/@bingads-webui-campaign-legacy/crud-ad/viewmodel/index.js","../../../node_modules/@bingads-webui-campaign-legacy/crud-ad/view/adgroup-selector-repository.js","../../../node_modules/@bingads-webui-campaign-legacy/crud-ad/view/adgroup-selector-proxy.js","../../../node_modules/@bingads-webui-campaign-legacy/crud-ad/view/campaign-adgroup-selector-repository.js","../../../node_modules/@bingads-webui-campaign-legacy/crud-ad/view/campaign-adgroup-selector-proxy.js","../../../node_modules/@bingads-webui-campaign-legacy/crud-ad/view/index.js","../../../node_modules/@bingads-webui-campaign-legacy/crud-keywords/viewmodel/create-inline-recommendation.js","../../../node_modules/@bingads-webui-campaign-legacy/crud-keywords/view/create-inline-recommendation.js","../../../node_modules/@bingads-webui-campaign-legacy/griddownload/view/baseDownload.js","../../../node_modules/@bingads-webui-campaign-legacy/hotel-center-ad-extensions/shared/service/hotel-center-entity-selector-service.js","../../../node_modules/@bingads-webui-campaign-legacy/hotel-center-ad-extensions/shared/viewmodel/new-grid-config.js","../../../node_modules/@bingads-webui-campaign-legacy/hotel-center-ad-extensions/shared/service/subAccountAssociationsRequestFactory.js","../../../node_modules/@bingads-webui-campaign-legacy/hotel-center-ad-extensions/shared/service/hotelGroupAssociationsRequestFactory.js","../../../node_modules/@bingads-webui-campaign-legacy/hotel-center-ad-extensions/shared/service/hotel-center-associations-repository.js","../../../node_modules/@bingads-webui-campaign-legacy/hotel-center-ad-extensions/shared/service/repository.js","../../../node_modules/@bingads-webui-campaign-legacy/hotel-center-ad-extensions/shared/view/Hotel-center-base-ad-extension-helper.js","../../../node_modules/@bingads-webui-campaign-legacy/hotel-center-ad-extensions/shared/view/hotel-center-base-adextension-view.js","../../../node_modules/@bingads-webui-campaign-legacy/hotel-center-assignment/assignment-ui-next.js","../../../node_modules/@bingads-webui-campaign-legacy/hotel-center-ad-extensions/callout/callout-adextension-associations-view.js","../../../node_modules/@bingads-webui-campaign-legacy/hotel-center-intelligence/intelligence-ui-next.js","../../../node_modules/@bingads-webui-campaign-legacy/hotel-center-overview/overview-ui-next.js","../../../node_modules/@bingads-webui-campaign-legacy/hotel-center-setup/setup-ui-next.js","../../../node_modules/@bingads-webui-campaign-legacy/hotel-center-utils/index.js","../../../node_modules/@bingads-webui-campaign-legacy/hotel-center/bootstrap/bootstrap-ui-next.js","../../../node_modules/@bingads-webui-campaign-legacy/import-campaigns/shared/import-error-code-helper.js","../../../node_modules/@bingads-webui-campaign-legacy/import-campaigns/shared/import-helper.js","../../../node_modules/@bingads-webui-campaign-legacy/import-campaigns/azureUploader.js","../../../node_modules/@bingads-webui-campaign-legacy/import-campaigns/spa/file-import-page.js","../../../node_modules/@bingads-webui-campaign-legacy/import-campaigns/spa/google-import-page.js","../../../node_modules/@bingads-webui-campaign-legacy/import-campaigns/spa/facebook-import-page.js","../../../node_modules/@bingads-webui-campaign-legacy/import-campaigns/spa/amazon-import-page.js","../../../node_modules/@bingads-webui-campaign-legacy/import-campaigns/spa/pinterest-import-page.js","../../../node_modules/@bingads-webui-campaign-legacy/import-campaigns/spa/options-blacklist.js","../../../node_modules/@bingads-webui-campaign-legacy/import-campaigns/spa/statuses.js","../../../node_modules/@bingads-webui-campaign-legacy/import-campaigns/spa/shared-dependencies.js","../../../node_modules/@bingads-webui-campaign-legacy/inline-chart/constants.js","../../../node_modules/@bingads-webui-campaign-legacy/inline-chart/model/inlinechartdropdownoption.js","../../../node_modules/@bingads-webui-campaign-legacy/inline-chart/model/granularityDropdownOption.js","../../../node_modules/@bingads-webui-campaign-legacy/inline-chart/chartdelegateadapter.js","../../../node_modules/@bingads-webui-campaign-legacy/inline-chart/chartnameconverter.js","../../../node_modules/@bingads-webui-campaign-legacy/inline-chart/chartdataprovider.js","../../../node_modules/@bingads-webui-campaign-legacy/inline-chart/inline-chart-preferences.js","../../../node_modules/@bingads-webui-campaign-legacy/inline-chart/viewmodel/inlinechartviewmodel.js","../../../node_modules/@bingads-webui-campaign-legacy/inline-chart/numericsymbolformatter.js","../../../node_modules/@bingads-webui-campaign-legacy/inline-chart/view/inlinechartview.js","../../../node_modules/@bingads-webui-campaign-legacy/inline-download-reports/create-similar.js","../../../node_modules/@bingads-webui-campaign-legacy/inline-download-reports/load-emails.js","../../../node_modules/@bingads-webui-campaign-legacy/scheduled-import/view/import-center-options.js","../../../node_modules/@bingads-webui-campaign-legacy/scheduled-import/view/import-i18n.js","../../../node_modules/@bingads-webui-campaign-legacy/scheduled-import/view/batched-import-processor.js","../../../node_modules/@bingads-webui-campaign-legacy/scheduled-import/view/import-log-constants.js","../../../node_modules/@bingads-webui-campaign-legacy/scheduled-import/view/import-log-datasource-handler.js","../../../node_modules/@bingads-webui-campaign-legacy/import-campaigns/shared/download.js","../../../node_modules/@bingads-webui-campaign-legacy/scheduled-import/view/import-log-grid-config.js","../../../node_modules/@bingads-webui-campaign-legacy/scheduled-import/viewmodel/import-log-grid.js","../../../node_modules/@bingads-webui-campaign-legacy/scheduled-import/view/import-settings-tooltip.js","../../../node_modules/@bingads-webui-campaign-legacy/scheduled-import/view/import-log-grid-base.js","../../../node_modules/@bingads-webui-campaign-legacy/import-campaigns/shared/showGoogleLoginPopup.js","../../../node_modules/@bingads-webui-campaign-legacy/scheduled-import/view/import-log-grid.js","../../../node_modules/@bingads-webui-campaign-legacy/scheduled-import/view/import-schedule-constants.js","../../../node_modules/@bingads-webui-campaign-legacy/scheduled-import/view/import-schedule-grid-config.js","../../../node_modules/@bingads-webui-campaign-legacy/scheduled-import/view/import-schedule-grid-data-source.js","../../../node_modules/@bingads-webui-campaign-legacy/scheduled-import/viewmodel/import-schedule-grid.js","../../../node_modules/@bingads-webui-campaign-legacy/scheduled-import/view/import-schedule-accounts-detail-view.js","../../../node_modules/@bingads-webui-campaign-legacy/scheduled-import/view/import-schedule-grid-base.js","../../../node_modules/@bingads-webui-campaign-legacy/scheduled-import/view/import-schedule-grid.js","../../../node_modules/@bingads-webui-campaign-legacy/scheduled-import/service/preference-upload-api.js","../../../node_modules/@bingads-webui-campaign-legacy/scheduled-import/view/preference-upload-status.js","../../../node_modules/@bingads-webui-campaign-legacy/scheduled-import/view/preference-upload-error-maps.js","../../../node_modules/@bingads-webui-campaign-legacy/scheduled-import/view/preference-upload.js","../../../node_modules/@bingads-webui-campaign-legacy/scheduled-import/view/shared-column-configs/import-freq-col.js","../../../node_modules/@bingads-webui-campaign-legacy/shopping-campaign/service/campaign-creation/service.js","../../../node_modules/@bingads-webui-campaign-legacy/shopping-campaign/view/campaign-creation/smart-shopping-base.js","../../../node_modules/@bingads-webui-campaign-legacy/shopping-campaign/view/campaign-creation/ssc-instrumentation.js","../../../node_modules/@bingads-webui-campaign-legacy/shopping-campaign/view/campaign-creation/smart-shopping-campaign-settings.js","../../../node_modules/@bingads-webui-campaign-legacy/shopping-campaign/viewmodel/campaign-creation/update.js","../../../node_modules/@bingads-webui-campaign-legacy/shopping-campaign/view/campaign-creation/update.js","../../../node_modules/@bingads-webui-campaign-legacy/targeting-settings/change-bid-adjustment/change-bid-adjustment-model.js","../../../node_modules/@bingads-webui-campaign-legacy/targeting-settings/change-bid-adjustment/change-bid-adjustment-viewmodel.js","../../../node_modules/@bingads-webui-campaign-legacy/targeting-settings/helpers.js","../../../node_modules/@bingads-webui-campaign-legacy/targeting-settings/change-bid-adjustment/change-bid-adjustment-view.js","../../../node_modules/@bingads-webui-campaign-legacy/targeting-settings/change-cashback-percent/change-cashback-percent-view.js","../../../node_modules/@bingads-webui-campaign-legacy/targeting-settings/bid-adjustment-plugin.js","../../../node_modules/@bingads-webui-campaign-legacy/targeting-settings/bulk-remove-plugin.js","../../../node_modules/@bingads-webui-campaign-legacy/targeting-settings/common-alert/common-alert.js","../../../node_modules/@bingads-webui-campaign-legacy/targeting-settings/common-alert/index.js","../../../node_modules/@bingads-webui-campaign-react/account-reparenting-actions/src/arw-js-data-context-provider.js","../../../node_modules/@bingads-webui-campaign-react/account-reparenting-actions/src/use-data-actions.js","../../../node_modules/@bingads-webui-campaign-react/account-reparenting-actions/src/account-actions.js","../../../node_modules/@bingads-webui-campaign-react/account-reparenting-actions/src/customer-actions.js","../../../node_modules/@bingads-webui-campaign-react/account-reparenting-actions/src/payment-instrument-actions.js","../../../node_modules/@bingads-webui-campaign-react/account-reparenting-actions/src/billing-actions.js","../../../node_modules/@bingads-webui-campaign-react/account-reparenting-actions/src/reparenting-job-actions.js","../../../node_modules/@bingads-webui-campaign-react/account-reparenting-actions/src/reparenting-validate-actions.js","../../../node_modules/@bingads-webui-campaign-react/account-reparenting-actions/src/uet-tag-actions.js","../../../node_modules/@bingads-webui-campaign-react/account-reparenting-context-provider/src/arw-server-context.js","../../../node_modules/@bingads-webui-campaign-react/account-reparenting-context-provider/src/arw-context-provider.js","../../../node_modules/@bingads-webui-campaign-react/account-reparenting-context-provider/src/hooks.js","../../../node_modules/@bingads-webui-campaign-react/account-reparenting-instrumentation/src/schemas.js","../../../node_modules/@bingads-webui-campaign-react/account-reparenting-instrumentation/src/instrumentation.js","../../../node_modules/@bingads-webui-campaign-react/account-reparenting-instrumentation/src/instrumentation-context.js","../../../node_modules/@bingads-webui-campaign-react/account-reparenting-popover/src/index.js","../../../node_modules/@bingads-webui-campaign-react/account-reparenting-step-base-layout/src/arw-step-footer.js","../../../node_modules/@bingads-webui-campaign-react/account-reparenting-step-base-layout/src/arw-step-base-layout.js","../../../node_modules/@bingads-webui-campaign-react/account-reparenting-step-summary/src/index.js","../../../node_modules/@bingads-webui-campaign-react/accounts-page-description/src/page-description.js","../../../node_modules/@bingads-webui-campaign-react/accounts-page-description/src/styles/page-description-styles.js","../../../node_modules/@bingads-webui-campaign-react/ad-extensions-associations-factory/src/styles/ad-extension-editors-common-styles.js","../../../node_modules/@bingads-webui-campaign-react/ad-extensions-associations-factory/src/styles/ad-extensions-associations-styles.js","../../../node_modules/@bingads-webui-campaign-react/ad-extensions-associations-factory/src/ad-extensions-associations-wrapper.js","../../../node_modules/@bingads-webui-campaign-react/ad-extensions-associations-factory/src/styles/ad-extension-editor-global-styles.js","../../../node_modules/@bingads-webui-campaign-react/ad-extensions-associations-factory/src/ad-extension-associations.js","../../../node_modules/@bingads-webui-campaign-react/asset-library-legacy-components/src/asset-library-inline-download-wrapper/use-daterange-default.js","../../../node_modules/@bingads-webui-campaign-react/asset-library-legacy-components/src/asset-library-inline-download-wrapper/styles.js","../../../node_modules/@bingads-webui-campaign-react/asset-library-legacy-components/src/asset-library-inline-download-wrapper/inline-download-wrapper.js","../../../node_modules/@bingads-webui-campaign-react/asset-library-legacy-components/src/asset-library-inline-download-wrapper/use-inline-download.js","../../../node_modules/@bingads-webui-campaign-react/auto-goal-creation-wizard-utils/src/use-step-instrument.js","../../../node_modules/@bingads-webui-campaign-react/auto-goal-creation-wizard-utils/src/util.js","../../../node_modules/@bingads-webui-campaign-react/auto-goal-creation-wizard-utils/src/prop-type.js","../../../node_modules/@bingads-webui-campaign-react/auto-goal-creation-wizard-utils/src/instrumentation-schema.js","../../../node_modules/@bingads-webui-campaign-react/auto-goal-creation-wizard-utils/src/goal-wizard-context.js","../../../node_modules/@bingads-webui-campaign-react/auto-goal-creation-wizard-utils/src/constants.js","../../../node_modules/@bingads-webui-campaign-react/auto-goal-data-repository/src/uet-goal-crud.js","../../../node_modules/@bingads-webui-campaign-react/auto-goal-data-repository/src/use-goals-with-params.js","../../../node_modules/@bingads-webui-campaign-react/auto-goal-data-repository/src/goal-recommendations.js","../../../node_modules/@bingads-webui-campaign-react/auto-goal-data-repository/src/use-recommendation.js","../../../node_modules/@bingads-webui-campaign-react/auto-goal-data-repository/src/post-email.js","../../../node_modules/@bingads-webui-campaign-react/auto-goal-data-repository/src/log-event.js","../../../node_modules/@bingads-webui-campaign-react/auto-goal-data-repository/src/uet-tag.js","../../../node_modules/@bingads-webui-campaign-react/auto-goal-details-edit/src/helper.js","../../../node_modules/@bingads-webui-campaign-react/auto-goal-details-edit/src/auto-goal-schema.js","../../../node_modules/@bingads-webui-campaign-react/auto-goal-details-edit/src/styles/goal-details-setting-form-style.js","../../../node_modules/@bingads-webui-campaign-react/auto-goal-details-edit/src/components/label-help-button.js","../../../node_modules/@bingads-webui-campaign-react/auto-goal-details-edit/src/control-components/validated-helper.js","../../../node_modules/@bingads-webui-campaign-react/auto-goal-details-edit/src/components/window-form.js","../../../node_modules/@bingads-webui-campaign-react/auto-goal-details-edit/src/components/default-revenue-value-form.js","../../../node_modules/@bingads-webui-campaign-react/auto-goal-details-edit/src/goal-details-setting-form.js","../../../node_modules/@bingads-webui-campaign-react/auto-goal-details-edit/src/constants.js","../../../node_modules/@bingads-webui-campaign-react/auto-goal-details-edit/src/goal-details-setting-drawer.js","../../../node_modules/@bingads-webui-campaign-react/auto-goal-details-edit/src/goal-details-setting-edit-drawer.js","../../../node_modules/@bingads-webui-campaign-react/auto-goal-entry-point/src/styles.js","../../../node_modules/@bingads-webui-campaign-react/auto-goal-entry-point/src/recommendation-tile.js","../../../node_modules/@bingads-webui-campaign-react/auto-goal-entry-point/src/recommednation-tile-with-condition.js","../../../node_modules/@bingads-webui-campaign-legacy/crud-ad/template/index.pug","../../../node_modules/@bingads-webui-campaign-legacy/crud-keywords/template/create-inline-recommendation.pug","../../../node_modules/@bingads-webui-campaign-legacy/hotel-center-ad-extensions/shared/template/hotel-extension-page.pug","../../../node_modules/@bingads-webui-campaign-legacy/inline-chart/template/inlinechart.pug","../../../node_modules/@bingads-webui-campaign-legacy/scheduled-import/template/adwords-account-column.pug","../../../node_modules/@bingads-webui-campaign-legacy/scheduled-import/template/import-id.pug","../../../node_modules/@bingads-webui-campaign-legacy/scheduled-import/template/import-log-actions.pug","../../../node_modules/@bingads-webui-campaign-legacy/scheduled-import/template/import-log-grid.pug","../../../node_modules/@bingads-webui-campaign-legacy/scheduled-import/template/import-mode.pug","../../../node_modules/@bingads-webui-campaign-legacy/scheduled-import/template/import-schedule-grid.pug","../../../node_modules/@bingads-webui-campaign-legacy/scheduled-import/template/import-schedule-name.pug","../../../node_modules/@bingads-webui-campaign-legacy/scheduled-import/template/import-schedule-run-now-status.pug","../../../node_modules/@bingads-webui-campaign-legacy/scheduled-import/template/import-settings-col.pug","../../../node_modules/@bingads-webui-campaign-legacy/scheduled-import/template/import-settings-tooltip.pug","../../../node_modules/@bingads-webui-campaign-legacy/scheduled-import/template/import-task-item-list-column.pug","../../../node_modules/@bingads-webui-campaign-legacy/scheduled-import/template/import-type.pug","../../../node_modules/@bingads-webui-campaign-legacy/scheduled-import/template/link.pug","../../../node_modules/@bingads-webui-campaign-legacy/scheduled-import/template/preference-upload.pug","../../../node_modules/@bingads-webui-campaign-legacy/shopping-campaign/template/campaign-creation/smart-shopping-campaign-creation.pug","../../../node_modules/@bingads-webui-campaign-legacy/shopping-campaign/template/campaign-creation/update.pug","../../../node_modules/@bingads-webui-campaign-legacy/targeting-settings/common-alert/common-alert-template.pug","../../../node_modules/@bingads-webui-campaign-react/bid-strategy-component-v2/src/styles/bid-strategy-dropdown-styles.ts","../../../node_modules/@bingads-webui-campaign-react/bid-strategy-component-v2/src/bid-strategy-dropdown.tsx","../../../node_modules/@bingads-webui-campaign-react/bid-strategy-component-v2/src/bid-strategy-icon.tsx"],"sourcesContent":["import _ from 'underscore';\r\nimport ko from 'knockout';\r\nimport scopeService from '@bingads-webui-static-legacy/scope-service';\r\nimport KoSchema from '@bingads-webui-component-legacy/ko-schema/index';\r\nimport { MTCampaignTypeEnum } from '@bingads-webui-campaign-legacy/adgroup-create-advanced/util/campaignType';\r\nimport { isXandrDisplayAdsCampaign, isAudienceNativeAdsCampaign, isAudienceCampaign, isXandrVideoAdsCampaign } from '@bingads-webui-campaign-react/constants';\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\n\r\nexport default class ViewModel {\r\n constructor({\r\n scope,\r\n hideFooter,\r\n isXandrVideoAd,\r\n isMultiAdFormatDisplayAd,\r\n isMultiAdFormatVideoAd,\r\n isForVNext,\r\n setAdGroupType = _.noop,\r\n setIsDisplayPlusNativeEditAdEditor = _.noop,\r\n permissions = {},\r\n }) {\r\n KoSchema.properties(this);\r\n\r\n this.permissions = permissions;\r\n this.scopeContext = scopeService.getScope();\r\n this.setAdGroupType = setAdGroupType;\r\n this.setIsDisplayPlusNativeEditAdEditor = setIsDisplayPlusNativeEditAdEditor;\r\n this.isXandrVideoAd = ko.observable(isXandrVideoAd);\r\n this.isMultiAdFormatDisplayAd = ko.observable(isMultiAdFormatDisplayAd);\r\n this.isMultiAdFormatVideoAd = ko.observable(isMultiAdFormatVideoAd);\r\n\r\n this.isForVNext = isForVNext;\r\n this.scope = scope;\r\n this.hideFooter = hideFooter;\r\n this.campaignType = this.scope().campaignType;\r\n this.campaignSubType = this.scope().campaignSubType;\r\n this.campaignDomain = this.scope().campaignDomain;\r\n this.isDynamicDescriptionEnabled = this.scope().isDynamicDescriptionEnabled;\r\n this.isFeedBasedCampaign = this.scope().isFeedBasedCampaign;\r\n this.selectorLabelId = _.uniqueId('add-keyword');\r\n\r\n this.showAdGroups = !this.scope().adGroupId;\r\n this.showCampaignLevel = !!this.scope().campaignId;\r\n this.showEditor = ko.observable(!_.isNull(this.scope().adGroupId));\r\n\r\n const audienceCampaignType = 8;\r\n\r\n this.allowAdCreation = ko.observable(!(this.scope().isFeedBasedCampaign && this.scope().campaignType === audienceCampaignType));\r\n\r\n this.selectedCampaigns = ko.observable();\r\n this.selectedAdgroups = ko.observable();\r\n\r\n this.adEditorTitle = ko.observable();\r\n\r\n this.saveAnalyticsId = ko.observable();\r\n\r\n this.saveCreateAnalyticsId = ko.observable();\r\n\r\n this.selectedAdgroups.subscribe((newAdgroup) => this.onAdGroupSelect(newAdgroup));\r\n this.selectedCampaigns.subscribe((newCampaign) => this.onCampaignSelect(newCampaign));\r\n this.isDisplayAdWithCopilot = ko.observable(\r\n this.campaignSubType && this.scope().adGroupId ?\r\n isXandrDisplayAdsCampaign(this.campaignSubType) && this.permissions.dynamic && this.permissions.dynamic.DisplayPlusCopilotAssetGeneration :\r\n false);\r\n\r\n this.isDisplayPlusNativeEdit = ko.observable(\r\n this.campaignType && this.campaignSubType && this.scope().adGroupId ?\r\n isAudienceCampaign(this.campaignType) && isAudienceNativeAdsCampaign(this.campaignSubType) && this.permissions.dynamic && this.permissions.dynamic.DisplayPlusEdit :\r\n false);\r\n\r\n this.containerClass = ko.computed(() => {\r\n return this.isDisplayPlusNativeEdit() ? 'display-plus-ad-editor__container' : 'ad-editor__container';\r\n });\r\n\r\n this.hideSaveAndCreateAnother = ko.observable(this.isSmartShoppingCampaign(this.campaignSubType));\r\n\r\n }\r\n\r\n onAdGroupSelect(newAdgroup) {\r\n const current = this.scope();\r\n const newAdgroupId = newAdgroup ? newAdgroup.Id : null;\r\n\r\n if (newAdgroupId !== current.adGroupId) {\r\n this.campaignType = MTCampaignTypeEnum[newAdgroup.Campaign.CampaignType];\r\n this.scope({\r\n campaignId: newAdgroup.Campaign.Id,\r\n campaignName: newAdgroup.Campaign.Name,\r\n adGroupId: newAdgroupId,\r\n adGroupName: newAdgroup.Name,\r\n campaignType: this.campaignType,\r\n campaignSubType: newAdgroup.Campaign.CampaignSubType,\r\n campaignDomain: _.result(_.first(newAdgroup.Campaign.CampaignSettings), 'DomainName'),\r\n isDynamicDescriptionEnabled: _.result(_.first(newAdgroup.Campaign.CampaignSettings), 'DynamicDescriptionEnabled'),\r\n isFeedBasedCampaign: this.isFeedBasedCampaign,\r\n isTraditionalChinese: newAdgroup.Language === 'TraditionalChinese',\r\n adsCountMap: newAdgroup.adsCountMap,\r\n adGroupType: newAdgroup.adGroupType,\r\n biddingStrategyType: newAdgroup.DisplayBiddingStrategyType,\r\n });\r\n this.setAdGroupType(newAdgroup.AdGroupType);\r\n this.allowAdCreation(!((this.isFeedBasedCampaign && newAdgroup.Campaign.CampaignType === 'Audience') || newAdgroup.Campaign.CampaignType === 'Hotel'));\r\n this.showEditor(!!newAdgroupId);\r\n this.hideSaveAndCreateAnother(newAdgroup.Campaign.CampaignSubType);\r\n this.isDisplayAdWithCopilot(isXandrDisplayAdsCampaign(newAdgroup.Campaign.CampaignSubType) && this.permissions.dynamic && this.permissions.dynamic.DisplayPlusCopilotAssetGeneration);\r\n this.isXandrVideoAd(isXandrVideoAdsCampaign(newAdgroup.Campaign.CampaignSubType) && this.permissions.dynamic && this.permissions.dynamic.XandrVideoCampaigns);\r\n\r\n const isDisplayPlusNativeEditEnabled = isAudienceNativeAdsCampaign(newAdgroup.Campaign.CampaignSubType) && this.permissions.dynamic && this.permissions.dynamic.DisplayPlusEdit;\r\n\r\n if (isDisplayPlusNativeEditEnabled) {\r\n setClarityTag({\r\n IsDisplayPlusAudienceNative: true,\r\n CampaignSubType: newAdgroup.Campaign.CampaignSubType,\r\n });\r\n }\r\n\r\n this.isDisplayPlusNativeEdit(isDisplayPlusNativeEditEnabled);\r\n this.setIsDisplayPlusNativeEditAdEditor(isDisplayPlusNativeEditEnabled);\r\n }\r\n }\r\n\r\n isSmartShoppingCampaign(campaignSubType) {\r\n return campaignSubType === 'ShoppingSmartAds' || campaignSubType === 12;\r\n }\r\n\r\n onCampaignSelect(newCampaign) {\r\n const current = this.scope();\r\n const newCampaignId = newCampaign ? newCampaign.Id : null;\r\n\r\n if (newCampaignId !== current.campaignId) {\r\n this.campaignType = MTCampaignTypeEnum[newCampaign.CampaignType];\r\n this.campaignDomain = _.result(_.first(newCampaign.CampaignSettings), 'DomainName');\r\n this.isDynamicDescriptionEnabled = _.result(_.first(newCampaign.CampaignSettings), 'DynamicDescriptionEnabled');\r\n this.isFeedBasedCampaign = !!_.result(_.first(newCampaign.CampaignSettings), 'ProviderId');\r\n this.hideSaveAndCreateAnother(this.isSmartShoppingCampaign(newCampaign.CampaignSubType));\r\n }\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport Promise from 'bluebird';\r\n// import odata from '@bingads-webui-component-legacy/http/channel/odata';\r\nimport jsdata from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport edmCampaign from '@bingads-webui-component-legacy/edm-campaign/index';\r\nimport config from '@bingads-webui-component-legacy/config/index';\r\nimport pageContext from '@bingads-webui-static-legacy/page-context';\r\nimport EntitySelectorService from '@bingads-webui-static-legacy/entity-selector-service';\r\n\r\nconst PAGE_SIZE = 10;\r\n\r\nfunction getAdsCount(adgroupData) {\r\n return new Promise((resolve) => {\r\n if (pageContext.CurrentCampaign && pageContext.CurrentCampaign.CampaignSubType !== 'ShoppingSmartAds') {\r\n resolve({});\r\n } else if (adgroupData && adgroupData.length === 0) {\r\n resolve({});\r\n } else {\r\n const entitySelectorService = new EntitySelectorService();\r\n\r\n entitySelectorService.getAdsCount(adgroupData, pageContext.CurrentCampaign, pageContext.CurrentAccount, pageContext.CurrentCustomer)\r\n .then((adsCountMap) => {\r\n resolve(adsCountMap);\r\n })\r\n .catch((e) => {\r\n // error handling\r\n console.log(e); // eslint-disable-line\r\n resolve({});\r\n });\r\n }\r\n });\r\n}\r\n\r\nfunction transformAdgroupData(data) { // eslint-disable-line\r\n if (!data || !_.isArray(data)) {\r\n return Promise.resolve([]);\r\n }\r\n\r\n return Promise.resolve(getAdsCount(data))\r\n .then((adsCountMap) => {\r\n let adgroupData = _.filter(data, (adgroup) => {\r\n // filter SSC which has 1 product ad and 1 responsive ad if IsResponsiveAdEnabledForSSC is true\r\n // filter SSC which has 1 product ad if IsResponsiveAdEnabledForSSC is false\r\n return EntitySelectorService.shouldKeepSmartShoppingCampaignAdGroup(adgroup, adsCountMap);\r\n });\r\n\r\n const isSmartShoppingCampaign = _.chain(adgroupData)\r\n .result('0')\r\n .result('Campaign')\r\n .result('CampaignSubType')\r\n .value() === 'ShoppingSmartAds';\r\n\r\n adgroupData = adgroupData.map((item) => {\r\n return _.extend({\r\n name: item.Name,\r\n status: item.Status,\r\n campaignName: item.Campaign.Name,\r\n adsCountMap,\r\n }, item);\r\n });\r\n\r\n return {\r\n totalCount: isSmartShoppingCampaign ? adgroupData.length : data.totalCount,\r\n items: adgroupData,\r\n };\r\n });\r\n}\r\n\r\nexport default function getAdgroupData(queryText = '', pageNumber = 0, pageSize = PAGE_SIZE, campaignId) {\r\n const isDSAMixedModeCampaignEnabled = _.result(config.get('Permissions'), 'IsDSAMixedModeCampaignEnabled', false);\r\n\r\n const signleQuoteTerminatedQuery = queryText.replace('\\'', '\\'\\'');\r\n\r\n const query = {\r\n $expand: 'Campaign($select=Id,Name,CampaignType,CampaignSubType,CampaignSettings)',\r\n $select: `Id, Name, Status, Language, DisplayBiddingStrategyType${isDSAMixedModeCampaignEnabled ? ', AdGroupType' : ''}`,\r\n $skip: pageNumber * pageSize,\r\n $top: pageSize,\r\n $count: true,\r\n $filter: `contains(Name, '${signleQuoteTerminatedQuery}')`,\r\n };\r\n\r\n if (campaignId) {\r\n query.entitySet = edmCampaign.currentAccount.Campaigns.$withKey(Number(campaignId)).AdGroups.toJSON();\r\n }\r\n\r\n return jsdata.AdGroup.findAll({\r\n query,\r\n }).then((data) => {\r\n return transformAdgroupData(data);\r\n }).then((data) => {\r\n return data;\r\n });\r\n}\r\n","import _ from 'underscore';\r\nimport { CampaignSelectorView as AdgroupSelectorView } from '@bingads-webui-campaign-react/campaign-selector';\r\nimport withUiBlock from '@bingads-webui-component-legacy/uiblocker/index';\r\nimport getAdgroupData from '@bingads-webui-campaign-legacy/crud-ad/view/adgroup-selector-repository';\r\n\r\nconst i18n = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/campaign-creation-advanced');\r\n\r\nconst PAGESIZE = 10;\r\n\r\nexport default class AdgroupSelectorProxy {\r\n constructor({\r\n campaignId,\r\n onEventTrigger,\r\n getCustomizedData,\r\n } = {}) {\r\n this.campaignId = campaignId;\r\n this.onEventTrigger = onEventTrigger;\r\n this.getCustomizedData = getCustomizedData || null;\r\n }\r\n\r\n fecthAdgroupData(query, pageNumber, pageSize, adgroupSelectorView) {\r\n const selectorContainer = adgroupSelectorView && adgroupSelectorView.$('.ba-campaign-selector');\r\n const uiBlockContainer = selectorContainer.hasClass('open') ? selectorContainer.find('.dropdown-menu') : selectorContainer;\r\n\r\n if (this.getCustomizedData === null) {\r\n return getAdgroupData(query, pageNumber, pageSize, this.campaignId).finally(withUiBlock(uiBlockContainer));\r\n } else {\r\n return this.getCustomizedData(query, pageNumber, pageSize, this.campaignId).finally(withUiBlock(uiBlockContainer));\r\n }\r\n }\r\n\r\n getAdgroupSelectorView() {\r\n\r\n const adgroupSelectorView = new AdgroupSelectorView({\r\n i18n,\r\n fetch: ({ query = '', pageNumber = 0 }) => {\r\n return this.fecthAdgroupData(query, pageNumber, PAGESIZE, adgroupSelectorView);\r\n },\r\n pageSize: PAGESIZE,\r\n stringKeys: {\r\n emptyListContent: 'No results to display.',\r\n listHeader: 'Available ad groups: {{itemCount}}',\r\n selectEntity: 'Select an ad group',\r\n },\r\n });\r\n\r\n adgroupSelectorView.on('selected-campaign', (selectedItem) => {\r\n if (_.isFunction(this.onEventTrigger)) {\r\n this.onEventTrigger('selected-campaign', selectedItem);\r\n }\r\n });\r\n\r\n return adgroupSelectorView;\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport jsdata from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport edmCampaign from '@bingads-webui-component-legacy/edm-campaign/index';\r\nimport config from '@bingads-webui-component-legacy/config/index';\r\nimport pageContext from '@bingads-webui-static-legacy/page-context';\r\nimport EntitySelectorService from '@bingads-webui-static-legacy/entity-selector-service';\r\n\r\nconst CAMPAIGN_PAGE_SIZE = 10;\r\nconst ADGROUP_PAGE_SIZE = 6;\r\n\r\nfunction transformCampaignData(data) {\r\n if (!data || !_.isArray(data)) {\r\n return [];\r\n }\r\n\r\n const campaignData = data.map((item) => {\r\n return _.extend({\r\n name: item.Name,\r\n status: item.Status,\r\n }, item);\r\n });\r\n\r\n return {\r\n totalCount: data.totalCount,\r\n items: campaignData,\r\n };\r\n}\r\n\r\nfunction getAdsCount(adgroupData, campaign) {\r\n return new Promise((resolve) => {\r\n if (campaign && campaign.CampaignSubType !== 'ShoppingSmartAds') {\r\n resolve({});\r\n } else if (adgroupData && adgroupData.length === 0) {\r\n resolve({});\r\n } else {\r\n const entitySelectorService = new EntitySelectorService();\r\n\r\n entitySelectorService.getAdsCount(adgroupData, campaign, pageContext.CurrentAccount, pageContext.CurrentCustomer)\r\n .then((adsCountMap) => {\r\n resolve(adsCountMap);\r\n })\r\n .catch((e) => {\r\n // error handling\r\n console.log(e); // eslint-disable-line\r\n resolve({});\r\n });\r\n }\r\n });\r\n}\r\n\r\nfunction transformAdgroupData(data, campaign) { // eslint-disable-line\r\n if (!data || !_.isArray(data)) {\r\n Promise.resolve([]);\r\n }\r\n\r\n return Promise.resolve(getAdsCount(data, campaign))\r\n .then((adsCountMap) => {\r\n let adgroupData = _.filter(data, (adgroup) => {\r\n // filter SSC which has 1 product ad and 1 responsive ad if IsResponsiveAdEnabledForSSC is true\r\n // filter SSC which has 1 product ad if IsResponsiveAdEnabledForSSC is false\r\n return EntitySelectorService.shouldKeepSmartShoppingCampaignAdGroup(adgroup, adsCountMap);\r\n });\r\n\r\n const isSmartShoppingCampaign = _.chain(campaign)\r\n .result('CampaignSubType')\r\n .value() === 'ShoppingSmartAds';\r\n\r\n adgroupData = adgroupData.map((item) => {\r\n return _.extend({\r\n name: item.Name,\r\n status: item.Status,\r\n campaignName: item.Campaign.Name,\r\n adsCountMap,\r\n }, item);\r\n });\r\n\r\n return {\r\n // for SSC, the only ad group may be filtered out due to ad size limit\r\n totalCount: isSmartShoppingCampaign ? adgroupData.length : data.totalCount,\r\n items: adgroupData,\r\n };\r\n });\r\n}\r\n\r\nexport function getCampaignData(queryText = '', pageNumber = 0, pageSize = CAMPAIGN_PAGE_SIZE) {\r\n\r\n const signleQuoteTerminatedQuery = queryText.replace('\\'', '\\'\\'');\r\n\r\n const query = {\r\n $select: 'Id, Name, Status, CampaignType, CampaignSubType, CampaignSettings',\r\n $skip: pageNumber * pageSize,\r\n $top: pageSize,\r\n $filter: `contains(Name, '${signleQuoteTerminatedQuery}') and (CampaignType ne Enum.CampaignType'Smart') and (CampaignType ne Enum.CampaignType'PerformanceMax')`,\r\n };\r\n\r\n return jsdata.Campaign.findAll({\r\n query,\r\n }).then((data) => {\r\n return transformCampaignData(data);\r\n });\r\n}\r\n\r\nexport function getAdgroupData(queryText = '', pageNumber = 0, pageSize = ADGROUP_PAGE_SIZE, scopeParentItem) {\r\n const isDSAMixedModeCampaignEnabled = _.result(config.get('Permissions'), 'IsDSAMixedModeCampaignEnabled', false);\r\n\r\n const signleQuoteTerminatedQuery = queryText.replace('\\'', '\\'\\'');\r\n\r\n const query = {\r\n $expand: 'Campaign($select=Id,Name,CampaignType,CampaignSubType,CampaignSettings)',\r\n $select: `Id, Name, Status, Language, DisplayBiddingStrategyType${isDSAMixedModeCampaignEnabled ? ', AdGroupType' : ''}`,\r\n $skip: pageNumber * pageSize,\r\n $top: pageSize,\r\n $count: true,\r\n $filter: `contains(Name, '${signleQuoteTerminatedQuery}')`,\r\n };\r\n\r\n if (scopeParentItem) {\r\n query.entitySet = edmCampaign.currentAccount.Campaigns.$withKey(Number(scopeParentItem.Id)).AdGroups.toJSON();\r\n }\r\n\r\n return jsdata.AdGroup.findAll({\r\n query,\r\n }).then((data) => {\r\n return transformAdgroupData(data, scopeParentItem);\r\n }).then((data) => {\r\n return data;\r\n });\r\n}\r\n\r\n","import _ from 'underscore';\r\nimport { CampaignAdgroupSelectorView } from '@bingads-webui-campaign-react/campaign-adgroup-selector';\r\nimport withUiBlock from '@bingads-webui-component-legacy/uiblocker/index';\r\nimport { getCampaignData, getAdgroupData } from '@bingads-webui-campaign-legacy/crud-ad/view/campaign-adgroup-selector-repository';\r\n\r\nconst i18n = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/feature/campaign-adgroup-selector');\r\n\r\nconst CAMPAIGN_PAGESIZE = 10;\r\nconst ADGROUP_PAGESIZE = 6;\r\n\r\nexport default class CampaignAdgroupSelectorProxy {\r\n constructor({\r\n onCampaignSelect = _.noop,\r\n onAdGroupSelect = _.noop,\r\n }) {\r\n this.onCampaignSelect = onCampaignSelect;\r\n this.onAdGroupSelect = onAdGroupSelect;\r\n }\r\n\r\n fecthCampaignData({\r\n query = '', pageNumber = 0, pageSize = CAMPAIGN_PAGESIZE,\r\n }, campaignAdgroupSelectorView) {\r\n const selectorContainer = campaignAdgroupSelectorView && campaignAdgroupSelectorView.$('.ba-campaign-adgroup-selector');\r\n const uiBlockContainer = selectorContainer.hasClass('open') ? selectorContainer.find('.dropdown-menu') : selectorContainer;\r\n\r\n return getCampaignData(query, pageNumber, pageSize).finally(withUiBlock(uiBlockContainer));\r\n }\r\n\r\n fecthAdgroupData({\r\n query = '', pageNumber = 0, pageSize = ADGROUP_PAGESIZE, scopeParentItem = null,\r\n }, campaignAdgroupSelectorView) {\r\n const selectorContainer = campaignAdgroupSelectorView && campaignAdgroupSelectorView.$('.ba-campaign-adgroup-selector');\r\n const uiBlockContainer = selectorContainer.hasClass('open') ? selectorContainer.find('.dropdown-menu') : selectorContainer;\r\n\r\n return getAdgroupData(query, pageNumber, pageSize, scopeParentItem).finally(withUiBlock(uiBlockContainer));\r\n }\r\n\r\n getCampaignAdgroupSelectorView() {\r\n const campaignAdgroupSelectorView = new CampaignAdgroupSelectorView({\r\n campaign: {\r\n pageSize: CAMPAIGN_PAGESIZE,\r\n onFetch: (args) => {\r\n return this.fecthCampaignData(args, campaignAdgroupSelectorView);\r\n },\r\n },\r\n adgroup: {\r\n pageSize: ADGROUP_PAGESIZE,\r\n onFetch: (args) => {\r\n return this.fecthAdgroupData(args, campaignAdgroupSelectorView);\r\n },\r\n },\r\n i18n,\r\n });\r\n\r\n campaignAdgroupSelectorView.on('selected-campaign', (selectedItem) => {\r\n this.onCampaignSelect(selectedItem);\r\n });\r\n\r\n campaignAdgroupSelectorView.on('selected-adgroup', (selectedItem) => {\r\n this.onAdGroupSelect(selectedItem);\r\n });\r\n\r\n return campaignAdgroupSelectorView;\r\n }\r\n}\r\n\r\n","import Backbone from 'backbone';\r\nimport ko from 'knockout';\r\nimport _ from 'underscore';\r\nimport ViewModel from '@bingads-webui-campaign-legacy/crud-ad/viewmodel/index';\r\nimport template from '@bingads-webui-campaign-legacy/crud-ad/template/index.pug';\r\nimport AdEditorView from '@bingads-webui-campaign-legacy/crud-ad/view/adEditor';\r\nimport AdgroupSelectorProxy from '@bingads-webui-campaign-legacy/crud-ad/view/adgroup-selector-proxy';\r\nimport CampaignAdgroupSelectorProxy from '@bingads-webui-campaign-legacy/crud-ad/view/campaign-adgroup-selector-proxy';\r\nimport { PerfMarkerFactory } from '@bingads-webui/performance-marker';\r\nimport config from '@bingads-webui-component-legacy/config/index';\r\nimport { isXandrDisplayAdsCampaign } from '@bingads-webui-campaign-react/constants';\r\n\r\nconst i18n = window.globalLegacyI18n.get('component/i18n/loader!campaignui/campaign-creation-advanced');\r\nconst i18nGlobal = window.globalLegacyI18n.get('component/i18n/loader!legacy/global');\r\n\r\nconst saveIds = {\r\n ExpandedText: 'omniture-exta-save',\r\n};\r\n\r\nconst saveCreateIds = {\r\n ExpandedText: 'omniture-exta-save-and-create-another',\r\n};\r\n\r\nconst permissions = config.get('Permissions') || {};\r\n\r\nexport default class View extends Backbone.View {\r\n initialize({\r\n newI18n,\r\n model = null,\r\n campaignId = null,\r\n adGroupId = null,\r\n adGroupType = null,\r\n campaignType = null,\r\n campaignSubType = null,\r\n biddingStrategyType = '',\r\n isSaveToServer = true, // whether or not saving the ad to server when user clicks save button\r\n isTraditionalChinese = false, // is current adgroup with traditional chinese\r\n appLookupDisabled = false,\r\n developerName = '',\r\n campaignDomain = '',\r\n isDynamicDescriptionEnabled = false,\r\n isFeedBasedCampaign = null,\r\n firstTextAdModel = {},\r\n firstExpandedTextAdModel = {},\r\n firstResponsiveSearchAdModel = {},\r\n isForVNext = false,\r\n inlineSuggestionsEnabled = false,\r\n adsCountMap = {},\r\n showSaveAndCreateAnother = true,\r\n isOpenCreatePanel = false,\r\n shouldSendOpportunityLog = () => false,\r\n logOpportunity,\r\n parentPerfMarker,\r\n serverContext,\r\n preferenceService,\r\n } = {}) {\r\n let perfMarker;\r\n\r\n if (parentPerfMarker) {\r\n perfMarker = parentPerfMarker.createChild('Create_Ad_From_Grid', { autoEnd: true, isActiveChild: false });\r\n } else {\r\n perfMarker = PerfMarkerFactory.createMarker('Create_Ad_From_Grid', { autoEnd: true });\r\n }\r\n\r\n perfMarker.willInit();\r\n\r\n this.isForVNext = isForVNext;\r\n this.model = model;\r\n this.campaignSubType = campaignSubType;\r\n this.showSaveAndCreateAnother = showSaveAndCreateAnother;\r\n\r\n const hasWebsiteImageOptedInObservable = ko.observable(true);\r\n\r\n this.adEditor = new AdEditorView({\r\n newI18n,\r\n model,\r\n campaignId,\r\n adGroupId,\r\n adGroupType,\r\n campaignType,\r\n campaignSubType,\r\n biddingStrategyType,\r\n isSaveToServer,\r\n isTraditionalChinese,\r\n appLookupDisabled,\r\n developerName,\r\n showInline: true,\r\n campaignDomain,\r\n isDynamicDescriptionEnabled,\r\n isFeedBasedCampaign,\r\n firstTextAdModel,\r\n firstExpandedTextAdModel,\r\n firstResponsiveSearchAdModel,\r\n perfMarker,\r\n isForVNext,\r\n serverContext,\r\n preferenceService,\r\n inlineSuggestionsEnabled,\r\n adsCountMap,\r\n showSaveAndCreateAnother,\r\n isOpenCreatePanel,\r\n hasWebsiteImageOptedInObservable,\r\n });\r\n\r\n this.viewModel = new ViewModel({\r\n scope: this.adEditor.viewModel.scope,\r\n hideFooter: this.adEditor.viewModel.hideFooter,\r\n isXandrVideoAd: this.adEditor.isXandrVideoAd,\r\n isMultiAdFormatDisplayAd: this.adEditor.isMultiAdFormatDisplayAd,\r\n isMultiAdFormatVideoAd: this.adEditor.isMultiAdFormatVideoAd,\r\n isForVNext,\r\n setAdGroupType: this.setAdGroupType.bind(this),\r\n setIsDisplayPlusNativeEditAdEditor: this.setIsDisplayPlusNativeEditAdEditor.bind(this),\r\n permissions,\r\n });\r\n\r\n this.viewModel.hasWebsiteImageOptedIn = hasWebsiteImageOptedInObservable;\r\n\r\n this.adEditor.on('created updated', (ad) => {\r\n this.trigger('save', ad);\r\n if (shouldSendOpportunityLog()) {\r\n logOpportunity({ context: { campaignId: ad.Campaign.Id, adGroupId: ad.AdGroup.Id, adId: ad.Id } });\r\n }\r\n });\r\n\r\n this.adEditor.on('close', () => {\r\n this.trigger('close');\r\n });\r\n\r\n this.setAnalyticsId(this.adEditor._type);\r\n this.adEditor.on('type', (type) => {\r\n this.setAnalyticsId(type);\r\n });\r\n\r\n this.viewModel.errors = this.adEditor.viewModel.errors;\r\n this.setTitle(model);\r\n\r\n if (isForVNext && this.viewModel.showAdGroups) {\r\n if (this.viewModel.showCampaignLevel) {\r\n const adgroupSelectorProxy = new AdgroupSelectorProxy({\r\n campaignId,\r\n onEventTrigger: (key, selectedAdGroup) => {\r\n this.trigger('adgroup selected', selectedAdGroup);\r\n\r\n if (_.get(selectedAdGroup, 'Campaign.CampaignType') !== 'LinkedIn') {\r\n this.viewModel.onAdGroupSelect(selectedAdGroup);\r\n }\r\n },\r\n });\r\n\r\n this.adgroupSelector = adgroupSelectorProxy.getAdgroupSelectorView();\r\n } else {\r\n const campaignAdgroupSelectorProxy = new CampaignAdgroupSelectorProxy({\r\n onCampaignSelect: (selectedCampaign) => {\r\n this.viewModel.onCampaignSelect(selectedCampaign);\r\n },\r\n onAdGroupSelect: (selectedAdGroup) => {\r\n this.trigger('adgroup selected', selectedAdGroup);\r\n\r\n if (_.get(selectedAdGroup, 'Campaign.CampaignType') !== 'LinkedIn') {\r\n this.viewModel.onAdGroupSelect(selectedAdGroup);\r\n }\r\n },\r\n });\r\n\r\n this.adgroupSelector = campaignAdgroupSelectorProxy.getCampaignAdgroupSelectorView();\r\n }\r\n }\r\n }\r\n\r\n setAdGroupType(adGroupType) {\r\n const isDSAMixedModeCampaignEnabled = _.result(config.get('Permissions'), 'IsDSAMixedModeCampaignEnabled', false);\r\n\r\n if (isDSAMixedModeCampaignEnabled) {\r\n const originalAdEditorScope = this.adEditor.viewModel.scope();\r\n\r\n this.adEditor.viewModel.scope(_.extend({}, originalAdEditorScope, {\r\n adGroupType,\r\n }));\r\n }\r\n }\r\n\r\n setIsDisplayPlusNativeEditAdEditor(isDisplayPlusNativeEdit) {\r\n this.adEditor.viewModel.isDisplayPlusNativeEdit(isDisplayPlusNativeEdit);\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click .appEditor-save-container .save': 'save',\r\n 'click .appEditor-save-container .cancel': 'cancel',\r\n 'click .save-create-another': 'saveAndCreateAnother',\r\n };\r\n }\r\n\r\n render() {\r\n this.$el.empty().append(template({\r\n i18n,\r\n i18nGlobal,\r\n isForVNext: this.isForVNext,\r\n showSaveAndCreateAnother: this.showSaveAndCreateAnother,\r\n isDisplayPlusDisplayAd: permissions.dynamic.DisplayPlusCopilotAssetGeneration && isXandrDisplayAdsCampaign(this.campaignSubType),\r\n }));\r\n ko.applyBindings(this.viewModel, this.el);\r\n\r\n if (this.isForVNext && this.viewModel.showAdGroups) {\r\n this.$('.adgroup-selector').empty().append(this.adgroupSelector.render().$el);\r\n }\r\n this.$('.ad-panel').append(this.adEditor.render().el);\r\n\r\n return this;\r\n }\r\n\r\n remove() {\r\n this.adEditor.remove();\r\n super.remove();\r\n }\r\n\r\n save() {\r\n this.adEditor.save();\r\n }\r\n\r\n saveAndCreateAnother() {\r\n this.adEditor.saveAndCreateAnother();\r\n this.setTitle(null); // Creating new ad, title should be set to \"Create\"\r\n }\r\n\r\n cancel() {\r\n this.trigger('close');\r\n this.adEditor.trigger('cancel');\r\n }\r\n\r\n setTitle(model) {\r\n this.viewModel.adEditorTitle(_.isEmpty(model) ? i18n.get('CampaignCreate_AdSectionTitle') : i18nGlobal.get('Ad_EditAd'));\r\n }\r\n\r\n setAnalyticsId(type) {\r\n this.viewModel.saveAnalyticsId(saveIds[type]);\r\n this.viewModel.saveCreateAnalyticsId(saveCreateIds[type]);\r\n }\r\n}\r\n","import ko from 'knockout';\r\n\r\nexport default class ViewModel {\r\n constructor(options = {}) {\r\n this.options = options;\r\n this.isTextareaEmpty = ko.observable(true);\r\n\r\n this.isKeywordPlannerEnabled = ko.observable(false);\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport Backbone from 'backbone';\r\nimport ko from 'knockout';\r\nimport Promise from 'bluebird';\r\nimport withUiBlock from '@bingads-webui-component-legacy/uiblocker/index';\r\nimport edmCampaign from '@bingads-webui-component-legacy/edm-campaign/index';\r\nimport template from '@bingads-webui-campaign-legacy/crud-keywords/template/create-inline-recommendation.pug';\r\nimport CreateView from '@bingads-webui-campaign-legacy/crud-keywords/view/create';\r\nimport KeywordPlannerView from '@bingads-webui-campaign-legacy/crud-adgroup/view/keywordPlanner';\r\nimport ViewModel from '@bingads-webui-campaign-legacy/crud-keywords/viewmodel/create-inline-recommendation';\r\nimport jsdata from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport * as criterionLoader from '@bingads-webui-campaign-legacy/base-targets/util/criterionLoader';\r\nimport { keywordPlannerSupportedLanguages } from '@bingads-webui-campaign-legacy/location-targets/util/constants';\r\n\r\nconst i18n = window.globalLegacyI18n.get('component/i18n/loader!campaignui/campaign-creation-advanced');\r\n\r\nexport default class View extends Backbone.View {\r\n initialize(options = {}) {\r\n this.options = options;\r\n\r\n this.createView = new CreateView({});\r\n this.keywordPlannerView = new KeywordPlannerView({\r\n mode: 'keywordsOnly',\r\n scenario: 'repair keyword creation',\r\n });\r\n this.keywordPlannerView.on({\r\n 'addKeyword': (newKeyword) => {\r\n this.createView.addSuggestion([newKeyword]);\r\n },\r\n });\r\n\r\n this.viewmodel = new ViewModel({\r\n adGroup: this.options.adGroup,\r\n });\r\n\r\n let textarea = this.createView.parser.keywordsTextareaVal;\r\n\r\n this.textAreaSubscription = textarea.subscribe(() => {\r\n this.viewmodel.isTextareaEmpty(this.createView.isEmpty());\r\n });\r\n\r\n this.keywordPlannerView.viewmodel.gridData([]); // Get rid of any suggestions for previous ad group\r\n this.keywordPlannerView.emptySearchTeams();\r\n this.initializeSuggestions();\r\n }\r\n\r\n render() {\r\n this.$el.html(\r\n template({ i18n })\r\n );\r\n\r\n ko.applyBindings(this.viewmodel, this.$('.add-keywords-root')[0]);\r\n\r\n this.createView.render();\r\n this.$('.parser').append(this.createView.el);\r\n this.createView.parser.isAfterFirstInteraction(false);\r\n\r\n this.keywordPlannerView.render();\r\n this.$('.keyword-planner-inline').append(this.keywordPlannerView.el);\r\n\r\n return this;\r\n }\r\n\r\n initializeSuggestions() {\r\n const {\r\n adGroupId,\r\n campaignId,\r\n } = this.options.adGroup;\r\n\r\n const getLandingPageUrl = jsdata.Ad.findAll({\r\n limit: 1,\r\n offset: 0,\r\n query: { $select: 'DisplayUrl,DestinationUrl,FinalUrls' },\r\n }, {\r\n entitySet: edmCampaign.currentAccount.Campaigns.$withKey(Number(campaignId)).AdGroups.$withKey(Number(adGroupId)).Ads,\r\n cacheResponse: false,\r\n });\r\n const campaignParams = {\r\n entitySet: edmCampaign.currentAccount.Campaigns,\r\n bypassCache: true,\r\n queryParameters: {\r\n query: {\r\n $select: 'Languages',\r\n },\r\n },\r\n };\r\n const adGroupParams = {\r\n entitySet: edmCampaign.currentAccount.Campaigns.$withKey(Number(campaignId)).AdGroups,\r\n bypassCache: true,\r\n queryParameters: {\r\n query: {\r\n $select: 'Language',\r\n },\r\n },\r\n };\r\n\r\n Promise.all([\r\n criterionLoader.load(campaignId, adGroupId, ['RadiusCriterion', 'LocationCriterion']),\r\n criterionLoader.load(campaignId, null, ['RadiusCriterion', 'LocationCriterion']),\r\n getLandingPageUrl,\r\n jsdata.Campaign.find(Number(campaignId), campaignParams),\r\n jsdata.AdGroup.find(Number(adGroupId), adGroupParams),\r\n ])\r\n .spread((campaignLocationRes, adGroupLocationRes, landingPageUrlRes, campaignLanguageRes, adGroupLanguageRes) => {\r\n const languages = (adGroupLanguageRes.Language && [keywordPlannerSupportedLanguages[adGroupLanguageRes.Language]]) ||\r\n (!_.isEmpty(campaignLanguageRes.Languages) && campaignLanguageRes.Languages) ||\r\n [30];\r\n\r\n this.viewmodel.isKeywordPlannerEnabled(KeywordPlannerView.isLanguageSupported(languages));\r\n this.keywordPlannerView.setLanguages(languages); // default is English\r\n\r\n let locationTargets = _.filter(campaignLocationRes, (item) => { // Ad group targeting takes priority\r\n return item.Criterion && item['@odata.type'] === '#Model.BiddableAdGroupCriterion';\r\n });\r\n\r\n if (locationTargets.length === 0) {\r\n locationTargets = _.filter(adGroupLocationRes, (item) => { // If there's no ad group targeting, try campaign\r\n return item.Criterion && item['@odata.type'] === '#Model.BiddableCampaignCriterion';\r\n });\r\n }\r\n this.keywordPlannerView.setLocationTargeting(_.pluck(locationTargets, 'Criterion'));\r\n\r\n if (_.isArray(landingPageUrlRes) && _.isObject(_.first(landingPageUrlRes))) {\r\n let landingPageUrl = landingPageUrlRes[0].FinalUrls[0] || landingPageUrlRes[0].DestinationUrl;\r\n\r\n if (_.isString(landingPageUrl) && !this.keywordPlannerView.viewmodel.allLocationsUnsupported() && this.keywordPlannerView.viewmodel.gridData().length === 0) {\r\n this.keywordPlannerView.onSearch({ url: landingPageUrl });\r\n }\r\n }\r\n })\r\n .finally(withUiBlock(this.$('.keyword-planner-inline')));\r\n }\r\n\r\n getKeywords() {\r\n if (!this.createView.parser.validate()) {\r\n return false;\r\n }\r\n\r\n return this.createView.getChangedKeywords({\r\n Id: this.options.adGroup.adGroupId,\r\n });\r\n }\r\n\r\n getSuggestionsAdded() {\r\n return this.createView.keywordSuggestionsAdded;\r\n }\r\n\r\n cancel() {\r\n this.textAreaSubscription.dispose();\r\n this.keywordPlannerView.off();\r\n\r\n this.$('.add-keywords-root').remove();\r\n }\r\n}\r\n","/* eslint-disable */\r\nimport * as _AdapterView from '@bingads-webui-campaign-legacy/griddownload/view/adapter';\r\nexport default _AdapterView.DownloadViewV1;\r\n\r\n","import _ from 'underscore';\r\nimport jsdata from '@bingads-webui-campaign-legacy/hotel-center-js-data/index';\r\nimport edm from '@bingads-webui-campaign-legacy/hotel-center-edm/index';\r\n\r\nconst getQueryOptions = (params) => {\r\n const queryOptions = {};\r\n\r\n if (!params) {\r\n return queryOptions;\r\n }\r\n\r\n if (params.filterText) {\r\n queryOptions.where = _.defaults(queryOptions.where || {}, {\r\n Name: {\r\n $contains: params.filterText,\r\n },\r\n });\r\n }\r\n\r\n if (params.take) {\r\n queryOptions.limit = params.take;\r\n queryOptions.offset = params.skip || 0;\r\n }\r\n\r\n return queryOptions;\r\n};\r\n\r\nexport class HotelCenterEntitySelectorService {\r\n get useInjectedAdgroupFetch() {\r\n return true;\r\n }\r\n getCampaigns(options) {\r\n const jsDataOptions = {\r\n cacheResponse: false,\r\n };\r\n\r\n const queryOptions = getQueryOptions(options);\r\n\r\n jsdata.SubAccount.findAll(queryOptions, jsDataOptions)\r\n .then((items) => {\r\n const results = {\r\n data: _.map(items, (subAccount) => ({\r\n Type: 'Campaign',\r\n Id: subAccount.Id,\r\n Name: subAccount.Name,\r\n // Status as defined in the map in '@bingads-webui-static-legacy/schema/campaign/entityStatus'\r\n Status: subAccount.Status === 'Active' ? 121 : 123,\r\n })),\r\n total: items.totalCount,\r\n HasPaged: true,\r\n };\r\n\r\n options.success(results);\r\n }).catch((error) => options.fail(error));\r\n }\r\n getAdgroups(options) {\r\n const jsDataOptions = {\r\n cacheResponse: false,\r\n };\r\n\r\n const queryOptions = getQueryOptions(options);\r\n\r\n if (options.data && options.data.campaignId) {\r\n jsDataOptions.entitySet = edm.currentAccount.SubAccounts.$withKey(options.data.campaignId).HotelGroups;\r\n }\r\n jsdata.HotelGroup.findAll(queryOptions, jsDataOptions)\r\n .then((items) => {\r\n const results = {\r\n data: _.map(items, (item) => ({\r\n Type: 'AdGroup',\r\n Id: item.Id,\r\n Name: item.Name,\r\n // Status as defined in the map in '@bingads-webui-static-legacy/schema/adgroup/entityStatus'\r\n Status: item.Status === 'Active' ? 141 : 143,\r\n Campaign: {\r\n Id: item.SubAccountId,\r\n Name: item.SubAccountName,\r\n },\r\n })),\r\n total: items.totalCount,\r\n };\r\n\r\n options.success(results);\r\n }).catch((error) => options.fail(error));\r\n }\r\n}\r\n","import $ from 'jquery';\r\nimport _ from 'underscore';\r\nimport DataStore from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport edmCampaign from '@bingads-webui-component-legacy/edm-campaign/index';\r\nimport { bingadsGridColumn } from '@bingads-webui-component-legacy/bingads-grid/shared/column';\r\nimport { getSharedColumns, getDeliveryColumn } from '@bingads-webui-campaign-legacy/bingadsgrid/vnext/shared/columns';\r\nimport state from '@bingads-webui-component-legacy/state/index';\r\nimport config from '@bingads-webui-component-legacy/config/index';\r\nimport { helpers, constants } from '@bingads-webui/projection-grid-toolbar';\r\nimport pageContext from '@bingads-webui-static-legacy/page-context';\r\nimport sortableHeaderTemplate from '@bingads-webui-campaign-legacy/common-grid-config/column/sortableHeaderTemplate.pug';\r\nimport { getGridName } from '@bingads-webui-campaign/inline-download-grids-metadata';\r\nimport logger from '@bingads-webui-static-legacy/instrumentation/index';\r\nimport * as putil from '@bingads-webui/primitive-utilities';\r\n\r\nconst i18n = window.globalLegacyI18n.get('component/i18n/loader!campaignui/feature/hotel-center');\r\nconst s$i18n = window.globalLegacyI18n.get('$/schema-i18n!hotel-center');\r\nconst AdExtensionAssociationSchema = window.globalLegacySchema.get('AdExtensionAssociation');\r\n\r\nexport default class GridConfig {\r\n constructor({\r\n adextensionType,\r\n columns,\r\n excludedColumns = [],\r\n deleteAssociation,\r\n editExtension,\r\n addExtension,\r\n gridContainer,\r\n toolbarContainer,\r\n associationType,\r\n typeString,\r\n selection = true,\r\n heroButtonText = i18n.get('AdExtensionsSummary_Create_AdExtension'),\r\n dataSourceGenerator,\r\n adExtensionTabPerfMarker,\r\n isForVNext = false,\r\n customHeaderOffset,\r\n }) {\r\n const headerRefreshCache = 'x-ms-refreshcampaigncache';\r\n\r\n this.name = getGridName('AdExtensionAssociation', {\r\n AdExtensionType: adextensionType,\r\n AssociationType: associationType,\r\n });\r\n this.legacyGridName = this.name;\r\n if (!isForVNext) {\r\n this.el = gridContainer;\r\n }\r\n this.tableClasses = ['table', 'table-bordered'];\r\n this.scrolling = {\r\n virtualized: true,\r\n viewport: $('.callout-extension-table-page-container'),\r\n header: {\r\n type: 'sticky',\r\n offset: customHeaderOffset || (() => $('.navbar-fixed-top').height()),\r\n },\r\n };\r\n\r\n this.sortableHeader = {\r\n template: sortableHeaderTemplate,\r\n };\r\n\r\n this.hasCampaignNameColumn = associationType !== 'Account';\r\n this.hasAdGroupNameColumn = associationType === 'HotelGroup';\r\n\r\n const deliveryColumn = getDeliveryColumn({ isForVNext, i18n });\r\n const sharedColumns = [];\r\n\r\n const entityColumns = [\r\n // eslint-disable-next-line no-extra-parens\r\n ...(this.hasCampaignNameColumn ? [bingadsGridColumn({\r\n name: 'SubAccountName',\r\n property: (item) => {\r\n return _.result(item.VerticalSubAccount, 'Name', '');\r\n },\r\n type: 'string',\r\n sortable: 'VerticalSubAccount/Name',\r\n title: s$i18n.type('SubAccount'),\r\n bodyClasses: ['col-SubAccountName'],\r\n })] : []),\r\n\r\n // eslint-disable-next-line no-extra-parens\r\n ...(this.hasAdGroupNameColumn ? [bingadsGridColumn({\r\n name: 'HotelGroupName',\r\n property: (item) => {\r\n return _.result(item.VerticalHotelGroup, 'Name', '');\r\n },\r\n type: 'string',\r\n sortable: 'VerticalHotelGroup/Name',\r\n title: s$i18n.type('HotelGroup'),\r\n bodyClasses: ['col-HotelGroupName'],\r\n })] : []),\r\n ];\r\n\r\n const idColumn = [bingadsGridColumn({\r\n name: 'AdExtensionId',\r\n property: {\r\n get(item) {\r\n return putil.get(item, 'AdExtension.Id');\r\n },\r\n key: 'AdExtension',\r\n },\r\n sortable: 'AdExtension/Id',\r\n title: i18n.get('ColumnName_AdExtensionId'),\r\n })];\r\n\r\n this.columns = columns.concat(getSharedColumns(sharedColumns));\r\n this.columns = this.columns.concat([deliveryColumn]);\r\n this.columns = this.columns.concat(entityColumns);\r\n this.columns = this.columns.concat(idColumn);\r\n\r\n if (!_.isEmpty(excludedColumns)) {\r\n this.columns = _.reject(this.columns, (col) => _.contains(excludedColumns, col.name));\r\n }\r\n\r\n this.plugins = {\r\n a11y: { i18n },\r\n performanceLog: {\r\n appConfig: config,\r\n logger,\r\n },\r\n perfMarker: {\r\n appConfig: config,\r\n marker: adExtensionTabPerfMarker,\r\n },\r\n filter: {\r\n },\r\n toolbar: helpers.singleToolbar({\r\n container: toolbarContainer,\r\n items: ((defaultItems) => {\r\n if (adextensionType === 'AutomatedAdExtension') {\r\n return _.filter(defaultItems, (item) =>\r\n _.contains(['hero-button', 'button-download', 'dropdown-segment', 'dropdown-column-chooser', 'filter-menu'], item.id)\r\n );\r\n }\r\n return defaultItems;\r\n })([\r\n {\r\n id: 'hero-button',\r\n type: 'button',\r\n text: heroButtonText,\r\n classes: ['btn', 'btn-primary'],\r\n onClick: addExtension,\r\n disabled: pageContext.Permissions.IsReadOnlyUser || (config.get('CurrentAccountInActive') === true),\r\n }, {\r\n type: 'dropdown',\r\n id: 'dropdown-extension-edit',\r\n button: {\r\n text: i18n.get('AdExtensionsSummary_EditButton'),\r\n classes: ['btn', 'btn-secondary'],\r\n attributes: { tabindex: '0' },\r\n },\r\n menu: {\r\n items: [\r\n {\r\n iconLeft: 'icon-status-delete',\r\n id: 'delete-association',\r\n text: i18n.get('AdExtensionsSummary_DeleteButton'),\r\n onClick: deleteAssociation,\r\n }, {\r\n type: 'dropdown-divider',\r\n }, {\r\n id: 'edit-an-extension',\r\n text: i18n.get('AdExtensionsSummary_ExtensionEdit'),\r\n onClick: editExtension,\r\n },\r\n ],\r\n },\r\n },\r\n ]),\r\n }),\r\n\r\n dateFilter: {\r\n state,\r\n isOdataActionSource: true,\r\n edm: edmCampaign,\r\n addDateChangeListener: (handler) => {\r\n if (window.App.views.Summary) {\r\n window.App.views.Summary.bindDateFilterChangeHandler(handler, true);\r\n }\r\n },\r\n comparisonColumns: [\r\n 'PeriodPerformanceMetrics',\r\n 'PerformanceMetricsChange',\r\n 'PerformanceMetricsChangePercentage',\r\n ],\r\n },\r\n\r\n pagination: {\r\n pageSize: 50,\r\n availablePageSizes: [20, 50, 100, 200],\r\n enableRandomPage: false,\r\n pageSizeText: i18n.getString('Grid_ShowRows'),\r\n },\r\n placeholder: {\r\n // Message for no data at all.\r\n container: '.noresult-container',\r\n text: i18n.getString('HotelCenter_Intelligence_AdExtensions_Grid_NoActiveAdExtensions').replace('{0}', typeString),\r\n },\r\n };\r\n\r\n this.rows = {\r\n headRows: [\r\n helpers.toolbarRow(constants.DEFAULT_TOOLBAR_NAME),\r\n 'column-header-rows',\r\n ],\r\n };\r\n\r\n const entitySet = edmCampaign.currentAccount;\r\n\r\n this.dataSource = _.isFunction(dataSourceGenerator) ? dataSourceGenerator(entitySet) : {\r\n type: 'jsdata',\r\n entity: DataStore[AdExtensionAssociationSchema.name],\r\n options: {\r\n entitySet: entitySet.AdExtensionAssociations['Default.GridData'].$call({\r\n gridDataParameters: {},\r\n associationType,\r\n adExtensionTypes: [adextensionType],\r\n }),\r\n cacheResponse: false,\r\n headers: {\r\n [headerRefreshCache]: true,\r\n },\r\n },\r\n query: {\r\n $select: 'AdExtension',\r\n $expand: 'AdExtension,VerticalSubAccount,VerticalHotelGroup',\r\n $filter: 'AdExtension/Status eq Enum.AdExtensionStatus\\'Active\\'',\r\n },\r\n schema: AdExtensionAssociationSchema,\r\n };\r\n\r\n if (selection) {\r\n this.selection = {\r\n selectable: (item) => {\r\n return item && item.isAggregateRow !== true;\r\n },\r\n };\r\n }\r\n }\r\n}\r\n","import _ from 'underscore';\r\n\r\nexport default class SubAccountAssociationsRequestFactory {\r\n setEntityIds(options, scope) {\r\n options.entitySet = options.entitySet.Campaigns.$withKey(scope.campaignId);\r\n }\r\n\r\n generateDestroyRequest(ids, scope) {\r\n return [{\r\n 'adExtensionAssociations': this.getBatchRequest(ids, scope),\r\n }];\r\n }\r\n\r\n generateUpdateRequest(ids, scopes) {\r\n return [{\r\n 'adExtensionAssociations': _.chain(scopes)\r\n .map((scope) => this.getBatchRequest(ids, scope))\r\n .flatten(true)\r\n .value(),\r\n }];\r\n }\r\n\r\n getBatchRequest(idList, scope) {\r\n return _.map(idList, (id) => ({\r\n Type: 'SubAccount',\r\n EntityId: scope.campaignId,\r\n AdExtensionId: id,\r\n }));\r\n }\r\n}\r\n","import _ from 'underscore';\r\n\r\nexport default class HotelGroupAssociationsRequestFactory {\r\n setEntityIds(options, scope) {\r\n options.entitySet = options.entitySet.Campaigns.$withKey(scope.campaignId);\r\n options.entitySet = options.entitySet.AdGroups.$withKey(scope.adGroupId);\r\n }\r\n\r\n generateDestroyRequest(ids, scope) {\r\n return [{\r\n 'adExtensionAssociations': this.getBatchRequest(ids, scope),\r\n }];\r\n }\r\n\r\n generateUpdateRequest(ids, scopes) {\r\n return [{\r\n 'adExtensionAssociations': _.chain(scopes)\r\n .map((scope) => this.getBatchRequest(ids, scope))\r\n .flatten(true)\r\n .value(),\r\n }];\r\n }\r\n\r\n getBatchRequest(idList, scope) {\r\n return _.map(idList, (id) => ({\r\n Type: 'HotelGroup',\r\n EntityId: scope.adGroupId,\r\n AdExtensionId: id,\r\n }));\r\n }\r\n}\r\n","import AssociationsRepository from '@bingads-webui-campaign-legacy/adextension-shared/service/repos/associations';\r\nimport SubAccountAssociationsRequestFactory from '@bingads-webui-campaign-legacy/hotel-center-ad-extensions/shared/service/subAccountAssociationsRequestFactory';\r\nimport HotelGroupAssociationsRequestFactory from '@bingads-webui-campaign-legacy/hotel-center-ad-extensions/shared/service/hotelGroupAssociationsRequestFactory';\r\n\r\nexport class HotelAssociationsRepository extends AssociationsRepository {\r\n constructor(options) {\r\n super(options);\r\n this._schema = options.schema;\r\n this.requestFactory = new SubAccountAssociationsRequestFactory();\r\n // overriding default Hotel Center batch URL with MT batch URL.\r\n // 'odata.mt_batch_url' is the name of the key in the component/config/index\r\n // set in AdsAppUI\\private\\UI\\Assets\\campaignui\\feature\\hotel-center\\js\\bootstrap\\index.js\r\n this.batchURL = 'odata.mt_batch_url';\r\n }\r\n\r\n createRequestFactory(entityType) {\r\n if (entityType === 'adgroup') {\r\n this.requestFactory = new HotelGroupAssociationsRequestFactory();\r\n } else if (entityType === 'campaign') {\r\n this.requestFactory = new SubAccountAssociationsRequestFactory();\r\n }\r\n }\r\n}\r\n","/* eslint no-param-reassign: 0 */\r\n\r\nimport _ from 'underscore';\r\nimport ExtensionsRepository from '@bingads-webui-campaign-legacy/adextension-shared/service/repos/extensions';\r\nimport { HotelAssociationsRepository } from './hotel-center-associations-repository';\r\n\r\nconst baseSchema = window.globalLegacySchema.get('AdExtension');\r\n\r\nconst standardProperties = [baseSchema.key, 'Scheduling'];\r\nconst commonProperties = _.difference(_.keys(baseSchema.properties), standardProperties);\r\n\r\nexport class HotelCenterAdExtensionsRepository {\r\n constructor(options) {\r\n let ownedProperties = _.difference(_.keys(options.schema.properties), commonProperties);\r\n\r\n options = _.extend({\r\n afterChangeComitted: _.noop,\r\n extensionDataFormatter: _.partial(_.map, _, _.partial(_.pick, _, ownedProperties)),\r\n associationsDataFormatter: _.partial(_.pluck, _, 'AdExtension'),\r\n }, options);\r\n\r\n this.extension = new ExtensionsRepository(options);\r\n this.association = new HotelAssociationsRepository(options);\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport * as putil from '@bingads-webui/primitive-utilities';\r\n\r\nexport function attrsProcessor(attrs, associationType, accountId) {\r\n if (_.isArray(attrs)) {\r\n _.each(attrs, (item) => {\r\n const associationAdgroupId = putil.get(item, 'VerticalHotelGroup.Id');\r\n const associationCampaignId = putil.get(item, 'VerticalSubAccount.Id');\r\n const associationAccountId = accountId;\r\n const adextensionId = putil.get(item, 'AdExtension.Id');\r\n const adextensionStatus = putil.get(item, 'AdExtension.Status');\r\n // associationAdgroupId will be string for hotelcenter.\r\n const Id = (associationAdgroupId === '0' ? 0 : associationAdgroupId) || associationCampaignId || associationAccountId;\r\n\r\n item.Id = `${Id}_${associationType}_${adextensionId}`;\r\n //update delivery status when ad extension deleted, it's a work around in UI side, MT should fix it, bug id 574059\r\n if (adextensionStatus === 'Deleted') {\r\n item.AdExtension.Delivery = 'AdExtensionAssociationDeleted';\r\n }\r\n });\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport _ from 'underscore';\r\nimport $ from 'jquery';\r\nimport * as putil from '@bingads-webui/primitive-utilities';\r\nimport { toolbarPlugin, constants } from '@bingads-webui/projection-grid-toolbar';\r\nimport { dateFilterPlugin as newDateFilterPlugin } from '@bingads-webui-campaign/projection-grid-date-filter';\r\nimport { paginationPlugin as newPaginationPlugin } from '@bingads-webui/projection-grid-pagination';\r\nimport { uiBlockerPlugin as newUiBlockerPlugin } from '@bingads-webui/projection-grid-uiblocker';\r\nimport { placeholderPlugin } from '@bingads-webui/projection-grid-placeholder';\r\nimport { a11yPlugin } from '@bingads-webui/projection-grid-a11y';\r\nimport { assistedSelectionPlugin as newAssistedSelectionPlugin } from '@bingads-webui/projection-grid-assisted-selection';\r\nimport { performanceLogPlugin, perfMarkerPlugin } from '@bingads-webui-campaign/pgrid-performance-log';\r\nimport { pgridFactory } from '@bingads-webui-campaign/pgrid-factory';\r\nimport { appendLearnMoreLink } from '@bingads-webui-component-legacy/help/index';\r\nimport fetchPreferenceConfig from '@bingads-webui-campaign-legacy/bingadsgrid/service/fetch-preference-config';\r\nimport template from '@bingads-webui-campaign-legacy/hotel-center-ad-extensions/shared/template/hotel-extension-page.pug';\r\nimport NewGridConfig from '@bingads-webui-campaign-legacy/hotel-center-ad-extensions/shared/viewmodel/new-grid-config';\r\nimport { HotelAssociationsRepository } from '@bingads-webui-campaign-legacy/hotel-center-ad-extensions/shared/service/hotel-center-associations-repository';\r\nimport { HotelCenterAdExtensionsRepository } from '@bingads-webui-campaign-legacy/hotel-center-ad-extensions/shared/service/repository';\r\n\r\nimport ExtensionsRepository from '@bingads-webui-campaign-legacy/adextension-shared/service/repos/extensions';\r\nimport state from '@bingads-webui-component-legacy/state/index';\r\nimport Promise from 'bluebird';\r\nimport { AdExtensionDeliveryStatusPopupFactory } from '@bingads-webui-campaign-legacy/adextension-shared/view/delivery/adextension-delivery-status-popup-factory';\r\nimport { attrsProcessor as defaultAttrsProcessor }\r\n from '@bingads-webui-campaign-legacy/hotel-center-ad-extensions/shared/view/Hotel-center-base-ad-extension-helper';\r\nimport popup from '@bingads-webui-component-legacy/dialog/popup';\r\n// eslint-disable-next-line\r\nimport _bingads_webui_component_legacy_timezonemapper_index from '@bingads-webui-component-legacy/timezonemapper/index';\r\n// eslint-disable-next-line\r\nconst { getTimeZoneForDateRangeText } = _bingads_webui_component_legacy_timezonemapper_index;\r\nimport preferencesService from '@bingads-webui-component-legacy/preference/service/index';\r\nimport eventDispatcher from '@bingads-webui-component-legacy/event-dispatcher/index';\r\nimport cacheManager from '@bingads-webui-campaign-legacy/cache-manager/index';\r\n\r\nconst i18n = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/feature/hotel-center');\r\n\r\nconst ENTITY_MAP = { AdGroup: 'VerticalHotelGroup', Campaign: 'VerticalSubAccount' };\r\n\r\n\r\nconst headerRefreshCache = 'x-ms-refreshcampaigncache';\r\nlet deliveryAlertId;\r\n\r\n/* @this: ViewClassName */\r\nfunction updateFlagRefreshCache(operator) {\r\n const { options } = this.grid.gridView.get('dataSource');\r\n\r\n if (operator === 'remove' && _.has(options.headers, headerRefreshCache)) {\r\n delete options.headers[headerRefreshCache];\r\n }\r\n if (operator === 'add' && !_.has(options.headers, headerRefreshCache)) {\r\n options.headers[headerRefreshCache] = true;\r\n }\r\n}\r\n\r\n/* @this: ViewClassName */\r\nfunction expandToolBar(view) {\r\n this.$('.editor__container').html(view.$el);\r\n\r\n // show editor\r\n this.$('.editor__container').show();\r\n // hide the toolbar with empty view, which will have blank height\r\n this.grid.toolbar.gridToolbarGroup.hideAllToolbars();\r\n // on cancel event\r\n view.on('cancel', () => {\r\n updateFlagRefreshCache.call(this, 'add');\r\n this.grid.toolbar.gridToolbarGroup.showAllToolbars();\r\n this.$('.editor__container').hide();\r\n view.remove();\r\n this.grid.gridView.refresh(true);\r\n });\r\n\r\n // on save event\r\n view.on('save', () => {\r\n view.trigger('cancel');\r\n });\r\n}\r\n\r\nfunction checkDeliveryStatus(deliveryStatus) {\r\n let deletedStatuses = ['AssociationDeleted', 'AdExtensionAssociationDeleted'];\r\n\r\n if (_.contains(deletedStatuses, deliveryStatus)) {\r\n deliveryAlertId = window.App.views.alertCenter.showError(i18n.getString('AdExtension_EditDeletedAssociation_Error'));\r\n return false;\r\n }\r\n return true;\r\n}\r\n/* @this: ViewInstantiateEditor */\r\nfunction openAssociationsEditor({\r\n entityType,\r\n currentCampaignId,\r\n currentAdgroupId,\r\n adExtensionId,\r\n editFromGrid,\r\n campaignName,\r\n adgroupName,\r\n}) {\r\n const options = {\r\n entityType,\r\n associationType: this.associationType,\r\n // when isStringFormatId is true, string format is used for Default.Disassociate and Default.Associate calls\r\n isStringFormatId: true,\r\n campaignId: currentCampaignId,\r\n adgroupId: currentAdgroupId,\r\n adExtensionId,\r\n editFromGrid,\r\n campaignName,\r\n adgroupName,\r\n usePanel: false,\r\n disableScheduling: true,\r\n repositoryFactory: ({ schema, updateContext }) => new HotelCenterAdExtensionsRepository({\r\n schema,\r\n afterChangeComitted() {\r\n if (_.isFunction(updateContext)) {\r\n updateContext(['AccountAdExtensionsGrid', 'CampaignAdExtensionsGrid', 'AdGroupAdExtensionsGrid']);\r\n }\r\n },\r\n }),\r\n };\r\n\r\n if (this.isUINext) {\r\n this.createAssociationEditorForUiNext(options);\r\n return null;\r\n }\r\n\r\n let view = this.instantiateEditor(options);\r\n\r\n expandToolBar.call(this, view.render());\r\n return view;\r\n}\r\n/* @this: ViewClassName */\r\nfunction editAssociations() {\r\n const selectedItems = this.grid.gridView.selectedItems();\r\n\r\n if (_.isEmpty(selectedItems)) {\r\n popup.alert(i18n.getString('Grid_RowSelectionRequired'));\r\n return false;\r\n }\r\n // check choosed column numbers\r\n if (selectedItems.length > 1) {\r\n popup.alert(i18n.getString('AdExtensions_Edit_SelectOneRow'));\r\n return false;\r\n }\r\n\r\n const selectedItem = selectedItems[0];\r\n\r\n if (!checkDeliveryStatus(selectedItem.AdExtension.Delivery)) {\r\n return false;\r\n }\r\n const selectedCampaignId = putil.get(selectedItem, 'VerticalSubAccount.Id');\r\n const selectedAdgroupId = putil.get(selectedItem, 'VerticalHotelGroup.Id');\r\n const campaignName = putil.get(selectedItem, 'VerticalSubAccount.Name');\r\n const adgroupName = putil.get(selectedItem, 'VerticalHotelGroup.Name');\r\n\r\n this.editor = openAssociationsEditor.call(this, {\r\n entityType: this.associationType.toLowerCase(),\r\n currentCampaignId: selectedCampaignId,\r\n currentAdgroupId: selectedAdgroupId,\r\n adExtensionId: selectedItem.AdExtension.Id,\r\n editFromGrid: true,\r\n campaignName,\r\n adgroupName,\r\n });\r\n\r\n return true;\r\n}\r\n/* @this: ViewClassName */\r\nfunction getBulkDeleteItems() {\r\n const selectedItems = this.grid.gridView.selectedItems();\r\n\r\n if (_.isEmpty(selectedItems)) {\r\n popup.alert(i18n.getString('Grid_RowSelectionRequired'));\r\n return [];\r\n }\r\n const deleteMessage = i18n.getString('AdExtensionsSummary_DeleteConfirmation');\r\n\r\n if (!popup.confirm(deleteMessage)) {\r\n return false;\r\n }\r\n return _.map(selectedItems, (selectedItem) => {\r\n const selectedCampaignId = putil.get(selectedItem, 'VerticalSubAccount.Id');\r\n const selectedAdgroupId = putil.get(selectedItem, 'VerticalHotelGroup.Id');\r\n const selectedId = putil.get(selectedItem, 'AdExtension.Id');\r\n\r\n return {\r\n where: {\r\n campaignId: selectedCampaignId,\r\n adGroupId: selectedAdgroupId,\r\n id: {\r\n in: [selectedId],\r\n },\r\n },\r\n };\r\n });\r\n}\r\n/* @this: ViewClassName */\r\nfunction deleteAssociations() {\r\n const deletedItems = getBulkDeleteItems.call(this);\r\n\r\n if (_.isEmpty(deletedItems)) {\r\n return false;\r\n }\r\n\r\n // use odata directly\r\n const associations = new HotelAssociationsRepository({\r\n schema: this.schema,\r\n associationsDataFormatter: this.associationsDataFormatter,\r\n afterChangeComitted: this.afterChangeComitted,\r\n });\r\n\r\n const mappingAssociationType = this.associationType.toLowerCase() === 'subaccount' ? 'campaign' : 'adgroup';\r\n\r\n associations.createRequestFactory(mappingAssociationType);\r\n\r\n associations.destroyAllByOdata(deletedItems).then(() => {\r\n updateFlagRefreshCache.call(this, 'add');\r\n this.grid.gridView.refresh(true);\r\n });\r\n\r\n return true;\r\n\r\n}\r\n\r\nconst getDefaultPlugins = ({\r\n isUINext,\r\n pluginFactories,\r\n gridOptions,\r\n}) => _.compact([\r\n {\r\n plugin: pluginFactories.a11yPlugin,\r\n config: gridOptions.plugins.a11y,\r\n },\r\n {\r\n plugin: pluginFactories.performanceLogPlugin,\r\n config: gridOptions.plugins.performanceLog,\r\n },\r\n {\r\n plugin: pluginFactories.perfMarkerPlugin,\r\n config: gridOptions.plugins.perfMarker,\r\n },\r\n {\r\n plugin: pluginFactories.toolbarPlugin,\r\n config: gridOptions.plugins.toolbar,\r\n },\r\n !isUINext && {\r\n plugin: pluginFactories.newDateFilterPlugin,\r\n config: gridOptions.plugins.dateFilter,\r\n },\r\n {\r\n plugin: pluginFactories.newPaginationPlugin,\r\n config: gridOptions.plugins.pagination,\r\n },\r\n {\r\n plugin: pluginFactories.placeholderPlugin,\r\n config: gridOptions.plugins.placeholder,\r\n },\r\n {\r\n plugin: pluginFactories.newUiBlockerPlugin,\r\n config: {\r\n el: isUINext ? $('.callout-extension-table-page-container').get(0) : null,\r\n },\r\n },\r\n {\r\n plugin: pluginFactories.newAssistedSelectionPlugin,\r\n },\r\n]);\r\n\r\nexport default class HotelCenterBaseAdExtensionAssociationsView extends Backbone.View {\r\n initialize({\r\n instantiateEditor,\r\n adextensionType,\r\n columns,\r\n schema,\r\n excludedColumns = [],\r\n associationType,\r\n typeString,\r\n customizedFilterList,\r\n dataPostProcess,\r\n selection,\r\n heroButtonText,\r\n filterListProcessor,\r\n overThresholdErrorMessage,\r\n perfMarker,\r\n isUINext = false,\r\n createAssociationEditorForUiNext = _.noop,\r\n extendPlugins = () => [],\r\n preferenceConfig,\r\n viewport,\r\n customHeaderOffset,\r\n }) {\r\n this.campaignId = state.get('campaign_id');\r\n this.adgroupId = state.get('adgroup_id');\r\n this.instantiateEditor = instantiateEditor;\r\n this.adextensionType = adextensionType || schema.name;\r\n this.columns = columns;\r\n this.schema = schema;\r\n this.excludedColumns = excludedColumns;\r\n this.associationType = associationType;\r\n this.typeString = typeString;\r\n this.customizedFilterList = customizedFilterList;\r\n this.dataPostProcess = dataPostProcess;\r\n this.extensionsRepo = new ExtensionsRepository({\r\n schema,\r\n });\r\n this.selection = selection;\r\n this.heroButtonText = heroButtonText;\r\n this.filterListProcessor = filterListProcessor;\r\n this.overThresholdErrorMessage = overThresholdErrorMessage;\r\n this.deleteAssociation = _.bind(deleteAssociations, this);\r\n this.editExtension = _.bind(editAssociations, this);\r\n this.disableScheduling = true;\r\n this.perfMarker = perfMarker;\r\n this.isUINext = isUINext;\r\n this.createAssociationEditorForUiNext = createAssociationEditorForUiNext;\r\n this.extendPlugins = extendPlugins;\r\n this.viewport = viewport;\r\n this.customHeaderOffset = customHeaderOffset;\r\n this.preferenceConfig = preferenceConfig;\r\n this.isInitialGrid = true;\r\n if (this.isUINext) {\r\n this.prepareGrid({});\r\n }\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click .grid-table .glyph-container .status_icon': 'showAdExtensionRejectReasons',\r\n };\r\n }\r\n\r\n showAdExtensionRejectReasons(event) {\r\n this.deliveryStatusPopupFactory.showRejectionPopup(event);\r\n event.stopPropagation();\r\n $(document).one('click', this.deliveryStatusPopupFactory.closeRejectionPopup);\r\n }\r\n\r\n createAssociations() {\r\n this.editor = openAssociationsEditor.call(this, {\r\n entityType: this.associationType.toLowerCase(),\r\n currentCampaignId: this.campaignId,\r\n currentAdgroupId: this.adgroupId,\r\n });\r\n }\r\n\r\n get template() {\r\n return template;\r\n }\r\n\r\n render({\r\n dataSourceGenerator,\r\n attrsProcessor = defaultAttrsProcessor,\r\n shouldNotShowGrid = false,\r\n } = {}) {\r\n this.$el.html(this.template({\r\n appendLearnMoreLink,\r\n associationType: this.associationType.toLowerCase(),\r\n accountTimeZoneText: getTimeZoneForDateRangeText(),\r\n shouldNotShowGrid,\r\n isUINext: this.isUINext,\r\n }));\r\n this.$('.editor__container').hide();\r\n\r\n if (shouldNotShowGrid) {\r\n return this;\r\n }\r\n\r\n if (this.isUINext) {\r\n this.$('.grid-table').empty().append(this.grid.gridView.render().$el);\r\n } else {\r\n this.prepareGrid({\r\n dataSourceGenerator,\r\n attrsProcessor,\r\n });\r\n }\r\n\r\n return this;\r\n }\r\n\r\n prepareGrid({\r\n dataSourceGenerator,\r\n attrsProcessor = defaultAttrsProcessor,\r\n }) {\r\n const configParams = {\r\n toolbarContainer: this.$('.grid-toolbar-container'),\r\n gridContainer: this.$('.grid-table'),\r\n adextensionType: this.adextensionType,\r\n columns: this.columns,\r\n excludedColumns: this.excludedColumns,\r\n addExtension: _.bind(this.createAssociations, this),\r\n deleteAssociation: this.deleteAssociation,\r\n editExtension: this.editExtension,\r\n associationType: this.associationType,\r\n typeString: this.typeString,\r\n customizedFilterList: this.customizedFilterList,\r\n selection: this.selection,\r\n heroButtonText: this.heroButtonText,\r\n dataSourceGenerator,\r\n filterListProcessor: this.filterListProcessor,\r\n disableScheduling: this.disableScheduling,\r\n adExtensionTabPerfMarker: this.perfMarker,\r\n isForVNext: this.isUINext,\r\n customHeaderOffset: this.customHeaderOffset,\r\n };\r\n\r\n const config = new NewGridConfig(configParams);\r\n\r\n this.filterConfig = config.filterConfig;\r\n\r\n config.dataSource.options.afterFindAll = (resources, attrs) => {\r\n if (attrs && _.isArray(attrs.errors)) {\r\n const error = _.first(attrs.errors);\r\n\r\n if (error && error.Code && error.Code === 'TooMuchDataToDownload') {\r\n config.plugins.placeholder = _.extend(config.plugins.placeholder, {\r\n asyncCallback: () => Promise.resolve(true),\r\n asyncEmptyText: this.overThresholdErrorMessage,\r\n });\r\n } else if (!_.isArray(attrs)) {\r\n return [];\r\n }\r\n } else if (!_.isArray(attrs)) {\r\n return [];\r\n }\r\n\r\n attrsProcessor(attrs, this.associationType, state.get('account_id'));\r\n\r\n if (!_.isUndefined(this.dataPostProcess)) {\r\n return this.dataPostProcess(attrs);\r\n }\r\n\r\n updateFlagRefreshCache.call(this, 'remove');\r\n\r\n return attrs;\r\n };\r\n\r\n if (this.isUINext) {\r\n this.setupGrid(config);\r\n } else {\r\n this.gridPromise = fetchPreferenceConfig(config).then(() => {\r\n this.setupGrid(config);\r\n });\r\n }\r\n }\r\n\r\n setupGrid(config) {\r\n const pluginFactories = {\r\n toolbarPlugin,\r\n newDateFilterPlugin,\r\n newPaginationPlugin,\r\n newUiBlockerPlugin,\r\n a11yPlugin,\r\n newAssistedSelectionPlugin,\r\n perfMarkerPlugin,\r\n placeholderPlugin,\r\n performanceLogPlugin,\r\n };\r\n\r\n const defaultPlugins = getDefaultPlugins({\r\n isUINext: this.isUINext,\r\n pluginFactories,\r\n gridOptions: config,\r\n });\r\n\r\n const extendedPlugins = this.extendPlugins();\r\n\r\n this.grid = pgridFactory({\r\n gridConfig: config,\r\n plugins: defaultPlugins.concat(extendedPlugins),\r\n preferenceConfig: this.preferenceConfig || {},\r\n });\r\n\r\n this.grid.gridView.render();\r\n\r\n this.deliveryStatusPopupFactory = new AdExtensionDeliveryStatusPopupFactory({\r\n grid: this.grid,\r\n type: this.adextensionType,\r\n overrideEntities: ENTITY_MAP,\r\n overrideAssociationType: this.associationType,\r\n BidataNotRequired: true,\r\n });\r\n\r\n this.grid.gridView.on('didUpdate', (changes) => {\r\n if (this.isInitialGrid) {\r\n this.isInitialGrid = false;\r\n } else if (_.has(changes, 'sortableHeader')) {\r\n const orderby = _.result(changes.query, 'orderby') || _.result(this.grid.gridView.get('query'), 'orderby');\r\n const sortableHeader = changes.sortableHeader;\r\n const preference = { sortInfo: { orderby, sortableHeader } };\r\n\r\n preferencesService.setAtUserLevel({ Name: `WebApp.CampaignUI.${config.name}`, Data: preference });\r\n }\r\n // update toolbar\r\n // disabled Edit dropdown button if there is no data\r\n const toolbarEditor = this.grid.toolbar.gridToolbarGroup.toolbarWithName(constants.DEFAULT_TOOLBAR_NAME);\r\n const editMenuId = 'dropdown-extension-edit';\r\n const itemsCount = this.grid.gridView.getItemCount();\r\n\r\n toolbarEditor.set(editMenuId, { disabled: itemsCount === 0 });\r\n });\r\n\r\n this.grid.gridView.on('didReload', () => {\r\n this.grid.gridView.deselectAll();\r\n if (deliveryAlertId) {\r\n window.App.views.alertCenter.dismiss(deliveryAlertId);\r\n }\r\n });\r\n\r\n eventDispatcher.on('page-title.update-status', () => {\r\n cacheManager.invalidate('AdExtensionAssociation');\r\n this.grid.gridView.refresh(true);\r\n });\r\n }\r\n\r\n removeRejectionPopup() {\r\n const rejectionContainer = document.getElementById('rejectionContainer');\r\n\r\n if (rejectionContainer && rejectionContainer.style && rejectionContainer.style.display !== 'none') {\r\n $('#rejectionContainer').css('display', 'none');\r\n $.gridPopup.ResetImage(); //eslint-disable-line\r\n }\r\n }\r\n\r\n remove() {\r\n if (this.grid) {\r\n this.grid.gridView.remove();\r\n this.grid.toolbar.gridToolbarGroup.remove();\r\n this.grid.pagination.remove();\r\n }\r\n\r\n if (this.editor) {\r\n this.editor.remove();\r\n }\r\n this.removeRejectionPopup();\r\n\r\n if (this.deliveryStatusPopupFactory) {\r\n $(document).off('click', this.deliveryStatusPopupFactory.closeRejectionPopup);\r\n }\r\n\r\n super.remove();\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport {\r\n HotelCenterAssignment as hotelCenterAssignmentLoader,\r\n} from '@bingads-webui-campaign/hotel-center-assignment';\r\n\r\n// Import the dependencies to ensure they are loaded\r\nimport * as viewAdapter from '@bingads-webui-campaign-legacy/griddownload/view/adapter';\r\nimport * as hotelCenterEdm from '@bingads-webui-campaign-legacy/hotel-center-edm/index';\r\nimport hotelCenterJsData from '@bingads-webui-campaign-legacy/hotel-center-js-data/index';\r\nimport * as crossPageSelectAll from '@bingads-webui-component-legacy/bingads-grid/plugin/cross-page-select-all/index';\r\nimport * as sharedColumn from '@bingads-webui-component-legacy/bingads-grid/shared/column';\r\nimport * as schemaUtil from '@bingads-webui-component-legacy/bingads-grid/shared/schema-util';\r\nimport state from '@bingads-webui-component-legacy/state/index';\r\nimport appConfig from '@bingads-webui-component-legacy/config/index';\r\nimport * as customUserInfoPreferences from '@bingads-webui-component-legacy/bingads-grid/service/custom-userinfo-preferences';\r\nimport campaignJsData from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport pageContext from '@bingads-webui-static-legacy/page-context';\r\nimport * as dateFilterPreferences from '@bingads-webui-component-legacy/bingads-grid/service/date-filter-preferences';\r\n\r\nconst i18nHotelCenter = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/feature/hotel-center');\r\nconst hotelCenterComponentI18n = window.globalLegacyI18n.get('component/i18n/loader!campaignui/feature/hotel-center');\r\nconst hotelCenterSharedI18n = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/feature/hotel-center-shared');\r\n\r\n\r\nconst HotelCenterAssignmentDeps = {\r\n '@bingads-webui/i18n-amd-loader!campaignui/feature/hotel-center': i18nHotelCenter,\r\n 'campaignui/feature/griddownload/view/adapter': viewAdapter,\r\n 'campaignui/feature/hotel-center-edm/index': hotelCenterEdm,\r\n 'campaignui/feature/hotel-center-js-data/index': hotelCenterJsData,\r\n 'component/bingads-grid/plugin/cross-page-select-all/index': crossPageSelectAll,\r\n 'component/bingads-grid/shared/column': sharedColumn,\r\n 'component/bingads-grid/shared/schema-util': schemaUtil,\r\n 'component/i18n/loader!campaignui/feature/hotel-center': hotelCenterComponentI18n,\r\n 'component/state/index': state,\r\n 'component/config/index': appConfig,\r\n 'component/bingads-grid/service/custom-userinfo-preferences': customUserInfoPreferences,\r\n 'component/js-data-campaign/index': campaignJsData,\r\n '@bingads-webui/i18n-amd-loader!campaignui/feature/hotel-center-shared': hotelCenterSharedI18n,\r\n 'PageContext': pageContext,\r\n 'component/bingads-grid/service/date-filter-preferences': dateFilterPreferences,\r\n};\r\n\r\n// Inject the dependencies\r\nexport const HotelCenterAssignment = hotelCenterAssignmentLoader(HotelCenterAssignmentDeps).then(_.property('HotelCenterAssignment'));\r\n","import AssociationContainer from '@bingads-webui-campaign-legacy/adextension-associations-container/view/index';\r\nimport CalloutAssociationEditor from '@bingads-webui-campaign-legacy/adextension-callout/view/associationsEditor';\r\nimport _ from 'underscore';\r\nimport HotelCenterBaseAdExtensionView from '@bingads-webui-campaign-legacy/hotel-center-ad-extensions/shared/view/hotel-center-base-adextension-view';\r\nimport { bingadsGridColumn } from '@bingads-webui-component-legacy/bingads-grid/shared/column';\r\nimport gridRowTemplate from '@bingads-webui-campaign-legacy/adextension-callout/template/gridRowTemplate.pug';\r\nimport { HotelCenterEntitySelectorService } from '@bingads-webui-campaign-legacy/hotel-center-ad-extensions/shared/service/hotel-center-entity-selector-service';\r\n\r\nconst i18n = window.globalLegacyI18n.get('component/i18n/loader!campaignui/feature/adextensions');\r\nconst CalloutAdExtensionSchema = window.globalLegacySchema.get('CalloutAdExtension');\r\n\r\nexport class CalloutAdExtensionAssociationsView extends HotelCenterBaseAdExtensionView {\r\n initialize({\r\n associationType,\r\n typeString,\r\n perfMarker,\r\n isNewEntitySelector,\r\n i18nHotelCenter,\r\n }) {\r\n super.initialize({\r\n associationType,\r\n schema: CalloutAdExtensionSchema,\r\n isNewEntitySelector,\r\n instantiateEditor(associationOption) {\r\n const options = _.clone(associationOption);\r\n\r\n options.AssociationEditor = CalloutAssociationEditor;\r\n options.findScope = (association) => (scope) => {\r\n return (association.Type === 'SubAccount' && scope.campaignId === association.EntityId) ||\r\n (association.Type === 'HotelGroup' && scope.adGroupId === association.EntityId);\r\n };\r\n\r\n options.i18nKeys = {\r\n title: 'AdExtensions_Callout_Editor_Title',\r\n multiSelectSubtitle: [],\r\n AdgroupSelectorEntityTypeAdgroups: 'AdgroupSelector_EntityType_Hotelgroups',\r\n AdgroupSelectorEntityTypeCampaigns: 'AdgroupSelector_EntityType_Subaccounts',\r\n AdExtensionsMultiSelectSelectCampaigns: 'AdExtensions_MultiSelect_Select_Subaccounts',\r\n AdExtensionsMultiSelectSelectAdgroups: 'AdExtensions_MultiSelect_Select_Hotelgroups',\r\n };\r\n\r\n const editorOptions = {\r\n i18nKeys: {\r\n subtitle: [],\r\n ErrorGridEntityAdgroupColumn: 'ErrorGrid_Entity_HotelGroup_Column',\r\n ErrorGridEntityCampaignColumn: 'ErrorGrid_Entity_SubAccount_Column',\r\n // eslint-disable-next-line camelcase\r\n delete_confirm: 'AdExtensions_Callout_Delete_Warning_Hotel',\r\n // eslint-disable-next-line camelcase\r\n AdExtensions_Edit_Warning: 'AdExtensions_Edit_Warning_Hotel',\r\n },\r\n };\r\n\r\n // TODO: converting entity type back to Campaign UI entities to reuse\r\n // association container's and editor's code\r\n options.entityType = options.entityType === 'subaccount' ? 'campaign' : 'adgroup';\r\n options.entitySelectorService = new HotelCenterEntitySelectorService();\r\n options.maxSelectedItemsCount = 2;\r\n options.isNewEntitySelector = isNewEntitySelector;\r\n options.i18nHotelCenter = i18nHotelCenter;\r\n\r\n return new AssociationContainer(options, editorOptions);\r\n },\r\n columns: [bingadsGridColumn({\r\n name: 'AdExtension',\r\n property: (item) => {\r\n if (item.isAggregateRow) {\r\n return item.AdExtension;\r\n } else {\r\n return _.pick(item.AdExtension, 'Text');\r\n }\r\n },\r\n template: (local) => {\r\n if (_.isEmpty(local.value)) {\r\n return '';\r\n } else if (typeof local.value !== 'object') {\r\n return local.value;\r\n }\r\n return gridRowTemplate({\r\n data: {\r\n Text: local.value.Text,\r\n },\r\n });\r\n },\r\n type: 'string',\r\n sortable: false,\r\n title: i18n.get('ErrorGrid_AdExtension_Column'),\r\n helpId: 'Page_CampaignGrids_AdExtensions', // TODO: Update with Hotel Center help id\r\n bodyClasses: ['col-AdExtension'],\r\n })],\r\n typeString,\r\n overThresholdErrorMessage: i18n.get('AdExtensions_CalloutExtensions_OverThresholdMessage'),\r\n perfMarker,\r\n });\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport {\r\n HotelCenterIntelligence as hotelCenterIntelligenceLoader,\r\n} from '@bingads-webui-campaign/hotel-center-intelligence';\r\n\r\n// Import the dependencies to ensure they are loaded\r\nimport pageContext from '@bingads-webui-static-legacy/page-context';\r\nimport * as hotelCenterEdm from '@bingads-webui-campaign-legacy/hotel-center-edm/index';\r\nimport hotelCenterJsData from '@bingads-webui-campaign-legacy/hotel-center-js-data/index';\r\nimport * as adapter from '@bingads-webui-campaign-legacy/griddownload/view/adapter';\r\nimport azureUpload from '@bingads-webui-component-legacy/azure-upload/index';\r\nimport * as sharedColumn from '@bingads-webui-component-legacy/bingads-grid/shared/column';\r\nimport * as toast from '@bingads-webui-component-legacy/toast/index';\r\nimport * as calloutExtensionAssociation from '@bingads-webui-campaign-legacy/hotel-center-ad-extensions/callout/callout-adextension-associations-view';\r\nimport state from '@bingads-webui-component-legacy/state/index';\r\nimport * as dateFilterPreferences from '@bingads-webui-component-legacy/bingads-grid/service/date-filter-preferences';\r\nimport * as segmentationPerferences from '@bingads-webui-component-legacy/bingads-grid/service/segmentation-preferences';\r\nimport * as servicePreference from '@bingads-webui-component-legacy/preference/service/index';\r\nimport * as customeridtype from '@bingads-webui-component-legacy/edm-campaign/customeridtype';\r\nimport config from '@bingads-webui-component-legacy/config/index';\r\n\r\n\r\nconst hotelCenterI18n = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/feature/hotel-center');\r\nconst hotelCenterShared = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/feature/hotel-center-shared');\r\n\r\nconst HotelCenterIntelligenceDeps = {\r\n 'PageContext': pageContext,\r\n '@bingads-webui/i18n-amd-loader!campaignui/feature/hotel-center': hotelCenterI18n,\r\n 'campaignui/feature/hotel-center-edm/index': hotelCenterEdm,\r\n 'campaignui/feature/hotel-center-js-data/index': hotelCenterJsData,\r\n 'campaignui/feature/griddownload/view/adapter': adapter,\r\n 'component/azure-upload/index': azureUpload,\r\n 'component/bingads-grid/shared/column': sharedColumn,\r\n 'component/toast/index': toast,\r\n 'campaignui/feature/hotel-center-ad-extensions/callout/callout-adextension-associations-view': calloutExtensionAssociation,\r\n '@bingads-webui/i18n-amd-loader!campaignui/feature/hotel-center-shared': hotelCenterShared,\r\n 'component/state/index': state,\r\n 'component/bingads-grid/service/date-filter-preferences': dateFilterPreferences,\r\n 'component/bingads-grid/service/segmentation-preferences': segmentationPerferences,\r\n 'component/preference/service/index': servicePreference,\r\n 'component/edm-campaign/customeridtype': customeridtype,\r\n 'component/config/index': config,\r\n};\r\n\r\n// Inject the dependencies\r\nexport const HotelCenterIntelligence = hotelCenterIntelligenceLoader(HotelCenterIntelligenceDeps).then(\r\n (hotelCenterIntelligence) => _.pick(hotelCenterIntelligence, 'FeedStatus', 'FeedUpload', 'MatchReport', 'ShareOfVoice', 'BookingReport', 'CalloutExtensionsView'));\r\n","import {\r\n HotelCenterOverview as hotelCenterOverviewLoader,\r\n} from '@bingads-webui-campaign/hotel-center-overview';\r\nimport { getHotelCenterShared } from '@bingads-webui-campaign/hotel-center-shared';\r\n\r\n// Import the dependencies to ensure they are loaded\r\nimport pageContext from '@bingads-webui-static-legacy/page-context';\r\nimport * as detailMapper from '@bingads-webui-campaign-legacy/bulk-operation/edit-detail/detail-mapper';\r\nimport bulkEditJob from '@bingads-webui-campaign-legacy/bulk-operation/util/bulk-edit-job';\r\nimport * as downloadViewAdapter from '@bingads-webui-campaign-legacy/griddownload/view/adapter';\r\nimport * as hotelCenterEdm from '@bingads-webui-campaign-legacy/hotel-center-edm/index';\r\nimport hotelCenterJsData from '@bingads-webui-campaign-legacy/hotel-center-js-data/index';\r\nimport * as columnChooser from '@bingads-webui-component-legacy/bingads-grid/plugin/column-chooser';\r\nimport * as crossPageSelectAll from '@bingads-webui-component-legacy/bingads-grid/plugin/cross-page-select-all/index';\r\nimport * as newPerformanceLog from '@bingads-webui-component-legacy/bingads-grid/plugin/new-performance-log';\r\nimport * as sharedColumn from '@bingads-webui-component-legacy/bingads-grid/shared/column';\r\nimport * as schemaUtil from '@bingads-webui-component-legacy/bingads-grid/shared/schema-util';\r\nimport config from '@bingads-webui-component-legacy/config/index';\r\nimport * as popupEditor from '@bingads-webui-component-legacy/grid-customized-popup-editor/index';\r\nimport decimal from '@bingads-webui-component-legacy/humanize/decimal';\r\nimport state from '@bingads-webui-component-legacy/state/index';\r\nimport * as toast from '@bingads-webui-component-legacy/toast/index';\r\nimport * as preferenceService from '@bingads-webui-component-legacy/preference/service/index';\r\nimport jsDataCampaign from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport * as dateFilterPreferences from '@bingads-webui-component-legacy/bingads-grid/service/date-filter-preferences';\r\nimport * as segmentationPreferences from '@bingads-webui-component-legacy/bingads-grid/service/segmentation-preferences';\r\nimport * as columnChooserPreferences from '@bingads-webui-component-legacy/bingads-grid/service/column-chooser-preferences';\r\n\r\n\r\nconst hotelCenterI18n = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/feature/hotel-center');\r\nconst hotelCenterSchemaI18n = window.globalLegacyI18n.get('$/schema-i18n!hotel-center');\r\nconst hotelCenterSharedI18n = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/feature/hotel-center-shared');\r\nconst hotelCenterUtils = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/feature/hotel-center-utils');\r\n\r\nconst HotelCenterOverviewDeps = {\r\n '@bingads-webui/i18n-amd-loader!campaignui/feature/hotel-center': hotelCenterI18n,\r\n '@bingads-webui/i18n-amd-loader!campaignui/feature/hotel-center-shared': hotelCenterSharedI18n,\r\n 'PageContext': pageContext,\r\n 'campaignui/feature/bulk-operation/edit-detail/detail-mapper': detailMapper,\r\n 'campaignui/feature/bulk-operation/util/bulk-edit-job': bulkEditJob,\r\n 'campaignui/feature/griddownload/view/adapter': downloadViewAdapter,\r\n 'campaignui/feature/hotel-center-edm/index': hotelCenterEdm,\r\n 'campaignui/feature/hotel-center-js-data/index': hotelCenterJsData,\r\n 'component/bingads-grid/plugin/column-chooser': columnChooser,\r\n 'component/bingads-grid/plugin/cross-page-select-all/index': crossPageSelectAll,\r\n 'component/bingads-grid/plugin/new-performance-log': newPerformanceLog,\r\n 'component/bingads-grid/shared/column': sharedColumn,\r\n 'component/bingads-grid/shared/schema-util': schemaUtil,\r\n 'component/config/index': config,\r\n 'component/grid-customized-popup-editor/index': popupEditor,\r\n 'component/humanize/decimal': decimal,\r\n 'component/state/index': state,\r\n 'component/toast/index': toast,\r\n 'component/preference/service/index': preferenceService,\r\n '$/schema-i18n!hotel-center': hotelCenterSchemaI18n,\r\n 'component/js-data-campaign/index': jsDataCampaign,\r\n '@bingads-webui/i18n-amd-loader!campaignui/feature/hotel-center-utils': hotelCenterUtils,\r\n 'component/bingads-grid/service/date-filter-preferences': dateFilterPreferences,\r\n 'component/bingads-grid/service/segmentation-preferences': segmentationPreferences,\r\n 'component/bingads-grid/service/column-chooser-preferences': columnChooserPreferences,\r\n};\r\n\r\nexport const HotelCenterOverview = hotelCenterOverviewLoader(HotelCenterOverviewDeps);\r\nexport const { userCountryService } = getHotelCenterShared({ state, i18n: hotelCenterSharedI18n });\r\n","import _ from 'underscore';\r\nimport {\r\n SetupView as setupViewLoader,\r\n} from '@bingads-webui-campaign/hotel-center-setup';\r\n\r\n// Import the dependencies to ensure they are loaded\r\nimport config from '@bingads-webui-component-legacy/config/index';\r\nimport * as toast from '@bingads-webui-component-legacy/toast/index';\r\nimport pageContext from '@bingads-webui-static-legacy/page-context';\r\nimport state from '@bingads-webui-component-legacy/state/index';\r\nimport hotelCenterJsData from '@bingads-webui-campaign-legacy/hotel-center-js-data/index';\r\nimport * as hotelCenterEdm from '@bingads-webui-campaign-legacy/hotel-center-edm/index';\r\n\r\nconst hotelCenterSharedI18n = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/feature/hotel-center-shared');\r\nconst hotelCenterSetupI18n = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/feature/hotel-center-setup');\r\n\r\nconst SetupViewDeps = {\r\n '@bingads-webui/i18n-amd-loader!campaignui/feature/hotel-center-setup': hotelCenterSetupI18n,\r\n 'component/config/index': config,\r\n 'component/toast/index': toast,\r\n 'PageContext': pageContext,\r\n '@bingads-webui/i18n-amd-loader!campaignui/feature/hotel-center-shared': hotelCenterSharedI18n,\r\n 'component/state/index': state,\r\n 'campaignui/feature/hotel-center-js-data/index': hotelCenterJsData,\r\n 'campaignui/feature/hotel-center-edm/index': hotelCenterEdm,\r\n};\r\n\r\n\r\n// Inject the dependencies\r\nexport const HotelCenteSetup = setupViewLoader(SetupViewDeps).then(_.property('SetupView'));\r\n","// Import the dependencies to ensure they are loaded\r\nimport pageContext from '@bingads-webui-static-legacy/page-context';\r\nimport state from '@bingads-webui-component-legacy/state/index';\r\nimport { getHotelCenterUtils } from '@bingads-webui-campaign/hotel-center-utils';\r\n\r\nconst i18n = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/feature/hotel-center-utils');\r\n\r\n// Inject the dependencies\r\nexport const {\r\n bidUtils,\r\n bidMultiplierUtils,\r\n dateUtils,\r\n inlineDownloadUtils,\r\n} = getHotelCenterUtils({ pageContext, state, i18n });\r\n","import dateFilter from '@bingads-webui-static-legacy/app/state/hotelcenter-dateFilter';\r\nimport state from '@bingads-webui-component-legacy/state/index';\r\nimport config from '@bingads-webui-component-legacy/config/index';\r\nimport _ from 'underscore';\r\nimport $ from 'jquery';\r\nimport pageContext from '@bingads-webui-static-legacy/page-context';\r\nimport Promise from 'bluebird';\r\nimport edm from '@bingads-webui-campaign-legacy/hotel-center-edm/index';\r\nimport jsdata from '@bingads-webui-campaign-legacy/hotel-center-js-data/index';\r\n\r\nconst getProvisionedUrl = (cid, aid) => `${config.get('odata.url')}Travel/V1/Customers(${cid})/Accounts(${aid})/Default.IsProvisioned`;\r\n\r\nexport const fetchDbProvisionStatus = () => new Promise((resolve, reject) => {\r\n const cid = state.get('advertisercustomer_id') || state.get('customer_id');\r\n const aid = state.get('account_id');\r\n const url = getProvisionedUrl(cid, aid);\r\n\r\n return $.ajax({\r\n url,\r\n type: 'GET',\r\n headers: {\r\n Authorization: `CCMTSmallToken ${pageContext.Token}`,\r\n },\r\n }).then((isHotelAdsDBPilotEnabled) => {\r\n resolve({ isHotelAdsDBPilotEnabled });\r\n }, reject);\r\n});\r\n\r\n\r\nexport const bootstrapDateFilter = () => dateFilter\r\n .getFilterPromise(['TravelShared', 'HotelCenterFeedStatusGrid', 'HotelCenterProcessedReconGrid'])\r\n .then((filterValues) => {\r\n _.each(filterValues, (filter) => {\r\n const name = filter.name;\r\n\r\n if (name.match('Shared$')) {\r\n state.set('$daterange', filter.value);\r\n } else {\r\n state.set('$daterange'.concat(name), filter.value);\r\n }\r\n });\r\n });\r\n\r\nexport const getTotalSubaccounts = () => {\r\n const options = {\r\n entitySet: edm.currentCustomer.SubAccounts,\r\n cacheResponse: false,\r\n };\r\n\r\n const query = {\r\n limit: 6,\r\n offset: 0,\r\n };\r\n\r\n return jsdata.SubAccount.findAll(query, options).then((subAccounts) => {\r\n return Promise.resolve(subAccounts);\r\n });\r\n};\r\n\r\n// add all the bootstrap for hotel center here\r\nexport const bootstrapHotelCenter = () => fetchDbProvisionStatus()\r\n .then((dbProvisionStatus) => {\r\n const { isHotelAdsDBPilotEnabled: dbProvisionResult } = dbProvisionStatus;\r\n let isHotelAdsDBPilotEnabled = dbProvisionResult;\r\n\r\n if (_.isObject(dbProvisionResult)) {\r\n isHotelAdsDBPilotEnabled = dbProvisionResult.value;\r\n }\r\n\r\n if (isHotelAdsDBPilotEnabled) {\r\n return bootstrapDateFilter()\r\n .then(() => getTotalSubaccounts())\r\n .then((subAccounts) => {\r\n const pageId = subAccounts.totalCount === 0 ? 'setup' : 'overview';\r\n\r\n return Promise.resolve({ isPageReady: true, pageId, subAccounts, isHotelAdsDBPilotEnabled });\r\n });\r\n }\r\n return Promise.resolve({ isHotelAdsDBPilotEnabled });\r\n });\r\n\r\n","import * as i18nErrors from '@bingads-webui-component-legacy/api-errors-campaign/index';\r\n\r\nconst i18n = window.globalLegacyI18n.get('component/i18n/loader!campaignui/feature/import-campaigns');\r\n\r\nexport function getLocalizedMessage(errorCode) {\r\n return i18nErrors.getString(`ErrorNumber_${errorCode}`) || i18n.get('Import_FailedStatus');\r\n}\r\n","import $ from 'jquery';\r\nimport _ from 'underscore';\r\n\r\nimport summaryDataContextManager from '@bingads-webui-static-legacy/summary/SummaryDataContextManager';\r\nimport summaryGridsActionMap from '@bingads-webui-static-legacy/summary/SummaryGridsActionMap';\r\n\r\nimport odata from '@bingads-webui-component-legacy/http/channel/odata';\r\nimport * as i18nErrors from '@bingads-webui-component-legacy/api-errors-campaign/index';\r\n\r\nimport instrumentationSetting from '@bingads-webui-static-legacy/instrumentation/campaignSchemaAndSetting';\r\nimport logger from '@bingads-webui-static-legacy/instrumentation/index';\r\nimport constants from '@bingads-webui-static-legacy/instrumentation/constants';\r\nimport * as importErrorLocalizer from '@bingads-webui-campaign-legacy/import-campaigns/shared/import-error-code-helper';\r\nimport * as safeJson from '@bingads-webui/safe-json';\r\n\r\nimport ImportFailureDetailsTableView from '@bingads-webui-campaign-legacy/import-campaigns/view/import-failure-details-table';\r\nimport errorHelper from '@bingads-webui-campaign-legacy/scheduled-import/view/import-task-engine-error-helper';\r\n\r\nimport config from '@bingads-webui-component-legacy/config/index';\r\nimport * as cookie from '@bingads-webui/cookie';\r\nimport { queryify } from '@bingads-webui/url-util';\r\n\r\nconst i18n = window.globalLegacyI18n.get('component/i18n/loader!campaignui/feature/import-campaigns');\r\n\r\n///////////////////////////////////////////////////////////////////////////////\r\n\r\nconst getGoogleCampaignsUrlTmpl =\r\n '/ImportSession/GoogleCampaigns(CustomerId=:customer_id,AccountId=:account_id,SessionId={{SessionId}})';\r\nconst getGoogleAccountsUrlTmpl =\r\n '/ImportSession/GoogleAccounts(CustomerId=:customer_id,AccountId=:account_id,SessionId={{SessionId}})';\r\nconst getImportPreviewUrlTmpl =\r\n '/ImportSession/ImportPreview(CustomerId=:customer_id,AccountId=:account_id)';\r\nconst getImportSummaryUrlTmpl =\r\n '/ImportSession/ImportSubmittedCounts(CustomerId=:customer_id,AccountId=:account_id)';\r\n\r\nfunction getGoogleCampaigns(sessionId, googleCustomerId) {\r\n let url = _.template(getGoogleCampaignsUrlTmpl)({ SessionId: sessionId });\r\n\r\n url = queryify(url, {\r\n googleCustomerId,\r\n });\r\n return odata.get(url)\r\n .then((data) => {\r\n return _.filter(data, (campaign) => {\r\n return campaign.Status !== 'Draft' && campaign.Status !== 'Delete';\r\n });\r\n });\r\n}\r\n\r\nfunction getGoogleAccounts(sessionId) {\r\n let url = _.template(getGoogleAccountsUrlTmpl)({ SessionId: sessionId });\r\n let result = { Accounts: null, Campaigns: null };\r\n\r\n return odata.get(url)\r\n .then((accounts) => {\r\n result.Accounts = accounts;\r\n\r\n if (accounts && accounts.length === 1) {\r\n return getGoogleCampaigns(sessionId, accounts[0].CustomerId);\r\n } else {\r\n return null;\r\n }\r\n })\r\n .then((campaigns) => {\r\n result.Campaigns = campaigns;\r\n return result;\r\n });\r\n}\r\n\r\nfunction scrollToTop(view) {\r\n if (view) {\r\n let body = $('body')[0];\r\n\r\n if (body) {\r\n let isScrollbar = body.scrollHeight > body.clientHeight;\r\n\r\n if (isScrollbar) {\r\n $(window).scrollTop(view.offset().top);\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction goBack(data) {\r\n if (!data) {\r\n const url = $('#referrer').val();\r\n\r\n if (url && url.length > 0) {\r\n $.advertiser.redirect(url);\r\n } else {\r\n // Fallback for IE8, as it does not set the referrer property\r\n window.history.back();\r\n }\r\n }\r\n}\r\n\r\nfunction removeView(view) {\r\n if (view) {\r\n view.remove();\r\n view = null; //eslint-disable-line no-param-reassign\r\n }\r\n}\r\n\r\nfunction showODataError() {\r\n $.advertiser.showJsonErrors({\r\n 'Message': importErrorLocalizer.getLocalizedMessage(-1),\r\n });\r\n}\r\n\r\nfunction getCustomerId() {\r\n return $.advertiser.getUrlParameter('cid');\r\n}\r\n\r\nfunction logException(err) {\r\n let msg;\r\n\r\n if (err.message) {\r\n msg += err.message;\r\n }\r\n if (err.stack) {\r\n let st = `StackTrace: ${err.stack}`;\r\n\r\n if (msg) {\r\n msg += `\\t${st}`;\r\n } else {\r\n msg = st;\r\n }\r\n\r\n console.error(msg); // eslint-disable-line\r\n }\r\n\r\n msg = msg || JSON.stringify(err); // for response of XMLHttpRequest, \"{\"readyState\":0,\"responseText\":\"\",\"status\":0,\"statusText\":\"error\",\"headers\":{}}\"\r\n\r\n logger.logError('/campaign/importcampaign', msg);\r\n}\r\n\r\nfunction startPollingUntilImportStarted(taskItemExecutionId, completeCallBack = _.noop, showLoadingIcon = true, isMultiAccount = false) {\r\n const MAX_FAILED_ATTEMPTS = 5;\r\n let failedTimes = 0;\r\n let wrappedCompleteCallBack = completeCallBack;\r\n\r\n if (showLoadingIcon) {\r\n wrappedCompleteCallBack = _.wrap(completeCallBack, (func) => {\r\n func();\r\n $.advertiser.hideLoadingPanel();\r\n });\r\n }\r\n\r\n function checkStatus() {\r\n const url = `/Customers()/${isMultiAccount ? '' : 'Accounts()/'}TaskItemExecutions(${taskItemExecutionId})`;\r\n\r\n odata.get(url)\r\n .then((data) => {\r\n if (data.Status === 'PendingExecution') {\r\n setTimeout(checkStatus, 2000);\r\n } else {\r\n wrappedCompleteCallBack();\r\n }\r\n })\r\n .catch((err) => {\r\n failedTimes++;\r\n logException(err);\r\n logger.logMessage([constants.LOGCATEGORY.TRACE], constants.LOGLEVEL.INFO, '/campaign/importcampaign',\r\n `StartPollingUntilImportStarted: polling, failedTimes: ${failedTimes}`);\r\n if (failedTimes === MAX_FAILED_ATTEMPTS) {\r\n wrappedCompleteCallBack();\r\n } else {\r\n setTimeout(checkStatus, 2000);\r\n }\r\n });\r\n }\r\n\r\n logger.logMessage([constants.LOGCATEGORY.TRACE], constants.LOGLEVEL.INFO, '/campaign/importcampaign',\r\n 'StartPollingUntilImportStarted: start polling');\r\n if (showLoadingIcon) {\r\n $.advertiser.showLoadingPanel();\r\n }\r\n setTimeout(checkStatus, 2000);\r\n}\r\n\r\nconst editImportCookieName = 'EditImport';\r\nconst currentUserName = _.propertyOf(config.get('CurrentUser'))('Name');\r\n\r\nlet cookieHelperForEditImport = {\r\n createCookie(taskItemId, sessionId) {\r\n if (taskItemId && sessionId) {\r\n const cookieValue = {\r\n [currentUserName]: {\r\n [taskItemId]: sessionId,\r\n },\r\n };\r\n let expire = new Date();\r\n\r\n expire.setTime(expire.getTime() + (2 * 60 * 1000)); // 2 mins\r\n\r\n cookie.set(editImportCookieName, JSON.stringify(cookieValue), expire, '/');\r\n } else {\r\n logger.logError('/campaign/importcampaign', `unexpected value. taskItemId: ${taskItemId}, sessionId: ${sessionId}`);\r\n }\r\n },\r\n\r\n deleteCookie() {\r\n cookie.set(editImportCookieName, '', new Date(), '/');\r\n },\r\n\r\n getSessionId(taskItemId) {\r\n let editImportCookie = cookie.get(editImportCookieName);\r\n\r\n if (editImportCookie) {\r\n editImportCookie = safeJson.parseSync(editImportCookie);\r\n if (editImportCookie && editImportCookie[currentUserName]) {\r\n return _.propertyOf(editImportCookie[currentUserName])(taskItemId);\r\n } else {\r\n logger.logMessage([constants.LOGCATEGORY.TRACE], constants.LOGLEVEL.INFO,\r\n '/campaign/importcampaign', `EditImport cookie doesn't have info for ${currentUserName}`);\r\n }\r\n } else {\r\n logger.logMessage([constants.LOGCATEGORY.TRACE], constants.LOGLEVEL.INFO,\r\n '/campaign/importcampaign', 'Failed to fetch cookie EditImport');\r\n }\r\n\r\n return null;\r\n },\r\n};\r\n\r\n///////////////////////////////////////////////////////////////////////////////\r\n\r\n/* @this ImportState */\r\nfunction getSummaryCounts(successCallback) {\r\n logger.logMessage([constants.LOGCATEGORY.TRACE], constants.LOGLEVEL.INFO, '/campaign/importcampaign',\r\n `Start to get import summary counts for importId: ${this.importId}`);\r\n\r\n if (this.useOdata) {\r\n const url = queryify(getImportSummaryUrlTmpl, { importId: this.importId });\r\n\r\n odata.get(url)\r\n .then((counts) => {\r\n if (_.isFunction(successCallback)) {\r\n successCallback({\r\n Counts: counts,\r\n });\r\n }\r\n })\r\n .catch(() => {\r\n window.App.views.alertCenter.showError(i18nErrors.getString('ErrorNumber_-1'));\r\n $.advertiser.hideLoadingPanel(); // hide the loading panel shown in polling\r\n });\r\n } else {\r\n const urls = this.options.urls;\r\n\r\n $.advertiser.ajaxPost({\r\n url: urls.getSummaryUrl,\r\n ignoreBeforeAjax: true,\r\n hideLoadingPanelOnSuccess: false,\r\n data: {\r\n importId: this.importId,\r\n rurl: urls.rurl,\r\n },\r\n traditional: true,\r\n onSuccess: successCallback,\r\n });\r\n }\r\n}\r\n\r\nclass ImportState {\r\n constructor(options) {\r\n this.options = options || {};\r\n this.currentAccountId = config.get('CurrentAccount').Id;\r\n this.currentUserId = config.get('CurrentUser').Id;\r\n this.customerId = getCustomerId();\r\n this.isUpdatedImportUIForSignUpEnabled = config.get('Permissions') && config.get('Permissions').IsUpdatedImportUIForSignUpEnabled;\r\n this.useOdata = false; // stop the work of migrating to Odata. This part is included in SPA work.\r\n }\r\n\r\n cancelImport(successCallback) {\r\n let callBack = _.isFunction(successCallback) ? successCallback : _.noop;\r\n\r\n if (this.importId && this.importId > 0) {\r\n logger.logMessage([constants.LOGCATEGORY.TRACE], constants.LOGLEVEL.INFO, '/campaign/importcampaign',\r\n `Cancel the import id:${this.importId}, aid:${this.currentAccountId}, cid:${this.customerId}`);\r\n\r\n return $.advertiser.ajaxPost({\r\n data: {\r\n importId: this.importId,\r\n },\r\n url: '/Campaign/ImportCampaign/CancelCurrentImport',\r\n onSuccess: callBack,\r\n });\r\n } else {\r\n callBack();\r\n }\r\n\r\n return true;\r\n }\r\n\r\n pollStatus(successCallback, importFailCallback, scheduledImportOptions) {\r\n let timeOut;\r\n let failedAttempts = 0;\r\n let MAX_FAILED_ATTEMPTS = 5;\r\n let lastCallCompleted = true;\r\n let taskItemExecutionId = scheduledImportOptions && scheduledImportOptions.Id;\r\n\r\n const scheduleForm = this.scheduleForm;\r\n const importOptions = this.importOptions;\r\n\r\n let _activeView = this._activeView;\r\n let importId = this.importId;\r\n const { isFileImport, statuses, unblockTitle, unblockText, unblockLink, urls } = this.options;\r\n const aid = this.currentAccountId;\r\n const cid = this.customerId;\r\n const uid = this.currentUserId;\r\n\r\n function createStatusInfo(currentStatus) {\r\n if (currentStatus) {\r\n let statusList = {\r\n status: statuses,\r\n currentStatusOrder: currentStatus.Order,\r\n };\r\n let container = $('
');\r\n\r\n $('#importStatusSteps').tmpl(statusList).appendTo(container);\r\n return container.html();\r\n }\r\n\r\n return '';\r\n }\r\n\r\n function getUnblockText(currentStatus) {\r\n const statusInfo = createStatusInfo(currentStatus);\r\n\r\n return `${unblockTitle}
${unblockText}

${unblockLink}${statusInfo}`;\r\n }\r\n\r\n function onUnblockSuccess(data) {\r\n if (data && data.RedirectUrl) {\r\n $.advertiser.redirect(data.RedirectUrl);\r\n }\r\n }\r\n\r\n function attachUnblockHandler() {\r\n $('#unblockImportLink').click(() => {\r\n // Stop polling for status\r\n clearInterval(timeOut);\r\n $.advertiser.ajaxPost({\r\n url: urls.unblockUrl,\r\n data: {\r\n importId,\r\n isFileImport,\r\n },\r\n traditional: true,\r\n onSuccess: onUnblockSuccess,\r\n });\r\n });\r\n\r\n $('#historyLink').click(() => {\r\n // Stop polling for status\r\n clearInterval(timeOut);\r\n $.advertiser.ajaxPost({\r\n url: urls.unblockUrl,\r\n data: {\r\n importId,\r\n isFileImport,\r\n },\r\n traditional: true,\r\n onSuccess: () => {\r\n window.location.href = `/Campaign/Campaigns?cid=${cid}&uid=${uid}&aid=${aid}#customer/${cid}/account/${aid}/importschedule`;\r\n },\r\n });\r\n });\r\n }\r\n\r\n function unattachUnblockHandler() {\r\n $('#unblockImportLink').unbind('click');\r\n $('#historyLink').unbind('click');\r\n }\r\n\r\n function shouldStopPolling(data) {\r\n //Do not continue to import summary when we get ImportStatus === ValidationCompleted (used for file import) for run now import via task engine\r\n //All other statuses are valid ends for a run now import, so continue to import summary/import fail.\r\n //Bug fix for 1449835: ImportStatus may return something incorrect when TaskItemExecutionStatus = PendingExecution. Do not halt polling in that scenario.\r\n let importComplete = data.Status === 'Complete' || data.Status === 'Failed' ||\r\n data.Status === 'Cancelled' || data.TaskItemExecutionStatus === 'Failed' || !!data.ErrorCode;\r\n\r\n if (isFileImport) {\r\n importComplete = importComplete || data.Status === 'ValidationCompleted';\r\n }\r\n return data.TaskItemExecutionStatus !== 'PendingExecution' && importComplete;\r\n }\r\n\r\n /* @this ImportState */\r\n function onStatusCheckSuccess(data) {\r\n if (data && !data.Errors) {\r\n if (!importId) {\r\n this.importId = importId = data.ImportId;\r\n }\r\n // Reset the counter for the failed attempts\r\n failedAttempts = 0;\r\n if (data.Status) {\r\n // Update the loading indicator with the current import status\r\n let status = statuses[data.Status];\r\n\r\n if (status && status.Text.length > 0) {\r\n $.advertiser.loadingPanel.updateText(getUnblockText(status));\r\n attachUnblockHandler();\r\n }\r\n\r\n if (shouldStopPolling(data)) {\r\n clearInterval(timeOut);\r\n unattachUnblockHandler();\r\n logger.logMessage([constants.LOGCATEGORY.TRACE], constants.LOGLEVEL.INFO, '/campaign/importcampaign',\r\n `onStatusCheckSuccess: polling finished, import status: ${data.Status}, \\\r\ntask status: ${data.TaskItemExecutionStatus}, error code: ${data.ErrorCode}, import id: ${importId}`);\r\n if (data.Status === 'Failed' || data.TaskItemExecutionStatus === 'Failed' || !!data.ErrorCode) {\r\n // Add logging for failed import status #1224009\r\n let prefix = 'ImportCampaignFailed';\r\n\r\n if (isFileImport) {\r\n prefix = `${prefix} file import`;\r\n } else {\r\n prefix = `${prefix} Google import`;\r\n }\r\n\r\n logger.logMessage([constants.LOGCATEGORY.ERROR],\r\n constants.LOGLEVEL.INFO,\r\n '/campaign/importcampaign',\r\n `${prefix}, ImportId : ${data.ImportId}`);\r\n\r\n // For scheduled import run now, we need to set the data's message in order for the import fail callback\r\n // to trigger unblocking the screen and the error message toast.\r\n data.Message = importErrorLocalizer.getLocalizedMessage(data.ErrorCode || data.FailureReason);\r\n if (_.isFunction(importFailCallback)) {\r\n importFailCallback(data);\r\n } else {\r\n this.onImportFail(data);\r\n }\r\n } else if (data.Status === 'Cancelled') {\r\n // This code path should not be hit ideally but adding safety net, otherwise UI keeps on polling for status indefinitly\r\n goBack();\r\n } else if ($.isFunction(successCallback)) {\r\n if (!isFileImport && data && data.ImportId) {\r\n getSummaryCounts.call(this, successCallback);\r\n } else {\r\n successCallback(data);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n function onStatusCheckFailure(data) {\r\n failedAttempts++;\r\n // Stop polling if there are five successive failures\r\n if (failedAttempts === MAX_FAILED_ATTEMPTS) {\r\n clearInterval(timeOut);\r\n $.advertiser.hideLoadingPanel();\r\n $.advertiser.showJsonErrors((data && data.Errors) || importErrorLocalizer.getLocalizedMessage(-1));\r\n\r\n let viewName = _activeView && _activeView.name();\r\n\r\n logger.logError('/campaign/importcampaign', `polling failed with Json errors, current view name: ${viewName}`);\r\n if (viewName === 'OptionsView') {\r\n importOptions.setDisable(true);\r\n } else if (viewName === 'SchedulingView') {\r\n scheduleForm.setErrorView();\r\n }\r\n }\r\n }\r\n\r\n function onStatusCheckComplete() {\r\n lastCallCompleted = true;\r\n }\r\n\r\n\r\n /* @this ImportState */\r\n function checkStatus() {\r\n if (lastCallCompleted) {\r\n lastCallCompleted = false;\r\n\r\n if (taskItemExecutionId) {\r\n const url = `/Customers()/Accounts()/TaskItemExecutions(${taskItemExecutionId})`;\r\n\r\n odata.get(url)\r\n .then((rawData = {}) => {\r\n if (!importId || importId === 0) {\r\n this.importId = importId = rawData.ImportId;\r\n }\r\n let obj = {\r\n Status: rawData.ImportStatus,\r\n ImportType: rawData.Type,\r\n ImportId: rawData.ImportId,\r\n TaskItemExecutionStatus: rawData.Status,\r\n ErrorCode: rawData.ErrorCode,\r\n ErrorDetail: rawData.ErrorDetail,\r\n };\r\n\r\n onStatusCheckSuccess.call(this, obj);\r\n }).catch((err) => {\r\n logException(err);\r\n onStatusCheckFailure();\r\n }).finally(() => {\r\n onStatusCheckComplete();\r\n });\r\n } else {\r\n const url = $.advertiser.setUrlParameter('importId', importId, urls.getStatusUrl);\r\n\r\n $.advertiser.ajaxGet({\r\n url,\r\n traditional: true,\r\n ignoreBeforeAjax: true,\r\n hideLoadingPanelOnSuccess: false,\r\n onSuccess: onStatusCheckSuccess.bind(this),\r\n onJsonError: onStatusCheckFailure,\r\n onAjaxComplete: onStatusCheckComplete,\r\n });\r\n }\r\n }\r\n }\r\n\r\n logger.logMessage([constants.LOGCATEGORY.TRACE], constants.LOGLEVEL.INFO, '/campaign/importcampaign', 'start polling');\r\n $.advertiser.showLoadingPanel();\r\n timeOut = setInterval(checkStatus.bind(this), 1000);\r\n }\r\n\r\n //This is temporarily not being used as we discovered a bug with polling import status in continue import scenarios\r\n //this way.\r\n fetchTaskItemExecutionIdAndPollStatus(successCallback) {\r\n let url = '/Customers()/Accounts()/TaskItemExecutions?%24top=1&%24count=true&%24expand=TaskItem&%24filter=TaskItem%2FType+eq+Enum.TaskItemType%27Import%27';\r\n\r\n odata.get(url).bind(this)\r\n .then((response) => {\r\n if (response && _.first(response.value) && _.first(response.value).Id) {\r\n this.pollStatus(successCallback, '', {\r\n Id: _.first(response.value).Id,\r\n });\r\n } else {\r\n showODataError();\r\n }\r\n }).catch((err) => {\r\n logException(err);\r\n showODataError();\r\n });\r\n }\r\n\r\n createImportTaskItem(data, successCallback, signupMode = false) {\r\n let url = '/Customers()/Accounts()/TaskItems?%24expand=TaskItemExecutions';\r\n\r\n $.advertiser.showLoadingPanel();\r\n odata.post(url, { data }).bind(this)\r\n .then((response) => {\r\n if (signupMode && this.isUpdatedImportUIForSignUpEnabled) {\r\n if (_.isFunction(successCallback)) {\r\n successCallback(data);\r\n }\r\n } else {\r\n this.pollStatus(successCallback, '', {\r\n Id: response.TaskItemExecutions[0].Id,\r\n });\r\n }\r\n }).catch((err) => {\r\n logger.endActivity(instrumentationSetting.ACTIVITYNAME.ExecuteImportPreviewTaskItem);\r\n logger.endActivity(instrumentationSetting.ACTIVITYNAME.ExecuteImportTaskItem);\r\n logException(err);\r\n $.advertiser.hideLoadingPanel();\r\n showODataError();\r\n });\r\n }\r\n\r\n expandView(importView) {\r\n this._activeView = importView;\r\n importView.expandView();\r\n }\r\n\r\n openActiveView() {\r\n if (!this._activeView) {\r\n return false;\r\n }\r\n\r\n let viewName = this._activeView.name();\r\n\r\n switch (viewName) {\r\n case 'AccountView':\r\n this.googleLogin.collapseView();\r\n break;\r\n case 'CampaignView':\r\n this.selectAccount.collapseView(true);\r\n break;\r\n case 'OptionsView':\r\n if (this.options.isFileImport) {\r\n this.fileUpload.collapseView();\r\n this.columnMatching.collapseView(true);\r\n } else {\r\n this.selectAccount.collapseView(true);\r\n this.selectCampaign.collapseView(true);\r\n }\r\n break;\r\n case 'ImportPreviewView':\r\n this.fileUpload.collapseView();\r\n this.columnMatching.collapseView(true);\r\n this.importOptions.collapseView(true);\r\n break;\r\n case 'ColumnMatchingView':\r\n this.fileUpload.collapseView();\r\n break;\r\n case 'SchedulingView':\r\n this.selectAccount.collapseView(true);\r\n this.selectCampaign.collapseView(true);\r\n this.importOptions.collapseView(true);\r\n break;\r\n default: break;\r\n }\r\n this.expandView(this._activeView);\r\n return true;\r\n }\r\n\r\n showErrorInGoogleLogin(msg) {\r\n if (msg) {\r\n $.advertiser.campaignImport.logoutGoogle();\r\n\r\n this.googleLogin.expandView();\r\n this.selectAccount.collapseView();\r\n this.selectCampaign.collapseView();\r\n this.importOptions.collapseView();\r\n if (this.scheduleForm) {\r\n this.scheduleForm.collapseView();\r\n }\r\n this.googleLogin.showAuthError(msg);\r\n } else {\r\n window.App.views.alertCenter.showError(i18nErrors.getString('ErrorNumber_-1'));\r\n }\r\n }\r\n\r\n onAuthError(errorCode) {\r\n logger.logMessage([constants.LOGCATEGORY.TRACE], constants.LOGLEVEL.INFO, '/campaign/importcampaign',\r\n `Receive an auth error: ${errorCode}`);\r\n const msg = errorHelper.getErrorDetailsMessage(errorCode);\r\n\r\n this.showErrorInGoogleLogin(msg);\r\n }\r\n\r\n onGoogleOdataError(err) {\r\n let code;\r\n let msg;\r\n const googleLoginAccount = this.googleLogin.getSummaryInfo().LoginInfo;\r\n\r\n if (err.body) {\r\n code = _.propertyOf(err.body[0])('Code');\r\n }\r\n\r\n switch (code) {\r\n case 'GoogleSyncNotAdWordsUser':\r\n msg = i18n.get('CampaignImport_GSyncNotAdsUser').replace('{0}', googleLoginAccount);\r\n break;\r\n case 'GoogleSyncInvalidCustomerId':\r\n msg = i18n.get('CampaignImport_GSyncInvalidCustomerId');\r\n break;\r\n case 'GoogleSyncOAuthTokenRevoked':\r\n msg = i18n.get('CampaignImport_GSyncOAuthTokenRevoked');\r\n break;\r\n case 'GoogleSyncWebExceptionTimeout':\r\n msg = i18n.get('CampaignImport_GSyncOperationTimeout');\r\n break;\r\n case code === 'GoogleSyncAccountNotSetUp':\r\n msg = i18n.get('CampaignImport_GSyncAccountNotSetUp').replace('{0}', googleLoginAccount);\r\n break;\r\n case 'GoogleSyncUserIsNotAuthorized':\r\n msg = i18n.get('CampaignImport_GSyncAuthorizationError');\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n this.showErrorInGoogleLogin(msg);\r\n }\r\n\r\n onImportFail(data) {\r\n if (!this._activeView) {\r\n if (this.options.isFileImport && this.importOptions) {\r\n this.expandView(this.importOptions);\r\n } else if (this.scheduleForm) {\r\n this.expandView(this.scheduleForm);\r\n }\r\n }\r\n const viewName = this._activeView && this._activeView.name();\r\n\r\n $('.grid-edit-icon').hide(); //hide edit icons.\r\n\r\n if (viewName === 'OptionsView') {\r\n this.importOptions.setDisable(true);\r\n }\r\n\r\n if (data && data.Message) {\r\n let errorCode = data.FailureReason || data.ErrorCode;\r\n let failureDetailsIncludeErrorCode = data.FailureDetails && safeJson.parseSync(data.FailureDetails);\r\n let errorDetail;\r\n\r\n if (failureDetailsIncludeErrorCode) {\r\n errorDetail = failureDetailsIncludeErrorCode.ErrorCode === errorCode ? failureDetailsIncludeErrorCode.ErrorDetail : '';\r\n } else {\r\n errorDetail = data.ErrorDetail;\r\n }\r\n\r\n if (errorCode === 17015) {\r\n let errorView = new ImportFailureDetailsTableView({\r\n message: data.Message,\r\n data: errorDetail,\r\n failureReason: errorCode,\r\n }).render();\r\n\r\n if (viewName === 'OptionsView') {\r\n // if it is options view, importCampaign.js will handle the render/remove of the error view.\r\n this.importFailureDetailsTableView = errorView;\r\n\r\n $('#ImportOptions .error-panel').html(this.importFailureDetailsTableView.el);\r\n $('#ImportOptionsSection #Cancel').focus();\r\n } else if (viewName === 'SchedulingView') {\r\n // scheduling view will handle the render/remove of the error view\r\n this.scheduleForm.setErrorView(errorView);\r\n $('#ScheduleFormView .btn-cancel').focus();\r\n } else {\r\n $.advertiser.showJsonErrors(data);\r\n }\r\n } else if (errorHelper.isGoogleAuthError(data.ErrorCode)) {\r\n this.onAuthError(data.ErrorCode);\r\n } else {\r\n $.advertiser.showJsonErrors(data);\r\n }\r\n\r\n $.advertiser.hideLoadingPanel();\r\n $.advertiser.loadingPanel.updateText($('#loadingText').val());\r\n }\r\n }\r\n\r\n showImportSummary() {\r\n /* @this ImportState */\r\n function onSuccess(data) {\r\n if (!data.Errors || this.useOdata) {\r\n if (this.options.isFileImport) {\r\n data.FileUpload = this.fileUpload.getSummaryInfo();\r\n data.ColumnMatching = this.columnMatching.getSummaryInfo();\r\n } else {\r\n data.Login = this.googleLogin.getSummaryInfo();\r\n data.Account = this.selectAccount.getSummaryInfo();\r\n data.Campaign = this.selectCampaign.getSummaryInfo();\r\n }\r\n\r\n data.ImportOptions = this.importOptions.getSummaryInfo();\r\n this.importSummary.bindData(data);\r\n $('#ImportEditViews').hide();\r\n this.expandView(this.importSummary);\r\n $.advertiser.hideLoadingPanel();\r\n }\r\n }\r\n\r\n if (this.options.uxMode === 'signup' && this.isUpdatedImportUIForSignUpEnabled) {\r\n $.advertiser.signup.selectAccountSuccess();\r\n $('#ImportSummarySection').show();\r\n $('#LoginDisclaimer').hide();\r\n $('#EditLoginSummary').hide();\r\n $.advertiser.hideLoadingPanel();\r\n this.selectCampaign.collapseView(true);\r\n this.importSummary.enableAddPayment({\r\n url: this.options.urls.rurl,\r\n customerId: this.customerId,\r\n accountId: this.currentAccountId,\r\n });\r\n\r\n logger.logMessage([constants.LOGCATEGORY.TRACE], constants.LOGLEVEL.INFO, '/campaign/importcampaign',\r\n 'Sign up user in new sign up UI pilot has reached import summary message');\r\n } else {\r\n getSummaryCounts.call(this, onSuccess.bind(this));\r\n }\r\n }\r\n\r\n onImportOptionsSuccess(data) {\r\n /* @this ImportState */\r\n function onImportPreviewSuccess(result) {\r\n if ((result && !result.Errors) || this.useOdata) {\r\n this.importPreview.bindData(result);\r\n this.importOptions.collapseView(true);\r\n this.expandView(this.importPreview);\r\n } else {\r\n $.advertiser.ajaxError();\r\n }\r\n }\r\n\r\n const isFileImport = this.options.isFileImport;\r\n\r\n // Status in data has two options: ValidationComplete and Complete. Complete, we don't show preview.\r\n if (this.isContinueImport && data && data.Status === 'Complete') {\r\n logger.logMessage([constants.LOGCATEGORY.TRACE], constants.LOGLEVEL.INFO, '/campaign/importcampaign',\r\n 'Import is Complete in continue import. Start to show import summary.');\r\n this.showImportSummary();\r\n if (!isFileImport && this.options.uxMode !== 'signup') {\r\n $('#NewImportSummarySection').hide();\r\n $('#ImportSummarySection').show();\r\n }\r\n return;\r\n }\r\n\r\n if (isFileImport) {\r\n if (this.useOdata) {\r\n const url = queryify(getImportPreviewUrlTmpl, { importId: this.importId });\r\n\r\n odata.get(url) // no need ui blocker as polling already has.\r\n .then((result) => {\r\n onImportPreviewSuccess.call(this, { Data: result });\r\n })\r\n .catch(() => {\r\n window.App.views.alertCenter.showError(i18nErrors.getString('ErrorNumber_-1'));\r\n $.advertiser.hideLoadingPanel();\r\n });\r\n } else {\r\n $.advertiser.ajaxPost({\r\n url: this.options.urls.getImportPreviewUrl,\r\n data: {\r\n importId: this.importId,\r\n },\r\n traditional: true,\r\n ignoreBeforeAjax: true,\r\n hideLoadingPanelOnSuccess: false,\r\n onSuccess: onImportPreviewSuccess.bind(this),\r\n });\r\n }\r\n } else {\r\n logger.logMessage([constants.LOGCATEGORY.TRACE], constants.LOGLEVEL.INFO, '/campaign/importcampaign',\r\n 'Start to show import summary for google import.');\r\n this.showImportSummary();\r\n }\r\n }\r\n}\r\n\r\nfunction createStateInstance(options) {\r\n return new ImportState(options);\r\n}\r\n\r\nfunction invalidateGridCacheAfterCompleteImport() {\r\n // Need to invalidate cache after an import is completed.\r\n // We don't make a specific request or navigate to a new page when that happens\r\n // so do it manually here. Otherwise, the Campaign grid may not fetch\r\n // newly imported entities\r\n let contextsToUpdate = summaryGridsActionMap.getActionMapping('completeimport');\r\n\r\n if (contextsToUpdate && contextsToUpdate.dependentIds) {\r\n summaryDataContextManager.updateContext(contextsToUpdate.dependentIds);\r\n } else {\r\n throw new Error('Could not find completeimport action mapping');\r\n }\r\n}\r\n\r\nexport {\r\n getGoogleCampaigns,\r\n getGoogleAccounts,\r\n createStateInstance,\r\n scrollToTop,\r\n goBack,\r\n removeView,\r\n showODataError,\r\n getCustomerId,\r\n logException,\r\n startPollingUntilImportStarted,\r\n invalidateGridCacheAfterCompleteImport,\r\n cookieHelperForEditImport,\r\n};\r\n","/* eslint-disable */\r\nimport _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport UploadService from '@bingads-webui-component-legacy/azure-upload/index';\r\nimport logger from '@bingads-webui-static-legacy/instrumentation/index';\r\nimport setting from '@bingads-webui-static-legacy/instrumentation/campaignSchemaAndSetting';\r\nimport constants from '@bingads-webui-static-legacy/instrumentation/constants';\r\nimport instrumentation from '@bingads-webui-static-legacy/instrumentation/instrumentation';\r\nimport * as safeJSON from '@bingads-webui/safe-json';\r\nimport config from '@bingads-webui-component-legacy/config/index';\r\nvar i18n = window.globalLegacyI18n.get('component/i18n/loader!campaignui/feature/import-campaigns');\r\nvar upload = (function (options) {\r\n options = options || ({});\r\n if (!options.file) {\r\n logger.logError('import-campaigns/azureUploader', 'Unexpected error: options.file is not set!');\r\n return Promise.reject();\r\n }\r\n var file = options.file;\r\n if (file.size === 0) {\r\n return Promise.reject({\r\n 'localizedError': i18n.get('FileImport_Upload_InvalidFile')\r\n });\r\n }\r\n logger.logMessage([constants.LOGCATEGORY.TRACE], constants.LOGLEVEL.INFO, 'import-campaigns/azureUploader', 'Start file import using new approach, file name: ' + file.name + ', size: ' + file.size + 'bytes, type: ' + file.type);\r\n var allowedExtensions = ['.csv', '.tsv', '.xlsx', '.zip'];\r\n var uploadService = new UploadService({\r\n file: options.file,\r\n validateFunc: function (ext) {\r\n logger.logMessage([constants.LOGCATEGORY.TRACE], constants.LOGLEVEL.INFO, 'import-campaigns/azureUploader', 'File extension is ' + ext);\r\n return ext && _.contains(allowedExtensions, ext);\r\n }\r\n });\r\n return uploadService.start().then(function (data) {\r\n var urlWithoutSas = data && data.slice(0, data.indexOf('?'));\r\n var message = 'Uploaded successfully. File name: ' + options.file.name + ', size: ' + options.file.size + 'bytes, blobUrl: ' + urlWithoutSas;\r\n logger.logMessage([constants.LOGCATEGORY.TRACE], constants.LOGLEVEL.INFO, 'import-campaigns/azureUploader', message);\r\n return Promise.resolve(data);\r\n }).catch(function (err) {\r\n err = err || ({});\r\n if (err.ValidatationFailed) {\r\n logger.logMessage([constants.LOGCATEGORY.TRACE], constants.LOGLEVEL.INFO, 'import-campaigns/azureUploader', 'The file extension is not supported.');\r\n return Promise.reject({\r\n 'localizedError': i18n.get('FileImport_Upload_InvalidFileExtension')\r\n });\r\n } else {\r\n var message;\r\n if (err.stack) {\r\n message = 'Message: ' + err.message + '.\\t Stack: ' + err.stack;\r\n } else {\r\n message = 'Error: ' + safeJSON.stringifySync(err);\r\n }\r\n logger.logError('import-campaigns/azureUploader', message);\r\n if (err.customizedCategory === 'NotSupported') {\r\n err = {\r\n 'localizedError': i18n.get('FileImport_Upload_UnSupportedBrowser')\r\n };\r\n } else if (err.customizedCategory === 'ReadUploadFailed') {\r\n err = {\r\n 'localizedError': i18n.get('FileImport_Upload_FailedMessage')\r\n };\r\n }\r\n return Promise.reject(err);\r\n }\r\n }).finally(function () {\r\n logger.endActivity();\r\n });\r\n}).asLoggingStart(setting.ACTIVITYNAME.ImportCampaignsClickToUploadFile, setting.SCENARIONAME.ImportCampaignsFileUpload);\r\nexport default {\r\n upload: upload\r\n};\r\n\r\n","import _ from 'underscore';\r\nimport { FileImportPage } from '@bingads-webui-campaign/file-import-page';\r\n\r\nimport * as i18nErrors from '@bingads-webui-component-legacy/api-errors-campaign/index';\r\n\r\nimport azureUploader from '../azureUploader';\r\nimport { createDeps, getBlacklist } from './shared-dependencies';\r\n\r\nfunction getImportTemplateUrl({ config }) {\r\n const Permissions = config.get('Permissions');\r\n let fileName = 'ImportTemplateWithAdExtensions.csv';\r\n\r\n if (Permissions.IsDSAMixedModeCampaignEnabled) {\r\n if (Permissions.IsEnhancedShoppingCampaignAllowed) {\r\n fileName = 'ImportTemplateWithAdExtensionsAndBSCAndAdGroupType.csv';\r\n } else {\r\n fileName = 'ImportTemplateWithAdExtensionsAndAdGroupType.csv';\r\n }\r\n } else if (Permissions.IsEnhancedShoppingCampaignAllowed) {\r\n fileName = 'ImportTemplateWithAdExtensionsAndBSC.csv';\r\n }\r\n const TemplatesPathUrl = config.get('TemplatesPathUrl');\r\n\r\n const importTemplateUrl = `${TemplatesPathUrl}Import/${fileName}`;\r\n\r\n return importTemplateUrl;\r\n}\r\n\r\nexport function initFileImportPage(settings) {\r\n const commonDeps = createDeps(settings);\r\n const deps = _.extend(commonDeps, {\r\n azureUploader: azureUploader.upload,\r\n i18nErrors,\r\n importTemplateUrl: getImportTemplateUrl(commonDeps),\r\n defaultLogActivity: commonDeps.logActivities.clickOnImportFromFile,\r\n });\r\n\r\n deps.logActivities = _.extend(deps.logActivities, {\r\n renderImportColumnMatching: deps.scenarios.fileimport.renderImportColumnMatching.create(),\r\n renderImportOptions: deps.scenarios.fileimport.renderImportOptions.create(),\r\n renderImportPreview: deps.scenarios.fileimport.renderImportPreview.create(),\r\n renderImportSummary: deps.scenarios.fileimport.renderImportSummary.create(),\r\n });\r\n\r\n return new FileImportPage({\r\n deps,\r\n el: settings.isForVNext ? undefined : '#ImportPage',\r\n options: {\r\n currentStep: 'file-upload-step',\r\n importId: settings.importId,\r\n subFieldsBlacklist: getBlacklist(),\r\n },\r\n });\r\n}\r\n","import Promise from 'bluebird';\r\nimport _ from 'underscore';\r\nimport { GoogleImportPage } from '@bingads-webui-campaign/google-import-page';\r\nimport { MultiAccountGoogleImportPage } from '@bingads-webui-campaign/account-import-page';\r\n\r\nimport edm from '@bingads-webui-component-legacy/edm-campaign/index';\r\nimport jsData from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport { UetTagSelectorView } from '@bingads-webui-campaign-legacy/audiences/components/uet-tag/index';\r\nimport '@bingads-webui-static-legacy/extension/promise/withUiBlock';\r\n\r\nimport { createDeps, getBlacklist } from './shared-dependencies';\r\nimport { cookieHelperForEditImport } from '../shared/import-helper';\r\n\r\nfunction initGapi(settings) {\r\n return Promise.resolve(createDeps(settings));\r\n}\r\n\r\nexport function initDeps(settings) {\r\n return initGapi(settings).then((commonDeps) => {\r\n if (settings.isMultiAccountImport) {\r\n // eslint-disable-next-line no-param-reassign\r\n edm.customerIdType.useAdvertiserCustomerId = false;\r\n }\r\n\r\n const deps = _.extend(commonDeps, {\r\n edm,\r\n google: window.google,\r\n jsData,\r\n defaultLogActivity: commonDeps.logActivities.clickOnImportFromGoogleAdWords,\r\n });\r\n\r\n return deps;\r\n });\r\n}\r\n\r\nexport function initGoogleImportDeps(settings) {\r\n\r\n return initGapi(settings).then((commonDeps) => {\r\n if (settings.isMultiAccountImport) {\r\n // eslint-disable-next-line no-param-reassign\r\n edm.customerIdType.useAdvertiserCustomerId = false;\r\n }\r\n\r\n const deps = _.extend(commonDeps, {\r\n edm,\r\n google: window.google,\r\n jsData,\r\n defaultLogActivity: commonDeps.logActivities.clickOnImportFromGoogleAdWords,\r\n cookieHelperForEditImport,\r\n UetTagSelectorView,\r\n subFieldsBlacklist: getBlacklist(),\r\n });\r\n\r\n deps.logScenario = deps.scenarios.googleimport;\r\n\r\n deps.logActivities = _.extend(deps.logActivities, {\r\n renderSelectAdWordsAccount: deps.scenarios.googleimport.renderSelectAdWordsAccount.create(),\r\n renderImportOptions: deps.scenarios.googleimport.renderImportOptions.create(),\r\n renderSelectAdWordsCampaigns: deps.scenarios.googleimport.renderSelectAdWordsCampaigns.create(),\r\n renderImportSummary: deps.scenarios.googleimport.renderImportSummary.create(),\r\n\r\n // signals, atomic signals are not defined here\r\n logInAccount: deps.scenarios.googleimport.logInAccount.create(),\r\n selectAccount: deps.scenarios.googleimport.selectAccount.create(),\r\n selectCampaign: deps.scenarios.googleimport.selectCampaign.create(),\r\n configureOptions: deps.scenarios.googleimport.configureOptions.create(),\r\n completeSchedule: deps.scenarios.googleimport.completeSchedule.create(),\r\n });\r\n\r\n return deps;\r\n });\r\n}\r\n\r\nexport function initGoogleImportPage(settings) {\r\n return initGoogleImportDeps(settings).then((deps) => {\r\n return settings.isMultiAccountImport ? new MultiAccountGoogleImportPage({\r\n deps,\r\n el: settings.isForVNext ? undefined : '#ImportPage',\r\n options: {\r\n currentStep: 'bing-account-title-step',\r\n importId: settings.importId,\r\n taskItemId: settings.taskItemId,\r\n subFieldsBlacklist: getBlacklist(),\r\n },\r\n }) : new GoogleImportPage({\r\n deps,\r\n el: settings.isForVNext ? undefined : '#ImportPage',\r\n options: {\r\n currentStep: 'google-login-step',\r\n importId: settings.importId,\r\n taskItemId: settings.taskItemId,\r\n subFieldsBlacklist: getBlacklist(),\r\n },\r\n });\r\n });\r\n}\r\n","import _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport { FacebookImportPage } from '@bingads-webui-campaign/facebook-import-page';\r\nimport { loadFacebookSdk, getEnvironment } from '@bingads-webui-campaign/import-shared-repositories';\r\nimport edm from '@bingads-webui-component-legacy/edm-campaign/index';\r\nimport jsData from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport timeZoneMapper from '@bingads-webui-component-legacy/timezonemapper/index';\r\nimport { UetTagSelectorView } from '@bingads-webui-campaign-legacy/audiences/components/uet-tag/index';\r\nimport '@bingads-webui-static-legacy/extension/promise/withUiBlock';\r\nimport { createDeps } from './shared-dependencies';\r\nimport { cookieHelperForEditImport } from '../shared/import-helper';\r\n\r\nexport function initFacebookImportDeps(settings) {\r\n // not fetch FB login SDK in local test env with test token used\r\n // this is to decrease the API call for FB to stablize automation tests\r\n const currentEnv = getEnvironment(document.domain);\r\n const loadSDK = currentEnv === 'LOCAL' && settings.token ? () => Promise.resolve() : loadFacebookSdk;\r\n\r\n return loadSDK().then((sdk) => {\r\n const commonDeps = createDeps(settings);\r\n let deps = _.extend(commonDeps, {\r\n edm,\r\n jsData,\r\n timeZoneMapper,\r\n defaultLogActivity: commonDeps.logActivities.clickOnImportFromFacebook,\r\n cookieHelperForEditImport,\r\n UetTagSelectorView,\r\n });\r\n\r\n // if sdk is not undefined then add it into deps\r\n if (!_.isUndefined(sdk)) {\r\n deps = _.extend(deps, {\r\n FB: sdk,\r\n });\r\n }\r\n\r\n deps.logScenario = deps.scenarios.facebookimport;\r\n\r\n deps.logActivities = _.extend(deps.logActivities, {\r\n renderSelectAdWordsAccount: deps.scenarios.facebookimport.renderSelectAdWordsAccount.create(),\r\n renderImportOptions: deps.scenarios.facebookimport.renderImportOptions.create(),\r\n renderSelectAdWordsCampaigns: deps.scenarios.facebookimport.renderSelectAdWordsCampaigns.create(),\r\n renderImportSummary: deps.scenarios.facebookimport.renderImportSummary.create(),\r\n\r\n // signals, atomic signals are not defined here\r\n logInAccount: deps.scenarios.facebookimport.logInAccount.create(),\r\n selectAccount: deps.scenarios.facebookimport.selectAccount.create(),\r\n selectCampaign: deps.scenarios.facebookimport.selectCampaign.create(),\r\n configureOptions: deps.scenarios.facebookimport.configureOptions.create(),\r\n completeSchedule: deps.scenarios.facebookimport.completeSchedule.create(),\r\n });\r\n return deps;\r\n });\r\n}\r\n\r\nexport function initFacebookImportPage(settings) {\r\n return initFacebookImportDeps(settings).then((deps) => {\r\n return new FacebookImportPage({\r\n deps,\r\n options: {\r\n currentStep: 'facebook-login-step',\r\n importId: settings.importId,\r\n taskItemId: settings.taskItemId,\r\n },\r\n });\r\n });\r\n}\r\n","import _ from 'underscore';\r\nimport edm from '@bingads-webui-component-legacy/edm-campaign/index';\r\nimport timeZoneMapper from '@bingads-webui-component-legacy/timezonemapper/index';\r\nimport jsData from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport { UetTagSelectorView } from '@bingads-webui-campaign-legacy/audiences/components/uet-tag/index';\r\nimport '@bingads-webui-static-legacy/extension/promise/withUiBlock';\r\n\r\nimport { createDeps } from './shared-dependencies';\r\nimport { cookieHelperForEditImport } from '../shared/import-helper';\r\n\r\n\r\nexport function initAmazonImportDeps(settings) {\r\n const commonDeps = createDeps(settings);\r\n const deps = _.extend(commonDeps, {\r\n edm,\r\n jsData,\r\n timeZoneMapper,\r\n defaultLogActivity: commonDeps.logActivities.clickOnImportFromAmazonSPA,\r\n cookieHelperForEditImport,\r\n UetTagSelectorView,\r\n });\r\n\r\n deps.logScenario = deps.scenarios.amazonimport;\r\n\r\n deps.logActivities = _.extend(deps.logActivities, {\r\n renderSelectAmazonAccount: deps.scenarios.amazonimport.renderSelectAmazonAccount.create(),\r\n renderImportOptions: deps.scenarios.amazonimport.renderImportOptions.create(),\r\n renderSelectAmazonCampaigns: deps.scenarios.amazonimport.renderSelectAmazonCampaigns.create(),\r\n renderImportSummary: deps.scenarios.amazonimport.renderImportSummary.create(),\r\n\r\n // signals, atomic signals are not defined here\r\n logInAccount: deps.scenarios.amazonimport.logInAccount.create(),\r\n selectAccount: deps.scenarios.amazonimport.selectAccount.create(),\r\n selectCampaign: deps.scenarios.amazonimport.selectCampaign.create(),\r\n configureOptions: deps.scenarios.amazonimport.configureOptions.create(),\r\n completeSchedule: deps.scenarios.amazonimport.completeSchedule.create(),\r\n });\r\n\r\n return deps;\r\n}\r\n","import _ from 'underscore';\r\nimport edm from '@bingads-webui-component-legacy/edm-campaign/index';\r\nimport timeZoneMapper from '@bingads-webui-component-legacy/timezonemapper/index';\r\nimport jsData from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport { UetTagSelectorView } from '@bingads-webui-campaign-legacy/audiences/components/uet-tag/index';\r\nimport '@bingads-webui-static-legacy/extension/promise/withUiBlock';\r\n\r\nimport { createDeps } from './shared-dependencies';\r\nimport { cookieHelperForEditImport } from '../shared/import-helper';\r\n\r\n\r\nexport function initPinterestImportDeps(settings) {\r\n const commonDeps = createDeps(settings);\r\n const deps = _.extend(commonDeps, {\r\n edm,\r\n jsData,\r\n timeZoneMapper,\r\n defaultLogActivity: commonDeps.logActivities.clickOnImportFromPinterestSPA,\r\n cookieHelperForEditImport,\r\n UetTagSelectorView,\r\n });\r\n\r\n deps.logScenario = deps.scenarios.pinterestimport;\r\n\r\n return deps;\r\n}\r\n","import config from '@bingads-webui-component-legacy/config/index';\r\nimport { getBlackList } from '@bingads-webui-campaign/import-components';\r\nexport function getBlacklist() {\r\n const permissions = config.get('Permissions') || {};\r\n\r\n return getBlackList(permissions);\r\n}\r\n","\r\nconst i18n = window.globalLegacyI18n.get('component/i18n/loader!campaignui/feature/import-campaigns');\r\n\r\nexport const statusOrderToBlockerTitleMap = [{\r\n Text: i18n.getString('Import_QueueStatus'),\r\n}, {\r\n Text: i18n.getString('Import_UploadStatus'),\r\n}, {\r\n Text: i18n.getString('Import_ValidationInProgressStatus'),\r\n}, {\r\n Text: i18n.getString('Import_ValidationCompletedStatus'),\r\n}, {\r\n Text: i18n.getString('Import_BulkFileGenerateInProgressStatus'),\r\n}, {\r\n Text: i18n.getString('Import_SubmitStatus'),\r\n}, {\r\n Text: i18n.getString('CampaignImport_Completed'),\r\n}];\r\n\r\nexport const statusKeyToOrderMap = {\r\n PendingExecution: 0,\r\n NotStarted: 1,\r\n UploadInProgress: 1,\r\n ValidationInProgress: 2,\r\n ValidationCompleted: 3,\r\n BulkFileGenerateInProgress: 4,\r\n SubmitInProgress: 5,\r\n Complete: 6,\r\n};\r\n","import _ from 'underscore';\r\n\r\nimport { generateCombinedSchemaObject } from '@bingads-webui-campaign/import-components';\r\nimport { formatCoupon } from '@bingads-webui-campaign/recommendation-core';\r\n\r\nimport config from '@bingads-webui-component-legacy/config/index';\r\nimport { FilterStorageFactory } from '@bingads-webui-campaign/filter-storage';\r\nimport * as i18nErrors from '@bingads-webui-component-legacy/api-errors-campaign/index';\r\nimport odata from '@bingads-webui-component-legacy/http/channel/odata';\r\nimport * as timeZoneEnumMapper from '@bingads-webui-component-legacy/timezonemapper/enumMapper';\r\nimport timeZoneMapper from '@bingads-webui-component-legacy/timezonemapper/index';\r\nimport doubleListBox from '@bingads-webui-static-legacy/shared/view/doubleListBox';\r\nimport accountSelectionLists from '@bingads-webui-static-legacy/bulk-edit/model/download/accountSelectionLists';\r\nimport dateUtil from '@bingads-webui-component-legacy/humanize/date';\r\n\r\nimport instrumentation from '@bingads-webui-campaign-legacy/instrumentation/index';\r\nimport { statusKeyToOrderMap, statusOrderToBlockerTitleMap } from './statuses';\r\n\r\nconst i18n = window.globalLegacyI18n.get('component/i18n/loader!campaignui/feature/import-campaigns');\r\nconst i18nAmdLoader = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/feature/import-campaigns');\r\n\r\n_.templateSettings = {\r\n interpolate: /\\{\\{(.+?)\\}\\}/g,\r\n};\r\n\r\nconst scenarios = {\r\n amazonimport: instrumentation.importFromAmazonSPA.create(),\r\n pinterestimport: instrumentation.importFromPinterestSPA.create(),\r\n facebookimport: instrumentation.importFromFacebookSPA.create(),\r\n fileimport: instrumentation.importFromFileSPA.create(),\r\n googleimport: instrumentation.importFromGoogleAdWordsSPA.create(),\r\n continueImport: instrumentation.continueImportSPA.create(),\r\n};\r\nconst activities = {\r\n clickOnImportFromFacebook: scenarios.facebookimport.clickOnImportFromFacebookSPA.create(),\r\n clickOnImportFromAmazonSPA: scenarios.amazonimport.clickOnImportFromAmazonSPA.create(),\r\n clickOnImportFromPinterestSPA: scenarios.pinterestimport.clickOnImportFromPinterestSPA.create(),\r\n clickOnImportFromFile: scenarios.fileimport.clickOnImportFromFileSPA.create(),\r\n clickOnImportFromGoogleAdWords: scenarios.googleimport.clickOnImportFromGoogleAdWordsSPA.create(),\r\n loadContinueImport: scenarios.continueImport.loadContinueImportSPA.create(),\r\n};\r\n\r\nexport function createDeps(settings) {\r\n const { coupon, currency, preferenceService } = settings;\r\n const deps = {\r\n check: (dependencyName) => {\r\n if (!dependencyName || _.has(deps, dependencyName)) {\r\n return true;\r\n } else {\r\n throw new Error(`Missing dependency: ${dependencyName}`);\r\n }\r\n },\r\n config,\r\n i18n,\r\n i18nAmdLoader,\r\n i18nErrors,\r\n odata,\r\n timeZoneEnumMapper,\r\n timeZoneMapper,\r\n statusKeyToOrderMap,\r\n statusOrderToBlockerTitleMap,\r\n schema: generateCombinedSchemaObject(),\r\n alertCenter: window.App.views.alertCenter,\r\n logActivities: activities,\r\n scenarios,\r\n doubleListBox,\r\n accountSelectionLists,\r\n dateUtil,\r\n };\r\n\r\n const campaignFilterFactory = new FilterStorageFactory({\r\n preferenceService,\r\n featureName: 'CampaignsGrid',\r\n });\r\n const adGroupFilterFactory = new FilterStorageFactory({\r\n preferenceService,\r\n featureName: 'AdgroupGrid',\r\n });\r\n const adFilterFactory = new FilterStorageFactory({\r\n preferenceService,\r\n featureName: 'AdGrid',\r\n });\r\n\r\n deps.campaignFilterStore = campaignFilterFactory.create('editableFilter', {\r\n filterEntityOptions: {\r\n entitySchema: { name: 'Campaign' },\r\n },\r\n });\r\n deps.adgroupFilterStore = adGroupFilterFactory.create('editableFilter', {\r\n filterEntityOptions: {\r\n entitySchema: { name: 'AdGroup' },\r\n },\r\n });\r\n deps.adFilterStore = adFilterFactory.create('editableFilter', {\r\n filterEntityOptions: {\r\n entitySchema: { name: 'Ad' },\r\n },\r\n });\r\n\r\n return _.extend(\r\n deps,\r\n settings,\r\n coupon && {\r\n coupon: formatCoupon({\r\n i18n: i18nAmdLoader,\r\n coupon,\r\n currency,\r\n }),\r\n }\r\n );\r\n}\r\n\r\nexport { getBlacklist } from './options-blacklist';\r\n","export default {\r\n SearchTermGridId: 'KeywordsSearchTerm',\r\n AuctionInsightsGridId: 'tdAuctionInsightsGrid',\r\n CampaignTabId: 'Campaign',\r\n AdGroupTabId: 'AdGroup',\r\n AdsTabId: 'Ads',\r\n KeywordsTabId: 'Keywords',\r\n ProductsGroupId: 'ProductGroups',\r\n FlattenProductsGroupId: 'FlattenAdGroupLevelProductGroups',\r\n AudienceTabId: 'AudiencesAssociation',\r\n AdExtensionsTabId: 'AdExtensions',\r\n ChangeHistoryTabId: 'ChangeHistory',\r\n DimensionsTabId: 'Bidimensions',\r\n AdGroupStatusFilterColumnName: 'AdGroupStatus',\r\n KeywordNameFilterColumnName: 'KeywordName',\r\n LocationsTabId: 'Locations',\r\n DevicesTabId: 'Devices',\r\n AdScheduleTabId: 'AdSchedule',\r\n DemographicsTabId: 'Demographics',\r\n AdDescriptionFilterColumnName: 'AdDescription',\r\n AdExtensionCampaignAssociationStatus: 'AdExtensionCampaignAssociationStatus',\r\n AdExtensionAssociationStatus: 'AdExtensionAssociationStatus',\r\n KeywordMatchTypeColumnName: 'MatchType',\r\n\r\n CampaignEntity: 'Campaign',\r\n AdGroupEntity: 'AdGroup',\r\n AdEntity: 'Ad',\r\n KeywordEntity: 'Keyword',\r\n SearchTermEntity: 'SearchTerm',\r\n AuctionInsightEntity: 'AuctionInsight',\r\n AudiencesAssociationEntity: 'AdGroupAudienceAssociation',\r\n\r\n AccountEdmEntity: 'Accounts',\r\n AdGroupCriterionEdmEntity: 'AdGroupCriterions',\r\n CampaignCriterionEdmEntity: 'CampaignCriterions',\r\n CampaignEdmEntity: 'Campaigns',\r\n DynamicSearchAdsEdmEntity: 'DynamidSearchAds',\r\n AdGroupEdmEntity: 'AdGroups',\r\n AdEdmEntity: 'Ads',\r\n KeywordEdmEntity: 'Keywords',\r\n ClickMetricId: 1,\r\n NoneMetricId: -1,\r\n};\r\n","import _ from 'underscore';\r\nimport PageContext from '@bingads-webui-static-legacy/page-context';\r\n\r\nconst i18n = window.globalLegacyI18n.get('component/i18n/loader!campaignui/feature/inline-chart');\r\n\r\nconst { IsViewThroughConversionEnabled } = PageContext.Permissions;\r\n\r\nexport default class InlineChartDropDownOption {\r\n constructor({filterOptionId} = {filterOptionId: []}) {\r\n this.filterOptionId = filterOptionId;\r\n }\r\n\r\n fetch() {\r\n let result = {\r\n data: _.compact([{\r\n id: 1,\r\n value: i18n.get('ColumnName_Clicks'),\r\n }, {\r\n id: 0,\r\n value: i18n.get('ColumnName_CostPerConversion'),\r\n }, {\r\n id: 2,\r\n value: i18n.get('ColumnName_CPA'),\r\n }, {\r\n id: 3,\r\n value: i18n.get('ColumnName_Conversions'),\r\n }, {\r\n id: 4,\r\n value: i18n.get('ColumnName_CTR'),\r\n }, {\r\n id: 5,\r\n value: i18n.get('TrendAreaChart_AxisY'),\r\n }, {\r\n id: 6,\r\n value: i18n.get('ColumnName_Spend'),\r\n }, {\r\n id: 7,\r\n value: i18n.get('Chart_AvgPosition'),\r\n }, {\r\n id: 8,\r\n value: i18n.get('ColumnName_ConversionRate'),\r\n }, {\r\n id: 9,\r\n value: i18n.get('ColumnName_Revenue'),\r\n }, {\r\n id: 10,\r\n value: i18n.get('ColumnName_ROAS'),\r\n }, {\r\n id: 11,\r\n value: i18n.get('ColumnName_AllConversionCPA'),\r\n }, {\r\n id: 12,\r\n value: i18n.get('ColumnName_AllConversions'),\r\n }, {\r\n id: 13,\r\n value: i18n.get('ColumnName_AllConversionRate'),\r\n }, {\r\n id: 14,\r\n value: i18n.get('ColumnName_AllConversionAdvertiserReportedRevenue'),\r\n }, {\r\n id: 15,\r\n value: i18n.get('ColumnName_AllConversionRevenueOnAdSpend'),\r\n }, IsViewThroughConversionEnabled && {\r\n id: 16,\r\n value: i18n.get('ColumnName_ViewThroughConversions'),\r\n }]),\r\n };\r\n\r\n if (_.isArray(this.filterOptionId) && this.filterOptionId.length !== 0) {\r\n const resultData = result.data;\r\n\r\n result.data = _.filter(resultData, (item) => {\r\n return !_.contains(this.filterOptionId, item.id);\r\n });\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport state from '@bingads-webui-component-legacy/state/index';\r\n\r\nconst i18n = window.globalLegacyI18n.get('component/i18n/loader!campaignui/feature/inline-chart');\r\n\r\nexport default class GranularityDropDownOption extends Backbone.Collection {\r\n constructor(option) {\r\n super();\r\n this.usingNewDatefilter = option && option.usingNewDatefilter;\r\n let dateObj = {};\r\n\r\n return state.getPromise('$daterange')\r\n .then((daterange) => {\r\n dateObj.dateRange = this.usingNewDatefilter ? daterange : window.App.views.Summary.dateFilter.ko_model.appliedRange();\r\n dateObj.comparedDateRange = this.usingNewDatefilter ? daterange.compared : window.App.views.Summary.dateFilter.ko_model.appliedComparedRange();\r\n\r\n let mainDateDiff = this._calculateDiff(dateObj.dateRange);\r\n let comparedDateDiff = this._calculateDiff(dateObj.comparedDateRange);\r\n let now = new Date();\r\n // we only support hourly data for a sliding 6 months window\r\n let hourlyStartDate = new Date(now.setMonth(now.getMonth() - 6));\r\n let hourlyOptionDisabled = mainDateDiff > 0 || (comparedDateDiff ? comparedDateDiff > 0 : false) ||\r\n !(dateObj.dateRange.start > hourlyStartDate) ||\r\n !(dateObj.comparedDateRange ? dateObj.comparedDateRange.start > hourlyStartDate : true);\r\n let dailyOptionDisabled = this._calculateDisabled(mainDateDiff, 1, 30) || (comparedDateDiff ? this._calculateDisabled(comparedDateDiff, 1, 30) : false);\r\n let weeklyOptionDisabled = this._calculateDisabled(mainDateDiff, 7, 210) || (comparedDateDiff ? this._calculateDisabled(comparedDateDiff, 7, 210) : false);\r\n let monthlyOptionDisabled = this._calculateDisabled(mainDateDiff, 31, 900) || (comparedDateDiff ? this._calculateDisabled(comparedDateDiff, 31, 900) : false);\r\n let quarterlyOptionDisabled = this._calculateDisabled(mainDateDiff, 90, Infinity) || (comparedDateDiff ? this._calculateDisabled(comparedDateDiff, 90, Infinity) : false);\r\n let allOptionsDisabled = hourlyOptionDisabled && dailyOptionDisabled &&\r\n weeklyOptionDisabled && monthlyOptionDisabled && quarterlyOptionDisabled;\r\n\r\n if (allOptionsDisabled) {\r\n let longerPeriod = comparedDateDiff > mainDateDiff ? comparedDateDiff : mainDateDiff;\r\n\r\n dailyOptionDisabled = this._calculateDisabled(longerPeriod, 1, 30);\r\n weeklyOptionDisabled = this._calculateDisabled(longerPeriod, 7, 210);\r\n monthlyOptionDisabled = this._calculateDisabled(longerPeriod, 31, 900);\r\n quarterlyOptionDisabled = this._calculateDisabled(longerPeriod, 90, Infinity);\r\n }\r\n\r\n return {\r\n data: [{\r\n id: 0,\r\n value: i18n.get('InlineChart_Granularity_Hourly'),\r\n enumValue: 'Hour',\r\n disabled: hourlyOptionDisabled,\r\n }, {\r\n id: 1,\r\n value: i18n.get('InlineChart_Granularity_Daily'),\r\n enumValue: 'Day',\r\n disabled: dailyOptionDisabled,\r\n }, {\r\n id: 2,\r\n value: i18n.get('InlineChart_Granularity_Weekly'),\r\n enumValue: 'Week',\r\n disabled: weeklyOptionDisabled,\r\n }, {\r\n id: 3,\r\n value: i18n.get('InlineChart_Granularity_Monthly'),\r\n enumValue: 'Month',\r\n disabled: monthlyOptionDisabled,\r\n }, {\r\n id: 4,\r\n value: i18n.get('InlineChart_Granularity_Quarterly'),\r\n disabled: quarterlyOptionDisabled,\r\n enumValue: 'Quarter',\r\n }],\r\n };\r\n });\r\n }\r\n\r\n _calculateDiff (dateRange) {\r\n if (dateRange) {\r\n let startDate = new Date(dateRange.start);\r\n let endDate = new Date(dateRange.end);\r\n let timeDiff = Math.abs(endDate.getTime() - startDate.getTime());\r\n\r\n return Math.round(timeDiff / (1000 * 3600 * 24));\r\n }\r\n return null;\r\n }\r\n\r\n _calculateDisabled (dateDiff, min, max) {\r\n return dateDiff < min || dateDiff > max;\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport DelegateAdapter from '@bingads-webui-component-legacy/js-data-delegate/adapter';\r\n\r\nclass ChartDelegateAdapter extends DelegateAdapter {\r\n // All of the methods shown here must return a promise\r\n\r\n // \"definition\" is a resource definition that would\r\n // be returned by DS#defineResource\r\n\r\n // \"options\" would be the options argument that\r\n // was passed into the DS method that is calling\r\n // the adapter method\r\n\r\n convertToDateObj(dateString) {\r\n let dateParsedArray = dateString.split('-');\r\n let year = dateParsedArray[0];\r\n let month = dateParsedArray[1] - 1;\r\n let day = dateParsedArray[2];\r\n\r\n return new Date(year, month, day, 0, 0, 0);\r\n }\r\n\r\n numberOfDataPoints(request) {\r\n let sd = this.convertToDateObj(request.startDate);\r\n let ed = this.convertToDateObj(request.endDate);\r\n\r\n switch (request.granularity) {\r\n case 'Day':\r\n return Math.round((ed - sd) / (1000 * 60 * 60 * 24)) + 1; // make sure it's 30 data points when the date range is 1-30 (30 minus 1 is 29 so have to plus 1)\r\n case 'Week':\r\n return Math.round((ed - sd) / (1000 * 60 * 60 * 24 * 7));\r\n case 'Month':\r\n return Math.round((ed - sd) / (1000 * 60 * 60 * 24 * 30));\r\n case 'Quarter':\r\n return Math.round((ed - sd) / (1000 * 60 * 60 * 24 * 90)) + 1; // make sure it's counting 1 extra quarter e.g 2013-12-20 -> 2016-12-20 is 13 quarters, not 12\r\n default:\r\n return Math.round((ed - sd) / (1000 * 60 * 60));\r\n }\r\n }\r\n\r\n prependZero(numb) {\r\n return numb < 10 ? `0${numb}` : numb;\r\n }\r\n\r\n generateFormattedDateString(date) {\r\n return `${date.getYear() + 1900}-${this.prependZero(date.getMonth() + 1)}-${this.prependZero(date.getDate())}T${this.prependZero(date.getHours())}:${this.prependZero(date.getMinutes())}:${this.prependZero(date.getSeconds())}-08:00`;\r\n }\r\n\r\n generateMockData(request) {\r\n let rtnData = [];\r\n let chartDropdownOptions = [\r\n 'AverageCPC',\r\n 'Clicks',\r\n 'CPA',\r\n 'Conversions',\r\n 'CTR',\r\n 'Impressions',\r\n 'Spend',\r\n 'AveragePosition',\r\n 'ConversionRate',\r\n 'AdvertiserReportedRevenue',\r\n 'RevenueOnAdSpend',\r\n 'AllConversionCPA',\r\n 'AllConversions',\r\n 'AllConversionRate',\r\n 'AllConversionAdvertiserReportedRevenue',\r\n 'AllConversionRevenueOnAdSpend',\r\n 'ViewThroughConversions',\r\n 'ViewThroughConversionsRevenue',\r\n 'ViewThroughConversionsCPA',\r\n 'ViewThroughConversionsReturnOnAdSpend',\r\n 'ViewThroughConversionsRate',\r\n ];\r\n\r\n _.each(chartDropdownOptions, (metricOption) => {\r\n let obj = {\r\n MetricName: metricOption,\r\n PrimaryDataPoints: [],\r\n ComparisonDataPoints: [],\r\n };\r\n let dateObj = this.convertToDateObj(request.startDate);\r\n\r\n this._fillData(request, obj.PrimaryDataPoints, dateObj);\r\n // fill in pop data\r\n if (request.compareStartDate) {\r\n this._fillData(request, obj.ComparisonDataPoints, dateObj);\r\n }\r\n\r\n rtnData.push(obj);\r\n });\r\n\r\n return rtnData;\r\n }\r\n\r\n _fillData(request, dataPoints, dateObj) {\r\n if (request.granularity === 'Hour') {\r\n let day = dateObj.getDate();\r\n\r\n for (let i = 0; i < 24; i++) {\r\n // make sure if it's hourly, it doesn't exceed to the next day\r\n // this happens when there's the daylight savings time change\r\n if (dateObj.getDate() !== day) {\r\n break;\r\n }\r\n\r\n dataPoints.push({\r\n 'DateTime': this.generateFormattedDateString(dateObj),\r\n 'Value': Math.floor(Math.random() * 100),\r\n });\r\n dateObj.addHour(1);\r\n }\r\n } else if (request.granularity === 'Day') {\r\n let numbOfdataPoints = this.numberOfDataPoints(request);\r\n\r\n for (let i = 0; i < numbOfdataPoints; i++) {\r\n dataPoints.push({\r\n 'DateTime': this.generateFormattedDateString(dateObj),\r\n 'Value': Math.floor(Math.random() * 100),\r\n });\r\n dateObj.addDay(1);\r\n }\r\n } else if (request.granularity === 'Week') {\r\n let numbOfdataPoints = this.numberOfDataPoints(request);\r\n\r\n for (let i = 0; i < numbOfdataPoints; i++) {\r\n dataPoints.push({\r\n 'DateTime': this.generateFormattedDateString(dateObj),\r\n 'Value': Math.floor(Math.random() * 100),\r\n });\r\n dateObj.addDay(7);\r\n }\r\n } else if (request.granularity === 'Month') {\r\n let numbOfdataPoints = this.numberOfDataPoints(request);\r\n\r\n for (let i = 0; i < numbOfdataPoints; i++) {\r\n dataPoints.push({\r\n 'DateTime': this.generateFormattedDateString(dateObj),\r\n 'Value': Math.floor(Math.random() * 100),\r\n });\r\n dateObj.addMonth(1);\r\n }\r\n } else if (request.granularity === 'Quarter') {\r\n let numbOfdataPoints = this.numberOfDataPoints(request);\r\n\r\n for (let i = 0; i < numbOfdataPoints; i++) {\r\n dataPoints.push({\r\n 'DateTime': this.generateFormattedDateString(dateObj),\r\n 'Value': Math.floor(Math.random() * 100),\r\n });\r\n // use setMonth and getMonth because the addMonth function doesn't work\r\n dateObj.setMonth(dateObj.getMonth() + 3);\r\n }\r\n }\r\n }\r\n\r\n findAll(request) {\r\n // Must resolve the promise with the found items\r\n return new Promise((resolve /*, reject */) => {\r\n resolve(this.generateMockData(request));\r\n });\r\n }\r\n\r\n}\r\n\r\nexport default ChartDelegateAdapter;\r\n","import _ from 'underscore';\r\n\r\nconst i18n = window.globalLegacyI18n.get('component/i18n/loader!campaignui/feature/inline-chart');\r\n\r\nexport function toODataMetricName(metric) {\r\n let metricMapping = {\r\n 0: 'AverageCPC',\r\n 1: 'Clicks',\r\n 2: 'CPA',\r\n 3: 'Conversions',\r\n 4: 'CTR',\r\n 5: 'Impressions',\r\n 6: 'Spend',\r\n 7: 'AveragePosition',\r\n 8: 'ConversionRate',\r\n 9: 'AdvertiserReportedRevenue',\r\n 10: 'RevenueOnAdSpend',\r\n 11: 'AllConversionCPA',\r\n 12: 'AllConversions',\r\n 13: 'AllConversionRate',\r\n 14: 'AllConversionAdvertiserReportedRevenue',\r\n 15: 'AllConversionRevenueOnAdSpend',\r\n 16: 'ViewThroughConversions',\r\n };\r\n\r\n let allMetrics = metric.toString().split(',');\r\n let ret = _.map(allMetrics, (m) => {\r\n return metricMapping[m] ? metricMapping[m] : m;\r\n });\r\n\r\n return `${ret}`;\r\n}\r\n\r\nexport function getMetricLocalizedNameForOdata(metric) {\r\n let convertedString = '';\r\n\r\n switch (metric) {\r\n case 0:\r\n convertedString = i18n.get('ColumnName_CostPerConversion');\r\n break;\r\n case 1:\r\n convertedString = i18n.get('ColumnName_Clicks');\r\n break;\r\n case 2:\r\n convertedString = i18n.get('ColumnName_CPA');\r\n break;\r\n case 3:\r\n convertedString = i18n.get('ColumnName_Conversions');\r\n break;\r\n case 4:\r\n convertedString = i18n.get('ColumnName_CTR');\r\n break;\r\n case 5:\r\n convertedString = i18n.get('TrendAreaChart_AxisY');\r\n break;\r\n case 6:\r\n convertedString = i18n.get('ColumnName_Spend');\r\n break;\r\n case 7:\r\n convertedString = i18n.get('Chart_AvgPosition');\r\n break;\r\n case 8:\r\n convertedString = i18n.get('ColumnName_ConversionRate');\r\n break;\r\n case 9:\r\n convertedString = i18n.get('ColumnName_Revenue');\r\n break;\r\n case 10:\r\n convertedString = i18n.get('ColumnName_ROAS');\r\n break;\r\n case 11:\r\n convertedString = i18n.get('ColumnName_AllConversionCPA');\r\n break;\r\n case 12:\r\n convertedString = i18n.get('ColumnName_AllConversions');\r\n break;\r\n case 13:\r\n convertedString = i18n.get('ColumnName_AllConversionRate');\r\n break;\r\n case 14:\r\n convertedString = i18n.get('ColumnName_AllConversionAdvertiserReportedRevenue');\r\n break;\r\n case 15:\r\n convertedString = i18n.get('ColumnName_AllConversionRevenueOnAdSpend');\r\n break;\r\n case 16:\r\n convertedString = i18n.get('ColumnName_ViewThroughConversions');\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n return convertedString;\r\n}\r\n\r\nexport function toUIMetricId(metricName) {\r\n let chartNameTable = {};\r\n\r\n chartNameTable.AverageCPC = 0;\r\n chartNameTable.Clicks = 1;\r\n chartNameTable.CPA = 2;\r\n chartNameTable.Conversions = 3;\r\n chartNameTable.ClickThruRate = 4;\r\n chartNameTable.Impressions = 5;\r\n chartNameTable.Spent = 6;\r\n chartNameTable.AveragePosition = 7;\r\n chartNameTable.ConversionRate = 8;\r\n chartNameTable.AdvertiserReportedRevenue = 9;\r\n chartNameTable.RevenueOnAdSpend = 10;\r\n chartNameTable.AllConversionCPA = 11;\r\n chartNameTable.AllConversions = 12;\r\n chartNameTable.AllConversionRate = 13;\r\n chartNameTable.AllConversionAdvertiserReportedRevenue = 14;\r\n chartNameTable.AllConversionRevenueOnAdSpend = 15;\r\n chartNameTable.ViewThroughConversions = 16;\r\n\r\n return chartNameTable[metricName];\r\n}\r\n","import _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport edmCampaign from '@bingads-webui-component-legacy/edm-campaign/index';\r\nimport ChartDelegateAdapter from '@bingads-webui-campaign-legacy/inline-chart/chartdelegateadapter';\r\nimport odataFilterConverter from '@bingads-webui-static-legacy/odata-filter-converter';\r\nimport * as chartNameConverter from '@bingads-webui-campaign-legacy/inline-chart/chartnameconverter';\r\nimport { getParameter } from '@bingads-webui/url-util';\r\nimport * as cookie from '@bingads-webui/cookie';\r\nimport Constants from '@bingads-webui-campaign-legacy/inline-chart/constants';\r\nimport instrument from '@bingads-webui-static-legacy/instrumentation/index';\r\nimport instrumentConsts from '@bingads-webui-static-legacy/instrumentation/constants';\r\nimport jsdata from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport PageContext from '@bingads-webui-static-legacy/page-context';\r\n\r\nconst { IsCustomerHierarchyEnabled } = (PageContext && PageContext.Permissions) || {};\r\n\r\nclass DataProvider {\r\n constructor() {\r\n this.p$jsdata = undefined;\r\n }\r\n\r\n fetchData(context, metric) {\r\n let request = this._generateRequest(context, metric);\r\n\r\n //TODO[tedlee]: remove this approach of using query string parameter before GA\r\n let useInlineChartMockData = !!(getParameter('useInlineChartMockData', window.location.href) === 'true') ||\r\n cookie.get('useInlineChartMockData') === 'true';\r\n\r\n if (useInlineChartMockData) {\r\n this.p$jsdata = this._fetchDataUsingMockDBAdapter(request);\r\n } else {\r\n this.p$jsdata = this._fetchDataUsingOdataAdapter(request, context.refreshGridData);\r\n }\r\n return this.p$jsdata;\r\n }\r\n\r\n /**\r\n * @param {Object} context - an object passed from viewmodel layer that contains date filter info, grid filter info, level and tab Id, and time grain.\r\n * @param {String} metric - an optional parameter that specifies which metric to request.\r\n * @return {Object} an request object for adapter layer to construct actual odata/mockdata request.\r\n */\r\n _generateRequest(context, metric) {\r\n let request = {};\r\n let transformedMetric = `'${chartNameConverter.toODataMetricName(metric)}'`;\r\n\r\n _.extend(request, {\r\n parentLevels: context.parentLevels, //[{name: 'Campaigns', id: 21223784}, { name: 'AdGroups', id: 654321}],\r\n edmEntity: context.currentEntity ? this._getEntityCollectionName(context.currentEntity) : Constants.CampaignEdmEntity,\r\n entity: context.currentEntity ? context.currentEntity : Constants.CampaignEntity,\r\n startDate: context && context.period ? this._formatDateString(context.period().start) : null,\r\n endDate: context && context.period ? this._formatDateString(context.period().end) : null,\r\n compareStartDate: context && context.period && context.period().compared ? this._formatDateString(context.period().compared.start) : null,\r\n compareEndDate: context && context.period && context.period().compared ? this._formatDateString(context.period().compared.end) : null,\r\n granularity: context.granularity && context.granularity() ? context.granularity() : 'Day', //TODO: Day\r\n metrics: transformedMetric,\r\n filters: context.filter(),\r\n movingAverage: context.isMovingAverageOn(),\r\n });\r\n return request;\r\n }\r\n\r\n _fetchDataUsingOdataAdapter(request, forceRefresh) {\r\n let filter = null;\r\n const filtersTypeString = typeof request.filters === 'string';\r\n\r\n // filter out the filters that has empty values, and log them\r\n let filtersToUse = filtersTypeString || !request.filters ?\r\n request.filters :\r\n _.select(request.filters, (filterExpression) => {\r\n const valueValid = !_.isEmpty(filterExpression.Values) && !_.contains(filterExpression.Values, ''); // no empty values\r\n\r\n if (!valueValid && instrument.logError) {\r\n instrument.logError('inlineChartV2/filterForFetch',\r\n `there are invalid values, requested filters are ${JSON.stringify(filterExpression)}`);\r\n }\r\n\r\n return valueValid; // filter out the empty values here\r\n });\r\n\r\n if (filtersToUse) {\r\n if (filtersTypeString) {\r\n filter = decodeURIComponent(filtersToUse);\r\n } else {\r\n filter = decodeURIComponent(odataFilterConverter.convertToURLParam(filtersToUse, request.entity));\r\n }\r\n\r\n // Note: temporary log added for analyzing filter expression mismatching issue.\r\n if (instrument.logMessage) {\r\n let filterRequested;\r\n\r\n if (filtersTypeString) {\r\n filterRequested = `{ \"type\" : \"string\", \"value\" : \"${filtersToUse}\" }`;\r\n } else {\r\n filterRequested = `{ \"type\" : \"object\", \"value\" : \"${JSON.stringify(filtersToUse[0])}\" }`;\r\n }\r\n\r\n instrument.logMessage([instrumentConsts.LOGCATEGORY.TRACE],\r\n instrumentConsts.LOGLEVEL.INFO,\r\n 'inlineChartV2/filterForFetch',\r\n `{ \"entity\" : \"${request.entity}\", \"filter\" : \"${filter}\", \"request\" : \"${filterRequested}\" }`);\r\n }\r\n } else {\r\n filter = {};\r\n }\r\n\r\n if (!_.isEmpty(filter)) {\r\n //filter generated from odataFilterConvert starts with '$filter='. Remove this substring.\r\n filter = filter.slice(8);\r\n }\r\n\r\n return jsdata.PerformanceTimeSeries.findAll({\r\n where: filter,\r\n entitySet: this._getScope(request).toJSON(),\r\n }, {\r\n headers: {\r\n 'x-ms-refreshcampaigncache': !!forceRefresh,\r\n },\r\n // bypass cache, as inline chart needs data aligned with grid, we need always update to date here\r\n // use bypassCache instead of cacheResponse as elsewhere (performance card) may cache the response\r\n bypassCache: true,\r\n }).then((result) => {\r\n if (!_.isEmpty(result.errors)) {\r\n return Promise.reject(result);\r\n }\r\n return this._prepareData(request, result);\r\n });\r\n }\r\n\r\n _fetchDataUsingMockDBAdapter(request) {\r\n let mockDataAdapter = new ChartDelegateAdapter('mockdb');\r\n\r\n return mockDataAdapter.findAll(request).then((result) => {\r\n return this._prepareData(request, result);\r\n });\r\n }\r\n\r\n _formatDateString(dateStr) {\r\n let leftPadding = (s) => {\r\n return s.length === 1 ? `0${s}` : s;\r\n };\r\n const dt = new Date(Date.parse(dateStr));\r\n const year = `${dt.getFullYear()}`;\r\n const month = `${dt.getMonth() + 1}`;\r\n const day = `${dt.getDate()}`;\r\n\r\n return `${year}-${leftPadding(month)}-${leftPadding(day)}`;\r\n }\r\n\r\n _prepareData(request, results) {\r\n let transformChartPoints = (series) => {\r\n let ret = {};\r\n\r\n let convertData = (point, isPrimaryData) => {\r\n if (isPrimaryData) {\r\n ret.PrimaryData = ret.PrimaryData || [];\r\n } else {\r\n ret.ComparisonData = ret.ComparisonData || [];\r\n }\r\n\r\n // Because the data-time is based on campaign time zone by default,\r\n // ideally, the format of data-time string in OData response should not\r\n // contain time zone part. In case it does, we should remove it.\r\n // e.g. \"2016-11-11T00:00:00-08:00\" -> \"2016-11-11T00:00:00\"\r\n point.DateTime = point.DateTime.substring(0, 19);\r\n\r\n // Then since chart is based on UTC, we need shift the date-time string to UTC,\r\n // otherwise, it will be treated as client's local time zone which is wrong.\r\n // e.g. \"2016-11-11T00:00:00\" -> \"2016-11-11T00:00:00Z\"\r\n point.DateTime = point.DateTime + 'Z'; // eslint-disable-line\r\n\r\n let dateTime = new Date(point.DateTime);\r\n\r\n if (isPrimaryData) {\r\n ret.PrimaryData.push([dateTime.getTime(), point.Value]);\r\n } else {\r\n ret.ComparisonData.push([dateTime.getTime(), point.Value]);\r\n }\r\n };\r\n\r\n _.each(series.PrimaryDataPoints, (point) => {\r\n convertData(point, true);\r\n });\r\n\r\n _.each(series.ComparisonDataPoints, (point) => {\r\n convertData(point, false);\r\n });\r\n\r\n return ret;\r\n };\r\n\r\n\r\n let ret = {};\r\n\r\n _.each(results, (series) => {\r\n let chartName = chartNameConverter.toUIMetricId(series.MetricName);\r\n\r\n ret[chartName] = {};\r\n ret[chartName] = transformChartPoints(series);\r\n });\r\n\r\n return ret;\r\n }\r\n\r\n _getScope(request) {\r\n let navigation = null;\r\n\r\n navigation = this._getNavigation(request.edmEntity);\r\n\r\n _.each(request.parentLevels, (nav) => {\r\n if (nav && _.isString(nav.id)) {\r\n nav.id = parseInt(nav.id);\r\n }\r\n navigation = navigation[nav.name].$withKey(nav.id);\r\n });\r\n\r\n if (request && request.edmEntity) {\r\n navigation = navigation[request.edmEntity];\r\n }\r\n\r\n let entitySet = navigation[IsCustomerHierarchyEnabled && request.edmEntity === 'Accounts' ? 'Default.HierarchicalPerformanceTimeSeries' : 'Default.PerformanceTimeSeries'].$call({\r\n granularity: `Enum.Granularity'${request.granularity}'`,\r\n startDate: request.startDate,\r\n endDate: request.endDate,\r\n comparisonStartDate: request.compareStartDate ? request.compareStartDate : null,\r\n comparisonEndDate: request.compareEndDate ? request.compareEndDate : null,\r\n metrics: request.metrics,\r\n // [tedled]: put movingAverage as false for now. will make it reflect the checkbox's selection\r\n movingAverage: request.movingAverage,\r\n });\r\n\r\n return entitySet;\r\n }\r\n\r\n _getNavigation(entityType) {\r\n switch (entityType) {\r\n case Constants.AccountEdmEntity:\r\n return edmCampaign.currentCustomer;\r\n case Constants.DynamicSearchAdsEdmEntity:\r\n // placeholder for DSA. This has to be changed.\r\n return edmCampaign.currentCustomer;\r\n case Constants.CampaignEdmEntity:\r\n return edmCampaign.currentAccount;\r\n default:\r\n return edmCampaign.currentAccount;\r\n }\r\n }\r\n\r\n _getEntityCollectionName(name) {\r\n let nameMapping = {\r\n Campaign: Constants.CampaignEdmEntity,\r\n Keyword: Constants.KeywordEdmEntity,\r\n Account: Constants.AccountEdmEntity,\r\n NegativeKeyword: Constants.KeywordEdmEntity, // Negative keywords also show keyword performance trend\r\n NegativeKeywordList: Constants.KeywordEdmEntity, // Negative keyword lists also show keyword performance trend\r\n AdGroup: Constants.AdGroupEdmEntity,\r\n Ad: Constants.AdEdmEntity,\r\n CampaignCriterion: Constants.CampaignCriterionEdmEntity,\r\n AdGroupCriterion: Constants.AdGroupCriterionEdmEntity,\r\n };\r\n\r\n if (nameMapping[name]) {\r\n return nameMapping[name];\r\n }\r\n return name;\r\n }\r\n}\r\n\r\nexport\r\ndefault DataProvider;\r\n","import _ from 'underscore';\r\nimport BPromise from 'bluebird';\r\nimport { PreferencesSubadapter } from '@bingads-webui-component-legacy/bingads-grid/service/preference-subadapter';\r\nimport { store, adapter } from '@bingads-webui-component-legacy/bingads-grid/service/grid-preferences';\r\nimport config from '@bingads-webui-component-legacy/config/index';\r\n\r\nexport let InlineChart = store.definitions.InlineChart;\r\n\r\n// To avoid 'Duplicated subadapter registration' error in new UI when we inject feature bundles\r\nif (_.isUndefined(InlineChart)) {\r\n InlineChart = store.defineResource('InlineChart');\r\n adapter.registerSubadapter('InlineChart', new PreferencesSubadapter({\r\n Resource: InlineChart,\r\n prefix({\r\n where: {\r\n project = 'CampaignUI',\r\n } = {},\r\n } = {}) {\r\n if (_.some([project], _.negate(_.isString))) {\r\n throw new Error('Invalid where clause');\r\n }\r\n\r\n return `WebApp.${project}.InlineChart`;\r\n },\r\n\r\n serialize(attrs) {\r\n const { id, project, inlineChartData } = attrs;\r\n\r\n if (_.some(project, _.negate(_.isString))) {\r\n throw new Error('Invalid attributes');\r\n }\r\n\r\n return {\r\n Id: id,\r\n Name: `WebApp.${project}.InlineChart`,\r\n Data: inlineChartData,\r\n Type: 'object',\r\n Version: 1,\r\n };\r\n },\r\n\r\n deserialize(data) {\r\n const match = data.Name.match(/^WebApp\\.(\\w+)\\.InlineChart/);\r\n\r\n if (!match) {\r\n throw new Error('Invalid preference name');\r\n }\r\n\r\n const project = match.slice(1);\r\n const inlineChartData = data.Data;\r\n const id = data.Id;\r\n\r\n return { id, project, inlineChartData };\r\n },\r\n }));\r\n}\r\n\r\n/*\r\n * This funciont gets inline chart specific preference data, and returns\r\n * promise with resolved data. If key is injected as parameter, it will\r\n * return the speicific key value inside the inline chart preference\r\n * Otherwise, it returns all key/value pairs saved for inline charts.\r\n * eg) getInlineChartInfo('CampaignUI', 'Campaign-showChart')\r\n * => promise with true/false result\r\n * getInlineChartInfo('CampaignUI')\r\n * => promise with set of key/values stored in preference\r\n*/\r\nexport function getInlineChartInfo(key = null, project = 'CampaignUI') {\r\n return InlineChart.findAll({\r\n where: { project },\r\n }).then((record) => {\r\n if (record.length === 0) {\r\n InlineChart.create({ inlineChartData: {}, project }, {\r\n path: config.get('odata.path'),\r\n });\r\n }\r\n const keyRecord = key ? record[0].inlineChartData[key] : record[0];\r\n\r\n return BPromise.resolve(record.length ? keyRecord : _.noop());\r\n });\r\n}\r\n\r\n/*\r\n * This funciont sets inline chart specific preference data, and returns\r\n * promise with resolved data. If provided key in passed parameter exists in preference\r\n * already, then it will update the value. Otherwise it will create a new key/value pair.\r\n * eg) setInlineChartInfo('{\r\n * 'Campaign-showChart': true,\r\n * }', 'CampaignUI')\r\n * => a 'Campaign-showChart' key is created/updated on preference service\r\n*/\r\nexport function setInlineChartInfo(item, project = 'CampaignUI') {\r\n return getInlineChartInfo().then((record) => {\r\n const inlineChartInfo = _.result(record, 'inlineChartData');\r\n const newinlineChartInfo = inlineChartInfo ? _.extend({}, inlineChartInfo, item) : item;\r\n\r\n if (record && !_.isEmpty(newinlineChartInfo)) {\r\n return InlineChart.update(record.id, { inlineChartData: newinlineChartInfo });\r\n } else {\r\n return InlineChart.create({ inlineChartData: newinlineChartInfo, project }, {\r\n path: config.get('odata.path'),\r\n });\r\n }\r\n });\r\n}\r\n","/* eslint-disable quotes */\r\nimport _ from 'underscore';\r\nimport ko from 'knockout';\r\nimport state from '@bingads-webui-component-legacy/state/index';\r\nimport InlineChartDropDownOption from '@bingads-webui-campaign-legacy/inline-chart/model/inlinechartdropdownoption';\r\nimport GranularityDropDownOption from '@bingads-webui-campaign-legacy/inline-chart/model/granularityDropdownOption';\r\nimport DataProvider from '@bingads-webui-campaign-legacy/inline-chart/chartdataprovider';\r\nimport PageContext from '@bingads-webui-static-legacy/page-context';\r\nimport CampaignState from '@bingads-webui-campaign-legacy/campaign-state/index';\r\nimport * as chartNameConverter from '@bingads-webui-campaign-legacy/inline-chart/chartnameconverter';\r\nimport { getInlineChartInfo, setInlineChartInfo } from '@bingads-webui-campaign-legacy/inline-chart/inline-chart-preferences';\r\nimport instrument from '@bingads-webui-static-legacy/instrumentation/index';\r\nimport instrumentSetting from '@bingads-webui-static-legacy/instrumentation/campaignSchemaAndSetting';\r\nimport instrumentConsts from '@bingads-webui-static-legacy/instrumentation/constants';\r\nimport instrumentation from '@bingads-webui-static-legacy/instrumentation/instrumentation'; // eslint-disable-line\r\nimport $ from 'jquery';\r\nimport BluebirdPromise from 'bluebird';\r\nimport Highcharts from 'highcharts';\r\nimport Constants from '@bingads-webui-campaign-legacy/inline-chart/constants';\r\nimport * as allColors from '@bingads-webui-campaign-legacy/performance-graph/graph/color';\r\n\r\nconst i18n = window.globalLegacyI18n.get('component/i18n/loader!campaignui/feature/inline-chart');\r\n\r\nexport default class InlineChartViewModel {\r\n constructor(options) {\r\n // chart context\r\n this.learnMoreLabel = i18n.get('LearnMoreLinkText');\r\n this.isUsingVnextGrid = options.isUsingVnextGrid;\r\n this.entityType = options.entityType;\r\n this.tab = options.tab;\r\n this.currentEntity = ko.observable(null);\r\n this.filter = ko.observable(null);\r\n this.period = ko.observable(null);\r\n this.granularity = ko.observable(null);\r\n this.isMovingAverageChecked = ko.observable(false);\r\n this.primaryMetricId = ko.observable(0);\r\n this.secondaryMetricId = ko.observable(0);\r\n this.parentLevels = ko.observable([]);\r\n this.project = 'CampaignUI';\r\n\r\n this.chartDataProvider = new DataProvider();\r\n this.showChart = ko.observable(true);\r\n this.chartTitle = ko.observable();\r\n this.isDataAvailable = ko.observable(false);\r\n this.noDataText = ko.observable(i18n.get('BI_Chart_NoData'));\r\n this.isComparisonDataMissing = ko.observable(false);\r\n this.comparisonDataMissingText = ko.observable(i18n.get('BI_Chart_Missing_ComparisonData'));\r\n this.showMovingAverageText = ko.observable(i18n.get('BI_Chart_Show_MovingAverage'));\r\n this.newFeatureLabel = ko.observable(i18n.get('New_Feature_Label'));\r\n this.isChartLoading = ko.observable(true);\r\n this.isGranularityShowing = ko.observable(true);\r\n this.xAxisStartValue = ko.observable(null);\r\n this.xAxisEndValue = ko.observable(null);\r\n this.comparedXAxisStartValue = ko.observable(null);\r\n this.comparedXAxisEndValue = ko.observable(null);\r\n this.hideToolbar = ko.observable(false);\r\n this.hideToggleIcon = ko.observable(false);\r\n this.isDataFetchingDone = false;\r\n\r\n if (this.isUsingVnextGrid) {\r\n state.getPromise('$daterange').then((result) => {\r\n this.period(result);\r\n });\r\n }\r\n\r\n this.isPopOn = ko.computed(() => {\r\n return this.period() ? this.period().compared != null : false;\r\n }, this);\r\n\r\n this.isMovingAverageVisible = ko.computed(() => {\r\n if (this.granularity() !== 'Day') {\r\n return false;\r\n }\r\n\r\n let startDate;\r\n let endDate;\r\n let daysBetween;\r\n let oneDayMillisecondFrame = 1000 * 60 * 60 * 24;\r\n\r\n if (this.isUsingVnextGrid) {\r\n startDate = this.period().start;\r\n endDate = this.period().end;\r\n } else if (window.App && window.App.views && window.App.views.Summary && window.App.views.Summary.dateFilter && window.App.views.Summary.dateFilter.ko_model && this.granularity() === 'Day') {\r\n startDate = window.App.views.Summary.dateFilter.ko_model.appliedRange().start;\r\n endDate = window.App.views.Summary.dateFilter.ko_model.appliedRange().end;\r\n }\r\n\r\n if (startDate && endDate) {\r\n daysBetween = Math.round((endDate - startDate) / oneDayMillisecondFrame);\r\n\r\n if (this.isPopOn() || daysBetween > 31) {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n } else {\r\n return false;\r\n }\r\n }, this);\r\n\r\n this.isMovingAverageOn = ko.computed(() => {\r\n if (this.isMovingAverageVisible()) {\r\n return this.isMovingAverageChecked();\r\n } else {\r\n return false;\r\n }\r\n }, this);\r\n\r\n this.granularityOptions = ko.observable(null);\r\n this.granularityId = 0;\r\n\r\n this.primaryMetricOptions = ko.observable(null);\r\n this.secondaryMetricOptions = ko.observable(null);\r\n\r\n // cached chart data that's used to render chart for different metric\r\n this.cachedChartData = {};\r\n\r\n this._getChartDataWhenSubscribed(this.granularity);\r\n this._getChartDataWhenSubscribed(this.isMovingAverageOn);\r\n\r\n this.startDate = ko.computed(() => {\r\n return this.period() ? this.period().start : null;\r\n }, this);\r\n\r\n this.endDate = ko.computed(() => {\r\n return this.period() ? this.period().end : null;\r\n }, this);\r\n\r\n this.comparedStartDate = ko.computed(() => {\r\n return this.period() && this.period().compared ? this.period().compared.start : null;\r\n }, this);\r\n\r\n this.comparedEndDate = ko.computed(() => {\r\n return this.period() && this.period().compared ? this.period().compared.end : null;\r\n }, this);\r\n\r\n this.primaryData = ko.observableArray();\r\n this.secondaryData = ko.observableArray();\r\n this.selectedPrimaryCategory = ko.observable();\r\n this.selectedSecondaryCategory = ko.observable();\r\n\r\n this.maxDate = new Date(9999, 12, 31);\r\n\r\n this.needUpdateChart = false;\r\n this.chartUpdatingPromise = null;\r\n\r\n if (window.App && window.App.on) {\r\n window.App.on('log-validation-method', (method) => {\r\n instrument.logMessage(\r\n [instrumentConsts.LOGCATEGORY.TRACE],\r\n instrumentConsts.LOGLEVEL.INFO,\r\n 'inlineChartV2/validateFilter',\r\n `method called: ${method}`);\r\n });\r\n }\r\n\r\n this.queueAsync = BluebirdPromise.resolve();\r\n\r\n _.bindAll(this,\r\n 'onPrimaryMetricSelected',\r\n 'onSecondaryMetricSelected',\r\n 'onShowChartButtonClick',\r\n 'onMovingAverageClick',\r\n 'onGranularitySelected',\r\n 'reloadChartData',\r\n 'formatDate',\r\n 'calculatePercentageDiff',\r\n '_getQuarter',\r\n '_getChartDataWhenSubscribed',\r\n '_updateChart',\r\n '_getChartData',\r\n '_refreshAllCharts',\r\n '_setCategoryAndData',\r\n '_metricSelectedHandler',\r\n '_alignDataForComparison',\r\n '_getChartTitle',\r\n '_getChartDataForMetric',\r\n '_logChartData',\r\n '_validateFilter',\r\n '_logCurrentFilterInfo'\r\n );\r\n }\r\n\r\n onPrimaryMetricSelected(event) {\r\n const prefObj = {};\r\n\r\n this.primaryMetricId(event.id);\r\n this._metricSelectedHandler(this.primaryData, this.selectedPrimaryCategory, allColors.primary, event);\r\n\r\n prefObj[`${PageContext.CurrentTabId}-primaryMetric`] = this.selectedPrimaryCategory().id;\r\n if (setInlineChartInfo) {\r\n setInlineChartInfo(prefObj, this.project);\r\n }\r\n }\r\n\r\n onSecondaryMetricSelected(event) {\r\n const prefObj = {};\r\n\r\n this.secondaryMetricId(event.id);\r\n this._metricSelectedHandler(this.secondaryData, this.selectedSecondaryCategory, allColors.secondary, event);\r\n\r\n prefObj[`${PageContext.CurrentTabId}-secondaryMetric`] = this.selectedSecondaryCategory().id;\r\n if (setInlineChartInfo) {\r\n setInlineChartInfo(prefObj, this.project);\r\n }\r\n }\r\n\r\n onShowChartButtonClick() {\r\n const prefObj = {};\r\n\r\n this.showChart(!this.showChart());\r\n prefObj[`${PageContext.CurrentTabId}-showChart`] = this.showChart();\r\n\r\n if (setInlineChartInfo) {\r\n setInlineChartInfo(prefObj, this.project).then(() => {\r\n if (this.showChart()) {\r\n this.reloadChartData(this.filter(), this.currentEntity());\r\n }\r\n });\r\n }\r\n }\r\n\r\n onMovingAverageClick() {\r\n const prefObj = {};\r\n\r\n this.isMovingAverageChecked(!this.isMovingAverageChecked());\r\n prefObj[`${PageContext.CurrentTabId}-showMovingAverage`] = this.isMovingAverageChecked();\r\n\r\n if (setInlineChartInfo) {\r\n setInlineChartInfo(prefObj, this.project);\r\n }\r\n return true;\r\n }\r\n\r\n onGranularitySelected(event) {\r\n if (this.showChart()) {\r\n const prefObj = {};\r\n\r\n this.granularity(event.enumValue);\r\n this.granularityId = event.id;\r\n\r\n prefObj[`${PageContext.CurrentTabId}-granularity`] = event.enumValue;\r\n if (setInlineChartInfo) {\r\n setInlineChartInfo(prefObj, this.project);\r\n }\r\n }\r\n }\r\n\r\n // DateRange, Pop and Filter and other grid changes will trigger reloadChartData\r\n reloadChartData(filter, entity, forceRefresh) {\r\n this.parentLevels(this._getParentLevels());\r\n\r\n let filterObj = filter;\r\n let entityObj = entity || this.entityType || this._getDefaultEntityBaseOnParentLevels(this.parentLevels());\r\n\r\n this.forceRefresh = forceRefresh;\r\n\r\n // if entity is search term or auction insight, set entity to be empty for default and set filter to empty\r\n if (entityObj === Constants.SearchTermEntity || entityObj === Constants.AuctionInsightEntity || entityObj === Constants.AudiencesAssociationEntity) {\r\n entityObj = '';\r\n filterObj = {};\r\n }\r\n\r\n let filterUrlParam;\r\n\r\n // At line 291, filterUrlParam as a string may be set to this.filter\r\n // onShowChartButtonClick would get the string by calling this.filter() and pass it in the current function\r\n if (_.isString(filter)) {\r\n filterUrlParam = filter;\r\n } else {\r\n const filterString = filterObj && filterObj.odataV4 ? filterObj.odataV4({ ignoreCase: false }) : '';\r\n\r\n filterUrlParam = encodeURI(filterString ? `$filter=${filterString}` : '');\r\n }\r\n\r\n // When there is no filter applied, PerformanceTimeSerieis request for all entities(Adsgroup, Ads, Kewords)\r\n // needs to query on Campaign entity inorder to improve MT performance.\r\n // the PerformanceData fetched is for Account or Campaign based on the parent level.\r\n // We skip this optimization for AccountSummary and demographics tab as they need to use the\r\n // speicified entity.\r\n if (this.isUsingVnextGrid &&\r\n !filterUrlParam &&\r\n entityObj !== 'Accounts' &&\r\n entityObj !== 'CampaignCriterions' &&\r\n entityObj !== 'AdGroupCriterions') {\r\n // No filters set default base entity.\r\n entityObj = this._getDefaultEntityBaseOnParentLevels(this.parentLevels());\r\n }\r\n\r\n this.currentEntity(entityObj);\r\n\r\n // Handles filter and showChart\r\n this.filter(this.isUsingVnextGrid ? filterUrlParam : this._validateFilter(filterObj));\r\n if (getInlineChartInfo) {\r\n getInlineChartInfo().then((result) => {\r\n const prefObj = result ? result.inlineChartData : {};\r\n\r\n this.showChart(_.isUndefined(prefObj[`${PageContext.CurrentTabId}-showChart`]) ?\r\n true :\r\n prefObj[`${PageContext.CurrentTabId}-showChart`]);\r\n if (this.showChart()) {\r\n let func = () => {\r\n let flagUpdateChart = true;\r\n let p$granularityOptions = new GranularityDropDownOption({\r\n usingNewDatefilter: this.isUsingVnextGrid,\r\n });\r\n let dateRange = state.getPromise('$daterange');\r\n\r\n BluebirdPromise.all([p$granularityOptions, dateRange]).then((promiseResults) => {\r\n const granularityOptions = promiseResults[0];\r\n const dateRangeRes = promiseResults[1];\r\n\r\n this.chartTitle(this._getChartTitle());\r\n\r\n if (this.isUsingVnextGrid) {\r\n this.period(dateRangeRes);\r\n } else {\r\n // handle date range (including Pop)\r\n const dateRangeObj = {};\r\n\r\n if (window.App && window.App.views && window.App.views.Summary && window.App.views.Summary.dateFilter && window.App.views.Summary.dateFilter.ko_model) {\r\n dateRangeObj.start = window.App.views.Summary.dateFilter.ko_model.appliedRange().start;\r\n dateRangeObj.end = window.App.views.Summary.dateFilter.ko_model.appliedRange().end;\r\n dateRangeObj.compared = window.App.views.Summary.dateFilter.ko_model.appliedComparedRange();\r\n }\r\n this.period(dateRangeObj);\r\n }\r\n\r\n // Reload Pop\r\n // Recover original value from preference service\r\n const showMovingAverageInPref = prefObj[`${PageContext.CurrentTabId}-showMovingAverage`] || true;\r\n\r\n this.isMovingAverageChecked(showMovingAverageInPref !== null && showMovingAverageInPref !== '' ? showMovingAverageInPref === 'true' : false);\r\n\r\n // Reload granularity\r\n let granularityInPref = prefObj[`${PageContext.CurrentTabId}-granularity`] || 'Day';\r\n let granularityItemArray = $.grep(granularityOptions.data, (e) => {\r\n return !e.disabled && e.enumValue === granularityInPref;\r\n });\r\n let granularityItem = granularityItemArray[0];\r\n\r\n //Get available granularity based on date range\r\n let firstEnabledGranularity = 0;\r\n\r\n for (firstEnabledGranularity = 0; firstEnabledGranularity < granularityOptions.data.length; firstEnabledGranularity++) {\r\n if (granularityOptions.data[firstEnabledGranularity] && !granularityOptions.data[firstEnabledGranularity].disabled) {\r\n break;\r\n }\r\n }\r\n\r\n // if there's no supported granularity, show an error message\r\n if (firstEnabledGranularity >= granularityOptions.data.length) {\r\n this.isChartLoading(false);\r\n this.isDataAvailable(false);\r\n this.isGranularityShowing(false);\r\n\r\n flagUpdateChart = false;\r\n } else {\r\n this.granularity(granularityItem ? granularityItem.enumValue : granularityOptions.data[firstEnabledGranularity].enumValue);\r\n this.granularityId = granularityItem ? granularityItem.id : granularityOptions.data[firstEnabledGranularity].id;\r\n this.granularityOptions(granularityOptions.data);\r\n this.isGranularityShowing(true);\r\n\r\n flagUpdateChart = true;\r\n }\r\n\r\n // Reload metrics\r\n const metricOptions = new InlineChartDropDownOption().fetch();\r\n const primaryMetric = prefObj[`${PageContext.CurrentTabId}-primaryMetric`];\r\n const primaryIdInPref = _.isUndefined(primaryMetric) || _.isNull(primaryMetric) || !_.find(metricOptions.data, {id: primaryMetric}) ?\r\n Constants.ClickMetricId : primaryMetric;\r\n const secondaryMetric = prefObj[`${PageContext.CurrentTabId}-secondaryMetric`];\r\n const secondaryIdInPref = _.isUndefined(secondaryMetric) || _.isNull(secondaryMetric) || !_.find(metricOptions.data, {id: secondaryMetric}) ?\r\n Constants.NoneMetricId : secondaryMetric;\r\n\r\n if (!(_.isUndefined(primaryIdInPref) || _.isNull(primaryIdInPref))) {\r\n this.primaryMetricId(parseInt(primaryIdInPref));\r\n }\r\n if (!(_.isUndefined(secondaryIdInPref) || _.isNull(secondaryIdInPref))) {\r\n this.secondaryMetricId(parseInt(secondaryIdInPref));\r\n }\r\n\r\n const isAgeOrGenderTab = this.tab === \"Age\" || this.tab === \"Gender\";\r\n\r\n this.primaryMetricOptions(new InlineChartDropDownOption({filterOptionId: isAgeOrGenderTab ? [2] : []}).fetch());\r\n\r\n let secondaryMetricOptions = new InlineChartDropDownOption({filterOptionId: isAgeOrGenderTab ? [2] : []}).fetch();\r\n\r\n secondaryMetricOptions.data.unshift({ id: -1, value: i18n.get('InlineChart_Metric_None') });\r\n this.secondaryMetricOptions(secondaryMetricOptions);\r\n\r\n this.isMovingAverageChecked(!!prefObj[`${PageContext.CurrentTabId}-showMovingAverage`]);\r\n\r\n // Update chart\r\n if (flagUpdateChart) {\r\n return this._updateChart();\r\n } else {\r\n return null;\r\n }\r\n });\r\n };\r\n\r\n if (instrument.asLoggingStart) {\r\n return instrument.asLoggingStart(func, instrumentSetting.ACTIVITYNAME.InlineChartV2ReloadChart, instrumentSetting.SCENARIONAME.InlineChartV2ReloadChart)();\r\n } else {\r\n return func();\r\n }\r\n } else {\r\n return null;\r\n }\r\n });\r\n }\r\n }\r\n\r\n formatDate(timestamp) {\r\n if (timestamp) {\r\n switch (this.granularity()) {\r\n case 'Hour':\r\n return Highcharts.dateFormat('%H:%M %m/%d/%Y', timestamp);\r\n case 'Day':\r\n return Highcharts.dateFormat('%a %m/%d/%Y', timestamp);\r\n case 'Week':\r\n return `Week of ${Highcharts.dateFormat('%b %d, %Y', timestamp)}`;\r\n case 'Month':\r\n return Highcharts.dateFormat('%b %Y', timestamp);\r\n case 'Quarter':\r\n return `Q${this._getQuarter(new Date(timestamp))} ${Highcharts.dateFormat('%Y', timestamp)}`;\r\n default:\r\n return '';\r\n }\r\n }\r\n\r\n return '';\r\n }\r\n\r\n calculatePercentageDiff(selectedCategory) {\r\n if (selectedCategory && selectedCategory.id === -1) {\r\n return '';\r\n }\r\n let metricData = this.cachedChartData[selectedCategory.id];\r\n let primarySum = 0;\r\n let comparisonSum = 0;\r\n let primaryAvg = 0;\r\n let comparisonAvg = 0;\r\n let value = 0;\r\n\r\n _.each(metricData.PrimaryData, (dataObj) => {\r\n if (dataObj) {\r\n primarySum = primarySum + dataObj[1];\r\n }\r\n });\r\n _.each(metricData.ComparisonData, (dataObj) => {\r\n if (dataObj) {\r\n comparisonSum = comparisonSum + dataObj[1];\r\n }\r\n });\r\n\r\n if (metricData.PrimaryData && metricData.ComparisonData) {\r\n primaryAvg = primarySum / metricData.PrimaryData.length;\r\n comparisonAvg = comparisonSum / metricData.ComparisonData.length;\r\n let avgDiff = Math.round((primaryAvg - comparisonAvg) * 100 / comparisonAvg);\r\n\r\n value = _.isNaN(avgDiff) ? 'infinity' : avgDiff;\r\n }\r\n\r\n return value === 'infinity' || value >= 0 ? ` (+${value}%)` : ` (${value}%)`;\r\n }\r\n\r\n _getQuarter(dateObj) {\r\n if (dateObj) {\r\n switch (dateObj.getUTCMonth()) {\r\n case 0:\r\n case 1:\r\n case 2:\r\n return 1;\r\n case 3:\r\n case 4:\r\n case 5:\r\n return 2;\r\n case 6:\r\n case 7:\r\n case 8:\r\n return 3;\r\n case 9:\r\n case 10:\r\n case 11:\r\n return 4;\r\n default:\r\n return -1;\r\n }\r\n }\r\n\r\n return -1;\r\n }\r\n\r\n _getChartDataWhenSubscribed(event) {\r\n event.subscribe(() => {\r\n let func = () => {\r\n return this._updateChart();\r\n };\r\n\r\n if (instrument.asLoggingStart) {\r\n return instrument.asLoggingStart(func, instrumentSetting.ACTIVITYNAME.InlineChartV2ReloadChart, instrumentSetting.SCENARIONAME.InlineChartV2ReloadChart)();\r\n } else {\r\n return func();\r\n }\r\n });\r\n }\r\n\r\n // validate the filter\r\n // right now only verify the case when filter value is undefined\r\n _validateFilter(filter) {\r\n if (!filter) {\r\n return filter;\r\n }\r\n\r\n _.each(filter, (obj) => {\r\n // validate the value. exclude the 'undefined' value\r\n if (obj.Values && obj.Values.length > 0) {\r\n let values = [];\r\n\r\n _.each(obj.Values, (value) => {\r\n if (value !== undefined) {\r\n values.push(value);\r\n } else if (instrument.logMessage) {\r\n instrument.logMessage(\r\n [instrumentConsts.LOGCATEGORY.TRACE],\r\n instrumentConsts.LOGLEVEL.INFO,\r\n 'inlineChartV2/validateFilter',\r\n `undefined filter value detected. filter: ${JSON.stringify(filter)}`);\r\n }\r\n });\r\n\r\n obj.Values = values;\r\n }\r\n\r\n // exclude this filter since there's no filter value\r\n if (obj.Values && obj.Values.length === 0) {\r\n return;\r\n }\r\n });\r\n\r\n return filter;\r\n }\r\n\r\n _updateChart() {\r\n this.isDataFetchingDone = false;\r\n\r\n // Clean old data before fetching the new data\r\n this.primaryData([]);\r\n this.secondaryData([]);\r\n\r\n this.needUpdateChart = true;\r\n\r\n this.chartUpdatingPromise = this.queueAsync.then(() => {\r\n if (!this.needUpdateChart) {\r\n return;\r\n }\r\n\r\n this.needUpdateChart = false;\r\n\r\n // Prepare chart context\r\n let chartContext = {\r\n currentEntity: this.currentEntity(),\r\n parentLevels: this.parentLevels(),\r\n filter: this.filter,\r\n period: this.period,\r\n granularity: this.granularity,\r\n isMovingAverageOn: this.isMovingAverageOn,\r\n refreshGridData: this.forceRefresh,\r\n };\r\n\r\n // Note: temporary log added for analyzing filter expression mismatching issue.\r\n if (instrument.logMessage) {\r\n instrument.logMessage([instrumentConsts.LOGCATEGORY.TRACE],\r\n instrumentConsts.LOGLEVEL.INFO,\r\n 'inlineChartV2/updateChartWithFilterASync',\r\n `{ \"entity\" : \"${chartContext.currentEntity}\", \"filter\" : \"${JSON.stringify(chartContext.filter())}\" }`);\r\n }\r\n\r\n // Fetch data\r\n this._getChartData(chartContext, 'All').then((result) => {\r\n this.isDataFetchingDone = true;\r\n\r\n this.isDataAvailable(result && result[0] && result[0].PrimaryData && result[0].PrimaryData.length !== 0);\r\n this.isComparisonDataMissing(!(result && result[0] && result[0].ComparisonData && result[0].ComparisonData.length !== 0));\r\n this.noDataText(i18n.get('BI_Chart_NoData'));\r\n\r\n if (this.isDataAvailable()) {\r\n let xAxisStartDate = result[0].PrimaryData[0][0];\r\n let xAxisEndDate = result[0].PrimaryData[result[0].PrimaryData.length - 1][0];\r\n\r\n this.xAxisStartValue(this.formatDate(xAxisStartDate));\r\n this.xAxisEndValue(this.formatDate(xAxisEndDate));\r\n if (this.isComparisonDataMissing()) {\r\n this.comparedXAxisStartValue(null);\r\n this.comparedXAxisEndValue(null);\r\n } else {\r\n this.comparedXAxisStartValue(this.formatDate(this.comparedStartDate()));\r\n this.comparedXAxisEndValue(this.formatDate(this.comparedEndDate()));\r\n }\r\n } else {\r\n this.xAxisStartValue(null);\r\n this.xAxisEndValue(null);\r\n this.comparedXAxisStartValue(null);\r\n this.comparedXAxisEndValue(null);\r\n }\r\n\r\n //massage data to align charts if number of data points are different in case of pop or moving average\r\n if (this.isPopOn()) {\r\n this._alignDataForComparison(result);\r\n }\r\n\r\n // cache the result\r\n this.cachedChartData = result;\r\n this._refreshAllCharts(result);\r\n\r\n this._logChartData();\r\n }).then(() => {\r\n // loading succeeded\r\n this.isChartLoading(false);\r\n this.noDataText(i18n.get('BI_Chart_NoData'));\r\n if (instrument.endActivity) {\r\n instrument.endActivity(instrumentSetting.ACTIVITYNAME.InlineChartV2ReloadChart);\r\n }\r\n }, (err) => {\r\n const errorCode = _.result(_.first(_.result(err, 'errors')), 'Code');\r\n\r\n // loading failed\r\n this.isChartLoading(false);\r\n this.noDataText(i18n.get(`BI_Chart_Error_${errorCode}`) || i18n.get('BI_Chart_Error'));\r\n this.isDataAvailable(false);\r\n this.xAxisStartValue(null);\r\n this.xAxisEndValue(null);\r\n this.comparedXAxisStartValue(null);\r\n this.comparedXAxisEndValue(null);\r\n\r\n if (instrument.endActivity) {\r\n instrument.endActivity(instrumentSetting.ACTIVITYNAME.InlineChartV2ReloadChart, false);\r\n }\r\n throw err;\r\n });\r\n });\r\n\r\n return this.chartUpdatingPromise;\r\n }\r\n\r\n _getChartData(context, metric) {\r\n this.isChartLoading(true);\r\n\r\n return this.chartDataProvider.fetchData(context, metric);\r\n }\r\n\r\n _refreshAllCharts(chartData) {\r\n this._setCategoryAndData(chartData, this.selectedPrimaryCategory(), allColors.primary, this.primaryData);\r\n this._setCategoryAndData(chartData, this.selectedSecondaryCategory(), allColors.secondary, this.secondaryData);\r\n }\r\n\r\n _setCategoryAndData(chartData, selectedCategory, colors, data) {\r\n if (selectedCategory && selectedCategory.id !== -1) {\r\n let currentData = chartData[selectedCategory.id];\r\n let primaryData = {\r\n data: currentData.PrimaryData,\r\n };\r\n let comparisonData = {\r\n data: currentData.ComparisonData,\r\n };\r\n let rtnData = [];\r\n\r\n if (primaryData && primaryData.data) {\r\n primaryData.category = selectedCategory.id;\r\n primaryData.name = chartNameConverter.getMetricLocalizedNameForOdata(selectedCategory.id);\r\n primaryData.color = colors.original;\r\n rtnData.push(primaryData);\r\n }\r\n\r\n if (comparisonData && comparisonData.data) {\r\n comparisonData.category = selectedCategory.id;\r\n comparisonData.name = chartNameConverter.getMetricLocalizedNameForOdata(selectedCategory.id);\r\n comparisonData.xAxis = 1;\r\n comparisonData.color = colors.comparative;\r\n rtnData.push(comparisonData);\r\n }\r\n\r\n if (colors === allColors.secondary && selectedCategory.id !== -1) {\r\n primaryData.yAxis = 1;\r\n comparisonData.yAxis = 1;\r\n }\r\n\r\n data(rtnData);\r\n }\r\n }\r\n\r\n _metricSelectedHandler(dataObservable, categoryObservable, colors, metric) {\r\n if (metric.id === '-1') {\r\n this.dataObservable([]);\r\n } else {\r\n categoryObservable(metric);\r\n let currentData = this._getChartDataForMetric(metric.id, colors.original);\r\n let primaryData = {\r\n data: currentData.length > 0 ? currentData[0].PrimaryData : null,\r\n };\r\n let comparisonData = {\r\n data: currentData.length > 0 ? currentData[0].ComparisonData : null,\r\n };\r\n let rtnData = [];\r\n\r\n if (primaryData && primaryData.data) {\r\n primaryData.category = metric.id;\r\n primaryData.name = chartNameConverter.getMetricLocalizedNameForOdata(metric.id);\r\n primaryData.color = colors.original;\r\n rtnData.push(primaryData);\r\n }\r\n\r\n if (comparisonData && comparisonData.data) {\r\n comparisonData.name = chartNameConverter.getMetricLocalizedNameForOdata(metric.id);\r\n comparisonData.category = metric.id;\r\n comparisonData.xAxis = 1;\r\n comparisonData.color = colors.comparative;\r\n rtnData.push(comparisonData);\r\n }\r\n\r\n if (colors === allColors.secondary && categoryObservable().id !== -1) {\r\n primaryData.yAxis = 1;\r\n comparisonData.yAxis = 1;\r\n }\r\n\r\n dataObservable(rtnData);\r\n }\r\n this._logChartData();\r\n }\r\n\r\n _alignDataForComparison(dataSet) {\r\n let keys = Object.keys(dataSet);\r\n\r\n _.each(keys, (key) => {\r\n let metricData = dataSet[key];\r\n\r\n if (metricData.PrimaryData && metricData.ComparisonData && metricData.PrimaryData.length !== metricData.ComparisonData.length) {\r\n let shortermetricData = metricData.PrimaryData.length > metricData.ComparisonData.length ? metricData.ComparisonData : metricData.PrimaryData;\r\n let longermetricData = metricData.PrimaryData.length < metricData.ComparisonData.length ? metricData.ComparisonData : metricData.PrimaryData;\r\n let diff = Math.abs(metricData.PrimaryData.length - metricData.ComparisonData.length);\r\n\r\n for (let i = 0; i < diff; i++) {\r\n let diff1 = longermetricData[shortermetricData.length][0] - longermetricData[shortermetricData.length - 1][0];\r\n let dayAfter = shortermetricData[shortermetricData.length - 1][0] + diff1;\r\n\r\n shortermetricData.push([dayAfter, null]);\r\n }\r\n }\r\n\r\n // Current Mt returns last day of month, instead of first day of month.\r\n // Because last day of month\r\n if (this.granularity() === 'Month' || this.granularity() === 'Quarter' ) {\r\n let dayInMillisec = 60 * 60 * 24 * 1000;\r\n\r\n for (let i = 0; i < metricData.PrimaryData.length - 1; i++) {\r\n let primaryDataDateDiff = (metricData.PrimaryData[i + 1][0] - metricData.PrimaryData[i][0]) / dayInMillisec;\r\n let comparisonDataDateDiff = (metricData.ComparisonData[i + 1][0] - metricData.ComparisonData[i][0]) / dayInMillisec;\r\n\r\n if (comparisonDataDateDiff > primaryDataDateDiff) {\r\n metricData.PrimaryData[i + 1][0] += dayInMillisec;\r\n } else if (comparisonDataDateDiff < primaryDataDateDiff) {\r\n metricData.ComparisonData[i + 1][0] += dayInMillisec;\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n _getChartTitle() {\r\n let currentLevel = CampaignState.currentLevel;\r\n\r\n if (currentLevel === 'Account') {\r\n return i18n.get('BI_Chart_AccountLevel');\r\n } else if (currentLevel === 'Campaign') {\r\n return i18n.get('BI_Chart_CampaignLevel');\r\n } else {\r\n return i18n.get('BI_Chart_AdGroupLevel');\r\n }\r\n }\r\n\r\n _getChartDataForMetric(metricId, colorRGB) {\r\n if (this.cachedChartData && this.cachedChartData[metricId]) {\r\n let result = this.cachedChartData[metricId];\r\n\r\n result.category = metricId;\r\n result.color = colorRGB;\r\n\r\n return [result];\r\n } else {\r\n return [];\r\n }\r\n }\r\n\r\n _getParentLevels() {\r\n let currentCampaign = PageContext.CurrentCampaign;\r\n let currentAdGroup = PageContext.CurrentAdGroup;\r\n let parentLevels = [];\r\n\r\n if (currentCampaign) {\r\n parentLevels.push({name: Constants.CampaignEdmEntity, id: currentCampaign.Id});\r\n }\r\n if (currentAdGroup) {\r\n parentLevels.push({name: Constants.AdGroupEdmEntity, id: currentAdGroup.Id});\r\n }\r\n\r\n return parentLevels;\r\n }\r\n\r\n _getDefaultEntityBaseOnParentLevels(parentLevels) {\r\n let entity = Constants.CampaignEntity;\r\n\r\n if (parentLevels && parentLevels.constructor === Array && parentLevels.length > 0) {\r\n if (parentLevels[parentLevels.length - 1].name === Constants.AdGroupEdmEntity) {\r\n entity = Constants.AdEntity;\r\n } else if (parentLevels[parentLevels.length - 1].name === Constants.CampaignEdmEntity) {\r\n entity = Constants.AdGroupEntity;\r\n }\r\n }\r\n\r\n return entity;\r\n }\r\n\r\n _logChartData() {\r\n if (instrument.logMessage) {\r\n if (this.isUsingVnextGrid) {\r\n instrument.logMessage(\r\n [instrumentConsts.LOGCATEGORY.TRACE],\r\n instrumentConsts.LOGLEVEL.INFO,\r\n 'inlineChartV2/updateChart',\r\n `{ \"entity\": \"${this.currentEntity()}\", \"metric1\": \"${this.primaryData().length > 0 ? this.primaryData()[0].name : ''}\", \"metric2\": \"${this.secondaryData().length > 0 ? this.secondaryData()[0].name : ''}\", \"dateRange\": \"${state.get('$daterange').text}\", \"pop\": \"${state.get('$daterange').compared ? state.get('$daterange').compared.text : ''}\", \"movingAverage\": \"${this.isMovingAverageOn()}\" }`);\r\n } else {\r\n instrument.logMessage(\r\n [instrumentConsts.LOGCATEGORY.TRACE],\r\n instrumentConsts.LOGLEVEL.INFO,\r\n 'inlineChartV2/updateChart',\r\n `{ \"entity\": \"${this.currentEntity()}\", \"metric1\": \"${this.primaryData().length > 0 ? this.primaryData()[0].name : ''}\", \"metric2\": \"${this.secondaryData().length > 0 ? this.secondaryData()[0].name : ''}\", \"dateRange\": \"${window.App.views.Summary.dateFilter.ko_model.appliedRange().key}\", \"pop\": \"${window.App.views.Summary.dateFilter.ko_model.appliedComparedRange() ? window.App.views.Summary.dateFilter.ko_model.appliedComparedRange().key : ''}\", \"movingAverage\": \"${this.isMovingAverageOn()}\" }`);\r\n }\r\n }\r\n }\r\n\r\n _logCurrentFilterInfo(filterObj) {\r\n if (instrument.logMessage) {\r\n instrument.logMessage(\r\n [instrumentConsts.LOGCATEGORY.TRACE],\r\n instrumentConsts.LOGLEVEL.INFO,\r\n 'inlineChartV2/wrongFilterSelected',\r\n `{ \"customerId\": \"${PageContext.CurrentCustomer.Id}\", \"accountId\": \"${PageContext.CurrentAccount.Id}\", \"currentTab\": \"${PageContext.CurrentTabId}\", \"filter\": \"${JSON.stringify(filterObj)}\" }`);\r\n }\r\n }\r\n}\r\n/* eslint-enable quotes */\r\n","\r\nconst i18n = window.globalLegacyI18n.get('component/i18n/loader!campaignui/feature/inline-chart');\r\n\r\nexport default function numericSymbolFormatter(tickValue, tickInterval, numberFormatter, decimalPoint, thousandsSeparator) {\r\n let sign = tickValue < 0 ? '-' : '';\r\n let formattedNumber = `${tickValue}`;\r\n\r\n let absTickValue = Math.abs(tickValue);\r\n let absTickInterval = Math.abs(tickInterval);\r\n\r\n let numericSymbolKeys = [{\r\n val: 1e12,\r\n key: 'InlineChart_NumericalAbbreviation_Trillion',\r\n }, {\r\n val: 1e9,\r\n key: 'InlineChart_NumericalAbbreviation_Billion',\r\n }, {\r\n val: 1e6,\r\n key: 'InlineChart_NumericalAbbreviation_Million',\r\n }, {\r\n val: 1e3,\r\n key: 'InlineChart_NumericalAbbreviation_Thousand',\r\n }];\r\n\r\n if (absTickInterval >= 1000) {\r\n //when tick interval is >= 1000, treat all y-axis values as whole numbers\r\n for (let i = 0; i < numericSymbolKeys.length; ++i) {\r\n if (absTickInterval >= numericSymbolKeys[i].val ) {\r\n formattedNumber = `${sign}${numberFormatter( absTickValue / numericSymbolKeys[i].val, 0, decimalPoint, thousandsSeparator)}${i18n.get(numericSymbolKeys[i].key)}`;\r\n break;\r\n }\r\n }\r\n } else if (Math.floor(absTickValue) === absTickValue) {\r\n //integer value < 1000, render as whole number without any decimals\r\n formattedNumber = `${sign}${numberFormatter(absTickValue, 0, decimalPoint, thousandsSeparator)}`;\r\n } else {\r\n let absTickValueStr = `${absTickValue}`;\r\n //here we relay on the fact that if we don't change the precision of floating point in javascript,\r\n //javascript engine will format a floating number appropriately. That is,\r\n //String(1.01) should output '1.01', instead of something like '1.010000000000000000000002'\r\n\r\n let dotIdx = absTickValueStr.indexOf('.');\r\n let isOneDecimalValue = dotIdx > 0 && dotIdx === absTickValueStr.length - 2;\r\n\r\n if (isOneDecimalValue) {\r\n // one decimal value, such as 1.2, 0.5, render with one decimal\r\n formattedNumber = `${sign}${numberFormatter(absTickValue, 1, decimalPoint, thousandsSeparator)}`;\r\n } else {\r\n // two decimal value, render with two decimals\r\n formattedNumber = `${sign}${numberFormatter(absTickValue, 2, decimalPoint, thousandsSeparator)}`;\r\n }\r\n }\r\n\r\n return formattedNumber;\r\n}\r\n","/* eslint-disable newline-after-var */\r\nimport _ from 'underscore';\r\nimport $ from 'jquery';\r\nimport Backbone from 'backbone';\r\nimport Highcharts from 'highcharts';\r\nimport PageContext from '@bingads-webui-static-legacy/page-context';\r\nimport ko from 'knockout';\r\nimport state from '@bingads-webui-component-legacy/state/index';\r\nimport inlineChartTemplate from '@bingads-webui-campaign-legacy/inline-chart/template/inlinechart.pug';\r\nimport DropdownView from '@bingads-webui-component-legacy/dropdown/dropdownview';\r\nimport ChartView from '@bingads-webui-component-legacy/chart/chartview';\r\nimport InlineChartViewModel from '@bingads-webui-campaign-legacy/inline-chart/viewmodel/inlinechartviewmodel';\r\nimport BluebirdPromise from 'bluebird';\r\nimport numericSymbolFormatter from '@bingads-webui-campaign-legacy/inline-chart/numericsymbolformatter';\r\nimport Constants from '@bingads-webui-campaign-legacy/inline-chart/constants';\r\nimport instrument from '@bingads-webui-static-legacy/instrumentation/index';\r\nimport instrumentConsts from '@bingads-webui-static-legacy/instrumentation/constants';\r\nimport * as allColors from '@bingads-webui-campaign-legacy/performance-graph/graph/color';\r\nconst legacy$ = $;\r\nexport default class InlineChartView extends Backbone.View {\r\n constructor(options = {}) {\r\n super(options);\r\n\r\n _.bindAll(this,\r\n 'initialize',\r\n 'render',\r\n '_onGridPageLoading',\r\n '_onGridPageLoadingNewGrid',\r\n '_onShowChartChanged',\r\n '_onGranularityOptionsChanged',\r\n '_onPrimaryMetricOptionsChanged',\r\n '_onSecondaryMetricOptionsChanged',\r\n '_onPrimaryDataChanged',\r\n '_onSecondaryDataChanged',\r\n '_onTabChange',\r\n '_toggleOldNewInlineChart',\r\n '_showNewChartOnCurrentTab',\r\n '_showOldChartOnCurrentTab',\r\n '_toggleToolbar',\r\n '_insertToolBarIfNeeded',\r\n '_updateMetricDropdownDiff',\r\n '_round',\r\n '_numberWithCommas',\r\n '_redrawChart'\r\n );\r\n\r\n this.needRedraw = false;\r\n\r\n this.queueAsync = BluebirdPromise.resolve();\r\n\r\n // Create view model\r\n this.inlineChartViewModel = new InlineChartViewModel({\r\n isUsingVnextGrid: options.isUsingVnextGrid,\r\n entityType: options.entityType,\r\n tab: options.tab,\r\n });\r\n\r\n // hookup with view model property changed events\r\n this.inlineChartViewModel.showChart.subscribe(this._onShowChartChanged);\r\n this.inlineChartViewModel.granularityOptions.subscribe(this._onGranularityOptionsChanged);\r\n this.inlineChartViewModel.primaryMetricOptions.subscribe(this._onPrimaryMetricOptionsChanged);\r\n this.inlineChartViewModel.secondaryMetricOptions.subscribe(this._onSecondaryMetricOptionsChanged);\r\n this.inlineChartViewModel.primaryData.subscribe(this._onPrimaryDataChanged);\r\n this.inlineChartViewModel.secondaryData.subscribe(this._onSecondaryDataChanged);\r\n\r\n this.onGridPageLoadingHandler = (e, args) => {\r\n this._onGridPageLoading(e, args);\r\n };\r\n\r\n this.onTabChangeHandler = () => {\r\n this._onTabChange();\r\n };\r\n\r\n legacy$(document).on('grid-page-loading', this.onGridPageLoadingHandler);\r\n\r\n legacy$(document).on('onSummaryPageTabChange', this.onTabChangeHandler);\r\n\r\n this.render(options);\r\n }\r\n\r\n render() {\r\n if (this.$el.length) {\r\n this.$el.html(inlineChartTemplate());\r\n\r\n ko.applyBindings(this.inlineChartViewModel, this.$el[0]);\r\n\r\n this._toggleOldNewInlineChart();\r\n\r\n this._insertToolBarIfNeeded();\r\n\r\n if (this.options.isUsingVnextGrid) {\r\n if (this.options.tab !== 'campaign') {\r\n this._onGridPageLoadingNewGrid(this.options.filter);\r\n }\r\n } else if (legacy$.triggeredGridPageLoading) {\r\n // the 'grid-page-loading' event has been triggered before bind\r\n this._onGridPageLoading(null, legacy$.triggeredGridPageLoading);\r\n }\r\n\r\n let resizeWidth = () => {\r\n // make the chart area the same width as the title area which contains the POP control\r\n let pageTitle = $('.campaignContentContainer section.page-title');\r\n\r\n if (pageTitle && pageTitle.length > 0) {\r\n // make the chart area the same width as the title area which contains the POP control\r\n let chartContainer = this.$('.chart-container');\r\n\r\n // Since pageTitle can have negative margin, border or padding,\r\n // chartContainer's width should be set accordingly.\r\n let pageTitleInclusiveWidth = pageTitle.width() +\r\n parseFloat(pageTitle.css('marginLeft')) +\r\n parseFloat(pageTitle.css('marginRight')) +\r\n parseFloat(pageTitle.css('paddingLeft')) +\r\n parseFloat(pageTitle.css('paddingRight')) +\r\n parseFloat(pageTitle.css('border-left-width')) +\r\n parseFloat(pageTitle.css('border-right-width'));\r\n\r\n if (chartContainer && chartContainer.length > 0) {\r\n chartContainer.width(pageTitleInclusiveWidth);\r\n }\r\n\r\n let highChartContainer = this.$('#highcharts-container');\r\n\r\n let chartConainerWidthDifference = 60;\r\n\r\n if (highChartContainer && highChartContainer.length > 0) {\r\n // highchart container has to be smaller because it has some left margin\r\n highChartContainer.width(pageTitleInclusiveWidth - chartConainerWidthDifference);\r\n }\r\n }\r\n };\r\n\r\n $(window).on('resize', resizeWidth);\r\n $(window).triggerHandler('resize');\r\n }\r\n }\r\n\r\n _onGridPageLoading(e, args) {\r\n if (this._showNewChartOnCurrentTab() &&\r\n (!(args.commandType === 'Paging' || args.commandType === 'Sorting') ||\r\n args.grid.RefreshGridData)) {\r\n // handle filter\r\n let filterObj;\r\n let filterEntity = '';\r\n\r\n if (args.filter && args.filter.length) {\r\n if (instrument.logMessage) {\r\n instrument.logMessage(\r\n [instrumentConsts.LOGCATEGORY.TRACE],\r\n instrumentConsts.LOGLEVEL.INFO,\r\n 'inlineChartV2/filterPassedIn',\r\n `{ \"filter\" : \"${args.filter[0].Value}\" }`);\r\n }\r\n\r\n filterObj = JSON.parse(args.filter[0].Value);\r\n filterEntity = args.filter[0].Entity;\r\n }\r\n\r\n this.inlineChartViewModel.reloadChartData(filterObj ? filterObj.FilterExpressions : {}, filterEntity || this.options.entityType, args.RefreshGridData);\r\n }\r\n }\r\n\r\n _onGridPageLoadingNewGrid(filters) {\r\n state.getPromise('$daterange')\r\n .then((daterange) => {\r\n this.inlineChartViewModel.period(daterange);\r\n this.inlineChartViewModel.reloadChartData(filters);\r\n });\r\n }\r\n\r\n _onShowChartChanged() {\r\n // manually toggle the global toolbar when toggling the chart area\r\n if (this.inlineChartViewModel.showChart()) {\r\n this.$('.btn-toolbar > .grid-groupmenu-container').show();\r\n this.$('.btn-toolbar > .grid-custommenu-container').show();\r\n } else {\r\n this.$('.btn-toolbar > .grid-groupmenu-container').hide();\r\n this.$('.btn-toolbar > .grid-custommenu-container').hide();\r\n }\r\n }\r\n\r\n _onGranularityOptionsChanged() {\r\n ko.cleanNode(this.$('#granularity-dropdown')[0]);\r\n this.granularityDropdown = new DropdownView({\r\n el: this.$('#granularity-dropdown').first(),\r\n defaultOption: this.inlineChartViewModel.granularityId,\r\n dropDownOptions: this.inlineChartViewModel.granularityOptions(),\r\n onDropDownChanged: this.inlineChartViewModel.onGranularitySelected,\r\n });\r\n }\r\n\r\n _onPrimaryMetricOptionsChanged() {\r\n ko.cleanNode(this.$('#main-primary-dropdown')[0]);\r\n\r\n this.primaryMetricDropdown = new DropdownView({\r\n el: this.$('#main-primary-dropdown').first(),\r\n dropDownOptions: this.inlineChartViewModel.primaryMetricOptions().data,\r\n defaultOption: this.inlineChartViewModel.primaryMetricId(),\r\n onDropDownChanged: this.inlineChartViewModel.onPrimaryMetricSelected,\r\n onPopEnabled: this.inlineChartViewModel.calculatePercentageDiff,\r\n });\r\n }\r\n\r\n _onSecondaryMetricOptionsChanged() {\r\n ko.cleanNode(this.$('#main-secondary-dropdown')[0]);\r\n\r\n this.secondaryMetricDropdown = new DropdownView({\r\n el: this.$('#main-secondary-dropdown').first(),\r\n dropDownOptions: this.inlineChartViewModel.secondaryMetricOptions().data,\r\n defaultOption: this.inlineChartViewModel.secondaryMetricId(),\r\n onDropDownChanged: this.inlineChartViewModel.onSecondaryMetricSelected,\r\n onPopEnabled: this.inlineChartViewModel.calculatePercentageDiff,\r\n });\r\n }\r\n\r\n _onPrimaryDataChanged() {\r\n this._redrawChart();\r\n }\r\n\r\n _onSecondaryDataChanged() {\r\n this._redrawChart();\r\n }\r\n\r\n _isDataFetchingDone() {\r\n return this.inlineChartViewModel.isDataFetchingDone;\r\n }\r\n\r\n _redrawChart() {\r\n // There are multiple events which can trigger chart redrawing (primaryData and secondaryData changed),\r\n // to avoid the chart being redrawn multiple times frequently, we defer the redrawing to the next\r\n // execution cycle so that we redraw the view after all events are triggered.\r\n this.needRedraw = true;\r\n\r\n this.queueAsync.then(() => {\r\n if (!this._isDataFetchingDone()) {\r\n // Data is not ready yet, skip redraw\r\n return;\r\n }\r\n\r\n if (!this.needRedraw) {\r\n // The view has been redrawn already, skip redraw\r\n return;\r\n }\r\n\r\n this.needRedraw = false;\r\n\r\n // Bump up chart-iteration every time the chart is redrawn\r\n let chartIteration = parseInt(this.$('.chart-container').attr('chart-iteration'));\r\n\r\n let chartRedrawMarker = instrument.logActivityDurationMarker(\r\n `InlineChart.Redraw.Iteration-${chartIteration}`\r\n );\r\n\r\n this.$('.chart-container').attr('chart-iteration', chartIteration + 1);\r\n\r\n let self = this;\r\n new ChartView({\r\n el: this.$('#highcharts-container')[0],\r\n showWeekend: this.granularityDropdown.koModel.selectedItem().enumValue === 'Day',\r\n highchartsOptions: {\r\n series: this.inlineChartViewModel.primaryData().concat(this.inlineChartViewModel.secondaryData()),\r\n tooltip: {\r\n formatter() {\r\n let primaryPoints = [];\r\n let comparisonPoints = [];\r\n let tempHtml = '';\r\n\r\n _.each(this.points, (point) => {\r\n switch (point.color) {\r\n case allColors.primary.original:\r\n primaryPoints.push(point);\r\n break;\r\n case allColors.primary.comparative:\r\n comparisonPoints.push(point);\r\n break;\r\n case allColors.secondary.original:\r\n primaryPoints.push(point);\r\n break;\r\n case allColors.secondary.comparative:\r\n comparisonPoints.push(point);\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n\r\n if (primaryPoints.length > 0) {\r\n tempHtml = `
${self.inlineChartViewModel.formatDate(this.x)}`;\r\n _.each(primaryPoints, (point) => {\r\n tempHtml = `${tempHtml}
${point.series.name}: ${self._numberWithCommas(self._round(point.y), point.series.name)}${self._isPercentNeeded(point) ? '%' : ''}`;\r\n });\r\n }\r\n\r\n if (comparisonPoints.length > 0) {\r\n tempHtml = self.inlineChartViewModel.isMovingAverageOn() ?\r\n `${tempHtml}
Moving average` :\r\n `${tempHtml}
${self.inlineChartViewModel.formatDate(comparisonPoints[0].x)}`;\r\n _.each(comparisonPoints, (point) => {\r\n tempHtml = `${tempHtml}
${point.series.name}: ${self._numberWithCommas(self._round(point.y), point.series.name)}${self._isPercentNeeded(point) ? '%' : ''}`;\r\n });\r\n }\r\n\r\n return tempHtml;\r\n },\r\n },\r\n yAxis: [{\r\n labels: {\r\n formatter() {\r\n let tickInterval = this.axis.tickInterval;\r\n let decimalPoint = Highcharts.getOptions().lang.decimalPoint;\r\n let thousandsSeparator = ',';\r\n\r\n if ( self.inlineChartViewModel.selectedPrimaryCategory() && self.inlineChartViewModel.selectedPrimaryCategory().id === 4 ) {\r\n return `${numericSymbolFormatter(this.value, tickInterval, Highcharts.numberFormat, decimalPoint, thousandsSeparator)}%`;\r\n }\r\n return `${numericSymbolFormatter(this.value, tickInterval, Highcharts.numberFormat, decimalPoint, thousandsSeparator)}`;\r\n },\r\n },\r\n }, {\r\n labels: {\r\n formatter() {\r\n let tickInterval = this.axis.tickInterval;\r\n let decimalPoint = Highcharts.getOptions().lang.decimalPoint;\r\n let thousandsSeparator = ',';\r\n\r\n if ( self.inlineChartViewModel.selectedSecondaryCategory() && self.inlineChartViewModel.selectedSecondaryCategory().id === 4 ) {\r\n return `${numericSymbolFormatter(this.value, tickInterval, Highcharts.numberFormat, decimalPoint, thousandsSeparator)}%`;\r\n }\r\n return `${numericSymbolFormatter(this.value, tickInterval, Highcharts.numberFormat, decimalPoint, thousandsSeparator)}`;\r\n },\r\n },\r\n }],\r\n },\r\n }).render();\r\n\r\n this._updateMetricDropdownDiff();\r\n\r\n chartRedrawMarker.markEnd();\r\n });\r\n }\r\n\r\n _onTabChange() {\r\n this._toggleOldNewInlineChart();\r\n }\r\n\r\n _isPercentNeeded(point) {\r\n if ((point.color === allColors.primary.original || point.color === allColors.primary.comparative ) && this.inlineChartViewModel.selectedPrimaryCategory().id === 4) {\r\n return true;\r\n } else if ((point.color === allColors.secondary.original || point.color === allColors.secondary.comparative) && this.inlineChartViewModel.selectedSecondaryCategory().id === 4) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n _toggleOldNewInlineChart() {\r\n // toggle the new and old inline chart based on current tab\r\n if (this._showNewChartOnCurrentTab()) {\r\n $('#bi-chartToggleContainer').hide();\r\n $('#chart-container').hide();\r\n\r\n this.$el.find('.chartToggle').show();\r\n $('.globalToolBarPanel').show();\r\n if (this.inlineChartViewModel.showChart()) {\r\n this.$('.chart-container').show();\r\n }\r\n } else if (this._showOldChartOnCurrentTab()) {\r\n $('#bi-chartToggleContainer').show();\r\n $('#chart-container').show();\r\n\r\n $('.globalToolBarPanel').hide();\r\n this.$('.chart-container').hide();\r\n } else {\r\n this.$el.find('.chartToggle').hide();\r\n $('#bi-chartToggleContainer').hide();\r\n $('#chart-container').hide();\r\n\r\n $('.globalToolBarPanel').hide();\r\n this.$('.chart-container').hide();\r\n }\r\n\r\n this._toggleToolbar();\r\n\r\n $('#bi-status-text').hide();\r\n }\r\n\r\n _toggleToolbar() {\r\n if (this._showNewChartOnCurrentTab()) {\r\n if (this.options.hideChartToolbar) {\r\n this.inlineChartViewModel.hideToolbar(true);\r\n } else {\r\n this.inlineChartViewModel.hideToolbar(false);\r\n }\r\n this.inlineChartViewModel.hideToggleIcon(false);\r\n } else {\r\n this.inlineChartViewModel.hideToolbar(true);\r\n this.inlineChartViewModel.hideToggleIcon(true);\r\n }\r\n }\r\n\r\n _showNewChartOnCurrentTab() {\r\n let tabsWithNewInlineCharts = [Constants.CampaignTabId, Constants.AdGroupTabId, Constants.ProductsGroupId, Constants.FlattenProductsGroupId, Constants.AdsTabId, Constants.KeywordsTabId,\r\n Constants.LocationsTabId, Constants.AdScheduleTabId, Constants.DevicesTabId, Constants.AudienceTabId, Constants.DemographicsTabId, Constants.SearchTermGridId];\r\n let entitiesUsingNewInlineCharts = [Constants.AccountEdmEntity];\r\n\r\n return entitiesUsingNewInlineCharts.indexOf(this.options.entityType) > -1 ||\r\n tabsWithNewInlineCharts.indexOf(PageContext.CurrentTabId) > -1;\r\n }\r\n\r\n _showOldChartOnCurrentTab() {\r\n let tabsWithOldInlineCharts = [Constants.ChangeHistoryTabId];\r\n\r\n if (tabsWithOldInlineCharts.indexOf(PageContext.CurrentTabId) > -1) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n _insertToolBarIfNeeded() {\r\n let globalToolBar = $('.navbar-tertiary > .btn-toolbar > .globalToolBar');\r\n let globalToolBarPanel = $('.navbar-tertiary > .globalToolBarPanel');\r\n\r\n if (globalToolBar && globalToolBar.length > 0) {\r\n globalToolBar.appendTo(this.$('.btn-toolbar'));\r\n }\r\n\r\n if (globalToolBarPanel && globalToolBarPanel.length > 0) {\r\n globalToolBarPanel.insertAfter(this.$('.btn-toolbar'));\r\n }\r\n }\r\n\r\n _updateMetricDropdownDiff() {\r\n if (this.primaryMetricDropdown) {\r\n this.primaryMetricDropdown.koModel.showDiff(\r\n this.inlineChartViewModel.primaryData().length &&\r\n (this.inlineChartViewModel.isPopOn() || this.inlineChartViewModel.isMovingAverageOn()));\r\n\r\n this.primaryMetricDropdown.koModel.triggerShowDifference();\r\n }\r\n\r\n if (this.secondaryMetricDropdown) {\r\n this.secondaryMetricDropdown.koModel.showDiff(\r\n this.inlineChartViewModel.secondaryData().length &&\r\n (this.inlineChartViewModel.isPopOn() || this.inlineChartViewModel.isMovingAverageOn()));\r\n\r\n this.secondaryMetricDropdown.koModel.triggerShowDifference();\r\n }\r\n }\r\n\r\n _round (num) {\r\n return Math.round(num * 100) / 100;\r\n }\r\n\r\n _numberWithCommas(num, seriesName) {\r\n let numberWithCommas = num.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\r\n let metricInvolvingCost = ['AverageCPC', 'CPA', 'Spent', 'Revenue', 'CTR'];\r\n\r\n if (metricInvolvingCost.indexOf(seriesName) > -1 || numberWithCommas !== '0') {\r\n let dotIndex = numberWithCommas.indexOf('.');\r\n return numberWithCommas.length - dotIndex === 2 && dotIndex !== -1 ? `${numberWithCommas}0` : numberWithCommas;\r\n }\r\n return numberWithCommas;\r\n }\r\n\r\n remove() {\r\n super.remove();\r\n legacy$(document).off('grid-page-loading', this.onGridPageLoadingHandler);\r\n legacy$(document).off('onSummaryPageTabChange', this.onTabChangeHandler);\r\n }\r\n}\r\n","import {\r\n getGridPage,\r\n getGridRoute,\r\n getGridRouteForNewUI,\r\n} from '@bingads-webui-campaign/inline-download-grids-metadata';\r\nimport jsdata from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport edm from '@bingads-webui-component-legacy/edm-campaign/index';\r\nimport state from '@bingads-webui-component-legacy/state/index';\r\nimport setPreferenceByReportEmailRule from '@bingads-webui-campaign-legacy/bingadsgrid/service/set-preference-by-report-email-rule';\r\n\r\nconst AccountsSummary = 'AccountsSummary';\r\nconst Campaigns = 'Campaigns';\r\nconst currentPage = edm.currentAccount ? Campaigns : AccountsSummary;\r\n\r\nexport default function createSimilar(reportId, {\r\n isForNewUI,\r\n getUrlSearch,\r\n scopeHistoryPush,\r\n i18n,\r\n convertSelectionDateRangeToDateFilter,\r\n restoreDateFilter,\r\n serverContext,\r\n} = {}) {\r\n return jsdata.TaskItem\r\n .find(reportId, {\r\n entitySet: edm.currentAccount ? edm.currentAccount.TaskItems : edm.currentCustomer.TaskItems,\r\n })\r\n .then((Rule) => {\r\n const {\r\n Entity,\r\n Selection,\r\n } = Rule;\r\n\r\n if (!isForNewUI) {\r\n const page = getGridPage(Entity, Selection);\r\n\r\n if (currentPage !== page) {\r\n window.location = `${page}#reports/create_similar/${Rule.Id}`;\r\n return null;\r\n }\r\n }\r\n\r\n return setPreferenceByReportEmailRule(Rule, isForNewUI ? { isForNewUI: true, i18n, convertSelectionDateRangeToDateFilter, restoreDateFilter } : {})\r\n .then(() => {\r\n state.set('$ReportEmailRule', Rule);\r\n if (isForNewUI) {\r\n const route = getGridRouteForNewUI({ getUrlSearch, entity: Entity, selection: Selection, serverContext });\r\n\r\n scopeHistoryPush(route);\r\n } else {\r\n window.App.navigate(getGridRoute(Entity, Selection));\r\n }\r\n });\r\n });\r\n}\r\n","import _ from 'underscore';\r\nimport state from '@bingads-webui-component-legacy/state/index';\r\n\r\nexport default function loadEmails({allUsersType}) {\r\n const params = allUsersType === 'Customer' ? {\r\n cid: state.get('customer_id'),\r\n uid: state.get('user_id'),\r\n } : {\r\n cid: state.get('customer_id'),\r\n uid: state.get('user_id'),\r\n aid: state.get('account_id'),\r\n };\r\n\r\n const queryString = new URLSearchParams(params).toString();\r\n\r\n return fetch(`/campaign/users/loadEmails?${queryString}`, { method: 'GET' })\r\n .then((response) => response.json())\r\n .then((emails) => {\r\n if (_.isArray(emails)) {\r\n return emails;\r\n }\r\n\r\n const error = new Error();\r\n\r\n error.response = emails;\r\n throw error;\r\n });\r\n}\r\n","export const getImportButtonOptions = (i18n, importChannelType, lazyInject, view) =>\r\n ['start_import', {\r\n id: 'start_import',\r\n type: 'button',\r\n iconLeftGlyphName: 'ba-Add',\r\n text: i18n.getString('Import_ImportCenter_StartImport'),\r\n classes: ['btn-primary'],\r\n onClick: () => {\r\n // lazyInject is for schedule grid and view is for log grid.\r\n const router = lazyInject ? lazyInject().backboneGridView.router : view.router;\r\n\r\n router.navigateToRoute(importChannelType.toLowerCase());\r\n },\r\n }];\r\n","\r\nconst i18n = window.globalLegacyI18n.get('component/i18n/loader!campaignui/feature/import-campaigns');\r\n\r\nexport { i18n };\r\n","import _ from 'underscore';\r\nimport { cloneDeep } from '@bingads-webui-universal/primitive-utilities';\r\n\r\nconst i18n = window.globalLegacyI18n.get('component/i18n/loader!campaignui/feature/import-campaigns');\r\n\r\n\r\nfunction createParentRowForBatchedImports(batchImportGroup) {\r\n const firstInBatchIndex = batchImportGroup.length - 1;\r\n const parent = cloneDeep(batchImportGroup[firstInBatchIndex]);\r\n\r\n delete parent.Id; // remove Id, otherwise, it will make data-key duplicated.\r\n const statisticFields = parent.EntityStatistics ? parent.EntityStatistics.Values.length : 0;\r\n let initStatistics = [];\r\n const entityStatisticChangeTypes = ['Additions', 'Changes', 'Deletions', 'Errors', 'Total'];\r\n const initialEntity = {};\r\n let isBatchStillInProgress = false;\r\n let hasAnyBatchedImportFailed = false;\r\n let hasAnyBatchedImportBeenCancelled = false;\r\n let successCount = 0;\r\n let errorCount = 0;\r\n\r\n _.each(entityStatisticChangeTypes, (key) => {\r\n initialEntity[key] = 0;\r\n });\r\n\r\n for (let index = 0; index < statisticFields; index++) {\r\n initStatistics.push(_.clone(initialEntity));\r\n }\r\n\r\n if (parent.EntityStatistics) {\r\n initStatistics = _.object(parent.EntityStatistics.Keys, initStatistics);\r\n }\r\n\r\n const combinedStatistics = _.reduce(batchImportGroup, (memo, importResult) => {\r\n if (parent.EntityStatistics && importResult.EntityStatistics) {\r\n const entityStatisticMap = _.object(importResult.EntityStatistics.Keys, importResult.EntityStatistics.Values);\r\n\r\n _.each(importResult.EntityStatistics.Keys, (entityType) => {\r\n if (memo[entityType]) {\r\n _.each(entityStatisticChangeTypes, (key) => {\r\n memo[entityType][key] += entityStatisticMap[entityType][key];\r\n });\r\n } else {\r\n memo[entityType] = _.clone(entityStatisticMap[entityType]);\r\n }\r\n });\r\n }\r\n\r\n if (importResult.ErrorCode) {\r\n hasAnyBatchedImportFailed = true;\r\n }\r\n\r\n if (importResult.ImportStatus === 'Cancelled') {\r\n hasAnyBatchedImportBeenCancelled = true;\r\n }\r\n\r\n if (importResult.ImportStatus === 'InProgress' || importResult.Status === 'PendingExecution') {\r\n isBatchStillInProgress = true;\r\n }\r\n\r\n if (_.isNumber(importResult.SuccessCount)) {\r\n successCount += importResult.SuccessCount;\r\n }\r\n\r\n if (_.isNumber(importResult.ErrorCount)) {\r\n errorCount += importResult.ErrorCount;\r\n }\r\n\r\n return memo;\r\n }, initStatistics);\r\n\r\n if (parent.EntityStatistics) {\r\n parent.EntityStatistics.Values = _.values(combinedStatistics);\r\n }\r\n\r\n if (isBatchStillInProgress) {\r\n parent.Status = 'PendingExeuction';\r\n }\r\n\r\n if (hasAnyBatchedImportBeenCancelled) {\r\n parent.ImportStatus = 'Cancelled';\r\n }\r\n\r\n if (hasAnyBatchedImportFailed) {\r\n parent.ErrorCode = -1;\r\n }\r\n\r\n parent.SuccessCount = successCount;\r\n parent.ErrorCount = errorCount;\r\n parent.TotalCount = successCount + errorCount;\r\n parent.ImportName = parent.ImportName || i18n.getString('CampaignImport_GSyncConnect');\r\n parent.ErrorFileIdentifier = null;\r\n parent.CampaignSplitStatus = 0;\r\n parent.CampaignSplitBatchIndex = 0;\r\n parent.CampaignSplitBatchCount = null;\r\n parent.IsBatchParent = true;\r\n\r\n return parent;\r\n}\r\n\r\nexport function processBatchedImports(data) {\r\n const groupedByBatch = _.values(_.groupBy(data, (importResult) => {\r\n if (importResult.CampaignSplitGuid) {\r\n return importResult.CampaignSplitGuid;\r\n }\r\n return importResult.Id;\r\n }));\r\n const sortedGroupedList = _.sortBy(groupedByBatch, (group) => {\r\n const minDateIndex = group.length - 1; // data is returned in reverse date order, last element is earliest\r\n\r\n return new Date(group[minDateIndex].StartDateTime);\r\n });\r\n const sortedGroupWithParentList = _.map(sortedGroupedList, (group) => {\r\n if (group.length > 1) {\r\n const parent = createParentRowForBatchedImports(group);\r\n const processedGroup = _.map(group, (importResult) => {\r\n const indexTemplate = i18n.getString('Alert_CarouselPagination');\r\n const indexText = _.template(indexTemplate)({\r\n page: importResult.CampaignSplitBatchIndex,\r\n total: importResult.CampaignSplitBatchCount,\r\n });\r\n\r\n importResult.ImportName = `${i18n.getString('CampaignImport_GSyncConnect')} ${indexText}`;\r\n importResult.IsChildBatch = true;\r\n\r\n return importResult;\r\n }).reverse();\r\n\r\n processedGroup.unshift(parent);\r\n\r\n return processedGroup;\r\n }\r\n return group;\r\n });\r\n\r\n return _.flatten(sortedGroupWithParentList.reverse());\r\n}\r\n\r\nexport function processMultiAccountBatchedImports(data) {\r\n const groupedByAccount = _.map(data, (item) => {\r\n item.ImportName = item.TaskItem.Name || i18n.getString('CampaignImport_MultiAccount_GSyncConnect');\r\n item.isCustomerLevel = true;\r\n let processedItem = [item];\r\n\r\n _.each(item.ImportResultList, (accountitem) => {\r\n accountitem.Id = accountitem.TaskId;\r\n accountitem.IsChildAccountTask = true;\r\n const indexTemplate = i18n.getString('Alert_CarouselPagination');\r\n const indexText = _.template(indexTemplate)({\r\n page: accountitem.MultiAccountTaskIndex,\r\n total: accountitem.MultiAccountTaskCount,\r\n });\r\n\r\n accountitem.ImportName = `${i18n.getString('CampaignImport_Account')} ${indexText}`;\r\n });\r\n processedItem = processedItem.concat(processBatchedImports(item.ImportResultList));\r\n return processedItem;\r\n });\r\n\r\n return _.flatten(groupedByAccount);\r\n}\r\n","import config from '@bingads-webui-component-legacy/config/index';\r\n\r\nconst permissions = config.get('Permissions') || {};\r\nconst testTypeSuffix = permissions.IsUseImportTestTypeForImportTaskExecutionEnabled ? 'Test' : '';\r\n\r\nexport const FILTER_IMPORT = `TaskItem/Type eq Enum.TaskItemType'Import${testTypeSuffix}'`;\r\nexport const FILTER_MULTIACCOUNT_IMPORT = `TaskItem/Type eq Enum.TaskItemType'MultiAccountGoogleImport${testTypeSuffix}'`;\r\nexport const FILTER_FILE_IMPORT = `TaskItem/Type eq Enum.TaskItemType'FileImport${testTypeSuffix}'`;\r\nexport const FILTER_FACEBOOK_IMPORT = `TaskItem/Type eq Enum.TaskItemType'FacebookImport${testTypeSuffix}'`;\r\nexport const FILTER_AMAZON_IMPORT = `TaskItem/Type eq Enum.TaskItemType'AmazonImport${testTypeSuffix}'`;\r\nexport const FILTER_PINTEREST_IMPORT = `TaskItem/Type eq Enum.TaskItemType'PinterestImport${testTypeSuffix}'`;\r\n","import _ from 'underscore';\r\nimport edm from '@bingads-webui-component-legacy/edm-campaign/index';\r\nimport jsData from '@bingads-webui-component-legacy/js-data-campaign/index';\r\n\r\nimport { showError, showSuccess } from '@bingads-webui-component-legacy/toast/index';\r\nimport createImportTaskItemHelper from '@bingads-webui-campaign-legacy/import-campaigns/shared/import-task-item-helper';\r\n\r\nimport { processBatchedImports, processMultiAccountBatchedImports } from './batched-import-processor';\r\nimport * as consts from './import-log-constants';\r\nimport config from '@bingads-webui-component-legacy/config/index';\r\nimport constants from '@bingads-webui-static-legacy/instrumentation/constants';\r\n\r\nimport { IMPORT_TYPE } from '@bingads-webui-campaign-legacy/scheduled-import/view/import-type';\r\n\r\nconst schema = window.globalLegacySchema.get('ImportResult');\r\nconst i18n = window.globalLegacyI18n.get('component/i18n/loader!campaignui/feature/import-campaigns');\r\n\r\n//Max int, used to fetch all task items executions for file import and combined imports (16 bit signed int)\r\nconst MAX_TASK_ITEM_COUNT = 32767;\r\n\r\n// processes batched imports and filters out error imports if needed\r\nfunction processData(isMultiAccount, data) {\r\n return isMultiAccount ?\r\n processMultiAccountBatchedImports(data) :\r\n processBatchedImports(data);\r\n}\r\n\r\nexport function getImportLogDataSourceConfig({ isMultiAccount, isFacebookImport = false, isAmazonImport = false, isPinterestImport = false, supportedImportTypes }) {\r\n if (isMultiAccount) {\r\n // eslint-disable-next-line no-param-reassign\r\n edm.customerIdType.useAdvertiserCustomerId = false;\r\n }\r\n return isMultiAccount ? {\r\n type: 'js-data',\r\n entity: jsData.TaskItemExecution,\r\n schema,\r\n query: {\r\n $expand: 'TaskItem',\r\n $filter: consts.FILTER_MULTIACCOUNT_IMPORT,\r\n },\r\n options: {\r\n entitySet: edm.currentCustomer.TaskItemExecutions,\r\n afterFindAll: (resources, data) => {\r\n const processedData = processData(isMultiAccount, data);\r\n\r\n // ensure that grid still has access to total odata count\r\n _.extend(processedData, {\r\n totalCount: data.totalCount,\r\n });\r\n return processedData;\r\n },\r\n },\r\n } : {\r\n type: 'js-data',\r\n entity: jsData.TaskItemExecution,\r\n options: {\r\n entitySet: edm.currentAccount.TaskItemExecutions,\r\n cacheResponse: false,\r\n afterFindAll: (resource, data) => {\r\n const processedData = processData(isMultiAccount, data);\r\n\r\n // ensure that grid still has access to total odata count\r\n _.extend(processedData, {\r\n totalCount: data.totalCount,\r\n });\r\n return processedData;\r\n },\r\n },\r\n schema,\r\n query: {\r\n $expand: 'TaskItem',\r\n $filter: (() => {\r\n if (supportedImportTypes[IMPORT_TYPE.facebookimport] && isFacebookImport) {\r\n return consts.FILTER_FACEBOOK_IMPORT;\r\n }\r\n if (supportedImportTypes[IMPORT_TYPE.amazonImport] && isAmazonImport) {\r\n return consts.FILTER_AMAZON_IMPORT;\r\n }\r\n if (supportedImportTypes[IMPORT_TYPE.pinterestImport] && isPinterestImport) {\r\n return consts.FILTER_PINTEREST_IMPORT;\r\n }\r\n return consts.FILTER_IMPORT;\r\n })(),\r\n },\r\n };\r\n}\r\n\r\nexport function getMemoryDataSourceConfig() {\r\n return {\r\n type: 'memory',\r\n schema,\r\n data: null,\r\n };\r\n}\r\n\r\nexport function updateMemoryGrid(view) {\r\n view.currentGrid.gridView.trigger('willUpdate');\r\n jsData.TaskItemExecution\r\n .findAll({\r\n query: {\r\n $expand: 'TaskItem',\r\n $filter: consts.FILTER_FILE_IMPORT,\r\n $top: MAX_TASK_ITEM_COUNT,\r\n },\r\n }, {\r\n bypassCache: true,\r\n cacheResponse: false,\r\n entitySet: edm.currentAccount.TaskItemExecutions,\r\n }).then((data) => {\r\n view.currentGrid.gridView.patch({\r\n dataSource: {\r\n data: processData(view.isMultiAccount, data),\r\n },\r\n });\r\n view.currentGrid.gridView.trigger('didUpdate');\r\n });\r\n}\r\n\r\nexport function updateTaskItemSessionId(taskId, sessionId = null, logMsg) {\r\n let adWordsSessionId = sessionId;\r\n\r\n if (!adWordsSessionId) {\r\n adWordsSessionId = createImportTaskItemHelper.getGoogleImportInfoFromCookie().googleSessionId;\r\n }\r\n\r\n if (adWordsSessionId) {\r\n jsData.TaskItem.find(taskId, {\r\n cacheResponse: false,\r\n }).then((taskItem) => {\r\n return jsData.TaskItem.update(taskId, _.extend(taskItem, {\r\n AdWordsImportContext: _.extend(taskItem.AdWordsImportContext, {\r\n SessionId: adWordsSessionId,\r\n AdWordsSessionUserId: _.propertyOf(config.get('CurrentUser'))('Id'),\r\n SessionType: taskItem.AdWordsImportContext.SessionType === 'CloudImport' ? null : taskItem.AdWordsImportContext.SessionType,\r\n }),\r\n // patch request need to reset ImportUserPreferences to undefined, otherwise, MT will meet issue.\r\n ImportUserPreferences: undefined,\r\n }));\r\n }).then(() => {\r\n if (logMsg) {\r\n logMsg(constants.LOGCATEGORY.TRACE, 'login Google_Credentials_Update_Success');\r\n }\r\n\r\n showSuccess(i18n.get('Scheduled_Import_GAuth_Edit_Success'));\r\n }).catch((error) => {\r\n if (logMsg) {\r\n logMsg(constants.LOGCATEGORY.TRACE, `Google_Credentials_Update_Error: ${JSON.stringify(error)}`);\r\n }\r\n\r\n showError(i18n.get('GenericErrorMessage'));\r\n });\r\n } else {\r\n if (logMsg) {\r\n logMsg(constants.LOGCATEGORY.TRACE, 'No_Session_Id');\r\n }\r\n\r\n showError(i18n.get('GenericErrorMessage'));\r\n }\r\n}\r\n\r\nexport function findImportTaskItem(id) {\r\n return jsData.TaskItem.find(id, {\r\n cacheResponse: false,\r\n });\r\n}\r\n","import downloadService from '@bingads-webui-component-legacy/download/index';\r\nimport instrumentation from '@bingads-webui-static-legacy/instrumentation/index';\r\nimport odata from '@bingads-webui-component-legacy/http/channel/odata';\r\n\r\nconst i18n = window.globalLegacyI18n.get('component/i18n/loader!campaignui/feature/import-campaigns');\r\n\r\nexport default function download(identifier, type) {\r\n const url = `/BulkUploadFiles/GetBulkFileUrl(CustomerId=:customer_id,FileIdentifier=${identifier},BulkFileType=${type})`;\r\n\r\n odata.get(url)\r\n .then((data) => {\r\n downloadService.download(data);\r\n })\r\n .catch((err) => {\r\n window.App.views.alertCenter.showError(i18n.get('GenericErrorMessage'));\r\n instrumentation.logError('import campaign download', JSON.stringify(err));\r\n });\r\n}\r\n","import _ from 'underscore';\r\n\r\nimport { ImportOptionsSummaryBuilder } from '@bingads-webui-campaign/google-import-page';\r\nimport { ImportOptionsSummaryBuilder as FileImportOptionsSummaryBuilder, parseModelToImportUserPreference, parseJsonFormatImportOptions, getFacebookImportOptionBlackList } from '@bingads-webui-campaign/import-components';\r\nimport { getSubFieldsBlackList as getFileImportOptionBlackList } from '@bingads-webui-campaign/file-import-page';\r\nimport { getSubFieldsBlackList as getAmazonImportOptionBlackList } from '@bingads-webui-campaign/amazon-import';\r\nimport { getSubFieldsBlackList as getPinterestImportOptionBlackList } from '@bingads-webui-campaign/pinterest-import';\r\n\r\nimport creatorColumnTmpl from '@bingads-webui-campaign-legacy/scheduled-import/template/creator-column.pug';\r\nimport freqColumnTmpl from '@bingads-webui-campaign-legacy/scheduled-import/template/freq-column.pug';\r\nimport importTypeTmpl from '@bingads-webui-campaign-legacy/scheduled-import/template/import-type.pug';\r\nimport nameTmpl from '@bingads-webui-campaign-legacy/scheduled-import/template/import-log-name.pug';\r\nimport { bingadsGridColumn } from '@bingads-webui-component-legacy/bingads-grid/shared/column';\r\nimport { importSummaryColDataToTemplate } from '@bingads-webui-campaign-legacy/scheduled-import/view/shared-column-configs/import-summary-col';\r\nimport actionsLogTmpl from '@bingads-webui-campaign-legacy/scheduled-import/template/import-log-actions.pug';\r\nimport preferencesLogTmpl from '@bingads-webui-campaign-legacy/scheduled-import/template/import-settings-col.pug';\r\n\r\nimport config1 from '@bingads-webui-component-legacy/config/index';\r\nimport dateUtil from '@bingads-webui-component-legacy/humanize/date';\r\nimport { IMPORT_TYPE } from '@bingads-webui-campaign-legacy/scheduled-import/view/import-type';\r\nimport { getImportButtonOptions } from './import-center-options';\r\n\r\nconst amdI18n = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/feature/import-campaigns');\r\nconst i18n = window.globalLegacyI18n.get('component/i18n/loader!campaignui/feature/import-campaigns');\r\nconst i18nGlobal = window.globalLegacyI18n.get('component/i18n/loader!legacy/global');\r\n\r\nconst permissions = config1.get('Permissions');\r\nconst importSettingsSummaryBuilder = new ImportOptionsSummaryBuilder({ i18n });\r\nconst fileImportSettingsSummaryBuilder = new FileImportOptionsSummaryBuilder({ i18n });\r\n\r\n// import option black lists\r\nconst fileImportOptionBlackList = getFileImportOptionBlackList(permissions);\r\nconst facebookImportOptionBlackList = getFacebookImportOptionBlackList(permissions);\r\nconst amazonImportOptionBlackList = getAmazonImportOptionBlackList(permissions);\r\nconst pinterestImportOptionBlackList = getPinterestImportOptionBlackList(permissions);\r\n\r\nfunction getDropdownItemConfig(view, name, text, isFirstDropdownOption) {\r\n return {\r\n name,\r\n type: 'buttonMenuItem',\r\n text: i18n.getString(text),\r\n action: {\r\n viewFactory: () => {\r\n view.setErrorFilterPredicate(isFirstDropdownOption);\r\n view.refreshGrid();\r\n },\r\n setMenuTitle: i18n.getString(text),\r\n },\r\n };\r\n}\r\n\r\nfunction getLegacyToolbarConfig(view) {\r\n return {\r\n container: view.$('.log-toolbar'),\r\n items: [\r\n {\r\n name: 'logselect',\r\n type: 'dropdown',\r\n isNewFeature: false,\r\n level: 1,\r\n title: i18n.getString('AutomatedRules_RulesHistoryGrid_AllLogs'),\r\n items: [\r\n getDropdownItemConfig(view, 'all', 'AutomatedRules_RulesHistoryGrid_AllLogs', true),\r\n getDropdownItemConfig(view, 'changeorerror', 'Scheduled_Import_Logs_With_Errors', false),\r\n ],\r\n },\r\n {\r\n name: 'refresh',\r\n type: 'button',\r\n text: i18n.getString('CampaignImport_Refresh'),\r\n leftIconClass: 'spritedimage refresh-icon',\r\n action: () => {\r\n view.refreshGrid();\r\n },\r\n }],\r\n };\r\n}\r\n\r\nfunction getGridSwitchDropdownItem(view, text, isGoogleImport) {\r\n return {\r\n key: text,\r\n value: isGoogleImport,\r\n text,\r\n classes: 'grid-menu',\r\n };\r\n}\r\n\r\nfunction getVNextToolbarConfig(view) {\r\n const config = [];\r\n\r\n // if not in import center and not multi account and not smart account and not up smart account's log grid\r\n if (view.importChannelType === undefined && !view.isMultiAccount && !view.isSmartAccount && !view.isUPSmartAccount) {\r\n const filterText = {\r\n [IMPORT_TYPE.facebookimport]: i18n.getString('Scheduled_Import_Logs_Facebook_Imports'),\r\n [IMPORT_TYPE.amazonImport]: i18n.getString('Scheduled_Import_Logs_Amazon_Imports'),\r\n [IMPORT_TYPE.pinterestImport]: i18n.getString('Scheduled_Import_Logs_Pinterest_Imports'),\r\n [IMPORT_TYPE.fileimport]: i18n.getString('Scheduled_Import_Logs_File_Imports'),\r\n }[view.importType] || i18n.getString('Scheduled_Import_Logs_Google_Imports');\r\n\r\n const items = _.compact([\r\n view.supportedImportTypes[IMPORT_TYPE.googleimport] && {\r\n text: i18n.getString('Scheduled_Import_Logs_Google_Imports'),\r\n className: 'google-log-grid',\r\n onClick: () => {\r\n view.setImportType(IMPORT_TYPE.googleimport);\r\n view.updateToolbarTextForVNext(i18n.getString('Scheduled_Import_Logs_Google_Imports'));\r\n },\r\n },\r\n view.supportedImportTypes[IMPORT_TYPE.facebookimport] && {\r\n text: i18n.getString('Scheduled_Import_Logs_Facebook_Imports'),\r\n className: 'facebook-log-grid',\r\n onClick: () => {\r\n view.setImportType(IMPORT_TYPE.facebookimport);\r\n view.updateToolbarTextForVNext(i18n.getString('Scheduled_Import_Logs_Facebook_Imports'));\r\n },\r\n },\r\n view.supportedImportTypes[IMPORT_TYPE.amazonImport] && {\r\n text: i18n.getString('Scheduled_Import_Logs_Amazon_Imports'),\r\n className: 'amazon-log-grid',\r\n onClick: () => {\r\n view.setImportType(IMPORT_TYPE.amazonImport);\r\n view.updateToolbarTextForVNext(i18n.getString('Scheduled_Import_Logs_Amazon_Imports'));\r\n },\r\n },\r\n view.supportedImportTypes[IMPORT_TYPE.pinterestImport] && {\r\n text: i18n.getString('Scheduled_Import_Logs_Pinterest_Imports'),\r\n className: 'pinterest-log-grid',\r\n onClick: () => {\r\n view.setImportType(IMPORT_TYPE.pinterestImport);\r\n\r\n view.updateToolbarTextForVNext(i18n.getString('Scheduled_Import_Logs_Pinterest_Imports'));\r\n },\r\n },\r\n {\r\n text: i18n.getString('Scheduled_Import_Logs_File_Imports'),\r\n className: 'file-log-grid',\r\n onClick: () => {\r\n view.setImportType(IMPORT_TYPE.fileimport);\r\n view.updateToolbarTextForVNext(i18n.getString('Scheduled_Import_Logs_File_Imports'));\r\n },\r\n },\r\n ]);\r\n\r\n if (items.length > 1) {\r\n config.push(['logselect', {\r\n id: 'logselect',\r\n type: 'dropdown',\r\n button: {\r\n text: filterText,\r\n },\r\n menu: {\r\n items,\r\n },\r\n }]);\r\n }\r\n\r\n }\r\n if (view.importChannelType !== undefined) {\r\n const importButtonOptions = getImportButtonOptions(i18n, view.importChannelType, null, view);\r\n\r\n config.push(importButtonOptions);\r\n }\r\n config.push(['refresh', {\r\n id: 'refresh_log',\r\n type: 'button',\r\n iconLeftGlyphName: 'ba-Refresh',\r\n text: i18n.getString('CampaignImport_Refresh'),\r\n onClick: () => {\r\n view.refreshGrid();\r\n },\r\n }]);\r\n\r\n return _.reduce(\r\n config,\r\n (map, [key, value]) => {\r\n map.set(key, value);\r\n return map;\r\n },\r\n new Map(),\r\n );\r\n}\r\n\r\nexport function getToolbarConfig(view) {\r\n if (view.isForVNext) {\r\n return getVNextToolbarConfig(view);\r\n }\r\n return getLegacyToolbarConfig(view);\r\n}\r\n\r\nfunction mapTypeToString(type, isAutomated, isCustomerLevel, multiAccountTaskGuid, supportedImportTypes) {\r\n if (isCustomerLevel) {\r\n return isAutomated ?\r\n i18n.get('Scheduled_Import_MutliAccount_Type') :\r\n i18n.get('Scheduled_Import_MutliAccount_RunNow_Type');\r\n } else if (multiAccountTaskGuid) {\r\n return isAutomated ?\r\n i18n.get('Scheduled_Import_MutliAccount_Task_Type') :\r\n i18n.get('Scheduled_Import_MutliAccount_Task_RunNow_Type');\r\n } else if (isAutomated && type === 'GoogleAPIImport') {\r\n return i18n.get('Scheduled_Import_Type');\r\n } else if (type === 'GoogleAPIImport') {\r\n return i18n.get('Scheduled_Import_RunNow_Type');\r\n } else if (supportedImportTypes[IMPORT_TYPE.facebookimport] && isAutomated && type === 'FacebookImport') {\r\n return i18n.get('Scheduled_Import_Type_Facebook');\r\n } else if (supportedImportTypes[IMPORT_TYPE.facebookimport] && type === 'FacebookImport') {\r\n return i18n.get('Scheduled_Import_RunNow_Type_Facebook');\r\n } else if (supportedImportTypes[IMPORT_TYPE.amazonImport] && isAutomated && type === 'AmazonImport') {\r\n return i18n.get('Scheduled_Import_Type_Amazon');\r\n } else if (supportedImportTypes[IMPORT_TYPE.amazonImport] && type === 'AmazonImport') {\r\n return i18n.get('Scheduled_Import_RunNow_Type_Amazon');\r\n } else if (supportedImportTypes[IMPORT_TYPE.pinterestImport] && isAutomated && type === 'PinterestImport') {\r\n return i18n.get('Scheduled_Import_Type_Pinterest');\r\n } else if (supportedImportTypes[IMPORT_TYPE.pinterestImport] && type === 'PinterestImport') {\r\n return i18n.get('Scheduled_Import_RunNow_Type_Pinterest');\r\n }\r\n return i18n.get('Scheduled_Import_File_Type');\r\n}\r\n\r\nfunction getColumnsConfig(view) {\r\n let columns = _.compact([bingadsGridColumn({\r\n name: 'StartTime',\r\n title: 'ImprovedAdScheduling_Column_Heading_Start_Time',\r\n property: _.identity,\r\n bodyClasses: ['col-StartTime'],\r\n template: (local) => {\r\n return freqColumnTmpl({\r\n Freq: amdI18n.formatDate(new Date(local.value.StartedAt), { datetime: 'full' }),\r\n IsChildBatch: local.value.IsChildBatch,\r\n IsChildAccountTask: local.value.IsChildAccountTask,\r\n });\r\n },\r\n i18n: i18nGlobal,\r\n }), bingadsGridColumn({\r\n name: 'Name',\r\n title: 'Scheduled_Import_Name',\r\n property: _.identity,\r\n bodyClasses: ['col-Name'],\r\n template: (local) => {\r\n const fileName = decodeURIComponent(local.value.UploadFileName);\r\n const fileNameExists = local.value.Type === 'FileBasedImport' && fileName && fileName !== 'null';\r\n let name;\r\n\r\n if (fileNameExists) {\r\n name = fileName;\r\n } else {\r\n name = local.value.ImportName;\r\n }\r\n\r\n return nameTmpl({\r\n ariaLabel: name && i18n.get('Download_Import_File').replace('{{fileName}}', name),\r\n fileNameExists,\r\n name: name || i18nGlobal.get('QualityScore_NA'),\r\n IsChildBatch: local.value.IsChildBatch,\r\n IsChildAccountTask: local.value.IsChildAccountTask,\r\n });\r\n },\r\n i18n,\r\n }), bingadsGridColumn({\r\n name: 'CreatedBy',\r\n title: 'AutomatedRules_RulesManagementGrid_CreatedBy',\r\n property: _.identity,\r\n bodyClasses: ['col-CreatedBy'],\r\n template: (local) => {\r\n if (local.value.TaskItem) {\r\n return creatorColumnTmpl({\r\n Creator: local.value.TaskItem.ModifiedBy && local.value.TaskItem.ModifiedBy.Name,\r\n DateTime: dateUtil.format(new Date(local.value.TaskItem.CreatedAt), 'dddd, MMMM d, yyyy', config1.get('culture')),\r\n Time: dateUtil.format(new Date(local.value.TaskItem.CreatedAt), 'hh:mm:ss tt', config1.get('culture')),\r\n });\r\n }\r\n return i18n.get('Import_Log_Grid_Created_By_Dash');\r\n },\r\n i18n,\r\n }), view.isUPSmartAccount ? null : bingadsGridColumn({\r\n name: 'ImportSettings',\r\n title: 'Import_ImportSettings_Header',\r\n property: _.identity,\r\n helpId: 'pop_BA_Import_ImportSettings',\r\n bodyClasses: ['col-ImportSettings'],\r\n template: (local) => {\r\n const importSettings = local.value.ImportUserPreference;\r\n const parsedValue = importSettings && JSON.parse(importSettings);\r\n const options = parsedValue && parseModelToImportUserPreference(parseJsonFormatImportOptions({ options: parsedValue }));\r\n const showSmartType = !view.isMultiAccount && view.isForVNext && permissions.IsSmartImportEnabled && local.value.TaskItem.IsSmartImport;\r\n let enabledOptions;\r\n let settingsText;\r\n\r\n if (local.value.Type === 'GoogleAPIImport' ||\r\n view.isMultiAccount ||\r\n (view.supportedImportTypes[IMPORT_TYPE.facebookimport] && local.value.Type === 'FacebookImport') ||\r\n (view.supportedImportTypes[IMPORT_TYPE.amazonImport] && local.value.Type === 'AmazonImport') ||\r\n (view.supportedImportTypes[IMPORT_TYPE.pinterestImport] && local.value.Type === 'PinterestImport')) {\r\n const importOptionBlackList = {\r\n 'FacebookImport': facebookImportOptionBlackList,\r\n 'AmazonImport': amazonImportOptionBlackList,\r\n 'PinterestImport': pinterestImportOptionBlackList,\r\n }[local.value.Type] || [];\r\n\r\n if (options && importOptionBlackList.length) {\r\n enabledOptions = {};\r\n _.map(options, (option, key) => {\r\n if (!_.contains(importOptionBlackList, key)) {\r\n enabledOptions[key] = option;\r\n }\r\n });\r\n } else {\r\n enabledOptions = options;\r\n }\r\n\r\n settingsText = enabledOptions && importSettingsSummaryBuilder.generateSummaryFromSelectedOptions(enabledOptions, true);\r\n } else {\r\n if (options && fileImportOptionBlackList.length) {\r\n enabledOptions = {};\r\n _.map(options, (option, key) => {\r\n if (!_.contains(fileImportOptionBlackList, key)) {\r\n enabledOptions[key] = option;\r\n }\r\n });\r\n } else {\r\n enabledOptions = options;\r\n }\r\n\r\n settingsText = enabledOptions && fileImportSettingsSummaryBuilder.generateSummaryFromSelectedOptions(enabledOptions, true);\r\n }\r\n\r\n\r\n return preferencesLogTmpl({\r\n showSmartType,\r\n showTooltipIcon: !!parsedValue,\r\n settingsText: settingsText || i18nGlobal.get('QualityScore_NA'),\r\n importSettingsLabel: i18n.get('Import_ImportSettings_Header'),\r\n i18n,\r\n });\r\n },\r\n i18n,\r\n }), bingadsGridColumn({\r\n name: 'ImportType',\r\n title: 'AudiencesGrid_Header_Type',\r\n property: _.identity,\r\n bodyClasses: ['col-ImportType'],\r\n helpId: 'pop_BA_Import_HistoryType',\r\n template: (local) => {\r\n let importSourceAccountInfo;\r\n\r\n if (local.value.GoogleAccountName && local.value.GoogleCustomerId) {\r\n importSourceAccountInfo = `${local.value.GoogleAccountName} (${local.value.GoogleCustomerId})`;\r\n } else if (local.value.GoogleAccountName) {\r\n importSourceAccountInfo = local.value.GoogleAccountName;\r\n } else if (view.supportedImportTypes[IMPORT_TYPE.facebookimport] || view.supportedImportTypes[IMPORT_TYPE.amazonImport] || view.supportedImportTypes[IMPORT_TYPE.pinterestImport]) {\r\n if (local.value.ExternalAccountName && local.value.ExternalCustomerId) {\r\n importSourceAccountInfo = `${local.value.ExternalAccountName} (${local.value.ExternalCustomerId})`;\r\n } else if (local.value.ExternalAccountName) {\r\n importSourceAccountInfo = local.value.ExternalAccountName;\r\n }\r\n }\r\n\r\n return importTypeTmpl({\r\n Type: mapTypeToString(\r\n local.value.Type,\r\n local.value.IsAutomated,\r\n local.value.isCustomerLevel,\r\n local.value.MultiAccountTaskGuid,\r\n view.supportedImportTypes,\r\n ),\r\n IsGoogleImport: local.value.Type === 'GoogleAPIImport' || view.isMultiAccount,\r\n IsFacebookImport: view.supportedImportTypes[IMPORT_TYPE.facebookimport] && local.value.Type === 'FacebookImport',\r\n IsAmazonImport: view.supportedImportTypes[IMPORT_TYPE.amazonImport] && local.value.Type === 'AmazonImport',\r\n IsPinterestImport: view.supportedImportTypes[IMPORT_TYPE.pinterestImport] && local.value.Type === 'PinterestImport',\r\n ImportSourceAccountInfo: importSourceAccountInfo,\r\n });\r\n },\r\n i18n: i18nGlobal,\r\n }), bingadsGridColumn({\r\n name: 'Summary',\r\n title: 'AutomatedRules_RulesHistoryGrid_Summary',\r\n property: _.identity,\r\n bodyClasses: ['col-Summary'],\r\n helpId: 'pop_BA_Import_HistorySummary',\r\n template: (local) => importSummaryColDataToTemplate(local.value, i18n),\r\n i18n,\r\n }), bingadsGridColumn({\r\n name: 'Error',\r\n title: 'Scheduled_Import_History_Actions_Header',\r\n property: _.identity,\r\n bodyClasses: ['col-Error'],\r\n helpId: 'pop_BA_Import_History_Action',\r\n template: (local) => {\r\n const hasError = (local.value.ErrorCount && local.value.ErrorFileIdentifier) ||\r\n (local.value.EntityStatistics && _.any(local.value.EntityStatistics.Values, (stat) => stat.HasWarning === true));\r\n const hasErrorSummary = permissions && permissions.dynamic && permissions.dynamic.ImportNewErrorSummaryDownloadLink && hasError && local.value.ErrorSummaryFileIdentifier !== null;\r\n const hasPreview = (local.value.ImportStatus === 'ValidationCompleted') && local.value.Status === 'Completed';\r\n const hasErrorCode = permissions && permissions.dynamic && permissions.dynamic.TokenInvalidImportNotification && local.value.ErrorCode !== null;\r\n\r\n if (hasError) {\r\n view.logColumns({\r\n column: 'Import_History_Action',\r\n isMultiAccount: view.isMultiAccount,\r\n columnData: local.value,\r\n action: 'has',\r\n message: 'error file',\r\n });\r\n }\r\n\r\n if (hasErrorSummary) {\r\n view.logColumns({\r\n column: 'Import_History_Action',\r\n isMultiAccount: view.isMultiAccount,\r\n columnData: local.value,\r\n action: 'has',\r\n message: 'error summary file',\r\n });\r\n }\r\n\r\n return actionsLogTmpl({\r\n hasError,\r\n hasErrorSummary,\r\n hasPreview,\r\n i18n,\r\n hasErrorCode,\r\n errorDetailsLabel: i18n.getString('Grid_ErrorDetails'),\r\n });\r\n },\r\n i18n,\r\n })]);\r\n\r\n return columns;\r\n}\r\n\r\nexport class GoogleImportLogConfig {\r\n constructor(view) {\r\n _.extend(this, {\r\n name: 'GoogleImportLogGrid',\r\n el: view.$('.googleImportLogGrid'),\r\n dataSource: view.getImportLogDataSourceConfig(view),\r\n columns: getColumnsConfig(view),\r\n tableClasses: ['table', 'table-bordered'],\r\n tableAttributes: { 'aria-label': i18n.get('Scheduled_Import_History_Logs_Title') },\r\n pluginsConfig: {\r\n toolbar: getToolbarConfig(view),\r\n },\r\n plugins: {\r\n a11y: { i18n },\r\n uiBlocker: {\r\n el: view.$('.googleImportLogGrid'),\r\n },\r\n placeholder: {}, // use placeholder plugin to hide PageSize dropdown\r\n pagination: {\r\n pageSizeText: i18nGlobal.getString('Grid_ShowRows'),\r\n },\r\n perfMarker: {\r\n appConfig: config1,\r\n gridMarker: view.perfMarker,\r\n },\r\n },\r\n });\r\n }\r\n}\r\n\r\nexport class FacebookImportLogConfig {\r\n constructor(view) {\r\n _.extend(this, {\r\n name: 'FacebookImportLogGrid',\r\n el: view.$('.facebookImportLogGrid'),\r\n dataSource: view.getImportLogDataSourceConfig({isForVNext: true, isFacebookImport: true, supportedImportTypes: view.supportedImportTypes }),\r\n columns: getColumnsConfig(view),\r\n tableClasses: ['table', 'table-bordered'],\r\n tableAttributes: { 'aria-label': i18n.get('Scheduled_Import_History_Logs_Title') },\r\n pluginsConfig: {\r\n toolbar: getToolbarConfig(view),\r\n },\r\n plugins: {\r\n a11y: { i18n },\r\n uiBlocker: {\r\n el: view.$('.facebookImportLogGrid'),\r\n },\r\n placeholder: {}, // use placeholder plugin to hide PageSize dropdown\r\n pagination: {\r\n pageSizeText: i18nGlobal.getString('Grid_ShowRows'),\r\n },\r\n perfMarker: {\r\n appConfig: config1,\r\n gridMarker: view.perfMarker,\r\n },\r\n },\r\n });\r\n }\r\n}\r\n\r\nexport class AmazonImportLogConfig {\r\n constructor(view) {\r\n _.extend(this, {\r\n name: 'AmazonImportLogGrid',\r\n el: view.$('.amazonImportLogGrid'),\r\n dataSource: view.getImportLogDataSourceConfig({isForVNext: true, isAmazonImport: true, supportedImportTypes: view.supportedImportTypes }),\r\n columns: getColumnsConfig(view),\r\n tableClasses: ['table', 'table-bordered'],\r\n tableAttributes: { 'aria-label': i18n.get('Scheduled_Import_History_Logs_Title') },\r\n pluginsConfig: {\r\n toolbar: getToolbarConfig(view),\r\n },\r\n plugins: {\r\n a11y: { i18n },\r\n uiBlocker: {\r\n el: view.$('.amazonImportLogGrid'),\r\n },\r\n placeholder: {}, // use placeholder plugin to hide PageSize dropdown\r\n pagination: {\r\n pageSizeText: i18nGlobal.getString('Grid_ShowRows'),\r\n },\r\n perfMarker: {\r\n appConfig: config1,\r\n gridMarker: view.perfMarker,\r\n },\r\n },\r\n });\r\n }\r\n}\r\n\r\nexport class PinterestImportLogConfig {\r\n constructor(view) {\r\n _.extend(this, {\r\n name: 'PinterestImportLogGrid',\r\n el: view.$('.pinterestImportLogGrid'),\r\n dataSource: view.getImportLogDataSourceConfig({isForVNext: true, isPinterestImport: true, supportedImportTypes: view.supportedImportTypes }),\r\n columns: getColumnsConfig(view),\r\n tableClasses: ['table', 'table-bordered'],\r\n tableAttributes: { 'aria-label': i18n.get('Scheduled_Import_History_Logs_Title') },\r\n pluginsConfig: {\r\n toolbar: getToolbarConfig(view),\r\n },\r\n plugins: {\r\n a11y: { i18n },\r\n uiBlocker: {\r\n el: view.$('.pinterestImportLogGrid'),\r\n },\r\n placeholder: {}, // use placeholder plugin to hide PageSize dropdown\r\n pagination: {\r\n pageSizeText: i18nGlobal.getString('Grid_ShowRows'),\r\n },\r\n perfMarker: {\r\n appConfig: config1,\r\n gridMarker: view.perfMarker,\r\n },\r\n },\r\n });\r\n }\r\n}\r\n\r\nexport class FileImportLogConfig {\r\n constructor(view) {\r\n _.extend(this, {\r\n name: 'FileImportLogGrid',\r\n el: view.$('.fileImportLogGrid'),\r\n dataSource: view.getMemoryDataSourceConfig(),\r\n columns: getColumnsConfig(view).filter((item) => {\r\n return item.name !== 'CreatedBy';\r\n }), // we don't show CreatedBy column for file import since it has no such data\r\n tableClasses: ['table', 'table-bordered'],\r\n plugins: {\r\n a11y: { i18n },\r\n uiBlocker: {\r\n el: view.$('.fileImportLogGrid'),\r\n },\r\n placeholder: {}, // use placeholder plugin to hide PageSize dropdown\r\n pagination: {\r\n pageSizeText: i18nGlobal.getString('Grid_ShowRows'),\r\n },\r\n perfMarker: {\r\n appConfig: config1,\r\n gridMarker: view.perfMarker,\r\n },\r\n },\r\n });\r\n }\r\n}\r\n\r\nexport function getGridSwitchToolbarConfig(view) {\r\n return {\r\n classes: ['log-toolbar', 'grid-toolbar'],\r\n items: view.supportedImportTypes[IMPORT_TYPE.googleimport] && Object.keys(view.supportedImportTypes).length === 1 ? [{\r\n type: 'button',\r\n text: i18n.getString('CampaignImport_Refresh'),\r\n iconLeft: ['spiritedimage', 'refresh-icon'],\r\n onClick: () => {\r\n view.refreshGrid();\r\n },\r\n }] : [{\r\n type: 'selector',\r\n classes: ['grid-groupmenu-container', 'dropdown', 'grid-toolbar-front-theme'],\r\n button: {\r\n classes: ['grid-menu-container', 'grid-colchooser', 'dropdown-toggle'],\r\n iconRight: ['spritedimage toolbar-icon icon-arrowdown-normal'],\r\n },\r\n items: [\r\n getGridSwitchDropdownItem(view, i18n.getString('Scheduled_Import_Logs_Google_Imports'), true),\r\n getGridSwitchDropdownItem(view, i18n.getString('Scheduled_Import_Logs_File_Imports'), false),\r\n ],\r\n onChange: (item) => {\r\n view.setImportType(item.value);\r\n },\r\n },\r\n {\r\n type: 'button',\r\n text: i18n.getString('CampaignImport_Refresh'),\r\n iconLeft: ['spiritedimage', 'refresh-icon'],\r\n onClick: () => {\r\n view.refreshGrid();\r\n },\r\n }],\r\n };\r\n}\r\n","import ko from 'knockout';\r\n\r\nexport default function ViewModel() {\r\n this.showGoogleImportGrid = ko.observable(false);\r\n this.showFacebookImportGrid = ko.observable(false);\r\n this.showAmazonImportGrid = ko.observable(false);\r\n this.showPinterestImportGrid = ko.observable(false);\r\n this.showFileImportGrid = ko.observable(false);\r\n this.isFirstSwitch = ko.observable(true);\r\n\r\n this.showNoGoogleImportMsg = ko.observable(false);\r\n this.showNoFileImportMsg = ko.observable(false);\r\n this.showNoFacebookImportMsg = ko.observable(false);\r\n this.showNoAmazonImportMsg = ko.observable(false);\r\n this.showNoPinterestImportMsg = ko.observable(false);\r\n}\r\n","import Backbone from 'backbone';\r\n\r\nimport importSettingsTooltipTmpl from '@bingads-webui-campaign-legacy/scheduled-import/template/import-settings-tooltip.pug';\r\n\r\nconst i18n = window.globalLegacyI18n.get('component/i18n/loader!campaignui/feature/import-campaigns');\r\n\r\nexport class ImportSettingsTooltipView extends Backbone.View {\r\n initialize({ formView }) {\r\n this.formView = formView;\r\n }\r\n\r\n render() {\r\n this.$el.html(importSettingsTooltipTmpl({\r\n i18n,\r\n }));\r\n\r\n this.$('.panel-body').append(this.formView.render().$el);\r\n\r\n return this;\r\n }\r\n\r\n remove() {\r\n this.formView.remove();\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport 'bootstrap';\r\nimport $ from 'jquery';\r\nimport ko from 'knockout';\r\nimport Promise from 'bluebird';\r\nimport _ from '@bingads-webui-component-legacy/extension/underscore';\r\n\r\nimport { GoogleLoginRepository, FacebookImportRepository, loadFacebookSdk } from '@bingads-webui-campaign/import-shared-repositories';\r\nimport { PinterestLoginRepository, PinterestImportRepository } from '@bingads-webui-campaign/pinterest-import';\r\nimport { dismissCallout } from '@bingads-webui-campaign/import-callout';\r\nimport { handleGoogleLoginAuthError, handleFacebookLoginError, handlePinterestLoginError } from '@bingads-webui-campaign/imports-core';\r\nimport { createDisabledUETSelectorClass } from '@bingads-webui-campaign/import-components';\r\nimport { ToolbarView } from '@bingads-webui/toolbar';\r\nimport { withUiBlock } from '@bingads-webui/uiblocker';\r\n\r\nimport config from '@bingads-webui-component-legacy/config/index';\r\nimport download from '@bingads-webui-campaign-legacy/import-campaigns/shared/download';\r\nimport showGooglePopup from '@bingads-webui-campaign-legacy/import-campaigns/shared/showGoogleLoginPopup';\r\nimport headerTemplateConfig from '@bingads-webui-campaign-legacy/bingadsgrid/config-preprocessor/header-template-config';\r\nimport { AmazonImportLogConfig, GoogleImportLogConfig, FacebookImportLogConfig, FileImportLogConfig, PinterestImportLogConfig, getGridSwitchToolbarConfig, getToolbarConfig } from '@bingads-webui-campaign-legacy/scheduled-import/view/import-log-grid-config';\r\nimport { a11yPlugin } from '@bingads-webui/projection-grid-a11y';\r\nimport { paginationPlugin } from '@bingads-webui/projection-grid-pagination';\r\nimport { placeholderPlugin } from '@bingads-webui/projection-grid-placeholder';\r\nimport tmpl from '@bingads-webui-campaign-legacy/scheduled-import/template/import-log-grid.pug';\r\nimport toolTipTmpl from '@bingads-webui-campaign-legacy/import-campaigns/template/lastImportTable/toolTip.pug';\r\nimport { uiBlockerPlugin } from '@bingads-webui/projection-grid-uiblocker';\r\nimport ViewModel from '@bingads-webui-campaign-legacy/scheduled-import/viewmodel/import-log-grid';\r\nimport { showError, showSuccess } from '@bingads-webui-component-legacy/toast/index';\r\nimport jsData from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport pgrid from '@bingads-webui-component-legacy/github/modules/projection-grid/module/projection-grid';\r\nimport UIBlocker from '@bingads-webui-component-legacy/uiblocker/service/uiBlocker';\r\nimport $http from '@bingads-webui-component-legacy/http/channel/core';\r\nimport odata from '@bingads-webui-component-legacy/http/channel/odata';\r\nimport { queryify } from '@bingads-webui/url-util';\r\nimport '@bingads-webui-static-legacy/extension/promise/withUiBlock';\r\nimport {\r\n ImportUpdateEntityPreference,\r\n ImportUserPreferences,\r\n ImportAppendDestUrlPreference,\r\n ImportSearchAndReplaceDestUrlPreference,\r\n AppendPreferencesForTrackingTemplate,\r\n SearchAndReplacePreferencesForTrackingTemplate,\r\n ImportPrefixAndSuffixForStringProperty,\r\n ImportSearchAndReplaceForStringProperty,\r\n ImportAdjustmentForNumericProperty,\r\n} from '@bingads-webui-campaign/campaign-ui-schemas';\r\nimport { perfMarkerPlugin } from '@bingads-webui-campaign/pgrid-performance-log';\r\n\r\nimport { getBlacklist } from '@bingads-webui-campaign-legacy/import-campaigns/spa/options-blacklist';\r\nimport { ImportSettingsTooltipView } from '@bingads-webui-campaign-legacy/scheduled-import/view/import-settings-tooltip';\r\n\r\nimport logger from '@bingads-webui-static-legacy/instrumentation/index';\r\nimport constants from '@bingads-webui-static-legacy/instrumentation/constants';\r\n\r\nimport { IMPORT_TYPE, IMPORT_TYPE_TO_IMPORT_NAME } from '@bingads-webui-campaign-legacy/scheduled-import/view/import-type';\r\n\r\nconst i18n = window.globalLegacyI18n.get('component/i18n/loader!campaignui/feature/import-campaigns');\r\n\r\nconst permissions = config.get('Permissions') || {};\r\n\r\nfunction debouncedVersion(func) { // prevent multiple click\r\n return _.debounce(func, 2000, true);\r\n}\r\n\r\nconst logMsg = (category, msg) => logger.logMessage([category], constants.LOGLEVEL.INFO, '/campaign/importcampaign', msg);\r\nconst logColumns = ({column, isMultiAccount, columnData, action, message}) => {\r\n logger.logMessage([constants.LOGCATEGORY.TRACE], constants.LOGLEVEL.INFO, '/campaign/importcampaign', `column:${column}, ExecutionId:${isMultiAccount ? columnData.MultiAccountTaskExecutionId : columnData.Id}, ImportId:${columnData.ImportId}, TaskId:${columnData.TaskId}, MultiAccountTaskId:${isMultiAccount ? columnData.MultiAccountTaskId : null}, Action:${action}, Mes:${message}`);\r\n};\r\n\r\nexport default class View extends Backbone.View {\r\n initialize(options = {}) {\r\n if (options.perfMarker) {\r\n this.perfMarker = options.perfMarker.createChild('Import_Log_Grid_Load');\r\n this.perfMarker.willInit();\r\n }\r\n this.importType = options.importType;\r\n this.viewModel = new ViewModel();\r\n this.isMultiAccount = options.isMultiAccount;\r\n this.isSmartAccount = options.isSmartAccount || false; // default value is used for MAE\r\n this.isUPSmartAccount = options.isUPSmartAccount || false; // default value is used for MAE\r\n this.supportedImportTypes = options.supportedImportTypes || { [IMPORT_TYPE.googleimport]: IMPORT_TYPE_TO_IMPORT_NAME[IMPORT_TYPE.googleimport] }; // default value is used for MAE\r\n this.isForVNext = options.isForVNext;\r\n this.importChannelType = options.importChannelType;\r\n this.scope = options.scope;\r\n this.toolbarConfig = getToolbarConfig(this);\r\n this.updateToolbarTextForVNext = options.updateToolbarTextForVNext;\r\n this.router = options.router;\r\n this.getImportLogDataSourceConfig = options.getImportLogDataSourceConfig;\r\n this.getMemoryDataSourceConfig = options.getMemoryDataSourceConfig;\r\n this.updateTaskItemSessionId = options.updateTaskItemSessionId;\r\n this.findImportTaskItem = options.findImportTaskItem;\r\n this.updateMemoryGrid = options.updateMemoryGrid;\r\n this.overridingEvent = options.overridingEvent;\r\n this.importOptionsFormLoader = options.importOptionsFormLoader;\r\n this.summaryTableLoader = options.summaryTableLoader;\r\n this.uetTagSelectorViewLoader = options.uetTagSelectorViewLoader;\r\n this.newI18n = options.newI18n;\r\n this.logColumns = logColumns;\r\n }\r\n\r\n events() {\r\n return _.defaults({}, this.overridingEvent, {\r\n 'click .import-settings.icon-info': 'showImportSettings',\r\n 'click .import-summary.icon-info, .import-actions.learn-more': 'showSummaryDetails',\r\n 'click .googleLogin': 'showGoogleLoginPopup',\r\n 'click .facebookLogin': 'showFacebookLoginPopup',\r\n 'click .pinterestLogin': 'showPinterestLoginPopup',\r\n 'click .download-error': 'downloadErrorFile',\r\n 'click .download-error-summary': 'downloadErrorSummaryFile',\r\n 'click .download-file': 'downloadUploadedFile',\r\n 'keypress input': 'onKeyPressed',\r\n 'click .btn__preview': debouncedVersion(this.previewAnImport),\r\n 'click .btn__cancel': debouncedVersion(this.cancelAnImport),\r\n });\r\n }\r\n\r\n refreshGrid() {\r\n if (this.viewModel.showGoogleImportGrid()) {\r\n if (this.googleImportGridRendered) {\r\n this.googleImportGrid.gridView.refresh(true);\r\n } else {\r\n this.googleImportGridRendered = true;\r\n this.googleImportGrid.gridView.render();\r\n }\r\n } else if (this.viewModel.showFacebookImportGrid()) {\r\n if (this.facebookImportGridRendered) {\r\n this.facebookImportGrid.gridView.refresh(true);\r\n } else {\r\n this.facebookImportGridRendered = true;\r\n this.facebookImportGrid.gridView.render();\r\n }\r\n } else if (this.viewModel.showAmazonImportGrid()) {\r\n if (this.amazonImportGridRendered) {\r\n this.amazonImportGrid.gridView.refresh(true);\r\n } else {\r\n this.amazonImportGridRendered = true;\r\n this.amazonImportGrid.gridView.render();\r\n }\r\n } else if (this.viewModel.showPinterestImportGrid()) {\r\n if (this.pinterestImportGridRendered) {\r\n this.pinterestImportGrid.gridView.refresh(true);\r\n } else {\r\n this.pinterestImportGridRendered = true;\r\n this.pinterestImportGrid.gridView.render();\r\n }\r\n } else {\r\n this.updateMemoryGrid(this);\r\n }\r\n }\r\n\r\n setImportType(importType = IMPORT_TYPE.googleimport) {\r\n if ((this.viewModel.showGoogleImportGrid() && importType === IMPORT_TYPE.googleimport) ||\r\n (this.viewModel.showFacebookImportGrid() && importType === IMPORT_TYPE.facebookimport) ||\r\n (this.viewModel.showAmazonImportGrid() && importType === IMPORT_TYPE.amazonImport) ||\r\n (this.viewModel.showPinterestImportGrid() && importType === IMPORT_TYPE.pinterestImport)) {\r\n // already displaying correct grid\r\n return;\r\n }\r\n\r\n this.importType = importType;\r\n\r\n // hide old grid, set new, and update new\r\n this.viewModel.showGoogleImportGrid(importType === IMPORT_TYPE.googleimport);\r\n this.viewModel.showFacebookImportGrid(importType === IMPORT_TYPE.facebookimport);\r\n this.viewModel.showAmazonImportGrid(importType === IMPORT_TYPE.amazonImport);\r\n this.viewModel.showPinterestImportGrid(importType === IMPORT_TYPE.pinterestImport);\r\n this.currentGrid = {\r\n [IMPORT_TYPE.googleimport]: this.googleImportGrid,\r\n [IMPORT_TYPE.facebookimport]: this.facebookImportGrid,\r\n [IMPORT_TYPE.amazonImport]: this.amazonImportGrid,\r\n [IMPORT_TYPE.pinterestImport]: this.pinterestImportGrid,\r\n }[importType] || this.fileImportGrid;\r\n this.refreshGrid();\r\n }\r\n\r\n setErrorFilterPredicate(showAllImports) {\r\n logger.logMessage([constants.LOGCATEGORY.TRACE], constants.LOGLEVEL.INFO, '/campaign/importcampaign',\r\n `Setting filter in import log grid. Show all imports: ${showAllImports}`);\r\n\r\n // for legacy UI, ignore facebook import settings\r\n this.importType = showAllImports ? IMPORT_TYPE.googleimport : IMPORT_TYPE.fileimport;\r\n\r\n if (showAllImports) {\r\n this.predicate = () => true;\r\n } else {\r\n this.predicate = (execution) => execution.ErrorCount > 0 || (execution.Status === 'Failed' && execution.ImportStatus !== 'Cancelled');\r\n }\r\n }\r\n\r\n onKeyPressed(event) {\r\n const RETURN_CODE = 13;\r\n\r\n if (event.which === RETURN_CODE) {\r\n event.preventDefault();\r\n const pageText = this.currentGrid.pagination.$('input.form-control.page-number-input');\r\n\r\n if (pageText) {\r\n this.currentGrid.pagination.viewModel.pageNumberText(pageText.val());\r\n }\r\n }\r\n }\r\n\r\n showGoogleLoginPopup(e) {\r\n logMsg(constants.LOGCATEGORY.TRACE, 'click Google_Sign_In_Link');\r\n\r\n const data = this.getColumnData(e);\r\n\r\n dismissCallout();\r\n\r\n if (permissions.UseJsGapiClientOnImportLogGrid) {\r\n logMsg(constants.LOGCATEGORY.TRACE, `GSILocal: ${permissions.dynamic.GSILocal}`);\r\n window.require(['ext/google/gsi'], () => {\r\n const google = window.google;\r\n const taskId = data.TaskId;\r\n\r\n const loginRepo = new GoogleLoginRepository({\r\n deps: {\r\n google,\r\n GSILocal: permissions.dynamic.GSILocal,\r\n },\r\n });\r\n\r\n new Promise((resolve, reject) => {\r\n loginRepo.googleSignIn({\r\n onSuccess: resolve,\r\n onFail: reject,\r\n useConsentPrompt: true,\r\n });\r\n }).then(({ code }) => {\r\n logMsg(constants.LOGCATEGORY.TRACE, 'login Google_Sign_In_Success');\r\n\r\n const getGoogleSessionUrlTmpl =\r\n 'ImportSession/StartGoogleSession(CustomerId=:customer_id,AccountId=:account_id)?authCode={{AuthCode}}&redirectUri=postmessage';\r\n const requestUrl = _.template(getGoogleSessionUrlTmpl)({ AuthCode: code });\r\n\r\n odata.post(requestUrl, { data: ''})\r\n .then((sessionId) => {\r\n return this.updateTaskItemSessionId(taskId, sessionId, logMsg);\r\n });\r\n })\r\n .catch((error) => {\r\n logMsg(constants.LOGCATEGORY.TRACE,\r\n `failed to login to google on logs grid with gsi, err: ${JSON.stringify(error)}`);\r\n\r\n // do not show any error message if the popup is closed by user\r\n if (error && error.authErrors === 'popup_closed') {\r\n return;\r\n }\r\n\r\n // show Google login error message\r\n showError(handleGoogleLoginAuthError(error, this.newI18n));\r\n })\r\n .finally(withUiBlock());\r\n });\r\n } else {\r\n showGooglePopup(`/campaign/GoogleOAuth2/DirectToGoogleAuthorizationServer?cid=${config.get('CurrentCustomer').Id}&uid=${config.get('CurrentUser').Id}&aid=${config.get('CurrentAccount').Id}&userId=${encodeURIComponent(data.GoogleAccountName)}`, 'GoogleOAuth', 450, 650, _.partial(this.updateTaskItemSessionId, data.TaskId));\r\n }\r\n }\r\n\r\n showFacebookLoginPopup(e) {\r\n logMsg(constants.LOGCATEGORY.TRACE, 'click Facebook_Sign_In_Link');\r\n\r\n const {TaskId: taskId} = this.getColumnData(e) || {};\r\n const currentUser = config.get('CurrentUser');\r\n\r\n dismissCallout();\r\n\r\n loadFacebookSdk().then((sdk) => {\r\n if (sdk === null) {\r\n logMsg(constants.LOGCATEGORY.ERROR, 'Failed to load Facebook script.');\r\n return;\r\n }\r\n\r\n const facebookRepo = new FacebookImportRepository({ deps: {\r\n FB: sdk,\r\n odata,\r\n config,\r\n defaultLogActivity: {\r\n trace: (msg) => logMsg(constants.LOGCATEGORY.TRACE, msg),\r\n error: (msg) => logMsg(constants.LOGCATEGORY.ERROR, msg),\r\n },\r\n i18n,\r\n edm: { currentAccount: {} },\r\n jsData,\r\n }});\r\n\r\n facebookRepo.login({\r\n onSuccess: ({accessToken}) => {\r\n logMsg(constants.LOGCATEGORY.TRACE, 'login Facebook_Sign_In_Success');\r\n\r\n facebookRepo.refreshScheduledFacebookImportTaskItemSessionId(\r\n accessToken,\r\n taskId,\r\n currentUser,\r\n ).then(() => {\r\n logMsg(constants.LOGCATEGORY.TRACE, 'login Facebook_Credentials_Update_Success');\r\n\r\n showSuccess(i18n.get('Scheduled_Import_Facebook_GAuth_Edit_Success'));\r\n }).catch((error) => {\r\n logMsg(constants.LOGCATEGORY.TRACE, `Facebook_Credentials_Update_Error: ${JSON.stringify(error)}`);\r\n\r\n showError(i18n.get('GenericErrorMessage'));\r\n });\r\n },\r\n onPermissionsDeclined: ({ declinedScopesAndDesc = [], userID}) => {\r\n const declinedPerms = declinedScopesAndDesc.map((ds) => ds.name).join(', ');\r\n\r\n logMsg(constants.LOGCATEGORY.TRACE,\r\n `user (${userID}) decliened permissions: ${declinedPerms || ''}, could not editing import`);\r\n\r\n // show permission error\r\n showError(handleFacebookLoginError({ authErrors: 'FacebookImport_Permission_Denied_Error' }, this.newI18n));\r\n },\r\n onFail: (error) => {\r\n logMsg(constants.LOGCATEGORY.ERROR,\r\n `could not sign into Facebook for editing import: ${JSON.stringify(error)}`);\r\n\r\n // do not show any error message if the popup is closed by user\r\n if (error && error.status === 'unknown') {\r\n return;\r\n }\r\n\r\n // show Facebook login error message\r\n showError(handleFacebookLoginError(error, this.newI18n));\r\n },\r\n rerequest: true,\r\n });\r\n });\r\n }\r\n\r\n showPinterestLoginPopup(e) {\r\n logMsg(constants.LOGCATEGORY.TRACE, 'click Pinterest_Sign_In_Link');\r\n\r\n const { TaskId: taskId } = this.getColumnData(e) || {};\r\n const currentUser = config.get('CurrentUser');\r\n\r\n dismissCallout();\r\n\r\n const pinterestLoginRepo = new PinterestLoginRepository(config);\r\n const deps = {\r\n odata,\r\n config,\r\n defaultLogActivity: {\r\n trace: (msg) => logMsg(constants.LOGCATEGORY.TRACE, msg),\r\n error: (msg) => logMsg(constants.LOGCATEGORY.ERROR, msg),\r\n },\r\n i18n,\r\n edm: { currentAccount: {} },\r\n jsData,\r\n };\r\n const pinterestImportRepo = new PinterestImportRepository({ deps });\r\n\r\n pinterestLoginRepo.login()\r\n .then((authCode) => {\r\n logMsg(constants.LOGCATEGORY.TRACE, 'login Pinterest_Sign_In_Success');\r\n\r\n return pinterestImportRepo.startPinterestSession(authCode);\r\n })\r\n .then((sessionId) => {\r\n return this.findImportTaskItem(taskId).then((taskItem) => {\r\n const data = {\r\n ...taskItem,\r\n PinterestImportContext: {\r\n ...taskItem.PinterestImportContext,\r\n SessionId: sessionId,\r\n PinterestSessionUserId: (currentUser && currentUser.Id) || taskItem.PinterestImportContext.PinterestSessionUserId,\r\n },\r\n };\r\n\r\n return pinterestImportRepo.updateScheduledImportTaskItem(data, taskId);\r\n });\r\n })\r\n .then(() => {\r\n logMsg(constants.LOGCATEGORY.TRACE, 'login Pinterest_Credentials_Update_Success');\r\n\r\n showSuccess(i18n.get('Scheduled_Import_Pinterest_GAuth_Edit_Success'));\r\n })\r\n .catch((res) => {\r\n logMsg(constants.LOGCATEGORY.ERROR,\r\n `could not sign into Pinterest for editing import: ${JSON.stringify(res)}`);\r\n\r\n // do not show any error message if the popup is closed by user\r\n if (res && res.error === 'popup_closed_by_user') {\r\n return;\r\n }\r\n\r\n // show Pinterest login error message\r\n showError(handlePinterestLoginError(res, this.newI18n));\r\n });\r\n }\r\n\r\n render() {\r\n this.$el.html(tmpl({\r\n noGoogleImportMsg: i18n.get('Scheduled_Import_Log_Empty_GoogleImport'),\r\n noFacebookImportMsg: i18n.get('Scheduled_Import_Log_Empty_FacebookImport'),\r\n noAmazonImportMsg: i18n.get('Scheduled_Import_Log_Empty_AmazonImport'),\r\n noPinterestImportMsg: i18n.get('Scheduled_Import_Log_Empty_PinterestImport'),\r\n noFileImportMsg: i18n.get('Scheduled_Import_Log_Empty_FileImport'),\r\n }));\r\n ko.applyBindings(this.viewModel, this.el);\r\n\r\n this.googleImportGrid = this.initGrid(new GoogleImportLogConfig(this));\r\n this.fileImportGrid = this.initGrid(new FileImportLogConfig(this));\r\n\r\n this.fileImportGrid.gridView.render();\r\n\r\n // render facebook import log grid\r\n if (this.supportedImportTypes[IMPORT_TYPE.facebookimport]) {\r\n this.facebookImportGrid = this.initGrid(new FacebookImportLogConfig(this));\r\n // this.facebookImportGrid.gridView.render();\r\n }\r\n\r\n if (this.supportedImportTypes[IMPORT_TYPE.amazonImport]) {\r\n this.amazonImportGrid = this.initGrid(new AmazonImportLogConfig(this));\r\n }\r\n\r\n if (this.supportedImportTypes[IMPORT_TYPE.pinterestImport]) {\r\n this.pinterestImportGrid = this.initGrid(new PinterestImportLogConfig(this));\r\n }\r\n\r\n // select grid based on importType\r\n switch (this.importType) {\r\n case IMPORT_TYPE.facebookimport:\r\n this.currentGrid = this.facebookImportGrid;\r\n this.viewModel.showFacebookImportGrid(true);\r\n break;\r\n case IMPORT_TYPE.amazonImport:\r\n this.currentGrid = this.amazonImportGrid;\r\n this.viewModel.showAmazonImportGrid(true);\r\n break;\r\n case IMPORT_TYPE.pinterestImport:\r\n this.currentGrid = this.pinterestImportGrid;\r\n this.viewModel.showPinterestImportGrid(true);\r\n break;\r\n case IMPORT_TYPE.fileimport:\r\n this.currentGrid = this.fileImportGrid;\r\n this.viewModel.showFileImportGrid(true);\r\n break;\r\n default:\r\n this.currentGrid = this.googleImportGrid;\r\n this.viewModel.showGoogleImportGrid(true);\r\n break;\r\n }\r\n\r\n this.currentGrid.gridView.render();\r\n\r\n if (!this.isForVNext) {\r\n this.toolbar = new ToolbarView(getGridSwitchToolbarConfig(this)).render();\r\n this.$('.log-toolbar').append(this.toolbar.$el);\r\n }\r\n\r\n this.refreshGrid();\r\n\r\n return this;\r\n }\r\n\r\n initGrid(gridConfig) {\r\n let grid = pgrid.factory({ vnext: true })\r\n .use(perfMarkerPlugin)\r\n .use(a11yPlugin)\r\n .use(paginationPlugin)\r\n .use(placeholderPlugin)\r\n .use(uiBlockerPlugin);\r\n\r\n grid = grid.create(_.flow([headerTemplateConfig])(gridConfig));\r\n\r\n this.initUpdateFinishedEventListener(grid);\r\n\r\n return grid;\r\n }\r\n\r\n initUpdateFinishedEventListener(grid) {\r\n grid.gridView.on('didUpdate', () => {\r\n const hasNoResult = grid.gridView.countRows === 0;\r\n\r\n // make sure pagination does not render before first file import grid loads\r\n if (this.viewModel.isFirstSwitch() && !this.viewModel.showGoogleImportGrid() && !this.viewModel.showFacebookImportGrid() && !this.viewModel.showAmazonImportGrid() && !this.viewModel.showPinterestImportGrid()) {\r\n this.viewModel.isFirstSwitch(false);\r\n }\r\n\r\n this.viewModel.showNoGoogleImportMsg(this.importType === IMPORT_TYPE.googleimport && hasNoResult);\r\n this.viewModel.showNoFacebookImportMsg(this.importType === IMPORT_TYPE.facebookimport && hasNoResult);\r\n this.viewModel.showNoAmazonImportMsg(this.importType === IMPORT_TYPE.amazonImport && hasNoResult);\r\n this.viewModel.showNoPinterestImportMsg(this.importType === IMPORT_TYPE.pinterestImport && hasNoResult);\r\n this.viewModel.showNoFileImportMsg(this.importType === IMPORT_TYPE.fileimport && hasNoResult);\r\n });\r\n }\r\n\r\n showImportSettings(e) {\r\n if ($(e.currentTarget).data('showTooltip')) {\r\n // there is already tooltip showing.\r\n return;\r\n }\r\n\r\n const target = e.target;\r\n let tooltipView;\r\n let $targetTooltip;\r\n const columnData = this.getColumnData(e);\r\n const $parent = $(target).parent();\r\n const eventName = _.uniqueId('click.import.log.grid.');\r\n const subFieldsBlacklist = getBlacklist();\r\n\r\n if (columnData.Type === 'FileBasedImport') {\r\n subFieldsBlacklist.push('ImportAccountUrlOptions');\r\n subFieldsBlacklist.push('ImportDeletedEntities');\r\n subFieldsBlacklist.push('ImportNewOption_ImportNewAudienceTargets');\r\n subFieldsBlacklist.push('ImportUpdateEntityPreference_UpdateAudienceTargets');\r\n subFieldsBlacklist.push('ImportUET');\r\n subFieldsBlacklist.push('AssociatedUETTagId');\r\n }\r\n\r\n const options = JSON.parse(columnData.ImportUserPreference);\r\n\r\n function hideTooltip(event) {\r\n if (($(event.target).is($(target)) ||\r\n $(event.target).closest('[role=tooltip]', $parent).length) &&\r\n !$(event.target).closest('.close-image', $parent).length) {\r\n return true;\r\n }\r\n\r\n $(document).off(eventName);\r\n $(e.currentTarget).data('showTooltip', false);\r\n if ($targetTooltip) {\r\n $targetTooltip.tooltip('destroy');\r\n }\r\n tooltipView.remove();\r\n tooltipView = null;\r\n $targetTooltip = null;\r\n return false;\r\n }\r\n\r\n function showTooltip() {\r\n $(e.currentTarget).data('showTooltip', true);\r\n $targetTooltip = $(e.currentTarget).tooltip({\r\n html: true,\r\n title: tooltipView.el,\r\n template: toolTipTmpl({ i18n }),\r\n });\r\n $targetTooltip.tooltip('show');\r\n $parent.find('.closeimage').focus();\r\n\r\n $(document).on(eventName, hideTooltip);\r\n }\r\n\r\n this.importOptionsFormLoader.then(({ ImportOptionsForm }) => {\r\n this.uetTagSelectorViewLoader\r\n .then(({ UetTagSelectorView }) => {\r\n const searchAndReplaceSchema = _.clone(ImportSearchAndReplaceForStringProperty);\r\n // overriding schema here because import options still uses\r\n // old preference and we need to rename the name so options generated can be unique.\r\n\r\n searchAndReplaceSchema.name = 'SearchAndReplaceForCustomParameters';\r\n const findAndReplaceSuffixSchema = _.clone(ImportSearchAndReplaceForStringProperty);\r\n\r\n findAndReplaceSuffixSchema.name = 'SearchAndReplaceForFinalURLSuffix';\r\n tooltipView = new ImportSettingsTooltipView({\r\n formView: new ImportOptionsForm({\r\n jsonFormatImportOptions: options,\r\n deps: {\r\n i18n,\r\n config,\r\n schema: {\r\n ImportUpdateEntityPreference,\r\n ImportUserPreferences,\r\n LandingPageAppendPreference: ImportAppendDestUrlPreference,\r\n LandingPageReplacePreference: ImportSearchAndReplaceDestUrlPreference,\r\n AppendTrackingTemplatePreference: AppendPreferencesForTrackingTemplate,\r\n SearchAndReplacePreferencesForTrackingTemplate,\r\n ImportPrefixAndSuffixForStringProperty,\r\n ImportSearchAndReplaceForStringProperty,\r\n ImportAdjustmentForNumericProperty,\r\n SearchAndReplaceForCustomParameters: searchAndReplaceSchema,\r\n SearchAndReplaceForFinalURLSuffix: findAndReplaceSuffixSchema,\r\n },\r\n subFieldsBlacklist,\r\n isCustomerLevel: !!columnData.isCustomerLevel,\r\n isMultiAccountImport: this.isMultiAccount,\r\n UetTagSelectorView: createDisabledUETSelectorClass(UetTagSelectorView),\r\n },\r\n }),\r\n }).render();\r\n\r\n _.each(tooltipView.$('input[type=\"checkbox\"], input[type=\"text\"], select.input'), (input) => {\r\n $(input).attr('disabled', 'disabled');\r\n });\r\n\r\n tooltipView.$('#AdExtensionOptionsNoBmcMessage').hide();\r\n\r\n showTooltip();\r\n });\r\n });\r\n }\r\n\r\n showSummaryDetails(e) {\r\n this.summaryTableLoader.then(({ showSummaryDetailsPopup }) => {\r\n showSummaryDetailsPopup(e, this.getColumnData(e), i18n, this.findImportTaskItem);\r\n });\r\n }\r\n\r\n getColumnData(e) {\r\n return this.currentGrid.gridView.itemOfElement(e.target);\r\n }\r\n\r\n downloadErrorFile(e) {\r\n let data = this.getColumnData(e);\r\n\r\n logColumns({\r\n column: 'Import_History_Action',\r\n isMultiAccount: this.isMultiAccount,\r\n columnData: data,\r\n action: 'click',\r\n message: 'error file download link'\r\n });\r\n\r\n if (data && data.ErrorFileIdentifier) {\r\n download(data.ErrorFileIdentifier, 'ImportErrorFile');\r\n } else {\r\n logColumns({\r\n column: 'Import_History_Action',\r\n isMultiAccount: this.isMultiAccount,\r\n columnData: data,\r\n action: 'error',\r\n message: 'no error file data'\r\n });\r\n showError(i18n.get('GenericErrorMessage'));\r\n }\r\n }\r\n\r\n downloadErrorSummaryFile(e) {\r\n let data = this.getColumnData(e);\r\n\r\n logColumns({\r\n column: 'Import_History_Action',\r\n isMultiAccount: this.isMultiAccount,\r\n columnData: data,\r\n action: 'click',\r\n message: 'error summary file download link'\r\n });\r\n\r\n if (data && data.ErrorSummaryFileIdentifier) {\r\n download(data.ErrorSummaryFileIdentifier, 'ImportErrorFile');\r\n } else {\r\n logColumns({\r\n column: 'Import_History_Action',\r\n isMultiAccount: this.isMultiAccount,\r\n columnData: data,\r\n action: 'error',\r\n message: 'no error summary file data'\r\n });\r\n showError(i18n.get('GenericErrorMessage'));\r\n }\r\n }\r\n\r\n downloadUploadedFile(e) {\r\n let data = this.getColumnData(e);\r\n\r\n if (data && data.UploadFileIdentifier) {\r\n download(data.UploadFileIdentifier, 'ImportFile');\r\n } else {\r\n showError(i18n.get('GenericErrorMessage'));\r\n }\r\n }\r\n\r\n previewAnImport(e) {\r\n const data = this.getColumnData(e);\r\n\r\n logger.logMessage([constants.LOGCATEGORY.TRACE], constants.LOGLEVEL.INFO, '/campaign/importcampaign',\r\n `Preview an import from log grid, import id: ${data.ImportId}`);\r\n\r\n if (this.isForVNext) {\r\n this.router.navigateToRoute('fileimport', { importId: data.ImportId });\r\n } else {\r\n const fileImportContinueUrl = '/campaign/ImportCampaign.m/FileImport';\r\n const redirectUrl = queryify(fileImportContinueUrl, { importId: data.ImportId });\r\n\r\n // redirect to file import page\r\n window.location.href = redirectUrl;\r\n }\r\n }\r\n\r\n cancelAnImport(e) {\r\n // Odata call is not ready yet. Use WCF call to unblock for the moment.\r\n const data = this.getColumnData(e);\r\n const blockerElem = this.$('.importLogGrid');\r\n\r\n this.UIBlockerToken = UIBlocker.block(blockerElem);\r\n\r\n logger.logMessage([constants.LOGCATEGORY.TRACE], constants.LOGLEVEL.INFO, '/campaign/importcampaign',\r\n `Cancel an import from log grid, import id: ${data.ImportId}`);\r\n\r\n $http.post({\r\n url: '/campaign/ImportCampaign.m/CancelCurrentImport',\r\n data: {\r\n importId: data.ImportId,\r\n __RequestVerificationToken: $('input[name=\"__RequestVerificationToken\"]').val(),\r\n },\r\n contentType: 'application/x-www-form-urlencoded',\r\n }).bind(this).finally(() => {\r\n UIBlocker.unblock(blockerElem, this.UIBlockerToken);\r\n })\r\n .then(() => {\r\n this.refreshGrid();\r\n }).catch(() => {\r\n showError(i18n.get('GenericErrorMessage'));\r\n });\r\n }\r\n\r\n remove(...args) {\r\n this.googleImportGrid.gridView.remove();\r\n this.googleImportGrid.pagination.remove();\r\n if (this.facebookImportGrid && this.facebookImportGrid.gridView) {\r\n this.facebookImportGrid.gridView.remove();\r\n }\r\n if (this.facebookImportGrid && this.facebookImportGrid.pagination) {\r\n this.facebookImportGrid.pagination.remove();\r\n }\r\n if (this.amazonImportGrid && this.amazonImportGrid.gridView) {\r\n this.amazonImportGrid.gridView.remove();\r\n }\r\n if (this.amazonImportGrid && this.amazonImportGrid.pagination) {\r\n this.amazonImportGrid.pagination.remove();\r\n }\r\n if (this.pinterestImportGrid && this.pinterestImportGrid.gridView) {\r\n this.pinterestImportGrid.gridView.remove();\r\n }\r\n if (this.pinterestImportGrid && this.pinterestImportGrid.pagination) {\r\n this.pinterestImportGrid.pagination.remove();\r\n }\r\n this.fileImportGrid.gridView.remove();\r\n this.fileImportGrid.pagination.remove();\r\n\r\n if (this.toolbar) {\r\n this.toolbar.remove();\r\n }\r\n\r\n super.remove(...args);\r\n }\r\n}\r\n","import _ from 'underscore';\r\n\r\nfunction isRedirected(windowObj) {\r\n try {\r\n if (windowObj.hasOwnProperty('isAuthSucceed')) {\r\n return true;\r\n }\r\n return false;\r\n } catch (e) {\r\n return false;\r\n }\r\n}\r\n\r\nexport default function(url, title, w, h, callback = _.noop, errorMessage = '') {\r\n const windowWidth = w || 450;\r\n const windowHeight = h || 650;\r\n\r\n let documentElement = document.documentElement;\r\n let screen = window.screen;\r\n\r\n // Multi Screen Popup Positioning (http://stackoverflow.com/a/16861050)\r\n // Credit: http://www.xtf.dk/2011/08/center-new-popup-window-even-on.html\r\n // Fixes dual-screen position Most browsers Firefox\r\n let dualScreenLeft = window.screenLeft === undefined ? screen.left : window.screenLeft;\r\n let dualScreenTop = window.screenTop === undefined ? window.screenTop : screen.top;\r\n\r\n let width = window.innerWidth || documentElement.clientWidth || screen.width;\r\n let height = window.innerHeight || documentElement.clientHeight || screen.height;\r\n\r\n\r\n let left = ((width - windowWidth) / 2) + dualScreenLeft;\r\n let top = ((height - windowHeight) / 2) + dualScreenTop;\r\n\r\n let newWindow = window.open(url, title, `resizable=yes, height=${windowHeight},width=${windowWidth},left=${left},top=${top}`);\r\n\r\n newWindow.focus();\r\n let timer = setInterval(() => {\r\n if (newWindow.closed) {\r\n window.clearInterval(timer);\r\n } else if (isRedirected(newWindow)) {\r\n window.clearInterval(timer);\r\n if (newWindow.isAuthSucceed === true) {\r\n callback(newWindow.googleAccount); //eslint-disable-line\r\n } else {\r\n callback(errorMessage); //eslint-disable-line\r\n }\r\n newWindow.close();\r\n }\r\n }, 100);\r\n}\r\n","import Promise from 'bluebird';\r\nimport _ from 'underscore';\r\n\r\nimport { getMemoryDataSourceConfig, getImportLogDataSourceConfig, updateTaskItemSessionId, findImportTaskItem, updateMemoryGrid } from './import-log-datasource-handler';\r\nimport ImportLogGridBase from './import-log-grid-base';\r\n\r\nexport default class View extends ImportLogGridBase {\r\n constructor(options = {}) {\r\n super(_.defaults(options, {\r\n getImportLogDataSourceConfig,\r\n getMemoryDataSourceConfig,\r\n updateTaskItemSessionId,\r\n findImportTaskItem,\r\n updateMemoryGrid,\r\n importOptionsFormLoader: new Promise((resolve) => {\r\n import(/* webpackMode: 'eager' */ '@bingads-webui-campaign/import-components').then((importOptions) => {\r\n resolve(importOptions);\r\n });\r\n }),\r\n summaryTableLoader: new Promise((resolve) => {\r\n import(/* webpackMode: 'eager' */ '@bingads-webui-campaign-legacy/scheduled-import/view/shared-column-configs/import-summary-col').then((summaryTable) => {\r\n resolve(summaryTable);\r\n });\r\n }),\r\n uetTagSelectorViewLoader: new Promise((resolve) => {\r\n import(/* webpackMode: 'eager' */ '@bingads-webui-campaign-legacy/audiences/components/uet-tag/index').then((uetTagSelector) => {\r\n resolve(uetTagSelector);\r\n });\r\n }),\r\n }));\r\n }\r\n}\r\n","import config from '@bingads-webui-component-legacy/config/index';\r\n\r\nconst permissions = config.get('Permissions');\r\n\r\nconst TEST_TYPE_SUFFIX = permissions && permissions.IsUseImportTestTypeForImportTaskExecutionEnabled ? 'Test' : '';\r\nconst FILTER_OUT_RUNNOW = 'IsRunNow eq false';\r\nconst FILTER_IMPORT_TYPE = `Type eq Enum.TaskItemType'Import${TEST_TYPE_SUFFIX}'`;\r\nconst FILTER_FACEBOOK_IMPORT_TYPE = `Type eq Enum.TaskItemType'FacebookImport${TEST_TYPE_SUFFIX}'`;\r\nconst FILTER_MULTIACCOUNT_IMPORT_TYPE = `Type eq Enum.TaskItemType'MultiAccountGoogleImport${TEST_TYPE_SUFFIX}'`;\r\nconst FILTER_AMAZON_IMPORT_TYPE = `Type eq Enum.TaskItemType'AmazonImport${TEST_TYPE_SUFFIX}'`;\r\nconst FILTER_PINTEREST_IMPORT_TYPE = `Type eq Enum.TaskItemType'PinterestImport${TEST_TYPE_SUFFIX}'`;\r\n\r\nexport const FILTER_ALL_ITEMS = `${FILTER_IMPORT_TYPE} and ${FILTER_OUT_RUNNOW}`;\r\nexport const FILTER_ALL_BUT_DELETED = `${FILTER_IMPORT_TYPE} and State ne Enum.TaskItemState'Deleted' and ${FILTER_OUT_RUNNOW}`;\r\nexport const FILTER_ALL_ITEMS_MULTIACCOUNT = `${FILTER_MULTIACCOUNT_IMPORT_TYPE} and ${FILTER_OUT_RUNNOW}`;\r\nexport const FILTER_ALL_BUT_DELETED_MULTIACCOUNT = `${FILTER_MULTIACCOUNT_IMPORT_TYPE} and State ne Enum.TaskItemState'Deleted' and ${FILTER_OUT_RUNNOW}`;\r\n\r\nexport const FILTER_ALL_FACEBOOK_ITEMS = `${FILTER_FACEBOOK_IMPORT_TYPE} and ${FILTER_OUT_RUNNOW}`;\r\nexport const FILTER_ALL_BUT_DELETED_FACEBOOK_ITEMS = `${FILTER_FACEBOOK_IMPORT_TYPE} and State ne Enum.TaskItemState'Deleted' and ${FILTER_OUT_RUNNOW}`;\r\n\r\nexport const FILTER_ALL_AMAZON_ITEMS = `${FILTER_AMAZON_IMPORT_TYPE} and ${FILTER_OUT_RUNNOW}`;\r\nexport const FILTER_ALL_BUT_DELETED_AMAZON_ITEMS = `${FILTER_AMAZON_IMPORT_TYPE} and State ne Enum.TaskItemState'Deleted' and ${FILTER_OUT_RUNNOW}`;\r\n\r\nexport const FILTER_ALL_PINTEREST_ITEMS = `${FILTER_PINTEREST_IMPORT_TYPE} and ${FILTER_OUT_RUNNOW}`;\r\nexport const FILTER_ALL_BUT_DELETED_PINTEREST_ITEMS = `${FILTER_PINTEREST_IMPORT_TYPE} and State ne Enum.TaskItemState'Deleted' and ${FILTER_OUT_RUNNOW}`;\r\n","import _ from 'underscore';\r\n\r\nimport { ACCOUNT_MODE } from '@bingads-webui-campaign/campaign-ui-common';\r\nimport { supportedRecommendationTypesList, importRecommendationListNameMap, importChannelNameMap } from '@bingads-webui-campaign/import-callout';\r\nimport config from '@bingads-webui-component-legacy/config/index';\r\nimport dateUtil from '@bingads-webui-component-legacy/humanize/date';\r\nimport { showError } from '@bingads-webui-component-legacy/toast/index';\r\n\r\nimport odata from '@bingads-webui-static-legacy/communication/channel/odata';\r\nimport { bingadsGridColumn } from '@bingads-webui-component-legacy/bingads-grid/shared/column';\r\nimport statusColumnTmpl from '@bingads-webui-campaign-legacy/bingadsgrid/template/status-column.pug';\r\nimport creatorColumnTmpl from '@bingads-webui-campaign-legacy/scheduled-import/template/creator-column.pug';\r\nimport { importFreqColDataToTemplate } from '@bingads-webui-campaign-legacy/scheduled-import/view/shared-column-configs/import-freq-col';\r\nimport linkTmpl from '@bingads-webui-campaign-legacy/scheduled-import/template/link.pug';\r\nimport modeTmpl from '@bingads-webui-campaign-legacy/scheduled-import/template/import-mode.pug';\r\nimport nameTmpl from '@bingads-webui-campaign-legacy/scheduled-import/template/import-schedule-name.pug';\r\nimport acctTmpl from '@bingads-webui-campaign-legacy/scheduled-import/template/adwords-account-column.pug';\r\nimport taskTmpl from '@bingads-webui-campaign-legacy/scheduled-import/template/import-task-item-list-column.pug';\r\nimport runNowStatusColumnTmpl from '@bingads-webui-campaign-legacy/scheduled-import/template/import-schedule-run-now-status.pug';\r\nimport idTmpl from '@bingads-webui-campaign-legacy/scheduled-import/template/import-id.pug';\r\n\r\nimport popup from '@bingads-webui-component-legacy/dialog/popup';\r\n\r\nimport instrumentation from '@bingads-webui-static-legacy/instrumentation/index';\r\nimport instrumentationConstants from '@bingads-webui-static-legacy/instrumentation/constants';\r\n\r\nimport * as constants from '@bingads-webui-campaign-legacy/scheduled-import/view/import-schedule-constants';\r\n\r\nimport { IMPORT_TYPE, IMPORT_TYPE_TO_IMPORT_NAME, getDefaultImportTypeOfFilter, getSupportedImportTypes } from '@bingads-webui-campaign-legacy/scheduled-import/view/import-type';\r\nimport { getImportButtonOptions } from './import-center-options';\r\n\r\nconst i18n = window.globalLegacyI18n.get('component/i18n/loader!campaignui/feature/import-campaigns');\r\nconst i18nGlobal = window.globalLegacyI18n.get('component/i18n/loader!legacy/global');\r\n\r\n// value from AccountStatus enum\r\nconst INACTIVE_STATUS = 32;\r\n\r\nconst permissions = config.get('Permissions');\r\n\r\nexport const preferenceUploadButtonConfig = ({\r\n legacyI18n, lazyInject, publicPath, showTopOfGridPanel, disabled, perfMarker,\r\n}) => {\r\n return {\r\n id: 'upload_file',\r\n type: 'button',\r\n iconLeftGlyphName: 'ba-Upload',\r\n text: legacyI18n.getString('Import_PreferenceUpload_Button_Upload'),\r\n disabled,\r\n onClick: () => {\r\n const logTrace = (action, message) => {\r\n instrumentation.logMessage([instrumentationConstants.LOGCATEGORY.TRACE], instrumentationConstants.LOGLEVEL.INFO, '/campaign/importcampaign', `Import_Preference_Upload ${action} ${message}`);\r\n };\r\n\r\n logTrace('click', 'Upload_Import_Preference_Button');\r\n import(/* webpackMode: \"eager\" */'@bingads-webui-campaign-legacy/scheduled-import/view/preference-upload').then((preferenceUploadViewModule) => {\r\n const gridToolbar = lazyInject().gridToolbar;\r\n const preferenceUploadView = new preferenceUploadViewModule.PreferenceUploadView({\r\n i18n: legacyI18n,\r\n publicPath,\r\n logTrace,\r\n perfMarker,\r\n }).render();\r\n\r\n logTrace('render', 'Import_Preference_Upload_Panel');\r\n showTopOfGridPanel(preferenceUploadView);\r\n gridToolbar.gridToolbarGroup.hideAllToolbars();\r\n window.scrollTo(0, 0);\r\n\r\n preferenceUploadView.on('cancel', () => {\r\n logTrace('click', 'Cancel_Or_Close_Button');\r\n preferenceUploadView.remove();\r\n gridToolbar.gridToolbarGroup.showAllToolbars();\r\n });\r\n });\r\n },\r\n };\r\n};\r\n\r\nlet batchEditStatus = function(gridView, items, value, isMultiAccount, isForVNext, adoptResumeScheduleRecommendation) {\r\n if (items.length === 0) {\r\n popup.alert(i18nGlobal.getString('Grid_RowSelectionRequired'));\r\n return;\r\n }\r\n\r\n const ruleUrlTmpl = (ruleId) => {\r\n return `/Advertiser/Customers()/${isMultiAccount ? '' : 'Accounts()/'}TaskItems({{ruleId}})`.replace('{{ruleId}}', ruleId);\r\n };\r\n\r\n const action = {\r\n type: 'Patch',\r\n data: {\r\n '@odata.type': isMultiAccount ? '#Model.MultiAccountGoogleImportTaskItem' : '#Model.ImportTaskItem',\r\n State: value,\r\n },\r\n };\r\n let batchRequest = [];\r\n let index = 0;\r\n\r\n for (index; index < items.length; index++) {\r\n const item = items[index];\r\n const state = item && item.State && item.State.toString();\r\n\r\n if (state && state !== 'Deleted') {\r\n const url = ruleUrlTmpl(item.Id);\r\n\r\n batchRequest.push({\r\n type: action.type,\r\n data: _.extend({ Type: item.Type }, action.data),\r\n url,\r\n });\r\n }\r\n }\r\n\r\n if (_.size(batchRequest) > 0) {\r\n odata.ajaxBatch(batchRequest, (err, textStatus, data) => {\r\n if (err) {\r\n showError(i18n.get('GenericErrorMessage'));\r\n }\r\n if (data.some((item) => {\r\n return item.status === 200;\r\n })) {\r\n gridView.refresh(true);\r\n if (isForVNext) {\r\n gridView.deselectAll();\r\n }\r\n\r\n // adopt import callout card recommendation\r\n if (adoptResumeScheduleRecommendation) {\r\n adoptResumeScheduleRecommendation(value, items);\r\n }\r\n }\r\n });\r\n }\r\n};\r\n\r\nlet emailMapper = function(notificationType) {\r\n let arr = [\r\n { value: 'None', text: i18n.get('AutomatedRules_NotificationType_None')},\r\n { value: 'OnChange, OnError', text: i18n.get('AutomatedRules_NotificationType_OnChangeOrError')},\r\n { value: 'OnError', text: i18n.get('AutomatedRules_NotificationType_OnError')},\r\n { value: 'Always', text: i18n.get('Scheduled_Import_NotificationType_Always')},\r\n ];\r\n let result = _.find(arr, (obj) => obj.value === notificationType);\r\n\r\n return result ? result.text : null;\r\n};\r\n\r\nfunction updateToolbarText(toolbarConfig, filterText) {\r\n const filterConfig = toolbarConfig.get('filter');\r\n\r\n filterConfig.button.text = filterText;\r\n\r\n config.set('filter', filterConfig);\r\n}\r\n\r\nexport function getToolbarConfigForVNext(scope, lazyInject, importChannelType, showTopOfGridPanel, publicPath, perfMarker) {\r\n const isMultiAccount = scope && scope.values && scope.values.aid === undefined;\r\n const isSmartAccount = config.get('CurrentAccount').AccountMode === ACCOUNT_MODE.SMART;\r\n const isUPSmartAccount = config.get('CurrentAccount').AccountMode === ACCOUNT_MODE.UNIFIED_SMART;\r\n\r\n // get supported import types based on permissions and account status\r\n const supportedImportTypes = getSupportedImportTypes({ permissions, isMultiAccount, isSmartAccount, isUPSmartAccount });\r\n\r\n const isMixedImports = importChannelType === undefined;\r\n const isGoogleImportOnly = importChannelType === IMPORT_TYPE.googleimport;\r\n const isFacebookImportOnly = importChannelType === IMPORT_TYPE.facebookimport;\r\n const isAmazonImportOnly = importChannelType === IMPORT_TYPE.amazonImport;\r\n const isPinterestImportOnly = importChannelType === IMPORT_TYPE.pinterestImport;\r\n\r\n let historyGridFilterTitles;\r\n\r\n if (isMixedImports) {\r\n historyGridFilterTitles = _.extend({\r\n googleAll: supportedImportTypes[IMPORT_TYPE.googleimport] && Object.keys(supportedImportTypes).length === 1 ? i18n.getString('Scheduled_Import_All_Imports') : i18n.getString('Scheduled_Import_All_Google_Imports'),\r\n googleDeleted: supportedImportTypes[IMPORT_TYPE.googleimport] && Object.keys(supportedImportTypes).length === 1 ? i18n.getString('Scheduled_Import_Filter_Deleted') : i18n.getString('Scheduled_Import_All_Google_But_Deleted_Imports'),\r\n }, supportedImportTypes[IMPORT_TYPE.facebookimport] ? {\r\n facebookAll: i18n.getString('Scheduled_Import_All_Facebook_Imports'),\r\n facebookDeleted: i18n.getString('Scheduled_Import_All_Facebook_But_Deleted_Imports'),\r\n } : {}, supportedImportTypes[IMPORT_TYPE.amazonImport] ? {\r\n amazonAll: i18n.getString('Scheduled_Import_All_Amazon_Imports'),\r\n amazonDeleted: i18n.getString('Scheduled_Import_All_Amazon_But_Deleted_Imports'),\r\n } : {}, supportedImportTypes[IMPORT_TYPE.pinterestImport] ? {\r\n pinterestAll: i18n.getString('Scheduled_Import_All_Pinterest_Imports'),\r\n pinterestDeleted: i18n.getString('Scheduled_Import_All_Pinterest_But_Deleted_Imports'),\r\n } : {});\r\n } else {\r\n historyGridFilterTitles = _.extend({\r\n googleAll: i18n.getString('Scheduled_Import_All_Imports'),\r\n googleDeleted: i18n.getString('Scheduled_Import_Filter_Deleted'),\r\n }, supportedImportTypes[IMPORT_TYPE.facebookimport] ? {\r\n facebookAll: i18n.getString('Scheduled_Import_All_Imports'),\r\n facebookDeleted: i18n.getString('Scheduled_Import_Filter_Deleted'),\r\n } : {}, supportedImportTypes[IMPORT_TYPE.amazonImport] ? {\r\n amazonAll: i18n.getString('Scheduled_Import_All_Imports'),\r\n amazonDeleted: i18n.getString('Scheduled_Import_Filter_Deleted'),\r\n } : {}, supportedImportTypes[IMPORT_TYPE.pinterestImport] ? {\r\n pinterestAll: i18n.getString('Scheduled_Import_All_Imports'),\r\n pinterestDeleted: i18n.getString('Scheduled_Import_Filter_Deleted'),\r\n } : {});\r\n }\r\n\r\n // set default dropdown button filter text\r\n const importTypeOfFilter = getDefaultImportTypeOfFilter({\r\n isMultiAccount,\r\n importType: isMixedImports ? scope.values.importType : importChannelType,\r\n supportedImportTypes,\r\n });\r\n const filterText = {\r\n [IMPORT_TYPE.facebookimport]: historyGridFilterTitles.facebookDeleted,\r\n [IMPORT_TYPE.amazonImport]: historyGridFilterTitles.amazonDeleted,\r\n [IMPORT_TYPE.pinterestImport]: historyGridFilterTitles.pinterestDeleted,\r\n }[importTypeOfFilter] || historyGridFilterTitles.googleDeleted;\r\n\r\n return {\r\n toolbarSelectedConfig: _.reduce([\r\n ['edit', {\r\n id: 'edit',\r\n type: 'dropdown',\r\n iconLeftGlyphName: 'ba-Edit',\r\n button: {\r\n text: i18nGlobal.getString('LocationTargeting_SectionEdit'),\r\n },\r\n menu: {\r\n items: [\r\n {\r\n name: 'enable',\r\n type: 'button',\r\n iconLeft: ['icon-status-active'],\r\n iconLeftGlyphName: 'ba-RadioBullet2',\r\n text: i18n.getString('AutomatedRules_RulesManagementGrid_EnableRule'),\r\n onClick: () => {\r\n const { grid: { gridView }, isMultiAccount: ima, adoptResumeScheduleRecommendation } = lazyInject().backboneGridView;\r\n\r\n batchEditStatus(gridView, gridView.selectedItems(), 'Active', ima, true, adoptResumeScheduleRecommendation);\r\n },\r\n }, {\r\n name: 'pause',\r\n type: 'button',\r\n iconLeft: ['icon-status-pause'],\r\n iconLeftGlyphName: 'ba-PauseListView12',\r\n text: i18n.getString('AutomatedRules_RulesManagementGrid_PauseRule'),\r\n onClick: () => {\r\n const gridView = lazyInject().backboneGridView.grid.gridView;\r\n\r\n batchEditStatus(gridView, gridView.selectedItems(), 'Paused', lazyInject().backboneGridView.isMultiAccount, true);\r\n },\r\n }, {\r\n name: 'delete',\r\n type: 'button',\r\n iconLeft: ['icon-status-delete'],\r\n iconLeftGlyphName: 'ba-Delete',\r\n text: i18n.getString('AutomatedRules_RulesManagementGrid_DeleteRule'),\r\n onClick: () => {\r\n // eslint-disable-next-line no-alert, no-restricted-globals\r\n if (!confirm(i18n.getString('Scheduled_Import_DeleteConfirm'))) {\r\n return;\r\n }\r\n const gridView = lazyInject().backboneGridView.grid.gridView;\r\n\r\n batchEditStatus(gridView, gridView.selectedItems(), 'Deleted', lazyInject().backboneGridView.isMultiAccount, true);\r\n },\r\n }],\r\n },\r\n }],\r\n ['expander', {\r\n type: 'expander',\r\n }],\r\n ['button-clear-selection', {\r\n type: 'button-clear-selection',\r\n }],\r\n ],\r\n (map, [key, value]) => {\r\n map.set(key, value);\r\n return map;\r\n }\r\n , new Map()),\r\n toolbarUnselectedConfig: _.reduce(_.compact([\r\n !isMixedImports && getImportButtonOptions(i18n, importChannelType, lazyInject),\r\n !isMixedImports && ['upload', preferenceUploadButtonConfig({\r\n legacyI18n: i18n,\r\n lazyInject,\r\n publicPath,\r\n showTopOfGridPanel,\r\n disabled: permissions && permissions.IsReadOnlyUser,\r\n perfMarker,\r\n })],\r\n ['filter', {\r\n id: 'filter',\r\n type: 'dropdown',\r\n button: {\r\n text: filterText,\r\n },\r\n menu: {\r\n items: _.compact([\r\n (isMixedImports || isGoogleImportOnly) && {\r\n name: 'google-all',\r\n type: 'button',\r\n text: historyGridFilterTitles.googleAll,\r\n onClick: () => {\r\n lazyInject().backboneGridView.grid.gridView.set({\r\n dataSource: {\r\n query: {\r\n // eslint-disable-next-line no-nested-ternary\r\n $filter: lazyInject().backboneGridView.isMultiAccount ? constants.FILTER_ALL_ITEMS_MULTIACCOUNT : constants.FILTER_ALL_ITEMS,\r\n },\r\n },\r\n });\r\n lazyInject().backboneGridView.isFiltered = false;\r\n lazyInject().backboneGridView.importTypeOfFilter = IMPORT_TYPE.googleimport;\r\n lazyInject().updateUnselectedToolbarConfig(updateToolbarText(lazyInject().getUnselectedToolbarConfig(), historyGridFilterTitles.googleAll));\r\n },\r\n },\r\n (isMixedImports || isGoogleImportOnly) && {\r\n name: 'google-deleted',\r\n type: 'buttonMenuItem',\r\n text: historyGridFilterTitles.googleDeleted,\r\n onClick: () => {\r\n lazyInject().backboneGridView.grid.gridView.set({\r\n dataSource: {\r\n query: {\r\n // eslint-disable-next-line no-nested-ternary\r\n $filter: lazyInject().backboneGridView.isMultiAccount ? constants.FILTER_ALL_BUT_DELETED_MULTIACCOUNT : constants.FILTER_ALL_BUT_DELETED,\r\n },\r\n },\r\n });\r\n lazyInject().backboneGridView.isFiltered = true;\r\n lazyInject().backboneGridView.importTypeOfFilter = IMPORT_TYPE.googleimport;\r\n lazyInject().updateUnselectedToolbarConfig(updateToolbarText(lazyInject().getUnselectedToolbarConfig(), historyGridFilterTitles.googleDeleted));\r\n },\r\n },\r\n supportedImportTypes[IMPORT_TYPE.facebookimport] && (isFacebookImportOnly || isMixedImports) && {\r\n name: 'facebook-all',\r\n type: 'button',\r\n text: historyGridFilterTitles.facebookAll,\r\n onClick: () => {\r\n lazyInject().backboneGridView.grid.gridView.set({\r\n dataSource: {\r\n query: {\r\n $filter: constants.FILTER_ALL_FACEBOOK_ITEMS,\r\n },\r\n },\r\n });\r\n lazyInject().backboneGridView.isFiltered = false;\r\n lazyInject().backboneGridView.importTypeOfFilter = IMPORT_TYPE.facebookimport;\r\n lazyInject().updateUnselectedToolbarConfig(updateToolbarText(lazyInject().getUnselectedToolbarConfig(), historyGridFilterTitles.facebookAll));\r\n },\r\n },\r\n supportedImportTypes[IMPORT_TYPE.facebookimport] && (isFacebookImportOnly || isMixedImports) && {\r\n name: 'facebook-deleted',\r\n type: 'buttonMenuItem',\r\n text: historyGridFilterTitles.facebookDeleted,\r\n onClick: () => {\r\n lazyInject().backboneGridView.grid.gridView.set({\r\n dataSource: {\r\n query: {\r\n $filter: constants.FILTER_ALL_BUT_DELETED_FACEBOOK_ITEMS,\r\n },\r\n },\r\n });\r\n lazyInject().backboneGridView.isFiltered = true;\r\n lazyInject().backboneGridView.importTypeOfFilter = IMPORT_TYPE.facebookimport;\r\n lazyInject().updateUnselectedToolbarConfig(updateToolbarText(lazyInject().getUnselectedToolbarConfig(), historyGridFilterTitles.facebookDeleted));\r\n },\r\n },\r\n supportedImportTypes[IMPORT_TYPE.amazonImport] && (isAmazonImportOnly || isMixedImports) && {\r\n name: 'amazon-all',\r\n type: 'button',\r\n text: historyGridFilterTitles.amazonAll,\r\n onClick: () => {\r\n lazyInject().backboneGridView.grid.gridView.set({\r\n dataSource: {\r\n query: {\r\n $filter: constants.FILTER_ALL_AMAZON_ITEMS,\r\n },\r\n },\r\n });\r\n lazyInject().backboneGridView.isFiltered = false;\r\n lazyInject().backboneGridView.importTypeOfFilter = IMPORT_TYPE.amazonImport;\r\n lazyInject().updateUnselectedToolbarConfig(updateToolbarText(lazyInject().getUnselectedToolbarConfig(), historyGridFilterTitles.amazonAll));\r\n },\r\n },\r\n supportedImportTypes[IMPORT_TYPE.amazonImport] && (isAmazonImportOnly || isMixedImports) && {\r\n name: 'amazon-deleted',\r\n type: 'buttonMenuItem',\r\n text: historyGridFilterTitles.amazonDeleted,\r\n onClick: () => {\r\n lazyInject().backboneGridView.grid.gridView.set({\r\n dataSource: {\r\n query: {\r\n $filter: constants.FILTER_ALL_BUT_DELETED_AMAZON_ITEMS,\r\n },\r\n },\r\n });\r\n lazyInject().backboneGridView.isFiltered = true;\r\n lazyInject().backboneGridView.importTypeOfFilter = IMPORT_TYPE.amazonImport;\r\n lazyInject().updateUnselectedToolbarConfig(updateToolbarText(lazyInject().getUnselectedToolbarConfig(), historyGridFilterTitles.amazonDeleted));\r\n },\r\n },\r\n supportedImportTypes[IMPORT_TYPE.pinterestImport] && (isPinterestImportOnly || isMixedImports) && {\r\n name: 'pinterest-all',\r\n type: 'button',\r\n text: historyGridFilterTitles.pinterestAll,\r\n onClick: () => {\r\n lazyInject().backboneGridView.grid.gridView.set({\r\n dataSource: {\r\n query: {\r\n $filter: constants.FILTER_ALL_PINTEREST_ITEMS,\r\n },\r\n },\r\n });\r\n lazyInject().backboneGridView.isFiltered = false;\r\n lazyInject().backboneGridView.importTypeOfFilter = IMPORT_TYPE.pinterestImport;\r\n lazyInject().updateUnselectedToolbarConfig(updateToolbarText(lazyInject().getUnselectedToolbarConfig(), historyGridFilterTitles.pinterestAll));\r\n },\r\n },\r\n supportedImportTypes[IMPORT_TYPE.pinterestImport] && (isPinterestImportOnly || isMixedImports) && {\r\n name: 'pinterest-deleted',\r\n type: 'buttonMenuItem',\r\n text: historyGridFilterTitles.pinterestDeleted,\r\n onClick: () => {\r\n lazyInject().backboneGridView.grid.gridView.set({\r\n dataSource: {\r\n query: {\r\n $filter: constants.FILTER_ALL_BUT_DELETED_PINTEREST_ITEMS,\r\n },\r\n },\r\n });\r\n lazyInject().backboneGridView.isFiltered = true;\r\n lazyInject().backboneGridView.importTypeOfFilter = IMPORT_TYPE.pinterestImport;\r\n lazyInject().updateUnselectedToolbarConfig(updateToolbarText(lazyInject().getUnselectedToolbarConfig(), historyGridFilterTitles.pinterestDeleted));\r\n },\r\n },\r\n ]),\r\n },\r\n }],\r\n ['refresh', {\r\n id: 'refresh_schedule',\r\n type: 'button',\r\n iconLeftGlyphName: 'ba-Refresh',\r\n text: i18n.getString('CampaignImport_Refresh'),\r\n onClick: () => {\r\n lazyInject().backboneGridView.grid.gridView.refresh(true);\r\n },\r\n }],\r\n ]),\r\n (map, [key, value]) => {\r\n map.set(key, value);\r\n return map;\r\n }, new Map()),\r\n };\r\n}\r\n\r\nfunction getPluginsConfig(view) {\r\n return {\r\n toolbar: {\r\n container: view.$('.history-toolbar'),\r\n items: [\r\n {\r\n name: 'edit',\r\n type: 'dropdown',\r\n title: i18nGlobal.getString('LocationTargeting_SectionEdit'),\r\n level: 1,\r\n isNewFeature: false,\r\n items: [\r\n {\r\n name: 'enable',\r\n type: 'buttonMenuItem',\r\n leftIconClass: 'icon-status-active',\r\n text: i18n.getString('AutomatedRules_RulesManagementGrid_EnableRule'),\r\n action: (gridView) => {\r\n return view.batchEditCallback ?\r\n view.batchEditCallback(gridView, gridView.selectedItems(), 'Active') :\r\n batchEditStatus(gridView, gridView.selectedItems(), 'Active', view.isMultiAccount);\r\n },\r\n }, {\r\n name: 'pause',\r\n type: 'buttonMenuItem',\r\n leftIconClass: 'icon-status-pause',\r\n text: i18n.getString('AutomatedRules_RulesManagementGrid_PauseRule'),\r\n action: (gridView) => {\r\n return view.batchEditCallback ?\r\n view.batchEditCallback(gridView, gridView.selectedItems(), 'Paused') :\r\n batchEditStatus(gridView, gridView.selectedItems(), 'Paused', view.isMultiAccount);\r\n },\r\n }, {\r\n name: 'delete',\r\n type: 'buttonMenuItem',\r\n leftIconClass: 'icon-status-delete',\r\n text: i18n.getString('AutomatedRules_RulesManagementGrid_DeleteRule'),\r\n action: (gridView) => {\r\n return view.batchEditCallback ?\r\n view.batchEditCallback(gridView, gridView.selectedItems(), 'Deleted') :\r\n batchEditStatus(gridView, gridView.selectedItems(), 'Deleted', view.isMultiAccount);\r\n },\r\n }],\r\n }, {\r\n name: 'historyfilter',\r\n type: 'dropdown',\r\n title: i18n.getString('Scheduled_Import_Filter_Deleted'),\r\n level: 1,\r\n isNewFeature: false,\r\n items: [\r\n {\r\n name: 'all',\r\n type: 'buttonMenuItem',\r\n text: i18n.getString('Scheduled_Import_All_Imports'),\r\n action: {\r\n viewFactory: () => {\r\n view.grid.gridView.set({\r\n dataSource: {\r\n query: {\r\n $filter: view.isMultiAccount ? constants.FILTER_ALL_ITEMS_MULTIACCOUNT : constants.FILTER_ALL_ITEMS,\r\n },\r\n },\r\n });\r\n view.isFiltered = false;\r\n },\r\n setMenuTitle: {\r\n text: i18n.getString('Scheduled_Import_All_Imports'),\r\n pos: 1,\r\n },\r\n },\r\n }, {\r\n name: 'deleted',\r\n type: 'buttonMenuItem',\r\n text: i18n.getString('Scheduled_Import_Filter_Deleted'),\r\n action: {\r\n viewFactory: () => {\r\n view.grid.gridView.set({\r\n dataSource: {\r\n query: {\r\n $filter: view.isMultiAccount ? constants.FILTER_ALL_BUT_DELETED_MULTIACCOUNT : constants.FILTER_ALL_BUT_DELETED,\r\n },\r\n },\r\n });\r\n view.isFiltered = true;\r\n },\r\n setMenuTitle: {\r\n text: i18n.getString('Scheduled_Import_Filter_Deleted'),\r\n pos: 1,\r\n },\r\n },\r\n }],\r\n }, {\r\n name: 'refresh',\r\n type: 'button',\r\n text: i18n.getString('CampaignImport_Refresh'),\r\n leftIconClass: 'spritedimage refresh-icon',\r\n action: () => {\r\n view.grid.gridView.refresh(true);\r\n },\r\n }],\r\n },\r\n };\r\n}\r\n\r\nfunction getColumnsConfig(isMultiAccount, isForVNext, importChannelType, isSmartAccount, isUPSmartAccount, supportedImportTypes) {\r\n let columns = _.compact([bingadsGridColumn({\r\n name: 'State',\r\n property: _.identity,\r\n title: 'AutomatedRules_RulesManagementGrid_Status',\r\n helpId: 'pop_BA_Import_ScheduleStatus',\r\n bodyClasses: ['col-State'],\r\n sortable: {\r\n key: 'State',\r\n },\r\n template: (local) => {\r\n const tmp = local.value.IsAutoFrequency || local.value.Cron ? statusColumnTmpl : runNowStatusColumnTmpl;\r\n\r\n return tmp({\r\n Status: local.value.State,\r\n i18n: i18nGlobal,\r\n });\r\n },\r\n i18n,\r\n }), (importChannelType !== undefined || (permissions && permissions.dynamic && permissions.dynamic.ImportPreferenceUpload && !isMultiAccount)) && bingadsGridColumn({\r\n name: 'Id',\r\n property: _.identity,\r\n title: 'Scheduled_Import_Task_ID',\r\n bodyClasses: ['col-Id'],\r\n template: (local) => {\r\n return idTmpl({\r\n id: local.value.Id,\r\n });\r\n },\r\n i18n,\r\n }), bingadsGridColumn({\r\n name: 'Name',\r\n property: 'Name',\r\n title: 'Scheduled_Import_Name',\r\n bodyClasses: ['col-Name'],\r\n template: (local) => {\r\n return nameTmpl({\r\n Name: local.value || i18nGlobal.get('QualityScore_NA'),\r\n });\r\n },\r\n i18n,\r\n }), bingadsGridColumn({\r\n name: 'CreatedBy',\r\n title: 'AutomatedRules_RulesManagementGrid_CreatedBy',\r\n property: _.identity,\r\n bodyClasses: ['col-CreatedBy'],\r\n template: (local) => {\r\n return creatorColumnTmpl({\r\n Creator: local.value.ModifiedBy && local.value.ModifiedBy.Name,\r\n DateTime: dateUtil.format(new Date(local.value.CreatedAt), 'dddd, MMMM d, yyyy', config.get('culture')),\r\n Time: dateUtil.format(new Date(local.value.CreatedAt), 'hh:mm:ss tt', config.get('culture')),\r\n });\r\n },\r\n i18n,\r\n }), isMultiAccount ? bingadsGridColumn({\r\n name: 'ImportTaskItemList',\r\n property: 'ImportTaskItemList',\r\n title: 'Import_LastImport_AdWordsAccount',\r\n bodyClasses: ['col-AdWordsImportContext'],\r\n template: () => {\r\n return taskTmpl({\r\n i18n,\r\n className: 'import-schedule-accounts',\r\n });\r\n },\r\n i18n,\r\n }) : bingadsGridColumn({\r\n name: 'AdWordsImportContext',\r\n property: supportedImportTypes[IMPORT_TYPE.facebookimport] || supportedImportTypes[IMPORT_TYPE.amazonImport] || supportedImportTypes[IMPORT_TYPE.pinterestImport] ? (item) => {\r\n return item.AdWordsImportContext || item.FacebookImportContext || item.AmazonImportContext || item.PinterestImportContext;\r\n } : 'AdWordsImportContext',\r\n title: (() => {\r\n const IsFacebookImportEnabled = supportedImportTypes[IMPORT_TYPE.facebookimport];\r\n const IsAmazonImportEnabled = supportedImportTypes[IMPORT_TYPE.amazonImport];\r\n const IsPinterestImportEnabled = supportedImportTypes[IMPORT_TYPE.pinterestImport];\r\n\r\n if (supportedImportTypes[IMPORT_TYPE.googleimport] && Object.keys(supportedImportTypes).length === 1) {\r\n return i18n.get('Import_LastImport_AdWordsAccount');\r\n } else if (IsFacebookImportEnabled || IsAmazonImportEnabled || IsPinterestImportEnabled) {\r\n let enabledImportTypes = 'Google';\r\n\r\n if (importChannelType === undefined) {\r\n enabledImportTypes = enabledImportTypes.concat(IsFacebookImportEnabled ? '/Meta' : '')\r\n .concat(IsAmazonImportEnabled ? '/Amazon' : '')\r\n .concat(IsPinterestImportEnabled ? '/Pinterest' : '');\r\n } else if (IsFacebookImportEnabled && importChannelType === IMPORT_TYPE.facebookimport) {\r\n enabledImportTypes = 'Meta';\r\n } else if (IsAmazonImportEnabled && importChannelType === IMPORT_TYPE.amazonImport) {\r\n enabledImportTypes = 'Amazon';\r\n } else if (IsPinterestImportEnabled && importChannelType === IMPORT_TYPE.pinterestImport) {\r\n enabledImportTypes = 'Pinterest';\r\n }\r\n return i18n.get('Import_LastImport_AdWordsAccount_Dynamic').replace('{0}', enabledImportTypes);\r\n }\r\n\r\n return i18n.get('Import_LastImport_AdWordsAccount');\r\n })(),\r\n bodyClasses: ['col-AdWordsImportContext'],\r\n template: (local) => {\r\n const context = local.value || {};\r\n let accountNumber;\r\n\r\n if (context.CustomerId) {\r\n accountNumber = `(${context.CustomerId})`;\r\n } else if ((supportedImportTypes[IMPORT_TYPE.facebookimport] || supportedImportTypes[IMPORT_TYPE.pinterestImport]) && context.AccountId) {\r\n accountNumber = `(${context.AccountId})`;\r\n } else if (supportedImportTypes[IMPORT_TYPE.amazonImport] && context.ProfileId) {\r\n accountNumber = `(${context.ProfileId})`;\r\n } else {\r\n accountNumber = '';\r\n }\r\n\r\n return acctTmpl({\r\n EmailAddress: context.AccountName || i18n.get('Import_LastImport_Dash'),\r\n AccountNumber: accountNumber,\r\n });\r\n },\r\n }), bingadsGridColumn({\r\n name: 'Frequency',\r\n property: _.identity,\r\n title: 'AutomatedRules_RuleAuthoring_Filter',\r\n helpId: 'pop_BA_Import_ScheduleWhen',\r\n bodyClasses: ['col-Frequency'],\r\n template: (local) => importFreqColDataToTemplate(local.value, i18n),\r\n i18n,\r\n }), permissions.IsSmartImportEnabled && !isMultiAccount && !isUPSmartAccount ? bingadsGridColumn({\r\n name: 'Mode',\r\n property: _.identity,\r\n title: 'Scheduled_Import_Mode_Column',\r\n bodyClasses: ['col-Mode'],\r\n template: (local) => {\r\n return modeTmpl({\r\n mode: local.value.IsSmartImport ? i18n.get('Scheduled_Import_Mode_Smart') : i18n.get('Scheduled_Import_Mode_Advanced'),\r\n });\r\n },\r\n i18n,\r\n }) : null, bingadsGridColumn({\r\n name: 'NotificationType',\r\n title: 'AutomatedRules_RulesManagementGrid_EmailNotification',\r\n property: 'NotificationType',\r\n helpId: 'pop_BA_Import_ScheduleEmail',\r\n bodyClasses: ['col-NotificationType'],\r\n template: (local) => {\r\n return emailMapper(local.value);\r\n },\r\n i18n,\r\n }), bingadsGridColumn({\r\n name: 'Action',\r\n title: 'AutomatedRules_RulesManagementGrid_Action',\r\n property: _.identity,\r\n helpId: 'pop_BA_Import_ScheduleAction',\r\n bodyClasses: ['col-Action'],\r\n template: (local) => {\r\n // since vNext has been GAed, smart import schedules are allowed to edit.\r\n const columnData = local.value;\r\n const allowEdit = !permissions.IsReadOnlyUser && (isMultiAccount || (config.get('CurrentAccount').Status !== INACTIVE_STATUS));\r\n const enableRunNowButton = (columnData.IsAutoFrequency || columnData.Cron) && columnData.State !== 'Deleted' && allowEdit;\r\n\r\n const importRecommendationListName = importRecommendationListNameMap(columnData);\r\n const importChannel = importChannelNameMap(importRecommendationListName);\r\n const supportedRecommendationTypes = supportedRecommendationTypesList();\r\n\r\n const logTrace = (action, type) => {\r\n instrumentation.logMessage([instrumentationConstants.LOGCATEGORY.TRACE], instrumentationConstants.LOGLEVEL.INFO, '/campaign/importcampaign', `Import_Recommendation ${columnData.Id} ${action} ${type} ${importChannel}`);\r\n };\r\n\r\n let showRecommendation;\r\n\r\n if (importRecommendationListName) {\r\n if (columnData[importRecommendationListName] && columnData[importRecommendationListName].length !== 0) {\r\n columnData[importRecommendationListName] = _.filter(\r\n columnData[importRecommendationListName],\r\n (recommendationType) => {\r\n const ifTypeSupported = supportedRecommendationTypes[importRecommendationListName].indexOf(recommendationType) !== -1;\r\n\r\n if (!ifTypeSupported) {\r\n logTrace('not_supported_in_UI', `${recommendationType}`);\r\n }\r\n return ifTypeSupported;\r\n },\r\n );\r\n }\r\n\r\n showRecommendation = isForVNext && permissions.IsSmartImportEnabled && columnData[importRecommendationListName] &&\r\n columnData[importRecommendationListName].length !== 0;\r\n\r\n if (showRecommendation) {\r\n if (isSmartAccount) {\r\n logTrace('belongTo', 'Smart_Campaigns_Import');\r\n } else if (isUPSmartAccount) {\r\n logTrace('belongTo', 'ESC_Import');\r\n }\r\n\r\n logTrace('has', columnData[importRecommendationListName]);\r\n }\r\n }\r\n\r\n return linkTmpl({\r\n edit: allowEdit && !isSmartAccount ? i18nGlobal.get('LocationTargeting_SectionEdit') : '',\r\n runNow: enableRunNowButton ? i18n.get('Import_RunNow') : '',\r\n dash: i18n.get('Import_LastImport_Dash'),\r\n recommendationText: i18n.get('Scheduled_Import_Recommendation_Text'),\r\n showRecommendation,\r\n });\r\n },\r\n i18n,\r\n })]);\r\n\r\n return columns;\r\n}\r\n\r\nexport class ImportScheduleGridConfig {\r\n constructor(view) {\r\n _.extend(this, {\r\n name: `${IMPORT_TYPE_TO_IMPORT_NAME[view.importTypeOfFilter] || IMPORT_TYPE_TO_IMPORT_NAME[IMPORT_TYPE.googleimport]}ImportScheduleGrid`,\r\n el: view.$('.importHistoryGrid'),\r\n dataSource: view.getDataSourceConfig(view),\r\n pluginsConfig: view.isForVNext ? {} : getPluginsConfig(view),\r\n plugins: {\r\n a11y: { i18n },\r\n uiBlocker: {\r\n el: view.$('.importHistoryGrid'),\r\n },\r\n placeholder: {},\r\n pagination: {\r\n pageSizeText: i18nGlobal.getString('Grid_ShowRows'),\r\n },\r\n perfMarker: {\r\n appConfig: config,\r\n gridMarker: view.perfMarker,\r\n },\r\n },\r\n rows: {\r\n classes: {\r\n 'disable': () => {\r\n return false;\r\n },\r\n },\r\n },\r\n columns: getColumnsConfig(view.isMultiAccount, view.isForVNext, view.importChannelType, view.isSmartAccount, view.isUPSmartAccount, view.supportedImportTypes),\r\n tableClasses: ['table', 'table-bordered'],\r\n tableAttributes: { 'aria-label': i18n.get('Scheduled_Import_History_Page_Title') },\r\n selection: {\r\n enabled: true,\r\n },\r\n });\r\n }\r\n}\r\n","import _ from 'underscore';\r\n\r\nimport { ImportTaskItem, MultiAccountGoogleImportTaskItem } from '@bingads-webui-campaign/campaign-ui-schemas';\r\nimport edmCampaign from '@bingads-webui-component-legacy/edm-campaign/index';\r\nimport jsdataCampaign from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport { IMPORT_TYPE } from '@bingads-webui-campaign-legacy/scheduled-import/view/import-type';\r\nimport UpdateStatusView from '@bingads-webui-component-legacy/update-status/view/index';\r\nimport * as constants from './import-schedule-constants';\r\n\r\nexport function getImportScheduleDataSourceConfig({ isMultiAccount, importTypeOfFilter }) {\r\n if (isMultiAccount) {\r\n // eslint-disable-next-line no-param-reassign\r\n edmCampaign.customerIdType.useAdvertiserCustomerId = false;\r\n }\r\n\r\n // set default data query filter text\r\n let filterText;\r\n\r\n if (isMultiAccount) {\r\n filterText = constants.FILTER_ALL_BUT_DELETED_MULTIACCOUNT;\r\n } else {\r\n filterText = {\r\n [IMPORT_TYPE.facebookimport]: constants.FILTER_ALL_BUT_DELETED_FACEBOOK_ITEMS,\r\n [IMPORT_TYPE.amazonImport]: constants.FILTER_ALL_BUT_DELETED_AMAZON_ITEMS,\r\n [IMPORT_TYPE.pinterestImport]: constants.FILTER_ALL_BUT_DELETED_PINTEREST_ITEMS,\r\n }[importTypeOfFilter] || constants.FILTER_ALL_BUT_DELETED;\r\n }\r\n\r\n return {\r\n type: 'js-data',\r\n entity: jsdataCampaign.TaskItem,\r\n schema: isMultiAccount ? MultiAccountGoogleImportTaskItem : ImportTaskItem,\r\n query: {\r\n // eslint-disable-next-line no-nested-ternary\r\n $filter: filterText,\r\n },\r\n options: {\r\n entitySet: isMultiAccount ? edmCampaign.currentCustomer.TaskItems : edmCampaign.currentAccount.TaskItems,\r\n cacheResponse: false,\r\n },\r\n };\r\n}\r\n\r\nfunction getJsDataOptions({ isMultiAccount }) {\r\n if (isMultiAccount) {\r\n // eslint-disable-next-line no-param-reassign\r\n edmCampaign.customerIdType.useAdvertiserCustomerId = false;\r\n }\r\n\r\n return {\r\n adapter: 'odata',\r\n entitySet: isMultiAccount ? edmCampaign.currentCustomer.TaskItems : edmCampaign.currentAccount.TaskItems,\r\n urlParameters: {\r\n $expand: 'TaskItemExecutions',\r\n },\r\n };\r\n}\r\n\r\nexport function createRunNowImport({ body, isMultiAccount }) {\r\n return jsdataCampaign.TaskItem.create(body, getJsDataOptions({ isMultiAccount }));\r\n}\r\n\r\nexport function createUpdateStatusView(view, model) {\r\n return new UpdateStatusView(_.defaults({\r\n Id: model.Id,\r\n Grid: view.grid,\r\n Model: model,\r\n Status: model.State.valueOf(),\r\n afterChange: (e, value) => {\r\n view.grid.gridView.refresh(true);\r\n if (value !== model.State) {\r\n view.adoptResumeScheduleRecommendation(value, [model]);\r\n }\r\n },\r\n useStateInsteadOfStatus: true,\r\n addImportTypeToStatusUpdate: true,\r\n ignoreEmptyId: true,\r\n }, getJsDataOptions(view), {\r\n schema: view.isMultiAccount ? MultiAccountGoogleImportTaskItem : ImportTaskItem,\r\n }));\r\n}\r\n\r\n","import ko from 'knockout';\r\n\r\nexport default function ViewModel() {\r\n this.showNoGoogleImportMsg = ko.observable(false);\r\n this.showNoFacebookImportMsg = ko.observable(false);\r\n this.showNoFilteredImportMsg = ko.observable(false);\r\n this.showNoAmazonImportMsg = ko.observable(false);\r\n this.showNoPinterestImportMsg = ko.observable(false);\r\n}\r\n","import { DeterministicWrapperView } from '@bingads-webui/deterministic-wrapper-view';\r\nimport { a11yPlugin } from '@bingads-webui/projection-grid-a11y';\r\nimport projectionGrid from 'projection-grid';\r\n\r\nexport class ImportScheduleAccountsDetailView extends DeterministicWrapperView {\r\n viewFactory({\r\n i18n,\r\n data,\r\n }) {\r\n const columns = [{\r\n bodyClasses: 'googleAccount',\r\n name: 'googleAccount',\r\n title: i18n.get('GoogleImport_MicrosoftAdvertising_GoogleAccounts'),\r\n }, {\r\n bodyClasses: 'bingAccount',\r\n name: 'bingAccount',\r\n title: i18n.get('GoogleImport_SelectMultiGoogleAccount_ImportToBingAccount'),\r\n }];\r\n\r\n const config = {\r\n dataSource: {\r\n type: 'memory',\r\n data,\r\n },\r\n columns,\r\n tableClasses: ['table', 'table-bordered'],\r\n plugins: {\r\n a11y: { i18n },\r\n },\r\n };\r\n\r\n this.grid = projectionGrid\r\n .factory({\r\n vnext: true,\r\n })\r\n .use(a11yPlugin)\r\n .create(config);\r\n\r\n return this.grid.gridView;\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport Promise from 'bluebird';\r\nimport $ from 'jquery';\r\nimport ko from 'knockout';\r\nimport _ from '@bingads-webui-component-legacy/extension/underscore';\r\n\r\nimport { GoogleLoginRepository, FacebookImportRepository, loadFacebookSdk } from '@bingads-webui-campaign/import-shared-repositories';\r\nimport { AmazonLoginRepository, AmazonImportRepository } from '@bingads-webui-campaign/amazon-import';\r\nimport { PinterestLoginRepository, PinterestImportRepository } from '@bingads-webui-campaign/pinterest-import';\r\nimport { handleGoogleLoginAuthError, handleFacebookLoginError, handleAmazonLoginError, handlePinterestLoginError } from '@bingads-webui-campaign/imports-core';\r\nimport { importRecommendationListNameMap, importChannelNameMap } from '@bingads-webui-campaign/import-callout';\r\nimport { perfMarkerPlugin } from '@bingads-webui-campaign/pgrid-performance-log';\r\n\r\nimport { PopoverView, contents } from '@bingads-webui/popover';\r\nimport { set } from '@bingads-webui/cookie';\r\n\r\nimport headerTemplateConfig from '@bingads-webui-campaign-legacy/bingadsgrid/config-preprocessor/header-template-config';\r\nimport { a11yPlugin } from '@bingads-webui/projection-grid-a11y';\r\nimport { paginationPlugin } from '@bingads-webui/projection-grid-pagination';\r\nimport { placeholderPlugin } from '@bingads-webui/projection-grid-placeholder';\r\nimport { ImportScheduleGridConfig } from '@bingads-webui-campaign-legacy/scheduled-import/view/import-schedule-grid-config';\r\nimport tmpl from '@bingads-webui-campaign-legacy/scheduled-import/template/import-schedule-grid.pug';\r\nimport toolbarPlugin from '@bingads-webui-campaign-legacy/bingadsgrid/plugin/toolbar';\r\nimport { uiBlockerPlugin } from '@bingads-webui/projection-grid-uiblocker';\r\nimport ViewModel from '@bingads-webui-campaign-legacy/scheduled-import/viewmodel/import-schedule-grid';\r\nimport cacheManager from '@bingads-webui-campaign-legacy/cache-manager/index';\r\nimport { withUiBlock } from '@bingads-webui/uiblocker';\r\nimport { notificationApi } from '@bingads-webui-react/notification-center';\r\n\r\nimport { assistedSelectionPlugin } from '@bingads-webui/projection-grid-assisted-selection';\r\nimport downloadService from '@bingads-webui-component-legacy/download/index';\r\nimport pgrid from '@bingads-webui-component-legacy/github/modules/projection-grid/module/projection-grid';\r\nimport odata from '@bingads-webui-component-legacy/http/channel/odata';\r\nimport { showError } from '@bingads-webui-component-legacy/toast/index';\r\nimport state from '@bingads-webui-component-legacy/state/index';\r\nimport config from '@bingads-webui-component-legacy/config/index';\r\nimport UIBlocker from '@bingads-webui-component-legacy/uiblocker/service/uiBlocker';\r\n\r\nimport createImportTaskItemHelper from '@bingads-webui-campaign-legacy/import-campaigns/shared/import-task-item-helper';\r\n\r\nimport instrumentation from '@bingads-webui-static-legacy/instrumentation/index';\r\nimport constants from '@bingads-webui-static-legacy/instrumentation/constants';\r\n\r\nimport { ImportScheduleAccountsDetailView } from '@bingads-webui-campaign-legacy/scheduled-import/view/import-schedule-accounts-detail-view';\r\n\r\nimport { logException, startPollingUntilImportStarted,\r\n cookieHelperForEditImport } from '@bingads-webui-campaign-legacy/import-campaigns/shared/import-helper';\r\n\r\nimport { IMPORT_TYPE, IMPORT_TYPE_TO_IMPORT_NAME } from '@bingads-webui-campaign-legacy/scheduled-import/view/import-type';\r\n\r\nconst i18n = window.globalLegacyI18n.get('component/i18n/loader!campaignui/feature/import-campaigns');\r\n\r\nconst permissions = config.get('Permissions');\r\nconst GSILocal = permissions && permissions.dynamic && permissions.dynamic.GSILocal;\r\nconst CNMarketExpansion = permissions && permissions.dynamic && permissions.dynamic.CNMarketExpansion;\r\nconst BaiduFileImport = permissions && permissions.dynamic && permissions.dynamic.BaiduFileImport;\r\n\r\nconst promisifyStartPollingUntilImportStarted = ({\r\n taskItemExecutionId,\r\n showLoadingIcon,\r\n isMultiAccount,\r\n}) => {\r\n return new Promise((resolve) => {\r\n startPollingUntilImportStarted(taskItemExecutionId, resolve, showLoadingIcon, isMultiAccount);\r\n });\r\n};\r\n\r\nfunction gapiSignInSuccess(callback, newI18n, authCode) {\r\n const urlTmpl = 'ImportSession/StartGoogleSession(CustomerId=:advertisercustomer_id,AccountId=:account_id)?authCode={{AuthCode}}&redirectUri=postmessage';\r\n const url = _.template(urlTmpl)({ AuthCode: authCode.code });\r\n\r\n odata.post(url, { data: '' })\r\n .then((sessionId) => {\r\n if (sessionId) {\r\n callback(sessionId, true);\r\n return;\r\n } else {\r\n // show error\r\n showError(handleGoogleLoginAuthError({ authErrors: 'sign_in_error_offline_access' }, newI18n));\r\n }\r\n });\r\n}\r\n\r\nconst logMsg = (category, msg) => instrumentation.logMessage([category], constants.LOGLEVEL.INFO, '/campaign/importcampaign', msg);\r\n\r\nfunction reloginToGoogle(callback, newI18n) {\r\n window.require(['ext/google/gsi'], () => {\r\n logMsg(constants.LOGCATEGORY.TRACE, `GSILocal: ${GSILocal}`);\r\n const loginRepo = new GoogleLoginRepository({ deps: { google: window.google, GSILocal }});\r\n\r\n const blockerElem = document.documentElement;\r\n const UIBlockerToken = UIBlocker.block(blockerElem);\r\n\r\n new Promise((resolve, reject) => {\r\n loginRepo.googleSignIn({\r\n onSuccess: resolve,\r\n onFail: reject,\r\n });\r\n }).then(_.partial(gapiSignInSuccess, callback, newI18n))\r\n .catch((error) => {\r\n instrumentation.logMessage([constants.LOGCATEGORY.TRACE], constants.LOGLEVEL.INFO, '/campaign/importcampaign',\r\n `could not sign into AdWords for editing import: ${error && error.authErrors}`);\r\n\r\n // do not show any error message if the popup is closed by user\r\n if (error && error.authErrors === 'popup_closed') {\r\n return;\r\n }\r\n\r\n // show Google login error message\r\n showError(handleGoogleLoginAuthError(error, newI18n));\r\n }).finally(() => {\r\n UIBlocker.unblock(blockerElem, UIBlockerToken);\r\n });\r\n });\r\n}\r\n\r\nfunction reloginToAmazon(callback, newI18n) {\r\n const amazonLoginRepo = new AmazonLoginRepository();\r\n const deps = {\r\n odata,\r\n config,\r\n defaultLogActivity: {\r\n trace: (msg) => logMsg(constants.LOGCATEGORY.TRACE, msg),\r\n error: (msg) => logMsg(constants.LOGCATEGORY.ERROR, msg),\r\n },\r\n i18n,\r\n edm: { currentAccount: {} },\r\n };\r\n const amazonImportRepo = new AmazonImportRepository({ deps });\r\n\r\n amazonLoginRepo.login()\r\n .then((authCode) => amazonImportRepo.startAmazonSession(authCode, true))\r\n .then((sessionId) => {\r\n if (sessionId) {\r\n callback(sessionId, true);\r\n return;\r\n } else {\r\n // show error\r\n showError(handleAmazonLoginError({ error: 'amazon_already_signed_out' }, newI18n));\r\n }\r\n })\r\n .catch((res) => {\r\n logMsg(constants.LOGCATEGORY.ERROR,\r\n `could not sign into Amazon for editing import: ${res}`);\r\n\r\n // it seems that no error will return if the popup is closed by user\r\n // show Amazon login error message\r\n showError(handleAmazonLoginError(res, newI18n));\r\n });\r\n}\r\n\r\nfunction reloginToFacebook(callback, newI18n) {\r\n loadFacebookSdk().then((sdk) => {\r\n if (sdk === null) {\r\n logMsg(constants.LOGCATEGORY.ERROR, 'Failed to load Facebook script.');\r\n return;\r\n }\r\n\r\n const deps = {\r\n FB: sdk,\r\n odata,\r\n config,\r\n defaultLogActivity: {\r\n trace: (msg) => logMsg(constants.LOGCATEGORY.TRACE, msg),\r\n error: (msg) => logMsg(constants.LOGCATEGORY.ERROR, msg),\r\n },\r\n i18n,\r\n edm: { currentAccount: {} },\r\n };\r\n const facebookRepo = new FacebookImportRepository({ deps });\r\n let hasReLoggedIn = false;\r\n const login2FB = () => {\r\n if (hasReLoggedIn) {\r\n return;\r\n }\r\n hasReLoggedIn = true;\r\n facebookRepo.login({\r\n onSuccess: ({accessToken}) => {\r\n facebookRepo.startFacebookSession(accessToken).then(({ sessionId }) => {\r\n if (sessionId) {\r\n callback(sessionId, true);\r\n return;\r\n } else {\r\n // show error\r\n showError(handleFacebookLoginError({ authErrors: 'FacebookImport_Signin_General_Error' }, newI18n));\r\n }\r\n });\r\n },\r\n onPermissionsDeclined: ({ declinedScopesAndDesc = [], userID}) => {\r\n const declinedPerms = declinedScopesAndDesc.map((ds) => ds.name).join(', ');\r\n\r\n logMsg(constants.LOGCATEGORY.TRACE,\r\n `user (${userID}) decliened permissions: ${declinedPerms || ''}, could not editing import`);\r\n\r\n // show permission error\r\n showError(handleFacebookLoginError({ authErrors: 'FacebookImport_Permission_Denied_Error' }, newI18n));\r\n },\r\n onFail: (error) => {\r\n logMsg(constants.LOGCATEGORY.ERROR,\r\n `could not sign into Facebook for editing import: ${error && error.authErrors}`);\r\n\r\n // do not show any error message if the popup is closed by user\r\n if (error && error.status === 'unknown') {\r\n return;\r\n }\r\n\r\n // show Facebook login error message\r\n showError(handleFacebookLoginError(error, newI18n));\r\n },\r\n });\r\n };\r\n\r\n // logout first, then login again\r\n facebookRepo.logout({onSuccess: login2FB, onFail: login2FB});\r\n });\r\n}\r\n\r\nfunction reloginToPinterest(callback, newI18n) {\r\n const pinterestLoginRepo = new PinterestLoginRepository(config);\r\n const deps = {\r\n odata,\r\n config,\r\n defaultLogActivity: {\r\n trace: (msg) => logMsg(constants.LOGCATEGORY.TRACE, msg),\r\n error: (msg) => logMsg(constants.LOGCATEGORY.ERROR, msg),\r\n },\r\n i18n,\r\n edm: { currentAccount: {} },\r\n };\r\n const pinterestImportRepo = new PinterestImportRepository({ deps });\r\n\r\n pinterestLoginRepo.login()\r\n .then((authCode) => pinterestImportRepo.startPinterestSession(authCode))\r\n .then((sessionId) => {\r\n if (sessionId) {\r\n callback(sessionId, true);\r\n return;\r\n } else {\r\n // show error\r\n showError(handlePinterestLoginError({ error: 'pinterest_already_signed_out' }, newI18n));\r\n }\r\n })\r\n .catch((res) => {\r\n logMsg(constants.LOGCATEGORY.ERROR,\r\n `could not sign into Pinterest for editing import: ${res}`);\r\n\r\n // do not show any error message if the popup is closed by user\r\n if (res && res.error === 'popup_closed_by_user') {\r\n return;\r\n }\r\n\r\n // show Pinterest login error message\r\n showError(handlePinterestLoginError(res, newI18n));\r\n });\r\n}\r\n\r\nfunction gapiSignInMultiAccountSuccess(callback, newI18n, authCode) {\r\n const urlTmpl = 'ImportSession/StartGoogleSession(CustomerId=:customer_id,AccountId={{AccountId}})?authCode={{AuthCode}}&redirectUri=postmessage';\r\n const url = _.template(urlTmpl)({ AccountId: config.get('CurrentAccount').Id, AuthCode: authCode.code });\r\n\r\n odata.post(url, { data: '' })\r\n .then((sessionId) => {\r\n if (sessionId) {\r\n callback(sessionId, true);\r\n return;\r\n } else {\r\n // show error\r\n showError(handleGoogleLoginAuthError({ authErrors: 'sign_in_error_offline_access' }, newI18n));\r\n }\r\n });\r\n}\r\n\r\nexport default class View extends Backbone.View {\r\n initialize(options = {}) {\r\n if (options.perfMarker) {\r\n this.perfMarker = options.perfMarker.createChild('Import_Schedule_Grid_Load');\r\n this.perfMarker.willInit();\r\n }\r\n this.viewModel = new ViewModel();\r\n this.isMultiAccount = options.isMultiAccount;\r\n this.isSmartAccount = options.isSmartAccount || false; // default value is used for MAE\r\n this.isUPSmartAccount = options.isUPSmartAccount || false; // default value is used for MAE\r\n this.supportedImportTypes = options.supportedImportTypes || { [IMPORT_TYPE.googleimport]: IMPORT_TYPE_TO_IMPORT_NAME[IMPORT_TYPE.googleimport] }; // default value is used for MAE\r\n this.isForVNext = options.isForVNext;\r\n this.vNextToolbarPlugin = options.vNextToolbarPlugin;\r\n this.router = options.router;\r\n this.getDataSourceConfig = options.getDataSourceConfig;\r\n this.createRunNowImport = options.createRunNowImport;\r\n this.createUpdateStatusView = options.createUpdateStatusView;\r\n this.batchEditCallback = options.batchEditCallback;\r\n this.overridingEvent = options.overridingEvent;\r\n this.isFiltered = false;\r\n this.importTypeOfFilter = options.importTypeOfFilter;\r\n this.importChannelType = options.importChannelType;\r\n this.adoptResumeScheduleRecommendation = (status, scheduleItems) => options.adoptResumeScheduleRecommendation(\r\n odata,\r\n {\r\n trace: (msg) => logMsg(constants.LOGCATEGORY.TRACE, msg),\r\n error: (msg) => logMsg(constants.LOGCATEGORY.ERROR, msg),\r\n },\r\n status,\r\n scheduleItems,\r\n );\r\n this.newI18n = options.newI18n;\r\n\r\n // pilot logs\r\n logMsg(constants.LOGCATEGORY.TRACE, `CNMarketExpansion: ${CNMarketExpansion}`);\r\n logMsg(constants.LOGCATEGORY.TRACE, `BaiduFileImport: ${BaiduFileImport}`);\r\n }\r\n\r\n events() {\r\n return _.defaults({}, this.overridingEvent, {\r\n 'click .col-State .statuschangehover': 'changeStatus',\r\n 'click .edit-task': this.isMultiAccount ? 'editMultiAccountImportTaskItem' : 'editImportTaskItem',\r\n 'click .run-now': this.isMultiAccount ?\r\n _.debounce(this.runMultiAccountImportNow.bind(this), 1000, true) :\r\n _.debounce(this.runImportNow.bind(this), 1000, true),\r\n 'click .download-file': 'downloadUploadedFile',\r\n 'keypress input': 'onKeyPressed',\r\n 'click .import-schedule-accounts-detail': 'viewAccountsDetails',\r\n });\r\n }\r\n\r\n viewAccountsDetails(event) {\r\n let model = this.getColumnData(event);\r\n\r\n const data = _.map(model.ImportTaskItemList, ({\r\n AccountName,\r\n AccountNumber,\r\n AdWordsImportContext: { AccountName: googleAccount, CustomerId },\r\n }) => ({\r\n googleAccount: `${googleAccount} (${CustomerId})`,\r\n bingAccount: `${AccountName} (${AccountNumber})`,\r\n }));\r\n\r\n const targetRect = event.target.getBoundingClientRect();\r\n\r\n new PopoverView({\r\n target: this.$(event.target),\r\n position: {\r\n isAbsolute: true,\r\n left: targetRect.right,\r\n top: targetRect.top,\r\n },\r\n containerClassName: ['GoogleAdsAccountView'],\r\n }).setContent(new contents.TitledContent()\r\n .setTitle('')\r\n .setBody(new ImportScheduleAccountsDetailView({i18n, data})));\r\n }\r\n\r\n onKeyPressed(event) {\r\n const RETURN_CODE = 13;\r\n\r\n if (event.which === RETURN_CODE) {\r\n event.preventDefault();\r\n const pageText = this.grid.pagination.$('input.form-control.page-number-input');\r\n\r\n if (pageText) {\r\n this.grid.pagination.viewModel.pageNumberText(pageText.val());\r\n }\r\n }\r\n }\r\n\r\n changeStatus(e) {\r\n e.stopPropagation();\r\n let model = this.getColumnData(e);\r\n\r\n if (this.updateStatusView) {\r\n this.updateStatusView.remove();\r\n this.updateStatusView = null;\r\n }\r\n\r\n this.updateStatusView = this.createUpdateStatusView(this, model).render();\r\n\r\n $(e.target).closest('td', this.el).append(this.updateStatusView.el);\r\n }\r\n\r\n getColumnData(e) {\r\n return this.grid.gridView.itemOfElement(e.target);\r\n }\r\n\r\n clickStatusIcon() {\r\n this.indicator = true;\r\n }\r\n\r\n checkEditButton() {\r\n const selectedItems = this.grid.gridView.selectedItems();\r\n const editDropDown = this.grid.toolbar.items[0];\r\n const enableEdit = _.find(selectedItems, (item) => {\r\n return item && item.State.toString() !== 'Deleted';\r\n });\r\n\r\n if (enableEdit) {\r\n editDropDown.enable();\r\n } else {\r\n editDropDown.disable();\r\n }\r\n }\r\n\r\n renderGrid(gridConfig, useQuickFilter) {\r\n this.grid = pgrid\r\n .factory({ vnext: true })\r\n .use(perfMarkerPlugin)\r\n .use(a11yPlugin)\r\n .use(paginationPlugin)\r\n .use(placeholderPlugin)\r\n .use(uiBlockerPlugin)\r\n .use(assistedSelectionPlugin);\r\n\r\n if (useQuickFilter) {\r\n this.grid = this.grid.use(toolbarPlugin(['quickFilter']));\r\n } else if (this.isForVNext) {\r\n this.grid = this.grid.use(this.vNextToolbarPlugin.plugin);\r\n } else {\r\n this.grid = this.grid.use(toolbarPlugin());\r\n }\r\n\r\n this.grid = this.grid.create(_.flow([headerTemplateConfig])(gridConfig));\r\n if (!this.isForVNext) {\r\n this.grid.toolbar.render();\r\n }\r\n this.grid.gridView.render();\r\n\r\n this.grid.gridView.on('didUpdate', () => {\r\n const hasNoResult = this.grid.gridView.countRows === 0;\r\n const filterCheck = this.isFiltered;\r\n\r\n this.viewModel.showNoGoogleImportMsg(this.importTypeOfFilter === IMPORT_TYPE.googleimport && !filterCheck && hasNoResult);\r\n this.viewModel.showNoFacebookImportMsg(this.importTypeOfFilter === IMPORT_TYPE.facebookimport && !filterCheck && hasNoResult);\r\n this.viewModel.showNoAmazonImportMsg(this.importTypeOfFilter === IMPORT_TYPE.amazonImport && !filterCheck && hasNoResult);\r\n this.viewModel.showNoPinterestImportMsg(this.importTypeOfFilter === IMPORT_TYPE.pinterestImport && !filterCheck && hasNoResult);\r\n this.viewModel.showNoFilteredImportMsg(filterCheck && hasNoResult);\r\n\r\n if (!this.isForVNext) {\r\n this.checkEditButton();\r\n }\r\n });\r\n }\r\n\r\n render() {\r\n this.$el.html(tmpl({\r\n noImportMsgHeader: i18n.get('Scheduled_Import_History_EmptyHeader'),\r\n noGoogleImportMsg: i18n.get('Scheduled_Import_History_EmptyBody'),\r\n noFacebookImportMsg: i18n.get('Scheduled_Import_History_EmptyBody_Facebook'),\r\n noAmazonImportMsg: i18n.get('Scheduled_Import_History_EmptyBody_Amazon'),\r\n noPinterestImportMsg: i18n.get('Scheduled_Import_History_EmptyBody_Pinterest'),\r\n noFilteredImportMsg: i18n.get('Grid_NoFilteredRecords'),\r\n }));\r\n ko.applyBindings(this.viewModel, this.el);\r\n\r\n const gridConfig = new ImportScheduleGridConfig(this);\r\n\r\n this.renderGrid(gridConfig, false);\r\n if (!this.isForVNext) {\r\n this.grid.gridView.on('didSelect', this.checkEditButton.bind(this));\r\n }\r\n\r\n return this;\r\n }\r\n\r\n handleActionForScheduledImport(model, callback, isRunnow = false) {\r\n if (!model || (!model.AdWordsImportContext && !model.FacebookImportContext && !model.AmazonImportContext && !model.PinterestImportContext)) {\r\n instrumentation.logMessage([constants.LOGCATEGORY.ERROR], constants.LOGLEVEL.INFO, '/campaign/importcampaign', 'Bad model or context');\r\n return;\r\n }\r\n\r\n const currentUserId = _.propertyOf(config.get('CurrentUser'))('Id');\r\n const isFacebookImport = this.supportedImportTypes[IMPORT_TYPE.facebookimport] && model && model['@odata.type'] === '#Model.FacebookTaskItem';\r\n const isAmazonImport = this.supportedImportTypes[IMPORT_TYPE.amazonImport] && model && model['@odata.type'] === '#Model.AmazonImportTaskItem';\r\n const isPinterestImport = this.supportedImportTypes[IMPORT_TYPE.pinterestImport] && model && model['@odata.type'] === '#Model.PinterestImportTaskItem';\r\n\r\n if (model.ModifiedBy.Id === currentUserId) {\r\n if (isFacebookImport) {\r\n callback(model.FacebookImportContext.SessionId);\r\n return;\r\n } else if (isAmazonImport) {\r\n callback(model.AmazonImportContext.SessionId);\r\n return;\r\n } else if (isPinterestImport) {\r\n callback(model.PinterestImportContext.SessionId);\r\n return;\r\n } else if (isRunnow || (model.AdWordsImportContext && model.AdWordsImportContext.SessionType !== 'CloudImport')) {\r\n // Add login confirmation if the task is from MAE to relogin the user into webui\r\n // Run now job of MAE can trigger directly.\r\n callback(model.AdWordsImportContext.SessionId);\r\n return;\r\n }\r\n }\r\n\r\n instrumentation.logMessage([constants.LOGCATEGORY.TRACE], constants.LOGLEVEL.INFO, '/campaign/importcampaign',\r\n ` Session Type:${model && model.AdWordsImportContext && model.AdWordsImportContext.SessionType}\r\n ModifiedById: ${model && model.ModifiedBy.Id}\r\n currentUserId: ${currentUserId}\r\n isFacebookImport: ${isFacebookImport}\r\n isAmazonImport: ${isAmazonImport}\r\n isPinterestImport: ${isPinterestImport}\r\n `);\r\n\r\n // ask user to relogin\r\n if (isFacebookImport) {\r\n reloginToFacebook(callback, this.newI18n);\r\n } else if (isAmazonImport) {\r\n reloginToAmazon(callback, this.newI18n);\r\n } else if (isPinterestImport) {\r\n reloginToPinterest(callback, this.newI18n);\r\n } else {\r\n reloginToGoogle(callback, this.newI18n);\r\n }\r\n }\r\n\r\n handleActionForMultiAccountScheduledImport(model, callback) {\r\n const currentUserId = _.propertyOf(config.get('CurrentUser'))('Id');\r\n\r\n if (model.ModifiedBy.Id === currentUserId) {\r\n callback(model.SessionId);\r\n return;\r\n } else {\r\n window.require(['ext/google/gsi'], () => {\r\n logMsg(constants.LOGCATEGORY.TRACE, `GSILocal: ${GSILocal}`);\r\n const loginRepo = new GoogleLoginRepository({ deps: { google: window.google, GSILocal }});\r\n\r\n new Promise((resolve, reject) => {\r\n loginRepo.googleSignIn({\r\n onSuccess: resolve,\r\n onFail: reject,\r\n });\r\n }).then(_.partial(gapiSignInMultiAccountSuccess, callback, this.newI18n))\r\n .catch((error) => {\r\n instrumentation.logMessage([constants.LOGCATEGORY.TRACE], constants.LOGLEVEL.INFO, '/campaign/AccountsSummary',\r\n `could not sign into AdWords for editing import: ${error && error.authErrors}`);\r\n\r\n // do not show any error message if the popup is closed by user\r\n if (error && error.authErrors === 'popup_closed') {\r\n return;\r\n }\r\n\r\n // show Google login error message\r\n showError(handleGoogleLoginAuthError(error, this.newI18n));\r\n })\r\n .finally(withUiBlock());\r\n });\r\n }\r\n }\r\n\r\n editImportTaskItem(e) {\r\n const model = this.getColumnData(e);\r\n\r\n this.goToGoogleImportWizard({\r\n model,\r\n });\r\n }\r\n\r\n goToGoogleImportWizard({\r\n model, importStep = '',\r\n }) {\r\n const aid = state.get('account_id');\r\n const cid = state.get('customer_id');\r\n const uid = state.get('user_id');\r\n const taskItemId = model.Id;\r\n let navigator = null;\r\n\r\n if (this.isForVNext) {\r\n let routeName;\r\n\r\n if (this.supportedImportTypes[IMPORT_TYPE.facebookimport] && model['@odata.type'] === '#Model.FacebookTaskItem') {\r\n routeName = 'facebookimport';\r\n } else if (this.supportedImportTypes[IMPORT_TYPE.amazonImport] && model['@odata.type'] === '#Model.AmazonImportTaskItem') {\r\n routeName = 'amazonimport';\r\n } else if (this.supportedImportTypes[IMPORT_TYPE.pinterestImport] && model['@odata.type'] === '#Model.PinterestImportTaskItem') {\r\n routeName = 'pinterestimport';\r\n } else {\r\n routeName = 'googleimport';\r\n }\r\n\r\n const params = { taskItemId };\r\n\r\n if (_.isString(importStep) && !_.isEmpty(importStep)) {\r\n params.importStep = importStep;\r\n }\r\n\r\n navigator = _.partial(this.router.navigateToRoute, routeName, params);\r\n } else {\r\n const returnUrl = `/Campaign/ImportCampaign/GoogleImport?cid=${cid}&uid=${uid}&aid=${aid}&taskItemId=${taskItemId}`;\r\n\r\n navigator = _.partial(this.navigateToUrl, returnUrl);\r\n }\r\n\r\n this.handleActionForScheduledImport(model, _.partial(this.setDestination, navigator, taskItemId));\r\n }\r\n\r\n editMultiAccountImportTaskItem(e) {\r\n const model = this.getColumnData(e);\r\n const cid = state.get('customer_id');\r\n const uid = state.get('user_id');\r\n const taskItemId = model.Id;\r\n let navigator = null;\r\n\r\n if (this.isForVNext) {\r\n navigator = _.partial(this.router.navigateToRoute, 'googleimport');\r\n } else {\r\n const returnUrl = `/Campaign/AccountsSummary?cid=${cid}&uid=${uid}#customer/${cid}/import-accounts/googleImport`;\r\n\r\n navigator = _.partial(this.navigateToUrl, returnUrl);\r\n }\r\n\r\n // reserve task item id in cookie\r\n set('multi-account-scheduled-import-task-item-id', taskItemId);\r\n this.handleActionForMultiAccountScheduledImport(model, _.partial(this.setDestination, navigator, taskItemId));\r\n }\r\n\r\n setDestination(navigator, taskItemId, sessionId, ifUpdated) {\r\n if (ifUpdated) {\r\n cookieHelperForEditImport.createCookie(taskItemId, sessionId);\r\n } else {\r\n cookieHelperForEditImport.deleteCookie();\r\n }\r\n\r\n navigator();\r\n }\r\n\r\n navigateToUrl(url) {\r\n window.location.href = url;\r\n }\r\n\r\n downloadUploadedFile(e) {\r\n let data = this.getColumnData(e);\r\n\r\n if (this.isFileImportODataMigrationEnabled && data && data.FileImportContext && data.FileImportContext.FilePath) {\r\n downloadService.download(data.FileImportContext.FilePath);\r\n } else {\r\n showError(i18n.get('GenericErrorMessage'));\r\n }\r\n }\r\n\r\n runImportNow(e) {\r\n const model = this.getColumnData(e);\r\n\r\n this.handleActionForScheduledImport(model, _.partial(this.runImportNowInternal, model).bind(this), true);\r\n }\r\n\r\n // save import settings in edit panel\r\n saveImportSettingsInEditPanel({ columnData, updateData, edm, jsData, closeEditPanel }) {\r\n this.handleActionForScheduledImport(columnData, _.partial(this.editTaskSaveInternal, columnData, updateData, edm, jsData, closeEditPanel).bind(this));\r\n }\r\n\r\n editTaskSaveInternal(model, updateData, edm, jsData, closeEditPanel, sessionId) {\r\n const taskItemOptions = {\r\n adapter: 'odata',\r\n entitySet: this.isMultiAccount ?\r\n edm.currentCustomer.TaskItems : edm.currentAccount.TaskItems,\r\n };\r\n\r\n const taskItemId = model.Id;\r\n const data = _.extend({}, model,\r\n model['@odata.type'] === '#Model.ImportTaskItem' ? {\r\n AdWordsImportContext: _.extend({}, model.AdWordsImportContext, {\r\n AdWordsSessionUserId: _.propertyOf(config.get('CurrentUser'))('Id'),\r\n SessionId: sessionId,\r\n SessionType: model.AdWordsImportContext.SessionType === 'CloudImport' ? null : model.AdWordsImportContext.SessionType,\r\n }),\r\n } : null, model['@odata.type'] === '#Model.FacebookTaskItem' ? {\r\n FacebookImportContext: _.extend({}, model.FacebookImportContext, {\r\n FacebookSessionUserId: _.propertyOf(config.get('CurrentUser'))('Id'),\r\n SessionId: sessionId,\r\n }),\r\n } : null,\r\n { ImportUserPreferences: undefined },\r\n updateData,\r\n );\r\n\r\n jsData.TaskItem.update(taskItemId, data, taskItemOptions).then(() => {\r\n closeEditPanel();\r\n this.grid.gridView.refresh(true);\r\n }).catch((error) => {\r\n logMsg(constants.LOGCATEGORY.ERROR, `edit task failed due to: ${error}`);\r\n }).finally(withUiBlock(\r\n /* target */ $('.schedule-setting-editor-panel .panel-content'),\r\n /* loadingText */ undefined,\r\n /* shouldFocus */ undefined,\r\n /* delayedLoading */ undefined,\r\n /* overlayZIndex */ '1010',\r\n ));\r\n }\r\n\r\n applyAdCustomizerFeedRecommendation(columnData, notificationString, edm, jsData, recommendationType) {\r\n const updateData = {\r\n ImportUserPreference: _.extend({}, columnData.ImportUserPreference, {\r\n UpdateAdCustomizerFeeds: true,\r\n ImportNewAdCustomizerFeeds: true,\r\n }),\r\n };\r\n\r\n this.handleActionForScheduledImport(columnData, _.partial(this.applyRecommendationInternal, columnData, updateData, notificationString, edm, jsData, recommendationType).bind(this));\r\n }\r\n\r\n applySetMinBidValueAdjustRecommendation(columnData, notificationString, edm, jsData, recommendationType) {\r\n const updateData = {\r\n ImportUserPreference: _.extend({}, columnData.ImportUserPreference, {\r\n SetLowerBidsToAdCenterMinBids: true,\r\n }),\r\n };\r\n\r\n this.handleActionForScheduledImport(columnData, _.partial(this.applyRecommendationInternal, columnData, updateData, notificationString, edm, jsData, recommendationType).bind(this));\r\n }\r\n\r\n applyCurrencyConversionRecommendation(columnData, notificationString, edm, jsData, recommendationType) {\r\n const updateData = {\r\n ImportUserPreference: _.extend({}, columnData.ImportUserPreference, {\r\n EnableAutoCurrencyConversion: true,\r\n }),\r\n };\r\n\r\n this.handleActionForScheduledImport(columnData, _.partial(this.applyRecommendationInternal, columnData, updateData, notificationString, edm, jsData, recommendationType).bind(this));\r\n }\r\n\r\n applyAutoFrequencyRecommendation(columnData, notificationString, edm, jsData, recommendationType) {\r\n const updateData = {\r\n Cron: null,\r\n IsAutoFrequency: true,\r\n };\r\n\r\n this.handleActionForScheduledImport(columnData, _.partial(this.applyRecommendationInternal, columnData, updateData, notificationString, edm, jsData, recommendationType).bind(this));\r\n }\r\n\r\n applyGetGoogleAdsPermissionRecommendation(columnData, notificationString, edm, jsData, recommendationType) {\r\n const callback = (sessionId) => {\r\n this.handleActionForScheduledImport(columnData, _.partial(this.applyRecommendationInternal, columnData, null, notificationString, edm, jsData, recommendationType, sessionId).bind(this));\r\n };\r\n\r\n // relogin to google to refresh the token\r\n reloginToGoogle(callback, this.newI18n);\r\n }\r\n\r\n applyAccessTokenExpiringRecommendation(columnData, notificationString, edm, jsData, recommendationType) {\r\n const callback = (sessionId) => {\r\n this.handleActionForScheduledImport(columnData, _.partial(this.applyRecommendationInternal, columnData, null, notificationString, edm, jsData, recommendationType, sessionId).bind(this));\r\n };\r\n\r\n // relogin to facebook to refresh the token\r\n reloginToFacebook(callback, this.newI18n);\r\n }\r\n\r\n applyRecommendationInternal(model, updateData, notificationString, edm, jsData, recommendationType, sessionId) {\r\n const taskItemOptions = {\r\n adapter: 'odata',\r\n entitySet: this.isMultiAccount ?\r\n edm.currentCustomer.TaskItems : edm.currentAccount.TaskItems,\r\n };\r\n\r\n const taskItemId = model.Id;\r\n const data = _.extend({}, model,\r\n model['@odata.type'] === '#Model.ImportTaskItem' ? {\r\n AdWordsImportContext: _.extend({}, model.AdWordsImportContext, {\r\n AdWordsSessionUserId: _.propertyOf(config.get('CurrentUser'))('Id'),\r\n SessionId: sessionId,\r\n SessionType: model.AdWordsImportContext.SessionType === 'CloudImport' ? null : model.AdWordsImportContext.SessionType,\r\n }),\r\n } : null, model['@odata.type'] === '#Model.FacebookTaskItem' ? {\r\n FacebookImportContext: _.extend({}, model.FacebookImportContext, {\r\n FacebookSessionUserId: _.propertyOf(config.get('CurrentUser'))('Id'),\r\n SessionId: sessionId,\r\n }),\r\n } : null,\r\n { ImportUserPreferences: undefined },\r\n updateData,\r\n );\r\n\r\n const importChannel = importChannelNameMap(importRecommendationListNameMap(model));\r\n\r\n jsData.TaskItem.update(taskItemId, data, taskItemOptions).then(() => {\r\n this.grid.gridView.refresh(true);\r\n notificationApi.showInfo(notificationString);\r\n logMsg(constants.LOGCATEGORY.TRACE, `Import_Recommendation ${taskItemId} apply_success ${recommendationType} ${importChannel}`);\r\n }).catch((error) => {\r\n logMsg(constants.LOGCATEGORY.ERROR, `Import_Recommendation ${taskItemId} apply_fail ${recommendationType} ${error} ${importChannel}`);\r\n });\r\n }\r\n\r\n runMultiAccountImportNow(e) {\r\n const model = this.getColumnData(e);\r\n\r\n this.handleActionForMultiAccountScheduledImport(model, _.partial(this.runMultiAccountImportNowInternal, model).bind(this));\r\n }\r\n\r\n runImportNowInternal(model, sessionId) {\r\n if (this.supportedImportTypes[IMPORT_TYPE.facebookimport] && model['@odata.type'] === '#Model.FacebookTaskItem') {\r\n const isSmartImportWizardJob = model.IsSmartImport === true || model.IsSmartImport === false;\r\n const facebookBody = _.extend(\r\n _.pick(model, '@odata.type', 'AccountId', 'Type', 'TimeZoneId', 'AdGroupMedium', 'NotificationMedium', 'CultureName', 'UserName', 'AccountName'),\r\n {\r\n AdGroupMedium: 'Search', // TODO: MT bug? MT reponse with '0'\r\n FacebookImportContext: _.extend({}, model.FacebookImportContext, {\r\n '@odata.type': '#Model.FacebookImportContext',\r\n SessionId: sessionId,\r\n FacebookSessionUserId: _.propertyOf(config.get('CurrentUser'))('Id'),\r\n }),\r\n ImportType: `FacebookImport${permissions && permissions.IsUseImportTestTypeForImportTaskExecutionEnabled ? 'Test' : ''}`,\r\n ImportUserPreference: model.ImportUserPreference,\r\n State: 'Active',\r\n NotificationType: 'None',\r\n }, isSmartImportWizardJob && { // pass IsAutoFrequency as false, IsSmartImport and Name if it is from smart import workflow (smart/expert)\r\n IsAutoFrequency: false,\r\n IsSmartImport: model.IsSmartImport,\r\n Name: model.Name,\r\n });\r\n\r\n this.triggerRunNowImportTask(facebookBody, model.Id);\r\n return;\r\n } else if (this.supportedImportTypes[IMPORT_TYPE.amazonImport] && model['@odata.type'] === '#Model.AmazonImportTaskItem') {\r\n const amazonBody = _.extend(\r\n _.pick(model, '@odata.type', 'AccountId', 'Type', 'TimeZoneId', 'AdGroupMedium', 'NotificationMedium', 'CultureName', 'UserName', 'AccountName'),\r\n {\r\n AdGroupMedium: 'Search', // TODO: MT bug? MT reponse with '0'\r\n AmazonImportContext: _.extend({}, model.AmazonImportContext, {\r\n '@odata.type': '#Model.AmazonImportContext',\r\n SessionId: sessionId,\r\n }),\r\n ImportType: `AmazonImport${permissions && permissions.IsUseImportTestTypeForImportTaskExecutionEnabled ? 'Test' : ''}`,\r\n ImportUserPreference: model.ImportUserPreference,\r\n State: 'Active',\r\n NotificationType: 'None',\r\n IsAutoFrequency: false,\r\n IsSmartImport: model.IsSmartImport,\r\n Name: model.Name,\r\n });\r\n\r\n this.triggerRunNowImportTask(amazonBody, model.Id);\r\n return;\r\n } else if (this.supportedImportTypes[IMPORT_TYPE.pinterestImport] && model['@odata.type'] === '#Model.PinterestImportTaskItem') {\r\n const pinterestBody = _.extend(\r\n _.pick(model, '@odata.type', 'AccountId', 'Type', 'TimeZoneId', 'AdGroupMedium', 'NotificationMedium', 'CultureName', 'UserName', 'AccountName'),\r\n {\r\n AdGroupMedium: 'Search',\r\n PinterestImportContext: _.extend({}, model.PinterestImportContext, {\r\n '@odata.type': '#Model.PinterestImportContext',\r\n SessionId: sessionId,\r\n PinterestSessionUserId: _.propertyOf(config.get('CurrentUser'))('Id'),\r\n }),\r\n ImportType: `PinterestImport${permissions && permissions.IsUseImportTestTypeForImportTaskExecutionEnabled ? 'Test' : ''}`,\r\n ImportUserPreference: model.ImportUserPreference,\r\n State: 'Active',\r\n NotificationType: 'None',\r\n IsAutoFrequency: false,\r\n IsSmartImport: model.IsSmartImport,\r\n Name: model.Name,\r\n });\r\n\r\n this.triggerRunNowImportTask(pinterestBody, model.Id);\r\n return;\r\n }\r\n\r\n const adWordsImportContext = model.AdWordsImportContext;\r\n let body;\r\n\r\n const isSmartImportWizardJob = permissions.IsSmartImportEnabled && (model.IsSmartImport === true || model.IsSmartImport === false);\r\n const isSmartCampaignOnlyJob = model.IsSmartCampaignOnly === true || model.IsSmartCampaignOnly === false;\r\n const isPmaxRecommendationJob = model.DefaultImportSettings === 'PMaxRecommendation'; // if pmax import recommendation task\r\n\r\n if (isPmaxRecommendationJob) {\r\n logMsg(constants.LOGCATEGORY.TRACE, {\r\n TaskType: 'PmaxRecommendationImportTask',\r\n TaskId: model.Id,\r\n Event: 'Trigger runnow button',\r\n });\r\n }\r\n\r\n try {\r\n body = createImportTaskItemHelper.prepareGoogleImport(_.extend({\r\n importUserPreferences: model.ImportUserPreferences,\r\n notificationType: model.NotificationType,\r\n timeZoneId: model.TimeZoneId,\r\n market: model.CustomerMarket,\r\n language: model.Language,\r\n adGroupMedium: model.AdGroupMedium,\r\n googleCustomerId: adWordsImportContext.CustomerId,\r\n loginCustomerId: adWordsImportContext.LoginCustomerId,\r\n campaignIds: adWordsImportContext.CampaignIds,\r\n googleEntitiesBlobName: adWordsImportContext.GoogleEntitiesBlobName,\r\n // if there is a new sessionId, reset value from 'CloudImport' into null.\r\n // same user triagger a runnow job for BAE task from webui, it will keep origin SessionType, SessionId.\r\n sessionType: adWordsImportContext.SessionId !== sessionId && adWordsImportContext.SessionType === 'CloudImport' ? null : adWordsImportContext.SessionType,\r\n initialAdWordsAccount: {\r\n sessionId,\r\n googleAccountName: adWordsImportContext.AccountName,\r\n },\r\n }, isSmartImportWizardJob && { // pass IsAutoFrequency as false, IsSmartImport and Name if it is from smart import workflow (smart/expert)\r\n IsAutoFrequency: false,\r\n IsSmartImport: model.IsSmartImport,\r\n Name: model.Name,\r\n }, isSmartCampaignOnlyJob && {\r\n IsSmartCampaignOnly: model.IsSmartCampaignOnly,\r\n }, model.IsEscImport && {\r\n IsEscImport: model.IsEscImport,\r\n }, isPmaxRecommendationJob && {\r\n DefaultImportSettings: model.DefaultImportSettings, // pass default import settings for MT to generate customized preferences\r\n }));\r\n } catch (err) {\r\n logException(err);\r\n throw err;\r\n }\r\n\r\n body = _.extend(body, {\r\n State: 'Active',\r\n NotificationType: 'None',\r\n });\r\n\r\n if (model.ImportUserPreference) {\r\n body = _.extend(body, {\r\n ImportUserPreference: model.ImportUserPreference,\r\n ImportUserPreferences: undefined,\r\n });\r\n }\r\n\r\n this.triggerRunNowImportTask(body, model.Id);\r\n }\r\n\r\n runMultiAccountImportNowInternal(model, sessionId) {\r\n let body;\r\n\r\n try {\r\n body = createImportTaskItemHelper.prepareMultiAccountGoogleImport({\r\n importUserPreference: model.ImportUserPreference,\r\n importTaskItemList: model.ImportTaskItemList,\r\n notificationType: model.NotificationType,\r\n timeZoneId: model.TimeZoneId,\r\n loginCustomerId: model.ImportTaskItemList[0].AdWordsImportContext.LoginCustomerId,\r\n sessionId,\r\n });\r\n } catch (err) {\r\n logException(err);\r\n throw err;\r\n }\r\n\r\n body = _.extend(body, {\r\n State: 'Active',\r\n NotificationType: 'None',\r\n });\r\n\r\n this.triggerRunNowImportTask(body, model.Id);\r\n }\r\n\r\n triggerRunNowImportTask(body, originalTaskId) {\r\n this.grid.gridView.trigger('willUpdate');\r\n this.createRunNowImport({\r\n body,\r\n isMultiAccount: this.isMultiAccount,\r\n })\r\n .then((data) => {\r\n instrumentation.logMessage([constants.LOGCATEGORY.TRACE], constants.LOGLEVEL.INFO, '/campaign/importcampaign',\r\n 'disable cache for campaign grid after runnow');\r\n cacheManager.invalidate('Campaign');\r\n\r\n const taskItemExecutionId = data.TaskItemExecutions[0].Id;\r\n\r\n instrumentation.logMessage([constants.LOGCATEGORY.TRACE], constants.LOGLEVEL.INFO, '/campaign/importcampaign',\r\n `successfuly trigger a run now import with task execution id: ${taskItemExecutionId}, original task id: ${originalTaskId}`);\r\n return promisifyStartPollingUntilImportStarted({\r\n taskItemExecutionId,\r\n showLoadingIcon: false,\r\n isMultiAccount: this.isMultiAccount,\r\n });\r\n })\r\n .then(() => {\r\n instrumentation.logMessage([constants.LOGCATEGORY.TRACE], constants.LOGLEVEL.INFO, '/campaign/importcampaign',\r\n 'successfuly start the run now import');\r\n this.grid.gridView.refresh(true);\r\n this.trigger('didRunNowImport');\r\n })\r\n .catch((err) => {\r\n this.handleGridErrors(err);\r\n })\r\n .finally(withUiBlock(this.grid.gridView.$el));\r\n }\r\n\r\n handleGridErrors(err) {\r\n this.grid.gridView.trigger('didUpdate');\r\n logException(err);\r\n let msg = i18n.get('GenericErrorMessage');\r\n\r\n if (_.propertyOf(_.first(err.errors))('Code') === 'TaskThrottlingLimitReached') {\r\n msg = i18n.get('Error_Import_ActiveImportLimit');\r\n }\r\n showError(msg);\r\n }\r\n\r\n remove(...args) {\r\n this.grid.gridView.remove();\r\n if (!this.isForVNext) {\r\n this.grid.toolbar.remove();\r\n }\r\n this.grid.pagination.remove();\r\n super.remove(...args);\r\n }\r\n}\r\n","import _ from 'underscore';\r\n\r\nimport { getImportScheduleDataSourceConfig, createRunNowImport, createUpdateStatusView } from './import-schedule-grid-data-source';\r\nimport ImportScheduleGridBase from './import-schedule-grid-base';\r\n\r\nexport default class View extends ImportScheduleGridBase {\r\n constructor(options = {}) {\r\n super(_.defaults(options, {\r\n getDataSourceConfig: getImportScheduleDataSourceConfig,\r\n createRunNowImport,\r\n createUpdateStatusView,\r\n }));\r\n }\r\n}\r\n","import Promise from 'bluebird';\r\nimport odata from '@bingads-webui-component-legacy/http/channel/odata';\r\n\r\nimport config from '@bingads-webui-component-legacy/config/index';\r\nimport dateUtil from '@bingads-webui-component-legacy/humanize/date';\r\n\r\nexport const getBlobUploadUrl = async ({ fileExtension = 'csv' }) => {\r\n const odataOptions = {\r\n cacheResponse: false,\r\n url: `/BulkUploadFiles/GetBlobUploadUrl(CustomerId=:customer_id,BulkFileType=21,FileExtension=${fileExtension})`,\r\n };\r\n\r\n const res = await odata.get(odataOptions);\r\n\r\n return res;\r\n};\r\n\r\nasync function postTask({\r\n BlobName, fileName, TaskType, SasUrl, UploadDateTime = null,\r\n}) {\r\n const permissions = config.get('Permissions') || {};\r\n const testTypeSuffix = permissions.IsUseImportTestTypeForImportTaskExecutionEnabled ? 'Test' : '';\r\n\r\n const odataOptions = {\r\n cacheResponse: false,\r\n url: '/Customers(:customer_id)/TaskItems?$expand=TaskItemExecutions',\r\n data: {\r\n '@odata.type': '#Model.ImportPreferenceBulkUpdateTaskItem',\r\n Name: `ImportPreferenceBulkUpdate-${dateUtil.format(new Date(), 'yyyy-MM-dd')}`,\r\n Type: `ImportPreferenceBulkUpdate${testTypeSuffix}`,\r\n Cron: '',\r\n FileIdentifier: BlobName,\r\n SasUrl,\r\n TaskType,\r\n UploadedFileName: fileName,\r\n UploadDateTime,\r\n },\r\n };\r\n\r\n const res = await odata.post(odataOptions);\r\n\r\n return res;\r\n}\r\n\r\nexport const postPreviewTask = async ({ BlobName, fileName, SasUrl }) => {\r\n const res = await postTask({\r\n BlobName, fileName, TaskType: 'Preview', SasUrl,\r\n });\r\n\r\n return res;\r\n};\r\n\r\nexport const postCommitTask = async ({\r\n BlobName, fileName, UploadDateTime, SasUrl,\r\n}) => {\r\n const res = await postTask({\r\n BlobName, fileName, TaskType: 'Commit', SasUrl, UploadDateTime,\r\n });\r\n\r\n return res;\r\n};\r\n\r\nexport const pollExecutionResult = ({ id }) => {\r\n const odataOptions = {\r\n cacheResponse: false,\r\n url: `/Customers(:customer_id)/TaskItemExecutions(${id})`,\r\n };\r\n\r\n return new Promise((resolve) => {\r\n const timer = setInterval(() => {\r\n odata.get(odataOptions).then((res) => {\r\n if (res.Status === 'Completed' || res.Status === 'Failed') {\r\n clearInterval(timer);\r\n resolve(res);\r\n }\r\n });\r\n }, 5000);\r\n });\r\n};\r\n","\r\nexport const PREFERENCE_UPLOAD_STATUS = {\r\n NotStart: 1,\r\n Upload: 2,\r\n Preview: 3,\r\n Apply: 4,\r\n Previewed: 5,\r\n Applied: 6,\r\n Error: 7,\r\n};\r\n","// TODO: confirm with MT and PM about the error messages\r\nexport const PREFERENCE_UPLOAD_ERROR_MAP = {\r\n InvalidImportPreferenceBulkUpdateTaskType: 'Import_PreferenceUpload_Invalid_Task_Type',\r\n ImportPreferenceBulkUpdateUploadFileSizeExceeded: 'Import_PreferenceUpload_Upload_File_Size_Exceeded',\r\n ImportPreferenceBulkUpdateBlobDownloadError: 'Import_PreferenceUpload_Blob_Download_Error',\r\n ImportPreferenceBulkUpdateBlobUploadError: 'Import_PreferenceUpload_Blob_Upload_Error',\r\n ImportPreferenceBulkUpdateFileFormatInvalid: 'Import_PreferenceUpload_File_Format_Invalid',\r\n ImportPreferenceBulkUpdateFileIsEmpty: 'Import_PreferenceUpload_File_Is_Empty',\r\n ImportPreferenceBulkUpdateFileMissingHeaderRow: 'Import_PreferenceUpload_File_Missing_HeaderRow',\r\n ImportPreferenceBulkUpdateColumnTaskIdNotFound: 'Import_PreferenceUpload_Column_Task_Id_Not_Found',\r\n ImportPreferenceBulkUpdateColumnAccountIdNotFound: 'Import_PreferenceUpload_Column_Account_Id_Not_Found',\r\n ImportPreferenceBulkUpdateColumnPreferenceNotFound: 'Import_PreferenceUpload_Column_Preference_Not_Found',\r\n ImportPreferenceBulkUpdateColumnImportTypeNotFound: 'Import_PreferenceUpload_Column_Import_Type_Not_Found',\r\n ImportPreferenceBulkUpdateParseFailedInvalidValuesInDataRows: 'Import_PreferenceUpload_Parse_Failed_Invalid_Values_In_DataRows',\r\n};\r\n","/* eslint-disable no-unused-vars */\r\nimport _ from 'underscore';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { ProgressIndicator } from '@fluentui/react/lib/ProgressIndicator';\r\nimport { FilePayload } from '@bingads-webui/azure-upload';\r\nimport { DeterministicView } from '@bingads-webui/deterministic-view';\r\nimport { iframeDownload } from '@bingads-webui/download-service';\r\nimport { FilePicker } from '@bingads-webui/file-picker';\r\nimport { PerfMarkerFactory } from '@bingads-webui/performance-marker';\r\nimport UploadService from '@bingads-webui-component-legacy/azure-upload/index';\r\nimport { getBlobUploadUrl, postPreviewTask, postCommitTask, pollExecutionResult } from '@bingads-webui-campaign-legacy/scheduled-import/service/preference-upload-api';\r\n\r\nimport preferenceUploadTemplate from '../template/preference-upload.pug';\r\nimport { PREFERENCE_UPLOAD_STATUS } from './preference-upload-status';\r\nimport { PREFERENCE_UPLOAD_ERROR_MAP } from './preference-upload-error-maps';\r\n\r\nexport class PreferenceUploadView extends DeterministicView {\r\n initialize({\r\n i18n,\r\n publicPath,\r\n logTrace,\r\n perfMarker,\r\n }) {\r\n this.i18n = i18n;\r\n this.publicPath = publicPath;\r\n this.logTrace = logTrace;\r\n this.perfMarker = perfMarker;\r\n if (this.perfMarker) {\r\n this.renderPerfMarker = this.perfMarker.createChild('Import_Preference_Upload_First_Render');\r\n this.renderPerfMarker.willInit();\r\n }\r\n this.FilePicker = FilePicker;\r\n this.title = i18n.getString('Import_PreferenceUpload_Title');\r\n this.description = i18n.getString('Import_PreferenceUpload_Description');\r\n this.PREFERENCE_UPLOAD_STATUS = PREFERENCE_UPLOAD_STATUS;\r\n this.initFilePicker();\r\n\r\n this.defaultState = {\r\n status: PREFERENCE_UPLOAD_STATUS.NotStart,\r\n isApplyEnabled: false,\r\n hideFilePicker: false,\r\n isPreviewEnabled: false,\r\n uploading: false,\r\n showSummaryGrid: false,\r\n downloadPath: '',\r\n progressPercentage: 0,\r\n errorMessage: null,\r\n };\r\n this.setState(this.defaultState);\r\n this.progressTitle = {\r\n [PREFERENCE_UPLOAD_STATUS.Upload]: this.i18n.getString('Schedule_Import_Preference_Upload_Status_Upload'),\r\n [PREFERENCE_UPLOAD_STATUS.Apply]: this.i18n.getString('Schedule_Import_Preference_Upload_Status_Apply'),\r\n [PREFERENCE_UPLOAD_STATUS.Preview]: this.i18n.getString('Schedule_Import_Preference_Upload_Status_Preview'),\r\n };\r\n }\r\n\r\n clearError() {\r\n this.setState({ errorMessage: null });\r\n }\r\n\r\n initFilePicker() {\r\n this.filePicker = new this.FilePicker({\r\n theme: 'default',\r\n className: 'preference-upload-file-picker',\r\n allowedFileExtensions: ['.csv'],\r\n i18n: this.i18n,\r\n validator: () => {\r\n this.setState({ isPreviewEnabled: true });\r\n this.clearError();\r\n },\r\n displayFilePath: 'filename',\r\n }).render();\r\n this.filePicker.on('error.extension', () => {\r\n this.logTrace('error_in_file_upload', 'Not_Supported_File_Extension');\r\n\r\n this.setState({ isPreviewEnabled: false });\r\n });\r\n this.filePicker.on('cleared', () => {\r\n this.setState({ isPreviewEnabled: false });\r\n this.clearError();\r\n });\r\n }\r\n\r\n get template() {\r\n return preferenceUploadTemplate;\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click .cancel, .close-panel': () => {\r\n this.trigger('cancel');\r\n },\r\n 'click .upload-and-preview': () => this.uploadAndPreview(),\r\n 'click .apply-changes': () => this.apply(),\r\n 'click .helpLink.download-template': 'downloadTemplate',\r\n 'click .download-results': () => this.downloadResults(),\r\n };\r\n }\r\n\r\n // Download sample file\r\n downloadTemplate(event) {\r\n this.logTrace('click', 'Sample_File_Download_Button');\r\n\r\n event.stopPropagation();\r\n event.preventDefault();\r\n const templateUrl = `${this.publicPath}files/templates/Import/ImportPreferenceBulkUpdate_Sample.csv`;\r\n\r\n iframeDownload(templateUrl);\r\n }\r\n\r\n async uploadAndPreview() {\r\n this.logTrace('click', 'Upload_And_Preview_Button');\r\n\r\n if (this.perfMarker) {\r\n this.previewPerfMarker = this.perfMarker.createChild('Import_Preference_Upload_Preview_Fetch_Data');\r\n this.previewPerfMarker.willInit();\r\n this.previewPerfMarker.willFetchData();\r\n }\r\n\r\n // TODO: progress indicator improvement\r\n this.setState({ uploading: true, hideFilePicker: true, progressPercentage: 0, status: PREFERENCE_UPLOAD_STATUS.Upload });\r\n const file = this.filePicker.fileObject;\r\n const fileExtension = new FilePayload({\r\n file,\r\n }).getFileExtension();\r\n\r\n try {\r\n const { SasUrl, BlobName } = await getBlobUploadUrl({ fileExtension });\r\n\r\n const uploadService = new UploadService({\r\n blobSetting: {\r\n SasUrl,\r\n blobName: BlobName,\r\n },\r\n file,\r\n });\r\n\r\n // Uploading\r\n this.logTrace('preview', 'Uploading');\r\n\r\n await uploadService.start();\r\n this.setState({ progressPercentage: 0.2 });\r\n\r\n // Previewing\r\n this.logTrace('preview', 'Previewing');\r\n\r\n this.setState({ status: PREFERENCE_UPLOAD_STATUS.Preview });\r\n const previewTask = await postPreviewTask({ BlobName, fileName: file.name, SasUrl});\r\n\r\n this.setState({ progressPercentage: 0.4});\r\n\r\n // Get preview result\r\n this.logTrace('preview', 'Get_Preview_Task_Result');\r\n\r\n const taskId = previewTask.TaskItemExecutions[0].Id;\r\n let previewResult = await pollExecutionResult({ id: taskId });\r\n\r\n this.setState({ progressPercentage: 1 });\r\n this.onUploadFinish(previewResult, true);\r\n } catch (e) {\r\n this.logTrace('error_in_preview_stage', JSON.stringify(e));\r\n\r\n // TODO: confirm with MT about returned error structure\r\n const state = _.defaults({ errorMessage: this.getErrorMessage() }, this.defaultState);\r\n\r\n this.setState(state);\r\n }\r\n }\r\n\r\n async apply() {\r\n if (this.perfMarker) {\r\n this.applyPerfMarker = this.perfMarker.createChild('Import_Preference_Upload_Apply_Fetch_Data');\r\n this.applyPerfMarker.willInit();\r\n this.applyPerfMarker.willFetchData();\r\n }\r\n\r\n this.logTrace('click', 'Apply_Button');\r\n\r\n this.setState({ progressPercentage: 0, uploading: true });\r\n this.clearError();\r\n\r\n const { commitTaskSasUrl, BlobName, fileName, UploadDateTime } = this.getState();\r\n\r\n this.setState({ status: PREFERENCE_UPLOAD_STATUS.Apply });\r\n\r\n try {\r\n // Processing\r\n this.logTrace('apply', 'Processing');\r\n\r\n const commitTask = await postCommitTask({ BlobName, fileName, SasUrl: commitTaskSasUrl, UploadDateTime });\r\n\r\n this.setState({ progressPercentage: 0.4});\r\n\r\n // Get apply result\r\n this.logTrace('apply', 'Get_Apply_Task_Result');\r\n\r\n const taskId = commitTask.TaskItemExecutions[0].Id;\r\n let commitResult = await pollExecutionResult({ id: taskId });\r\n\r\n this.setState({ progressPercentage: 1 });\r\n this.onUploadFinish(commitResult, false);\r\n } catch (e) {\r\n this.logTrace('error_in_apply_stage', JSON.stringify(e));\r\n\r\n // TODO: confirm with MT about returned error structure\r\n const state = _.defaults({ errorMessage: this.getErrorMessage() }, this.defaultState);\r\n\r\n this.setState(state);\r\n }\r\n }\r\n\r\n\r\n onUploadFinish(res, isPreview) {\r\n if (this.previewPerfMarker) {\r\n this.previewPerfMarker.done();\r\n }\r\n\r\n if (this.applyPerfMarker) {\r\n this.applyPerfMarker.done();\r\n }\r\n\r\n const status = isPreview ? PREFERENCE_UPLOAD_STATUS.Previewed : PREFERENCE_UPLOAD_STATUS.Applied;\r\n const state = {\r\n successCount: res.SuccessCount,\r\n errorCount: res.ErrorCount,\r\n status,\r\n showSummaryGrid: true,\r\n downloadPath: res.OutputFileSasURL || '',\r\n uploading: false,\r\n };\r\n const logStage = isPreview ? 'preview' : 'apply';\r\n\r\n this.logTrace(`${logStage}`, `Success_Count:${state.successCount},Error_Count:${state.errorCount}`);\r\n\r\n if (res.Errors && res.Errors.length) {\r\n this.logTrace(`error_in_${logStage}_result`, `${res.Errors[0].Code}`);\r\n\r\n // TODO: confirm with MT about if it may return multiple error codes\r\n _.extend(state, {\r\n errorMessage: this.getErrorMessage(res.Errors[0].Code),\r\n });\r\n }\r\n\r\n if (isPreview) {\r\n _.extend(state, {\r\n isApplyEnabled: res.SuccessCount > 0,\r\n BlobName: res.FileIdentifier,\r\n fileName: res.InputFileName,\r\n commitTaskSasUrl: res.OutputFileSasURL,\r\n UploadDateTime: res.UploadDateTime,\r\n });\r\n }\r\n\r\n this.setState(state);\r\n }\r\n\r\n downloadResults() {\r\n this.logTrace('click', 'Download_Results_File_Button');\r\n\r\n const { downloadPath } = this.getState();\r\n\r\n iframeDownload(downloadPath);\r\n }\r\n\r\n getErrorMessage(err) {\r\n // don't show warning level error messages since it may be confused for customer\r\n if (err === 'ImportPreferenceBulkUpdateSmartImportWillChangeToExpertImport') {\r\n return null;\r\n }\r\n\r\n if (PREFERENCE_UPLOAD_ERROR_MAP[err] !== undefined) {\r\n return this.i18n.getString(PREFERENCE_UPLOAD_ERROR_MAP[err]);\r\n }\r\n\r\n // Default error\r\n return this.i18n.getString('Import_PreferenceUpload_Error_RequestFailed');\r\n }\r\n\r\n renderTrunk() {\r\n if (this.renderPerfMarker) {\r\n this.renderPerfMarker.willRender();\r\n }\r\n\r\n super.renderTrunk();\r\n\r\n this.$('.preference-upload-file-picker-placeholder').html(this.filePicker.$el);\r\n\r\n const { progressPercentage, status, uploading } = this.getState();\r\n\r\n if (uploading) {\r\n ReactDOM.render(\r\n , this.$('.progress-container').get(0));\r\n }\r\n\r\n if (this.renderPerfMarker) {\r\n this.renderPerfMarker.done();\r\n }\r\n\r\n return this;\r\n }\r\n\r\n remove() {\r\n ReactDOM.unmountComponentAtNode(this.el);\r\n return super.remove();\r\n }\r\n}\r\n","import _ from 'underscore';\r\n\r\nimport timeZoneMapper from '@bingads-webui-component-legacy/timezonemapper/index';\r\nimport dateUtil from '@bingads-webui-component-legacy/humanize/date';\r\nimport adSchedulingOptions from '@bingads-webui-campaign-legacy/adextension-shared/viewmodel/adSchedulingOptions';\r\nimport freqColumnTmpl from '@bingads-webui-campaign-legacy/scheduled-import/template/freq-column.pug';\r\nimport config from '@bingads-webui-component-legacy/config/index';\r\n\r\nconst i18nGlobal = window.globalLegacyI18n.get('component/i18n/loader!legacy/global');\r\n\r\nlet dayMapper = function(dayOfTheWeek) {\r\n let arr = [\r\n i18nGlobal.getString('DayOfWeek_Sunday'),\r\n i18nGlobal.getString('DayOfWeek_Monday'),\r\n i18nGlobal.getString('DayOfWeek_Tuesday'),\r\n i18nGlobal.getString('DayOfWeek_Wednesday'),\r\n i18nGlobal.getString('DayOfWeek_Thursday'),\r\n i18nGlobal.getString('DayOfWeek_Friday'),\r\n i18nGlobal.getString('DayOfWeek_Saturday'),\r\n ];\r\n\r\n return arr[parseInt(dayOfTheWeek)];\r\n};\r\n\r\nlet hourMapper = function(hourString) {\r\n let hour = parseInt(hourString);\r\n let hourObj = _.find(adSchedulingOptions.fromHourOptions, (obj) => obj.val === hour);\r\n\r\n return hourObj && hourObj.twelveHourDisplay ? hourObj.twelveHourDisplay : null;\r\n};\r\n\r\nlet frequencyMapper = function(cron, i18n) {\r\n if (cron && cron.split && cron !== '') {\r\n let arr = cron.split(' ');\r\n\r\n if (arr.length === 6) {\r\n const numOfBlank = _.reduce(arr, (memo, char) => {\r\n return memo + (char === '*' ? 1 : 0);\r\n }, 0);\r\n\r\n if (numOfBlank === 1) {\r\n return i18n.getString('Scheduled_Import_OnceTemplate')\r\n .replace('{0}', i18n.getString('AutomatedRules_FrequencyGrain_Once'))\r\n .replace('{1}', dateUtil.format(new Date(`${arr[3]}/${arr[2]}/${arr[5]}`), 'MM/d/yyyy', config.get('culture')))\r\n .replace('{2}', hourMapper(arr[1]));\r\n }\r\n if (arr[2] !== '*') {\r\n return i18n.getString('AutomatedRules_Frequency_MonthlyTemplate')\r\n .replace('{0}', i18n.getString('AutomatedRules_FrequencyGrain_Monthly'))\r\n .replace('{1}', arr[2])\r\n .replace('{2}', hourMapper(arr[1]));\r\n }\r\n if (arr[4] !== '*') {\r\n return i18n.getString('AutomatedRules_Frequency_WeeklyTemplate')\r\n .replace('{0}', i18n.getString('AutomatedRules_FrequencyGrain_Weekly'))\r\n .replace('{1}', dayMapper(arr[4]))\r\n .replace('{2}', hourMapper(arr[1]));\r\n }\r\n return i18n.getString('AutomatedRules_Frequency_DailyTemplate')\r\n .replace('{0}', i18n.getString('AutomatedRules_FrequencyGrain_Daily'))\r\n .replace('{1}', hourMapper(arr[1]));\r\n }\r\n }\r\n return null;\r\n};\r\n\r\nexport function importFreqColDataToTemplate({\r\n IsAutoFrequency: isAuto,\r\n TimeZoneId,\r\n Cron: frequency,\r\n}, i18n) {\r\n if (!_.isNumber(TimeZoneId)) {\r\n // eslint-disable-next-line no-param-reassign\r\n TimeZoneId = config.get('AccountTimeZone');\r\n }\r\n\r\n let result = _.find(timeZoneMapper.getTimeZoneOptions(), (obj) => obj.index === TimeZoneId.toString());\r\n\r\n return freqColumnTmpl({\r\n i18n,\r\n isAuto,\r\n Freq: frequencyMapper(frequency, i18n),\r\n TimeZone: result ? result.text : null,\r\n });\r\n}\r\n","import _ from 'underscore';\r\nimport state from '@bingads-webui-component-legacy/state/index';\r\nimport jsdata from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport timezonemapper from '@bingads-webui-component-legacy/timezonemapper/index';\r\nimport edmCampaign from '@bingads-webui-component-legacy/edm-campaign/index';\r\nimport { queryify } from '@bingads-webui/url-util';\r\nimport { defaultBidForShoppingCampaign } from '@bingads-webui-campaign-legacy/budget/shared/defaultBid';\r\nimport * as i18nErrors from '@bingads-webui-component-legacy/api-errors-campaign/index';\r\n\r\nexport function getProductData(shouldShowPlaceholderStoreIfExists = false) {\r\n let url = queryify('/Campaign/NewCampaign/GetProductScope', {\r\n aid: state.get('account_id'),\r\n cid: state.get('customer_id'),\r\n uid: state.get('user_id'),\r\n });\r\n\r\n if (shouldShowPlaceholderStoreIfExists) {\r\n url = `${url}&storeTypes=placeholder`;\r\n }\r\n\r\n const params = {\r\n url,\r\n adapter: 'legacy',\r\n // We shouldn't cache the response when showing placeholder stores.\r\n // If we do, there will be a bug when the user goes from campaign settings to creation.\r\n // The bug will be that the user sees draft stores in campaign creation since it reads from cache.\r\n bypassCache: shouldShowPlaceholderStoreIfExists,\r\n cacheResponse: !shouldShowPlaceholderStoreIfExists,\r\n };\r\n\r\n return jsdata.Product.find('MetaData', params).then((productData) => {\r\n // need to filter out all coop stores.\r\n return _.extend({}, productData, {\r\n ProductCollectionAccounts: productData.ProductCollectionAccounts.filter((item) => !item.IsCoOpStore && !item.IsGlobalStore),\r\n });\r\n });\r\n}\r\n\r\n\r\nconst defaultAdGroupName = 'Ad group #1';\r\n\r\nfunction getAdGroup({ campaignName, adgroupId, campaignId, startDate, endDate }) {\r\n const adgroup = {\r\n Campaign: {\r\n Id: campaignId,\r\n },\r\n Id: adgroupId,\r\n SearchBid: adgroupId == null ? 1 /* defaultBidForShoppingCampaign() */ : null, //FIXME: defaultBidForShoppingCampaign returns `undefined` for not mapped currencies and breaks SSC creation\r\n CampaignName: campaignName,\r\n Name: defaultAdGroupName,\r\n Status: 'Active',\r\n StartDate: startDate,\r\n EndDate: endDate,\r\n };\r\n\r\n return adgroup;\r\n}\r\n\r\nfunction getAd(campaignName) {\r\n const productAd = {\r\n CampaignName: campaignName,\r\n AdGroupName: defaultAdGroupName,\r\n PromotionalText: '',\r\n };\r\n\r\n return productAd;\r\n}\r\n\r\nfunction getProductPartition(campaignName) {\r\n return {\r\n // bid amount is a mandatory field in MT API, so here we need to set a default bid amount.\r\n // this value is useless for downstream as smart shopping campaign is auto bidding.\r\n BidAmount: 1, // defaultBidForShoppingCampaign(), //FIXME: defaultBidForShoppingCampaign returns `undefined` for not mapped currencies and breaks SSC creation\r\n ProductCondition: 'All',\r\n ProductValue: '',\r\n CampaignName: campaignName,\r\n AdGroupName: defaultAdGroupName,\r\n IsExcluded: false,\r\n IsLeaf: 'Unit',\r\n Status: 'Paused',\r\n };\r\n}\r\n\r\nfunction formatCriterions(campaignTargetingModel, campaignName) {\r\n let dayTimeCriterions = [];\r\n\r\n if (campaignTargetingModel.adScheduleModel) {\r\n dayTimeCriterions = campaignTargetingModel.adScheduleModel.dayTimeRanges;\r\n }\r\n let locationCriterions = [];\r\n let deletedLocationCriterions = [];\r\n\r\n if (campaignTargetingModel.locationTargets) {\r\n locationCriterions = campaignTargetingModel.locationTargets.locations;\r\n deletedLocationCriterions = campaignTargetingModel.locationTargets.deletedLocations;\r\n }\r\n let result = dayTimeCriterions;\r\n\r\n result = result.concat(locationCriterions).concat(deletedLocationCriterions).map((criterion) => {\r\n return _.extend({}, criterion, { CampaignName: campaignName });\r\n });\r\n return result.sort((__, b) => {\r\n if (b.Status === 'Delete') {\r\n return 1;\r\n }\r\n return -1;\r\n });\r\n}\r\n\r\nexport function bulkUpsertSmartShoppingCampaign({\r\n model,\r\n campaignId = null,\r\n adgroupId = null,\r\n}) {\r\n const timeZone = timezonemapper.getAccountTimeZone();\r\n const { adScheduleUseSearcherTimeZone } = model.campaignTargeting.adScheduleModel;\r\n const campaignName = model.campaignSetting.Name;\r\n const criterions = formatCriterions(model.campaignTargeting, campaignName);\r\n const startDate = model.campaignTargeting && model.campaignTargeting.adScheduleModel ?\r\n model.campaignTargeting.adScheduleModel.startDate : null;\r\n const endDate = model.campaignTargeting && model.campaignTargeting.adScheduleModel ?\r\n model.campaignTargeting.adScheduleModel.endDate : null;\r\n\r\n let shoppingSettingModel = { ...model.shoppingSetting };\r\n\r\n // Pick fields for feed label\r\n if (shoppingSettingModel.FeedLabel && shoppingSettingModel.FeedLabel.length > 0) {\r\n shoppingSettingModel = _.omit(shoppingSettingModel, 'SalesCountry');\r\n } else if (shoppingSettingModel.SalesCountry) {\r\n shoppingSettingModel = _.omit(shoppingSettingModel, 'FeedLabel');\r\n } else {\r\n shoppingSettingModel = _.omit(shoppingSettingModel, ['FeedLabel', 'SalesCountry']);\r\n }\r\n\r\n let smartShoppingModel = _.extend({}, model.campaignSetting, shoppingSettingModel, {\r\n AdScheduleUseSearcherTimeZone: adScheduleUseSearcherTimeZone,\r\n CampaignCriterions: criterions,\r\n TimeZone: timeZone,\r\n CampaignType: 'Shopping',\r\n CampaignSubType: 'ShoppingSmartAds',\r\n Priority: 'Highest',\r\n Languages: ['All'],\r\n });\r\n\r\n smartShoppingModel = _.omit(smartShoppingModel, ['BudgetId']);\r\n const adgroupToCreate = getAdGroup({ campaignName, adgroupId, campaignId, startDate, endDate });\r\n\r\n smartShoppingModel = _.extend({}, smartShoppingModel, {\r\n AdGroups: [adgroupToCreate],\r\n ProductAds: [getAd(campaignName)],\r\n ProductPartitions: [getProductPartition(campaignName)],\r\n Id: campaignId,\r\n });\r\n // if adgroup is created, no need to update default product ad and product group.\r\n if (adgroupId != null) {\r\n smartShoppingModel = _.omit(smartShoppingModel, ['ProductAds', 'ProductPartitions']);\r\n }\r\n\r\n return jsdata.ShoppingCampaign.create(smartShoppingModel, {\r\n adapter: 'bulk',\r\n cacheResponse: false,\r\n }).then((data) => {\r\n const result = {\r\n campaignId: data.Id,\r\n adgroupId: data.AdGroups && data.AdGroups.length ? data.AdGroups[0].Id : '',\r\n createdCampaign: data,\r\n campaignName: data.Name,\r\n };\r\n\r\n return result;\r\n }).catch((response) => {\r\n i18nErrors.getPartial(response, ['AdGroups', 'CampaignProductScope', 'CampaignCriterions'], 'newcampaign');\r\n throw response;\r\n });\r\n}\r\n\r\nexport function bulkUpdateSmartShoppingCampaign({ campaignId, model }) {\r\n const { adScheduleUseSearcherTimeZone } = model.adScheduleModel || {};\r\n let formatModel = _.omit(_.extend({}, model, {\r\n CampaignType: 'Shopping',\r\n CampaignSubType: 'ShoppingSmartAds',\r\n Priority: 'Highest',\r\n Languages: ['All'],\r\n Id: campaignId,\r\n AdScheduleUseSearcherTimeZone: adScheduleUseSearcherTimeZone,\r\n }), ['locationTargets', 'adScheduleModel']);\r\n // must use the campaign name after modified. or the bulk upsert API will return criterion error.\r\n const criterions = formatCriterions(model, formatModel.Name);\r\n\r\n formatModel.CampaignCriterions = criterions;\r\n\r\n // Pick fields for feed label\r\n if (formatModel.FeedLabel && formatModel.FeedLabel.length > 0) {\r\n formatModel.SalesCountry = 'delete_value';\r\n } else if (formatModel.SalesCountry) {\r\n formatModel.FeedLabel = 'delete_value';\r\n } else {\r\n formatModel.SalesCountry = 'delete_value';\r\n formatModel.FeedLabel = 'delete_value';\r\n }\r\n\r\n return jsdata.ShoppingCampaign.create(formatModel, {\r\n adapter: 'bulk',\r\n cacheResponse: false,\r\n }).catch((response) => {\r\n i18nErrors.getPartial(response, ['AdGroups', 'CampaignProductScope', 'CampaignCriterions'], 'newcampaign');\r\n throw response;\r\n });\r\n}\r\n\r\nexport function getCampaign(campaignId) {\r\n const params = {\r\n queryParameters: {\r\n entitySet: edmCampaign.currentAccount.Campaigns,\r\n expand: ['Budget', 'CampaignConversionGoal/Goals'],\r\n },\r\n bypassCache: true,\r\n };\r\n\r\n return jsdata.Campaign.find(campaignId, params);\r\n}\r\n\r\nexport function createAdGroupWithDefaulSettings(campaign) {\r\n return jsdata.AdGroup\r\n .create({\r\n Name: defaultAdGroupName,\r\n Campaign: {\r\n Id: campaign.Id,\r\n },\r\n SearchBid: defaultBidForShoppingCampaign(),\r\n Status: 'Active',\r\n ProductAds: [\r\n {\r\n CampaignName: campaign.Name ? campaign.Name : campaign.name,\r\n AdGroupName: defaultAdGroupName,\r\n PromotionalText: '',\r\n },\r\n ],\r\n }, { adapter: 'bulk', cacheResponse: false });\r\n}\r\n","import Backbone from 'backbone';\r\nimport _ from 'underscore';\r\nimport template from '@bingads-webui-campaign-legacy/shopping-campaign/template/campaign-creation/smart-shopping-campaign-creation.pug';\r\nimport CampaignSettingsView from '@bingads-webui-campaign-legacy/crud-campaign/view/create';\r\nimport ShoppingSettingsView from '@bingads-webui-campaign-legacy/shopping-campaign/view/campaign-creation/shopping-settings';\r\nimport CampaignTargetingView from '@bingads-webui-campaign-legacy/campaign-targeting/view/campaign-targeting';\r\nimport summaryDataContextManager from '@bingads-webui-static-legacy/summary/SummaryDataContextManager';\r\nimport pageContext from '@bingads-webui-static-legacy/page-context';\r\nimport * as scrollUtil from '@bingads-webui-component-legacy/extension/scrollTo';\r\n// eslint-disable-next-line\r\nimport _bingads_webui_component_legacy_legacy_router_index from '@bingads-webui-component-legacy/legacy-router/index';\r\n// eslint-disable-next-line\r\nconst router = _bingads_webui_component_legacy_legacy_router_index.legacyRouter;\r\nimport ModalManager from '@bingads-webui-component-legacy/dialog/modalManager';\r\nimport * as i18nError from '@bingads-webui-component-legacy/api-errors-campaign/index';\r\nimport * as gmcToMMCGridDeps from '@bingads-webui-campaign-react/gmc-to-mmc-mapping-grid-shared';\r\n\r\nconst isBSCSmartImportEnabled = pageContext && pageContext.Permissions && pageContext.Permissions.IsBSCSmartImportEnabled;\r\nconst i18n = window.globalLegacyI18n.get('component/i18n/loader!campaignui/feature/shopping-campaign');\r\n\r\nconst modalManager = new ModalManager(i18n.get('Browser_Reload_AlertMessage'));\r\n\r\nexport default class View extends Backbone.View {\r\n initialize({\r\n deps,\r\n }) {\r\n this.deps = deps;\r\n this.template = template;\r\n this.campaignSettingsView = null;\r\n this.shoppingSettingsView = null;\r\n this.campaignTargetingView = null;\r\n this.cachedModel = {\r\n campaignSettings: {},\r\n shoppingSettings: {},\r\n campaignTargeting: {\r\n locationTargets: {},\r\n adScheduleModel: {},\r\n },\r\n };\r\n this.navigateToRoute = router.navigateToRoute;\r\n this.campaignId = null;\r\n this.adgroupId = null;\r\n this.campaignName = null;\r\n\r\n this.initModalManager();\r\n }\r\n\r\n initModalManager() {\r\n modalManager.on();\r\n\r\n window.App && window.App.router_new.on('route', () => { // eslint-disable-line\r\n if (modalManager.active) {\r\n modalManager.off();\r\n }\r\n });\r\n }\r\n\r\n renderSubViews(productData, editMode, campaignInfo) {\r\n this.campaignSettingsPlaceholder = this.$el.find('.campaign-settings');\r\n this.shoppingSettingsPlaceholder = this.$el.find('.shopping-settings');\r\n this.campaignTargetingPlaceholder = this.$el.find('.campaign-targeting');\r\n\r\n // init campaign settings\r\n this.campaignSettingsView = this.renderCampaignSettingsView();\r\n this.campaignSettingsPlaceholder.empty().append(this.campaignSettingsView.$el);\r\n // init shopping settings\r\n this.shoppingSettingsView = this.renderShoppingSettingsView(productData, editMode);\r\n this.shoppingSettingsPlaceholder.empty().append(this.shoppingSettingsView.$el);\r\n // init campaign targeting\r\n this.campaignTargetingView = this.renderCampaignTargetingView(editMode, campaignInfo);\r\n this.campaignTargetingPlaceholder.empty().append(this.campaignTargetingView.$el);\r\n }\r\n\r\n renderCampaignSettingsView() {\r\n return new CampaignSettingsView(_.extend({\r\n scenario: 'smart-shopping-campaign-creation-workflow',\r\n showLanguage: false,\r\n campaignType: 'shopping',\r\n campaignSubType: 'ShoppingSmartAds',\r\n Id: this.campaignId,\r\n isNotAudienceCampaign: true,\r\n }, this.cachedModel.campaignSettings)).render();\r\n }\r\n\r\n renderShoppingSettingsView(productData, editMode = false) {\r\n return new ShoppingSettingsView({\r\n data: productData,\r\n campaignType: 'Shopping',\r\n campaignSubType: 'ShoppingSmartAds',\r\n model: this.cachedModel.shoppingSettings,\r\n editMode,\r\n // For BSC Import, we will show some information if the smart shopping campaign has a placeholder store associated to it\r\n shouldShowPlaceholderStoreIfExists: isBSCSmartImportEnabled && editMode,\r\n deps: {\r\n gmcToMMCGridDeps,\r\n i18nNewDesign: this.deps.i18nNewDesign,\r\n },\r\n }).render();\r\n }\r\n\r\n renderCampaignTargetingView(editMode, campaignInfo = {}) {\r\n const { AdScheduleUseSearcherTimeZone: adScheduleUseSearcherTimeZone } = campaignInfo;\r\n\r\n this.cachedModel.campaignTargeting.adScheduleModel.adScheduleUseSearcherTimeZone = adScheduleUseSearcherTimeZone;\r\n return new CampaignTargetingView({\r\n deps: {\r\n eventDelegator: this.deps.eventDelegator,\r\n },\r\n model: this.cachedModel.campaignTargeting,\r\n campaignId: this.campaignId,\r\n adgroupId: this.adgroupId,\r\n showDateSettings: !editMode,\r\n }).render();\r\n }\r\n\r\n navigateToCampaignSummaryPage(isEditMode) {\r\n modalManager.off();\r\n const { campaignId, campaignName } = this;\r\n\r\n if (campaignId) {\r\n if (isEditMode) {\r\n // eslint-disable-next-line camelcase\r\n this.navigateToRoute('campaign_adgroup', { campaign_id: campaignId });\r\n } else {\r\n this.navigateToRoute('campaign');\r\n }\r\n\r\n summaryDataContextManager.getContext('/campaign/NewCampaign/Create?');\r\n if (this.deps.eventDelegator) {\r\n this.deps.eventDelegator.trigger(\r\n isEditMode ? 'campaignUpdated' : 'campaignCreated', {\r\n data: [{\r\n Id: Number(campaignId),\r\n Name: campaignName,\r\n AccountId: pageContext.CurrentAccount.Id,\r\n CampaignType: 2,\r\n CampaignSubType: 12,\r\n }]});\r\n }\r\n } else {\r\n this.navigateToRoute('campaign');\r\n }\r\n }\r\n\r\n refreshCampaignTargetingView() {\r\n this.campaignTargetingView.remove();\r\n this.campaignTargetingView = this.renderCampaignTargetingView();\r\n this.campaignTargetingPlaceholder.empty().append(this.campaignTargetingView.el);\r\n }\r\n\r\n handleApiErrors(response) {\r\n if (!response || response === 'exclusion error') {\r\n return null;\r\n }\r\n\r\n const errors = _.chain(response.errors).map((error) => error.Error).uniq().value();\r\n\r\n if (response.entity && response.entity.Id) {\r\n //the campaign is saved to server\r\n this.campaignId = response.entity.Id;\r\n this.campaignSettingsView.ko_model.Id(response.entity.Id); // eslint-disable-line\r\n }\r\n\r\n let campaignErrors = _.reject(response.entity.errors, (error) => {\r\n return _.contains(['TrackingUrlTemplate', 'UrlCustomParameters'], error.property);\r\n });\r\n\r\n if (campaignErrors.length) {\r\n this.campaignSettingsView.handleApiErrors(campaignErrors);\r\n } else {\r\n const bulkApiErrors = i18nError.getBulkApiErrors(response.errors);\r\n const errMsg = bulkApiErrors && bulkApiErrors[0] && bulkApiErrors[0].message ?\r\n bulkApiErrors[0].message : document.querySelector('#internalErrorMsg').value;\r\n\r\n window.App.views.alertCenter.showError(errMsg);\r\n }\r\n\r\n return errors;\r\n }\r\n\r\n getValue() {\r\n const campaignSetting = this.campaignSettingsView.getData();\r\n const shoppingSetting = this.shoppingSettingsView.viewModel.toObject();\r\n const campaignTargeting = this.campaignTargetingView.getValue();\r\n\r\n if (campaignSetting && shoppingSetting && campaignTargeting) {\r\n const model = {\r\n campaignSetting,\r\n shoppingSetting,\r\n campaignTargeting,\r\n };\r\n\r\n return model;\r\n }\r\n return false;\r\n }\r\n\r\n scrollToErrors() {\r\n let errors = this.$('.error, .is-error')\r\n .filter(':visible');\r\n\r\n errors = errors.filter((index) => {\r\n const err = errors.eq(index);\r\n\r\n return err.text() !== '';\r\n });\r\n\r\n scrollUtil.scrollAndCenter(errors);\r\n }\r\n\r\n remove() {\r\n if (this.campaignSettingsView) {\r\n this.campaignSettingsView.remove();\r\n }\r\n if (this.campaignTargetingView) {\r\n this.campaignTargetingView.remove();\r\n }\r\n if (this.shoppingSettingsView) {\r\n this.shoppingSettingsView.remove();\r\n }\r\n super.remove();\r\n }\r\n}\r\n","import instrumentation from '@bingads-webui-campaign-legacy/instrumentation/index';\r\n\r\nexport class SSCInstrumentation {\r\n constructor() {\r\n const scenario = instrumentation.oldUISmartShoppingCampaignCreationScenario.create();\r\n\r\n this.activity = scenario.SSCCreationActivity.create();\r\n }\r\n\r\n signal(message) {\r\n try {\r\n const str = JSON.stringify(message);\r\n\r\n this.activity.signal(str);\r\n } catch (e) {\r\n console.log(e.stack); // eslint-disable-line\r\n }\r\n }\r\n\r\n sendEnterPageLog() {\r\n this.signal({\r\n messageType: 'ENTER_PAGE',\r\n });\r\n }\r\n\r\n sendCreateCampaignSucceededLog(campaignId) {\r\n this.signal({\r\n messageType: 'CAMPAIGN_CREATED',\r\n campaignId,\r\n });\r\n }\r\n\r\n sendCreateCampaignErrorLog(errors) {\r\n this.signal({\r\n messageType: 'CAMPAIGN_CREATION_FAILED',\r\n });\r\n errors.forEach((err) => {\r\n this.signal({\r\n messageType: 'CAMPAIGN_CREATION_ERROR',\r\n error: err,\r\n });\r\n });\r\n }\r\n\r\n sendValidationErrorLog(validationError) {\r\n this.signal({\r\n messageType: 'CAMPAIGN_CREATION_VALIDATION_FAILED',\r\n });\r\n Object.keys(validationError).forEach((property) => {\r\n const errorList = validationError[property];\r\n\r\n if (errorList && errorList.length) {\r\n errorList.forEach((err) => {\r\n if (err) {\r\n this.signal({\r\n messageType: 'CAMPAIGN_CREATION_VALIDATION_ERROR',\r\n property,\r\n error: err,\r\n });\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n sendCancelCreationLog() {\r\n this.signal({\r\n messageType: 'CANCEL',\r\n });\r\n }\r\n\r\n sendPageError(stack) {\r\n this.signal({\r\n messageType: 'PAGE_ERROR',\r\n stack,\r\n });\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport template from '@bingads-webui-campaign-legacy/shopping-campaign/template/campaign-creation/smart-shopping-campaign-creation.pug';\r\nimport { getProductData, bulkUpdateSmartShoppingCampaign, getCampaign } from '@bingads-webui-campaign-legacy/shopping-campaign/service/campaign-creation/service'; // eslint-disable-line\r\nimport timezonemapper from '@bingads-webui-component-legacy/timezonemapper/index';\r\nimport AdvancedSettingsView from '@bingads-webui-campaign-legacy/advanced-settings/view/advancedSettings';\r\nimport withUiBlock from '@bingads-webui-component-legacy/uiblocker/index';\r\nimport { loadMap } from '@bingads-webui-campaign-legacy/dashboard-page/service/load-map';\r\nimport pageContext from '@bingads-webui-static-legacy/page-context';\r\nimport Promise from 'bluebird';\r\nimport state from '@bingads-webui-component-legacy/state/index';\r\nimport jsdata from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport { GoalSelectorView } from '@bingads-webui-campaign-react/goal-selector/src/view';\r\nimport SmartShoppingBase from './smart-shopping-base';\r\nimport { SSCInstrumentation } from './ssc-instrumentation';\r\n\r\nconst isBSCSmartImportEnabled = pageContext && pageContext.Permissions && pageContext.Permissions.IsBSCSmartImportEnabled;\r\nconst i18n = window.globalLegacyI18n.get('component/i18n/loader!campaignui/feature/shopping-campaign');\r\n\r\n\r\nexport default class View extends SmartShoppingBase {\r\n initialize(options) {\r\n super.initialize(options);\r\n this.campaignId = options.campaignId;\r\n this.sscInstrumentation = new SSCInstrumentation();\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click .btn-save': 'save',\r\n 'click .btn-cancel': 'cancel',\r\n };\r\n }\r\n\r\n render() {\r\n const unblock = withUiBlock(this.$el);\r\n\r\n // For BSC Import, we will show some information in campaign settings\r\n // if the smart shopping campaign has a placeholder store associated to it.\r\n const shouldShowPlaceholderStoreIfExists = isBSCSmartImportEnabled;\r\n\r\n Promise.all([\r\n getCampaign(this.campaignId),\r\n getProductData(shouldShowPlaceholderStoreIfExists),\r\n loadMap(),\r\n ]).then(([campaignInfo, productData]) => {\r\n unblock();\r\n this.cachedModel = _.extend(this.cachedModel, {\r\n campaignSettings: _.pick(campaignInfo, ['Name', 'BiddingScheme', 'Budget', 'CampaignCashback']),\r\n shoppingSettings: _.extend({}, _.result(campaignInfo, 'CampaignSettings', [{}])[0], {\r\n CampaignSubType: 'ShoppingSmartAds',\r\n }),\r\n });\r\n this.campaign = campaignInfo;\r\n this.campaignName = campaignInfo.Name;\r\n this.$el.html(template({ i18n, isStoreNotValid: false })).addClass('smart-shopping-settings');\r\n this.renderSubViews(productData, true, campaignInfo);\r\n this.advancedSettingsViewPlaceholder = this.$el.find('.advanced-settings');\r\n this.advancedSettingsView = this.renderAdvancedSettingsView(campaignInfo);\r\n this.advancedSettingsViewPlaceholder.empty().append(this.advancedSettingsView.$el);\r\n this.renderGoalSelector(campaignInfo);\r\n }).catch((e) => {\r\n this.sscInstrumentation.sendPageError(e.stack);\r\n const errMsg = document.querySelector('#internalErrorMsg').value;\r\n\r\n window.App.views.alertCenter.showError(errMsg);\r\n throw e;\r\n });\r\n return this;\r\n }\r\n\r\n renderAdvancedSettingsView(campaignInfo) {\r\n return new AdvancedSettingsView({\r\n campaignId: this.campaignId,\r\n level: 'campaign',\r\n scenario: 'smart-shopping-campaign',\r\n TimeZone: timezonemapper.getAccountTimeZone(),\r\n model: campaignInfo,\r\n nativeAdsCampaignBid: _.result(this.campaign, 'NativeBidAdjustment') || 0,\r\n campaignType: 'shopping',\r\n collapseAdvancedSettings: this.isSponsoredCampaign,\r\n }).render();\r\n }\r\n\r\n validate() {\r\n const isFeedFilterValid = this.shoppingSettingsView.isFeedLabelEnabled ? this.shoppingSettingsView.validateFeedFilter() : true;\r\n\r\n return super.getValue() && this.advancedSettingsView.validate() && isFeedFilterValid;\r\n }\r\n\r\n renderGoalSelector(campaign) {\r\n const cashbackSettings = _.result(campaign, 'CampaignCashback');\r\n const hasCashbackSettings = cashbackSettings &&\r\n (cashbackSettings.PersonalizedOffersEnabled === true ||\r\n cashbackSettings.MonthlyBudget > 0);\r\n const isSPA = campaign.CampaignSubType === 'ShoppingSponsoredProductAd';\r\n\r\n const enableGoalSelector = !isSPA && !hasCashbackSettings;\r\n\r\n if (enableGoalSelector) {\r\n this.goalSelectionView = new GoalSelectorView({\r\n i18n: i18n.realI18n,\r\n pageSize: 10,\r\n isMultiMode: true,\r\n isHideSaveBar: true,\r\n campaign,\r\n jsdata,\r\n state,\r\n });\r\n this.$('.conversion-goal-selection').empty().html(this.goalSelectionView.render().el);\r\n } else {\r\n this.$('.conversion-goal-section').empty();\r\n }\r\n }\r\n getValue() {\r\n if (this.validate()) {\r\n const value = super.getValue();\r\n let model = _.extend({}, value.campaignSetting, value.shoppingSetting, value.campaignTargeting);\r\n const advancedSettings = this.advancedSettingsView.getValues();\r\n\r\n model = _.extend(model, advancedSettings.urlOptions);\r\n if (this.goalSelectionView) {\r\n model.CampaignConversionGoalAssociations =\r\n this.goalSelectionView.convertToMTFormat(this.campaignId);\r\n }\r\n return model;\r\n }\r\n return false;\r\n }\r\n\r\n handleApiErrors(response) {\r\n super.handleApiErrors(response);\r\n if (response.entity && response.entity.Id) {\r\n this.advancedSettingsView.setData(response);\r\n this.advancedSettingsView.handleErrors(response);\r\n }\r\n }\r\n\r\n save() {\r\n const model = this.getValue();\r\n\r\n if (model) {\r\n const unblock = withUiBlock();\r\n\r\n bulkUpdateSmartShoppingCampaign({\r\n campaignId: this.campaignId,\r\n model,\r\n })\r\n .then((data) => {\r\n unblock();\r\n this.campaignName = data.Name;\r\n this.advancedSettingsView.setData(data);\r\n this.navigateToCampaignSummaryPage(true);\r\n })\r\n .catch((response) => {\r\n unblock();\r\n this.handleApiErrors(response);\r\n this.scrollToErrors();\r\n });\r\n } else {\r\n this.scrollToErrors();\r\n }\r\n }\r\n\r\n cancel() {\r\n this.navigateToCampaignSummaryPage(true);\r\n }\r\n\r\n remove() {\r\n super.remove();\r\n if (this.advancedSettingsView) {\r\n this.advancedSettingsView.remove();\r\n }\r\n }\r\n}\r\n","import BaseViewModel from '../common/base';\r\n\r\nclass ViewModel extends BaseViewModel {\r\n constructor() {\r\n super();\r\n\r\n this.configSchema(this);\r\n }\r\n}\r\n\r\nexport default ViewModel;\r\n","/*eslint new-cap:0 */\r\nimport Backbone from 'backbone';\r\nimport ko from 'knockout';\r\nimport _ from 'underscore';\r\nimport template from '@bingads-webui-campaign-legacy/shopping-campaign/template/campaign-creation/update.pug';\r\nimport CreateView from '@bingads-webui-campaign-legacy/shopping-campaign/view/campaign-creation/index';\r\nimport ViewModel from '@bingads-webui-campaign-legacy/shopping-campaign/viewmodel/campaign-creation/update';\r\nimport { getODataErrors } from '@bingads-webui-component-legacy/api-errors-campaign/index';\r\nimport jsData from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport withUiBlock from '@bingads-webui-component-legacy/uiblocker/index';\r\nimport edmCampaign from '@bingads-webui-component-legacy/edm-campaign/index';\r\nimport state from '@bingads-webui-component-legacy/state/index';\r\nimport config from '@bingads-webui-component-legacy/config/index';\r\nimport Promise from 'bluebird';\r\nimport { getFeedData as GetFeedData } from '@bingads-webui-campaign/audience-campaign-creation-wizard';\r\nimport { isMSStoreAdsCampaign } from '@bingads-webui-campaign-react/ms-store-ads-common';\r\n\r\nconst permissions = config.get('Permissions') || {};\r\nconst isEnabledDynamicFeedCampaign = permissions.IsEnabledForDynamicFeedCampaign;\r\n\r\nexport default class View extends Backbone.View {\r\n initialize({\r\n deps,\r\n perfMarker,\r\n ccJsData,\r\n }) {\r\n if (perfMarker) {\r\n this.campaignScopeAllSettingsPerfMarker = perfMarker.createChild('CampaignScope_AllSettings_EditShoppingCampaign');\r\n }\r\n\r\n this.mark('willInit');\r\n this.campaignId = Number(state.get('campaign_id'));\r\n this.deps = deps;\r\n this.ccJsData = ccJsData;\r\n this.viewModel = new ViewModel();\r\n }\r\n\r\n render() {\r\n this.$el.html(template());\r\n ko.applyBindings(this.viewModel, this.el);\r\n\r\n this.hideUIBlocker = withUiBlock();\r\n this.mark('willFetchData');\r\n Promise.all(isEnabledDynamicFeedCampaign ? [this.getCampaign(), this.getFeedData()] : [this.getCampaign()])\r\n .then(([campaign, feed = null]) => {\r\n this.mark('willRender');\r\n const isMSStoreAdsGAWorkflow = isMSStoreAdsCampaign(campaign);\r\n\r\n this.shoppingCampaignView = new CreateView({ campaign, deps: this.deps, feed, isSettingsPage: true, isMSStoreAdsGAWorkflow, ccJsData: this.ccJsData });\r\n this.$('.update-container').html(this.shoppingCampaignView.render().el);\r\n })\r\n .finally(() => {\r\n this.hideUIBlocker();\r\n this.mark('done');\r\n })\r\n .catch(({ errors }) => {\r\n this.viewModel.errors.add(getODataErrors(errors));\r\n });\r\n\r\n return this;\r\n }\r\n\r\n getCampaign() {\r\n const params = {\r\n queryParameters: {\r\n entitySet: edmCampaign.currentAccount.Campaigns,\r\n expand: ['Budget', 'CampaignConversionGoal/Goals'],\r\n },\r\n bypassCache: true,\r\n };\r\n\r\n return jsData.Campaign.find(this.campaignId, params);\r\n }\r\n\r\n getFeedData({ $top = 10000, $skip = 0 } = {}) {\r\n return GetFeedData({ $top, $skip, permissions });\r\n }\r\n\r\n remove() {\r\n if (this.shoppingCampaignView) {\r\n this.shoppingCampaignView.remove();\r\n }\r\n super.remove();\r\n }\r\n\r\n mark(perfMarkerEvent) {\r\n if (this.campaignScopeAllSettingsPerfMarker) {\r\n this.campaignScopeAllSettingsPerfMarker[perfMarkerEvent]();\r\n }\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport BaseModel from '@bingads-webui-campaign-legacy/bulk-operation/util/bulk-edit-job';\r\n\r\nexport default class ChangeBidAdjustmentModel extends BaseModel {\r\n initialize() {\r\n this.defaults = _.extend({}, BaseModel.prototype.defaults, {\r\n Entity: 'CampaignCriterion',\r\n BatchAction: {\r\n Actions: [{\r\n '@odata.type': '#Model.NumericAction',\r\n Property: 'BidAdjustment',\r\n ActionType: 'SetToAmount',\r\n Value: '',\r\n }],\r\n },\r\n });\r\n }\r\n}\r\n","import ko from 'knockout';\r\nimport BaseViewModel from '@bingads-webui-static-legacy/bulk-edit/viewmodel/bulkEditJob';\r\n\r\nconst i18n = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/feature/targeting-settings');\r\n\r\nexport default class ViewModel {\r\n constructor(options) {\r\n BaseViewModel.call(this);\r\n this.settingView = options.settingView;\r\n this.showButtonBar = ko.observable(true);\r\n this.showCloseButton = ko.observable(false);\r\n this.selectedEntityCount(options.model.get('selectedEntityCount'));\r\n this.entity = options.entity;\r\n this.gridType = options.gridType;\r\n this.crossPageSelectAll = options.crossPageSelectAll;\r\n this.titleText = ko.computed(() =>\r\n i18n.getString(`BulkEdit_${this.gridType}_ChangeBidTitle`, {selectCount: this.selectedEntityCount()}), this);\r\n this.entityNameHeader = ko.computed(() =>\r\n i18n.getString(`BulkEdit_${this.gridType}_EntityNameHeader`), this);\r\n this.bulkEditInfo = ko.computed(() =>\r\n i18n.getString(`BulkEdit_${this.gridType}_BulkEditInfo`), this);\r\n this.showAdgroupSelectedAllMixInheritWarning = ko.computed(() => {\r\n if (this.entity === 'AdGroupCriterion' && this.crossPageSelectAll.isAllSelected) {\r\n return true;\r\n }\r\n return false;\r\n });\r\n this.validate = () => {\r\n return this.settingView.validate();\r\n };\r\n }\r\n}\r\n","import { getLocationDisplayName, getDayTimeDisplayName, getDeviceDisplayName } from '@bingads-webui-campaign/targeting-settings-scaffolds';\r\nimport _ from 'underscore';\r\nimport $ from 'jquery';\r\n\r\nconst i18n = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/feature/targeting-settings');\r\n\r\nexport function getDisplayName(entity) {\r\n if (entity.DeviceName) {\r\n return getDeviceDisplayName(i18n, { Criterion: entity });\r\n } else if (entity.Day) {\r\n return getDayTimeDisplayName(i18n, { Criterion: entity });\r\n } else {\r\n return getLocationDisplayName({ Criterion: entity });\r\n }\r\n}\r\n\r\nexport function getSelectedEntityIdStrings(gridView) {\r\n return _.map(gridView.selectedItems(), (obj) => {\r\n if (obj.LevelOfDetails === 'AdGroup') {\r\n const campaignId = obj.Campaign ? obj.Campaign.Id : $.advertiser.getUrlParameter('cmpid');\r\n\r\n return `CampaignId=${campaignId},AdGroupId=${obj.AdGroup.Id},TargetGroupDetailId=${obj.Id}`;\r\n } else {\r\n return `CampaignId=${obj.Campaign.Id},TargetGroupDetailId=${obj.Id}`;\r\n }\r\n });\r\n}\r\n","import _ from 'underscore';\r\nimport decimalNumber from '@bingads-webui-component-legacy/humanize/decimal';\r\nimport BaseView from '@bingads-webui-static-legacy/bulk-edit/view/bulkEditJob';\r\nimport logger from '@bingads-webui-static-legacy/instrumentation/index';\r\nimport { BidAdjustmentView } from '@bingads-webui-campaign/bid-adjustment';\r\nimport template from '@bingads-webui-static-legacy/bulk-edit/template/settings/changeBid.pug';\r\nimport ChangeBidAdjustmentViewModel from './change-bid-adjustment-viewmodel';\r\nimport filterConverter from '@bingads-webui-static-legacy/odata-filter-converter';\r\nimport { getSelectedEntityIdStrings } from '../helpers';\r\n\r\nconst i18n = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/feature/targeting-settings');\r\n\r\nfunction formatBid(rows, formatEntityString) {\r\n if (rows) {\r\n _.each(rows, (value) => {\r\n value.data = [];\r\n value.EntityKeyObject = {};\r\n\r\n _.each(value.EntityKey, (obj) => {\r\n value.EntityKeyObject[obj.Key] = obj.Value;\r\n });\r\n\r\n let name = '';\r\n\r\n if (_.isFunction(formatEntityString)) {\r\n name = formatEntityString(value.EntityKeyObject);\r\n }\r\n value.data.push({value: name, isHtml: false});\r\n\r\n if (value.Changes && value.Changes.length) {\r\n value.data.push({value: decimalNumber.fromFloatToPercentString(value.Changes[0].OriginalValue, 0), isHtml: false});\r\n value.data.push({value: decimalNumber.fromFloatToPercentString(value.Changes[0].NewValue, 0), isHtml: false});\r\n } else {\r\n value.data.push({value: '', isHtml: false});\r\n value.data.push({value: '', isHtml: false});\r\n }\r\n });\r\n }\r\n return rows;\r\n}\r\n\r\nexport default class ChangeBidAdjustmentView extends BaseView {\r\n initialize(options) {\r\n this.options = options || {};\r\n this.entity = options.entity;\r\n super.initialize(options);\r\n this.gridType = options.gridType;\r\n this.customValidators = options.customValidators;\r\n this.formatEntityString = options.formatEntityString;\r\n this.checkInheritTargets = options.checkInheritTargets;\r\n this.template = template;\r\n this.settingView = new BidAdjustmentView({\r\n value: 0,\r\n i18n,\r\n showButtons: false,\r\n customValidators: this.customValidators,\r\n });\r\n // eslint-disable-next-line camelcase\r\n this.ko_model = new ChangeBidAdjustmentViewModel({\r\n entity: this.entity,\r\n model: this.model,\r\n settingView: this.settingView,\r\n gridType: this.gridType,\r\n crossPageSelectAll: this.grid.pgridPlugins.crossPageSelectAll,\r\n });\r\n }\r\n\r\n render(options) {\r\n super.render(options);\r\n this.$('#bid-adjustment-bulk-edit').empty().html(this.settingView.render().el);\r\n return this;\r\n }\r\n\r\n setAction(simulateResults) {\r\n // not use PreviewEntityIds but use PreviewCompositeIds for this feature.\r\n this.model.unset('PreviewEntityIds');\r\n this.model.unset('PreviewCompositeIds');\r\n if (simulateResults) {\r\n if (this.grid.pgridPlugins.crossPageSelectAll.isAllSelected) {\r\n this.model.set('PreviewCompositeIds', getSelectedEntityIdStrings(this.grid.gridView));\r\n }\r\n }\r\n\r\n const action = {\r\n Actions: [{\r\n '@odata.type': '#Model.NumericAction',\r\n Property: 'BidAdjustment',\r\n ActionType: 'SetToAmount',\r\n Value: this.settingView && this.settingView.currentModel ?\r\n this.settingView.currentModel.BidMultiplier : '',\r\n }],\r\n };\r\n\r\n const selectedItems = this.grid.gridView.selectedItems();\r\n\r\n // bid bulk edit log\r\n // TODO: will improve later\r\n logger.logMessage(\r\n 'ClientTrace',\r\n { name: 'Info', value: 0 },\r\n 'AdScheduleGridView.bidBulkEdit',\r\n `changeBidValue:${action.Actions[0].Value},selectedItems:${JSON.stringify(selectedItems)}}`,\r\n );\r\n\r\n this.model.set('BatchAction', action);\r\n this.model.set('Entity', this.entity);\r\n }\r\n\r\n formatErrors(errors) {\r\n return formatBid(errors, this.formatEntityString);\r\n }\r\n\r\n formatPreviewResults(results) {\r\n return formatBid(results, this.formatEntityString);\r\n }\r\n\r\n getFilterURLParam(filter, entity) {\r\n // New UI: replace the filterState with filterService, how the filterService/filterState used?\r\n let conditionString;\r\n\r\n if (this.grid.filterState) {\r\n conditionString = this.grid.filterState.getAllFilters().odataV4({ignoreCase: false});\r\n } else {\r\n conditionString = this.grid.filterService.getCombinedFilter().odataV4({ignoreCase: false});\r\n }\r\n let result;\r\n\r\n // This is for chaining the id rules with Criterion\r\n if (filter.idBased) {\r\n const idString = filterConverter.convert(filter.FilterExpressions, entity).$filter;\r\n const conditionRegex = /isof\\(Criterion, 'Model.[\\w]+Criterion'\\)/g;\r\n const conditionFragment = conditionString.match(conditionRegex);\r\n let conditionFragmentALl = conditionFragment[0];\r\n\r\n // location has 2 criterions\r\n if (conditionFragment.length > 1) {\r\n conditionFragmentALl = `${conditionFragmentALl} or ${conditionFragment[1]}`;\r\n }\r\n\r\n result = `(${conditionFragmentALl}) and (${idString})`;\r\n } else {\r\n result = conditionString;\r\n }\r\n\r\n return `$filter=(${encodeURIComponent(result)})`;\r\n }\r\n\r\n getIdFilter() {\r\n const FilterExpressions = [];\r\n\r\n if (this.grid.pgridPlugins.crossPageSelectAll.isAllSelected === false) {\r\n FilterExpressions.push({\r\n SelectedColumn: 'IdString',\r\n SelectedOperator: 'Equal',\r\n Values: getSelectedEntityIdStrings(this.grid.gridView),\r\n });\r\n }\r\n\r\n return {\r\n FilterExpressions,\r\n };\r\n }\r\n\r\n makeChanges(simulateResults) {\r\n // when view by ad group and not select all, we need to check if there is any inherit records.\r\n if (this.entity === 'AdGroupCriterion' && !this.grid.pgridPlugins.crossPageSelectAll.isAllSelected) {\r\n const selectedItems = this.grid.gridView.selectedItems();\r\n\r\n if (_.isFunction(this.checkInheritTargets)) {\r\n const inheritResult = this.checkInheritTargets(selectedItems, false);\r\n\r\n if (inheritResult) {\r\n return;\r\n }\r\n }\r\n }\r\n super.makeChanges(simulateResults);\r\n }\r\n}\r\n","import ChangeCashbackPercentView from '@bingads-webui-static-legacy/bulk-edit/view/demographics/changeCashbackPercent';\r\nimport tmpl from '@bingads-webui-static-legacy/bulk-edit/template/targeting/changeCashbackPercent.pug';\r\nimport filterConverter from '@bingads-webui-static-legacy/odata-filter-converter';\r\nimport decimalNumber from '@bingads-webui-component-legacy/humanize/decimal';\r\nimport _ from 'underscore';\r\nimport { getSelectedEntityIdStrings } from '../helpers';\r\n\r\nconst i18n = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/feature/targeting-settings');\r\n\r\nfunction formatBid(rows, formatEntityString) {\r\n if (rows) {\r\n _.each(rows, (value) => {\r\n value.data = [];\r\n value.EntityKeyObject = {};\r\n\r\n _.each(value.EntityKey, (obj) => {\r\n value.EntityKeyObject[obj.Key] = obj.Value;\r\n });\r\n\r\n let name = '';\r\n\r\n if (_.isFunction(formatEntityString)) {\r\n name = formatEntityString(value.EntityKeyObject);\r\n }\r\n value.data.push({value: name, isHtml: false});\r\n\r\n if (value.Changes && value.Changes.length) {\r\n let newValue = value.Changes[0].NewValue;\r\n\r\n if (+newValue === -1 || newValue === '') {\r\n newValue = i18n.getString('Campaign_Cashback_Offer_Scope_InheritFromParent');\r\n } else {\r\n newValue = decimalNumber.fromFloatToPercentString(newValue, 2);\r\n }\r\n\r\n const originalValue = value.Changes[0].OriginalValue;\r\n\r\n value.data.push({\r\n value: originalValue === '' || +originalValue === -1 ?\r\n i18n.getString('Campaign_Cashback_Offer_Scope_InheritFromParent') :\r\n decimalNumber.fromFloatToPercentString(value.Changes[0].OriginalValue, 2),\r\n isHtml: false,\r\n });\r\n value.data.push({value: newValue, isHtml: false});\r\n } else {\r\n value.data.push({value: '', isHtml: false});\r\n value.data.push({value: '', isHtml: false});\r\n }\r\n });\r\n }\r\n return rows;\r\n\r\n}\r\n\r\nexport class ChangeTargetingCashbackPercentView extends ChangeCashbackPercentView {\r\n initialize(options) {\r\n super.initialize(options);\r\n this.template = tmpl;\r\n }\r\n\r\n setAction(simulateResults) {\r\n // not use PreviewEntityIds but use PreviewCompositeIds for this feature.\r\n this.model.unset('PreviewEntityIds');\r\n this.model.unset('PreviewCompositeIds');\r\n if (simulateResults) {\r\n if (this.grid.pgridPlugins.crossPageSelectAll.isAllSelected) {\r\n this.model.set('PreviewCompositeIds', getSelectedEntityIdStrings(this.grid.gridView));\r\n }\r\n }\r\n\r\n const action = {\r\n Actions: [{\r\n '@odata.type': '#Model.NumericAction',\r\n Property: 'CashbackAdjustment',\r\n ActionType: 'SetToAmount',\r\n Value: this.ko_model.getCashbackPercentValueByAction(),\r\n }],\r\n };\r\n\r\n this.model.set('BatchAction', action);\r\n this.model.set('Entity', this.entity);\r\n }\r\n\r\n getFilterURLParam(filter, entity) {\r\n // New UI: replace the filterState with filterService, how the filterService/filterState used?\r\n let conditionString;\r\n\r\n if (this.grid.filterState) {\r\n conditionString = this.grid.filterState.getAllFilters().odataV4({ignoreCase: false});\r\n } else {\r\n conditionString = this.grid.filterService.getCombinedFilter().odataV4({ignoreCase: false});\r\n }\r\n let result;\r\n\r\n // This is for chaining the id rules with Criterion\r\n if (filter.idBased) {\r\n const idString = filterConverter.convert(filter.FilterExpressions, entity).$filter;\r\n const conditionRegex = /isof\\(Criterion, 'Model.[\\w]+Criterion'\\)/g;\r\n const conditionFragment = conditionString.match(conditionRegex);\r\n let conditionFragmentALl = conditionFragment[0];\r\n\r\n // location has 2 criterions\r\n if (conditionFragment.length > 1) {\r\n conditionFragmentALl = `${conditionFragmentALl} or ${conditionFragment[1]}`;\r\n }\r\n\r\n result = `(${conditionFragmentALl}) and (${idString})`;\r\n } else {\r\n result = conditionString;\r\n }\r\n\r\n return `$filter=(${encodeURIComponent(result)})`;\r\n }\r\n\r\n getIdFilter() {\r\n const FilterExpressions = [];\r\n\r\n if (this.grid.pgridPlugins.crossPageSelectAll.isAllSelected === false) {\r\n FilterExpressions.push({\r\n SelectedColumn: 'IdString',\r\n SelectedOperator: 'Equal',\r\n Values: getSelectedEntityIdStrings(this.grid.gridView),\r\n });\r\n }\r\n\r\n return {\r\n FilterExpressions,\r\n };\r\n }\r\n\r\n makeChanges(simulateResults) {\r\n // when view by ad group and not select all, we need to check if there is any inherit records.\r\n if (this.entity === 'AdGroupCriterion' && !this.grid.pgridPlugins.crossPageSelectAll.isAllSelected) {\r\n const selectedItems = this.grid.gridView.selectedItems();\r\n\r\n if (_.isFunction(this.checkInheritTargets)) {\r\n const inheritResult = this.checkInheritTargets(selectedItems, false);\r\n\r\n if (inheritResult) {\r\n return;\r\n }\r\n }\r\n }\r\n super.makeChanges(simulateResults);\r\n }\r\n\r\n formatErrors(errors) {\r\n return formatBid(errors, this.formatEntityString);\r\n }\r\n\r\n formatPreviewResults(results) {\r\n return formatBid(results, this.formatEntityString);\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { shouldSupportCashbackSettings } from '@bingads-webui-campaign/personalized-offer-shared';\r\nimport ChangeBidAdjustmentModel from './change-bid-adjustment/change-bid-adjustment-model';\r\nimport ChangeBidAdjustmentView from './change-bid-adjustment/change-bid-adjustment-view';\r\nimport { ChangeTargetingCashbackPercentView } from './change-cashback-percent/change-cashback-percent-view';\r\nimport ChangeCashbackPercentModel from '@bingads-webui-static-legacy/bulk-edit/model/demographics/changeCashbackPercent';\r\nimport popup from '@bingads-webui-component-legacy/dialog/popup';\r\nimport { showAlert } from './common-alert/index';\r\nimport appConfig from '@bingads-webui-component-legacy/config/index';\r\nimport { isDeprecatedLocation } from '@bingads-webui-campaign-legacy/location-targets/util/locationTargetDeprecationHelper';\r\n\r\nconst i18n = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/feature/targeting-settings');\r\n\r\nexport default (definePlugin) => definePlugin('bidAdjustmentBulkEdit', [\r\n 'config',\r\n 'gridView',\r\n 'toolbar',\r\n 'pagination',\r\n 'crossPageSelectAll',\r\n 'filter',\r\n 'filterState',\r\n], (config, gridView, toolbar, pagination, crossPageSelectAll, filter, filterState) => {\r\n const pluginName = 'bidAdjustmentBulkEdit';\r\n let pluginConfig = _.result(config.plugins, pluginName, {});\r\n const isForVNext = _.result(pluginConfig, 'isForVNext', false);\r\n let toolbarEditor;\r\n let filterService;\r\n\r\n if (isForVNext) {\r\n // Currently, VNext toolbar, toolbarWithItem return toolbarEditor directly\r\n toolbarEditor = toolbar.gridToolbarGroup.toolbarWithItem();\r\n // Implicit dependency\r\n filterService = _.result(config, 'filterService', {});\r\n } else {\r\n const menuId = 'bulk-edit-bid-multiplier';\r\n\r\n toolbarEditor = toolbar.gridToolbarGroup.toolbarWithItem(menuId);\r\n pluginConfig = _.findWhere(toolbarEditor.options.items, { id: menuId });\r\n }\r\n\r\n function noneSelectedAndAlert(count) {\r\n if (count < 1) {\r\n popup.alert(i18n.getString('Grid_RowSelectionRequired'));\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n function getGridSelectionCount() {\r\n return crossPageSelectAll.isAllSelected ?\r\n crossPageSelectAll.viewModel.totalRowsTotalPageCount() :\r\n gridView.selectedKeys().length;\r\n }\r\n\r\n function smartShoppingCampaignSelected(items) {\r\n return _.some(items, (item) => {\r\n return _.chain(item)\r\n .result('Campaign')\r\n .result('CampaignSubType')\r\n .value() === 'ShoppingSmartAds';\r\n });\r\n }\r\n\r\n /// return false if all are physical records\r\n /// return true if some are inherit or all inherit but not belong to 1 ad group\r\n /// return adgroupItems list if all are belong to 1 ad group\r\n function checkInheritTargets(selectedItems, editable = true) {\r\n const campaignItems = _.reject(selectedItems, (obj) => obj.LevelOfDetails === 'AdGroup');\r\n\r\n if (campaignItems.length === selectedItems.length && editable) {\r\n const adgroupItems = _.reject(campaignItems, (obj) => obj.AdGroupId !== campaignItems[0].AdGroupId);\r\n\r\n if (campaignItems.length === adgroupItems.length) {\r\n return adgroupItems;\r\n } else {\r\n showAlert({\r\n i18n,\r\n title: i18n.getString('BulkEdit_BidAdjustment_Invalid_Alert_Title'),\r\n messageDetails: i18n.getString(`BulkEdit_BidAdjustment_Inherit_NotSameAdGroup_${pluginConfig.gridType}`),\r\n });\r\n return true;\r\n }\r\n } else if (campaignItems.length > 0) {\r\n showAlert({\r\n i18n,\r\n title: i18n.getString('BulkEdit_BidAdjustment_Invalid_Alert_Title'),\r\n messageDetails: i18n.getString(`BulkEdit_BidAdjustment_MixInheritWarning_${pluginConfig.gridType}`),\r\n });\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n function checkDeprecatedLocations() {\r\n const selectedItems = gridView.selectedItems();\r\n const deprecatedLocationSelected = _.some(selectedItems, (item) => isDeprecatedLocation(item.Criterion));\r\n\r\n if (deprecatedLocationSelected) {\r\n showAlert({\r\n i18n,\r\n title: i18n.getString('BulkEdit_BidAdjustment_Invalid_Alert_Title'),\r\n messageDetails: i18n.getString('BulkEdit_BidAdjustment_DeprecatedWarning_Locations'),\r\n });\r\n }\r\n\r\n return deprecatedLocationSelected;\r\n }\r\n\r\n function renderView(view) {\r\n view.listenTo(gridView, 'didSelect', () => {\r\n view.updateSelectedEntityCount(getGridSelectionCount());\r\n });\r\n\r\n view.render();\r\n view.$el.find(':input:enabled:first').focus();\r\n }\r\n\r\n function expandToolBar(view) {\r\n let gridContainer;\r\n let gridToolbar;\r\n let editorContainer;\r\n\r\n if (isForVNext) {\r\n gridView.overrideWith(view);\r\n } else {\r\n gridContainer = gridView.$el.closest('.settings-view');\r\n gridToolbar = gridContainer.find('.grid-toolbar');\r\n editorContainer = gridContainer.find('.bulkedit-container');\r\n\r\n editorContainer.html(view.$el);\r\n editorContainer.show();\r\n gridToolbar.hide();\r\n }\r\n toolbar.gridToolbarGroup.hideAllToolbars();\r\n\r\n view.on('hide', () => {\r\n if (isForVNext) {\r\n gridView.overrideWith(null);\r\n } else {\r\n gridToolbar.show();\r\n editorContainer.hide();\r\n }\r\n toolbar.gridToolbarGroup.showAllToolbars();\r\n view.remove();\r\n gridView.deselectAll();\r\n gridView.refresh(true);\r\n });\r\n }\r\n\r\n function showBulkEditor(type = 'BidMultiplier') {\r\n let bulkEditView;\r\n\r\n if (noneSelectedAndAlert(getGridSelectionCount()) || checkDeprecatedLocations()) {\r\n return;\r\n }\r\n\r\n // when view by ad group and not select all, we need to check if there is any inherit records.\r\n if (pluginConfig.entity === 'AdGroupCriterion' && !crossPageSelectAll.isAllSelected) {\r\n const selectedItems = gridView.selectedItems();\r\n const inheritResult = checkInheritTargets(selectedItems);\r\n\r\n if (_.isArray(inheritResult)) {\r\n if (smartShoppingCampaignSelected(selectedItems)) {\r\n showAlert({\r\n i18n,\r\n title: i18n.getString('BulkEdit_BidAdjustment_Invalid_Alert_Title'),\r\n messageDetails: i18n.getString('BulkEdit_BidAdjustment_NoSmartShoppingCampaign'),\r\n });\r\n return;\r\n }\r\n gridView.trigger('editInherited', inheritResult);\r\n }\r\n if (inheritResult) {\r\n return;\r\n }\r\n }\r\n\r\n let grid;\r\n\r\n if (isForVNext) {\r\n grid = {\r\n gridView,\r\n pgridPlugins: {\r\n pagination,\r\n crossPageSelectAll,\r\n },\r\n filterService,\r\n };\r\n } else {\r\n grid = {\r\n gridView,\r\n pgridPlugins: {\r\n pagination,\r\n crossPageSelectAll,\r\n filter,\r\n },\r\n filterState,\r\n };\r\n }\r\n\r\n if (type === 'BidMultiplier') {\r\n bulkEditView = new ChangeBidAdjustmentView({\r\n model: new ChangeBidAdjustmentModel({\r\n selectedEntityCount: getGridSelectionCount(),\r\n }),\r\n grid,\r\n entity: _.isEmpty(pluginConfig.entity) ? 'CampaignCriterion' : pluginConfig.entity,\r\n gridType: pluginConfig.gridType,\r\n customValidators: pluginConfig.customValidators,\r\n formatEntityString: pluginConfig.formatEntityString,\r\n checkInheritTargets,\r\n onOperationSuccess: () => {\r\n gridView.deselectAll();\r\n },\r\n isForVNext,\r\n });\r\n } else {\r\n bulkEditView = new ChangeTargetingCashbackPercentView({\r\n model: new ChangeCashbackPercentModel({\r\n selectedEntityCount: getGridSelectionCount(),\r\n }),\r\n grid,\r\n entity: _.isEmpty(pluginConfig.entity) ? 'CampaignCriterion' : pluginConfig.entity,\r\n gridType: pluginConfig.gridType,\r\n customValidators: pluginConfig.customValidators,\r\n formatEntityString: pluginConfig.formatEntityString,\r\n checkInheritTargets,\r\n onOperationSuccess: () => {\r\n gridView.deselectAll();\r\n },\r\n isForVNext,\r\n });\r\n }\r\n\r\n renderView(bulkEditView);\r\n expandToolBar(bulkEditView);\r\n }\r\n\r\n function updateToolbar() {\r\n if (isForVNext) {\r\n toolbarEditor.update({\r\n type: 'button',\r\n id: 'bulk-edit-bid-multiplier',\r\n text: i18n.getString('TargetingSettings_Grid_Bulk_Edit_Bid_Multiplier'),\r\n classes: ['btn-link'],\r\n iconLeftGlyphName: 'ba-Edit',\r\n onClick: () => {\r\n showBulkEditor();\r\n },\r\n });\r\n\r\n const { IsPersonalizedOffersEnabled } = appConfig.get('Permissions');\r\n const currentCampaign = appConfig.get('CurrentCampaign');\r\n const showBulkEditCashbackPercentButton = (currentCampaign == null ||\r\n shouldSupportCashbackSettings(currentCampaign, appConfig.get('Permissions'))) && IsPersonalizedOffersEnabled;\r\n\r\n if (showBulkEditCashbackPercentButton) {\r\n toolbarEditor.update({\r\n type: 'button',\r\n id: 'bulk-edit-cashback-percent',\r\n text: i18n.getString('TargetingSettings_Grid_Bulk_Edit_CashbackPercent'),\r\n classes: ['btn-link'],\r\n iconLeftGlyphName: 'ba-Edit',\r\n onClick: () => {\r\n showBulkEditor('CashbackPercent');\r\n },\r\n });\r\n }\r\n } else {\r\n toolbarEditor.update({\r\n type: 'button',\r\n id: 'bulk-edit-bid-multiplier',\r\n text: i18n.getString('TargetingSettings_Grid_Bulk_Edit_Bid_Multiplier'),\r\n classes: ['btn', 'btn-secondary'],\r\n onClick: () => {\r\n showBulkEditor('BidMultiplier');\r\n },\r\n });\r\n }\r\n }\r\n\r\n updateToolbar();\r\n\r\n gridView.on('didUpdate', () => {\r\n updateToolbar();\r\n });\r\n});\r\n","import _ from 'underscore';\r\nimport $ from 'jquery';\r\nimport popup from '@bingads-webui-component-legacy/dialog/popup';\r\nimport DataStore from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport eventDispatcher from '@bingads-webui-component-legacy/event-dispatcher/index';\r\nimport state from '@bingads-webui-component-legacy/state/index';\r\nimport gridFilterSerializer from '@bingads-webui-campaign-legacy/bulk-operation/util/grid-filter-serializer';\r\nimport summaryDataContextManager from '@bingads-webui-static-legacy/summary/SummaryDataContextManager';\r\nimport { showAlert } from './common-alert/index';\r\n\r\nconst i18n = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/feature/targeting-settings');\r\n\r\nexport default (definePlugin) => definePlugin('removeBulkEdit', [\r\n 'config',\r\n 'gridView',\r\n 'toolbar',\r\n 'crossPageSelectAll',\r\n 'filterState',\r\n], (config, gridView, toolbar, crossPageSelectAll, filterState) => {\r\n const menuId = 'bulk-edit-remove';\r\n const toolbarEditor = toolbar.gridToolbarGroup.toolbarWithItem(menuId);\r\n const pluginConfig = _.isUndefined(toolbarEditor.options) ?\r\n _.result(config.plugins, 'removeBulkEdit', {}) :\r\n _.findWhere(toolbarEditor.options.items, { id: menuId });\r\n\r\n let filterService;\r\n\r\n const isForVNext = pluginConfig.isForVNext;\r\n\r\n if (isForVNext) {\r\n filterService = _.result(config, 'filterService', {});\r\n }\r\n function noneSelectedAndAlert(count) {\r\n if (count < 1) {\r\n popup.alert(i18n.getString('Grid_RowSelectionRequired'));\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n function getGridSelectionCount() {\r\n return crossPageSelectAll.isAllSelected ?\r\n crossPageSelectAll.viewModel.totalRowsTotalPageCount() :\r\n gridView.selectedKeys().length;\r\n }\r\n\r\n function pollStatus (taskId, successCb, failedCb) {\r\n DataStore.BulkEditSession.find(taskId, {cacheResponse: false}).then((response) => {\r\n successCb(response);\r\n })\r\n .catch(failedCb);\r\n }\r\n\r\n function processResponse (completeCB, failedCB, progressCB, response) {\r\n if (_.contains(['Completed', 'CompletedWithErrors'], response.Status)) {\r\n completeCB(response);\r\n } else if (_.contains(['Failed', 'Aborted', 'Expired'], response.Status)) {\r\n failedCB(response);\r\n } else { //task is inprogress or pending\r\n progressCB(response);\r\n setTimeout(_.partial(pollStatus, response.Id, _.partial(processResponse, completeCB, failedCB, progressCB), failedCB), 500);\r\n }\r\n return response;\r\n }\r\n\r\n function getDateRange () {\r\n try {\r\n const dateRange = state.get('$daterange');\r\n const startdate = (dateRange.start || dateRange.RangeStartDate).toISOString();\r\n const enddate = (dateRange.end || dateRange.RangeEndDate).toISOString();\r\n\r\n return `startdate=${startdate}&enddate=${enddate}`;\r\n } catch (e) {\r\n return '';\r\n }\r\n }\r\n\r\n function getQueryString (projection) {\r\n const dateRange = getDateRange();\r\n let query = '';\r\n const IdStrings = projection.IdString;\r\n\r\n if (_.isEmpty(projection)) {\r\n return dateRange;\r\n }\r\n\r\n if (projection.filters) {\r\n query = projection.filters.odataV4({ ignoreCase: false });\r\n }\r\n\r\n if (_.size(IdStrings) > 0) { //select some ids will distinguish it when new grid support select cross page\r\n const idStringsFilters = _.map(IdStrings, (obj) => {\r\n if (_.isUndefined(obj.AdGroupId)) {\r\n return `IdString eq 'CampaignId=${obj.CampaignId},TargetGroupDetailId=${obj.TargetGroupDetailId}'`;\r\n } else {\r\n return `IdString eq 'CampaignId=${obj.CampaignId},AdGroupId=${obj.AdGroupId},TargetGroupDetailId=${obj.TargetGroupDetailId}'`;\r\n }\r\n }).join(' or ');\r\n\r\n if (_.isEmpty(query)) {\r\n query = idStringsFilters;\r\n } else {\r\n query = `(${query}) and (${idStringsFilters})`;\r\n }\r\n }\r\n query = $.param({$filter: `${query}`});\r\n\r\n return `${query}&${dateRange}`;\r\n }\r\n\r\n function getParams(projection, batchActions, entity, campaignId, adgroupId) {\r\n return {\r\n BatchAction: batchActions,\r\n Description: crossPageSelectAll.isAllSelected ?\r\n gridFilterSerializer.toDescription(isForVNext ? filterService.getCombinedFilter() : filterState.getFilter() ) : JSON.stringify({ idsCount: getGridSelectionCount() }),\r\n Entity: entity,\r\n Selection: {\r\n QueryString: getQueryString(projection),\r\n CampaignId: campaignId,\r\n AdGroupId: adgroupId,\r\n },\r\n };\r\n }\r\n\r\n function bulkEditChange(options) {\r\n let params = options.params;\r\n\r\n let opt = _.defaults({}, options, {\r\n campaignId: null,\r\n adgroupId: null,\r\n completeCB: _.noop,\r\n failedCB: _.noop,\r\n progressCB: _.noop,\r\n });\r\n\r\n let process = _.partial(processResponse, opt.completeCB, opt.failedCB, opt.progressCB);\r\n\r\n let urlParameters = {$expand: 'BulkEditResults'};\r\n\r\n if (_.isEmpty(params)) {\r\n params = getParams(opt.projection, opt.batchActions, opt.entity, opt.campaignId, opt.adgroupId);\r\n }\r\n\r\n return DataStore.BulkEditSession.create(params, {\r\n urlParameters,\r\n cacheResponse: false,\r\n }).then(process)\r\n .catch(opt.failedCB);\r\n }\r\n\r\n function deleteTargets() {\r\n if (noneSelectedAndAlert(getGridSelectionCount())) {\r\n return;\r\n }\r\n\r\n // when view by ad group and not select all, we need to check if there is any inherit records.\r\n if (pluginConfig.entity.indexOf('AdGroupCriterion') >= 0 && !crossPageSelectAll.isAllSelected) {\r\n const selectedItems = gridView.selectedItems();\r\n\r\n const campaignItems = _.reject(selectedItems, (obj) => obj.LevelOfDetails === 'AdGroup');\r\n\r\n if (campaignItems.length > 0) {\r\n showAlert({\r\n i18n,\r\n title: i18n.getString('BulkEdit_Delete_Invalid_Alert_Title'),\r\n messageDetails: i18n.getString(`BulkEdit_Delete_Warning_${pluginConfig.gridType}`),\r\n });\r\n return;\r\n }\r\n }\r\n\r\n let confirmationMessage = '';\r\n\r\n confirmationMessage = i18n.getString('BulkEdit_Delete_Confirmation');\r\n if (pluginConfig.entity.indexOf('AdGroupCriterion') >= 0 && crossPageSelectAll.isAllSelected) {\r\n confirmationMessage = confirmationMessage.concat('\\n', i18n.getString('BulkEdit_Delete_SelectedAll_MixInheritWarning'));\r\n }\r\n\r\n if (!confirm(confirmationMessage)) { // eslint-disable-line no-alert\r\n return;\r\n }\r\n\r\n // invalidate cache\r\n switch (pluginConfig.entity) {\r\n case 'CampaignCriterion':\r\n case 'NegativeCampaignCriterion':\r\n summaryDataContextManager.emitter.trigger('invalidate', 'CampaignSettingsGrid');\r\n break;\r\n case 'AdGroupCriterion':\r\n case 'NegativeAdGroupCriterion':\r\n summaryDataContextManager.emitter.trigger('invalidate', 'AdGroupSettingsGrid');\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n const batchActions = {\r\n Actions: [{\r\n '@odata.type': '#Model.TextAction',\r\n ActionType: 'Set',\r\n Property: 'Status',\r\n Value: 'Deleted',\r\n }]};\r\n\r\n bulkEditChange({\r\n projection: {\r\n IdString: crossPageSelectAll.isAllSelected ? null : _.map(gridView.selectedItems(), (obj) => {\r\n return {\r\n CampaignId: obj.Campaign ? obj.Campaign.Id : Number(pluginConfig.view.options.campaignId),\r\n AdGroupId: obj.LevelOfDetails === 'AdGroup' ? obj.AdGroup.Id : undefined,\r\n TargetGroupDetailId: obj.Id,\r\n };\r\n }),\r\n // eslint-disable-next-line no-nested-ternary\r\n filters: crossPageSelectAll.isAllSelected ? isForVNext ? filterService.getCombinedFilter() : filterState.getAllFilters() : undefined,\r\n },\r\n batchActions,\r\n entity: pluginConfig.entity,\r\n campaignId: Number(pluginConfig.view.options.campaignId),\r\n adgroupId: Number(pluginConfig.view.options.adgroupId),\r\n completeCB: (response) => {\r\n if (response.SuccessRowCount === response.TotalRowCount) {\r\n window.App.views.alertCenter.toastConfirmation(i18n.getString('BulkEdit_Delete_Success', {\r\n success: response.SuccessRowCount,\r\n total: response.TotalRowCount,\r\n }));\r\n } else {\r\n window.App.views.alertCenter.toastWarning(i18n.getString('BulkEdit_Delete_Partial_Success', {\r\n success: response.SuccessRowCount,\r\n total: response.TotalRowCount,\r\n }));\r\n }\r\n gridView.deselectAll();\r\n gridView.refresh(true);\r\n eventDispatcher.trigger('targeting-settings:bulkRemoved', gridView);\r\n },\r\n failedCB: () => {\r\n gridView.deselectAll();\r\n window.App.views.alertCenter.toastError(i18n.getString('BulkEdit_Delete_Failed'));\r\n },\r\n }).withUiBlock(pluginConfig.view.$el);\r\n }\r\n\r\n function updateToolbar() {\r\n if (isForVNext) {\r\n toolbarEditor.update({\r\n type: 'button',\r\n id: menuId,\r\n text: i18n.getString('Button_Delete'),\r\n iconLeftGlyphName: 'ba-Delete',\r\n classes: ['btn-link'],\r\n onClick: () => {\r\n deleteTargets();\r\n },\r\n });\r\n } else {\r\n toolbarEditor.update({\r\n type: 'button',\r\n id: menuId,\r\n text: i18n.getString('TargetingSettings_Remove'),\r\n classes: ['btn', 'btn-secondary'],\r\n onClick: () => {\r\n deleteTargets();\r\n },\r\n });\r\n }\r\n }\r\n\r\n updateToolbar();\r\n});\r\n","import Backbone from 'backbone';\r\nimport template from './common-alert-template.pug';\r\n\r\nexport default class View extends Backbone.View {\r\n initialize(options = {}) {\r\n this.options = options;\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click input.btn-default': '_ok',\r\n };\r\n }\r\n\r\n _ok() {\r\n this.trigger('ok');\r\n }\r\n\r\n render({\r\n i18n,\r\n messageDetails,\r\n learnMoreId = '',\r\n }) {\r\n this.$el.html(template({\r\n i18n,\r\n messageDetails,\r\n learnMoreId,\r\n }));\r\n\r\n return this;\r\n }\r\n}\r\n","import { decorate } from '@bingads-webui/dialog';\r\nimport commonAlert from './common-alert';\r\n\r\nconst CommonAlertDialog = decorate(commonAlert);\r\n\r\nexport function showAlert ({\r\n i18n,\r\n title = '',\r\n messageDetails,\r\n learnMoreId = '',\r\n}) {\r\n let alertView = new CommonAlertDialog({\r\n dialogOptions: {\r\n title,\r\n maxWidth: 658,\r\n },\r\n i18n,\r\n messageDetails,\r\n learnMoreId,\r\n }).render();\r\n\r\n alertView.center();\r\n\r\n alertView.bind('ok', () => {\r\n alertView.destroy();\r\n alertView = null;\r\n });\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { CcJsDataContextProvider } from '@bingads-webui-cc-react/js-data-rest';\r\nimport { DomChildrenPropTypes } from '@bingads-webui-campaign-react/account-reparenting-props';\r\nimport { appendJsDataErrorSummary, handleAjaxAuthFailure } from '@bingads-webui-campaign-react/account-reparenting-errors';\r\n\r\nexport const ARWJsDataContextProvider = ({\r\n children,\r\n serverContext: {\r\n CurrentUser,\r\n CurrentCustomer,\r\n ServicesEndpoints,\r\n },\r\n}) => (\r\n \r\n {children}\r\n \r\n);\r\n\r\nARWJsDataContextProvider.propTypes = {\r\n children: DomChildrenPropTypes.isRequired,\r\n serverContext: PropTypes.shape({\r\n CurrentCustomer: PropTypes.shape({\r\n Id: PropTypes.number.isRequired,\r\n }).isRequired,\r\n CurrentUser: PropTypes.shape({\r\n Id: PropTypes.number.isRequired,\r\n }).isRequired,\r\n ServicesEndpoints: PropTypes.shape({\r\n ClientCenterUIAPI: PropTypes.string.isRequired,\r\n }).isRequired,\r\n }).isRequired,\r\n};\r\n","import { useMemo } from 'react';\r\nimport { useARWContextValue } from '@bingads-webui-campaign-react/account-reparenting-context-provider';\r\nimport { useJsDataContext } from '@bingads-webui-cc-react/js-data-rest';\r\n\r\nexport const useAction = (Action) => {\r\n const serverContext = useARWContextValue();\r\n const jsData = useJsDataContext();\r\n\r\n const action = useMemo(() => new Action({\r\n reparentingId: serverContext.ReparentingId,\r\n sourceCustomerId: serverContext.SourceCustomer.Id,\r\n targetCustomerId: serverContext.TargetCustomer.Id,\r\n jsData,\r\n }), [Action, serverContext, jsData]);\r\n\r\n return action;\r\n};\r\n","import { useAction } from './use-data-actions';\r\n\r\nclass AccountActions {\r\n constructor({ jsData }) {\r\n this.jsData = jsData;\r\n }\r\n\r\n fetch = id => this.jsData.Account.find(id);\r\n\r\n fetchAll = ids => this.jsData.Account.findAll({ accountIds: ids });\r\n}\r\n\r\nexport const useAccountActions = () => useAction(AccountActions);\r\n","import { useAction } from './use-data-actions';\r\n\r\nclass CustomerActions {\r\n constructor({ jsData }) {\r\n this.jsData = jsData;\r\n }\r\n\r\n fetch = id => this.jsData.Customer.find(id);\r\n updateServiceLevel = ({ id, serviceLevel }) =>\r\n this.jsData.ServiceLevel.update(id, { serviceLevel }, { cacheResponse: false });\r\n updatePilotFeatures = ({ id, pilotFeatures }) =>\r\n this.jsData.PilotFeatures.update(id, { pilotFeatures }, { cacheResponse: false });\r\n}\r\n\r\nexport const useCustomerActions = () => useAction(CustomerActions);\r\n","import { usePromise } from '@bingads-webui-react/async-utils';\r\n\r\nimport { useAction } from './use-data-actions';\r\n\r\nclass PaymentInstrumentActions {\r\n constructor({ jsData }) {\r\n this.jsData = jsData;\r\n }\r\n\r\n fetch = billToCustomerId =>\r\n this.jsData.PaymentInstrument.findAll({ customerId: billToCustomerId });\r\n\r\n fetchWithId = piId =>\r\n this.jsData.PaymentInstrument.find(piId);\r\n}\r\n\r\nexport const usePaymentInstrumentActions = () => useAction(PaymentInstrumentActions);\r\n\r\nexport const usePaymentInstruments = (billToCustomerId) => {\r\n const paymentInstrumentActions = usePaymentInstrumentActions();\r\n\r\n const { data: paymentInstruments = [] } = usePromise(\r\n () => paymentInstrumentActions.fetch(billToCustomerId),\r\n [paymentInstrumentActions, billToCustomerId]\r\n );\r\n\r\n return paymentInstruments;\r\n};\r\n","import { useAction } from './use-data-actions';\r\n\r\nclass BillingActions {\r\n constructor({ jsData }) {\r\n this.jsData = jsData;\r\n }\r\n\r\n fetchBulkTaxEstimates = accountIds =>\r\n this.jsData.BulkEstimateTaxes.findAll({ accountIds });\r\n}\r\n\r\nexport const useBillingActions = () => useAction(BillingActions);\r\n","import { useAction } from './use-data-actions';\r\n\r\nclass ReparentingJobActions {\r\n constructor({\r\n reparentingId,\r\n sourceCustomerId,\r\n targetCustomerId,\r\n jsData,\r\n }) {\r\n this.reparentingId = reparentingId;\r\n this.sourceCustomerId = sourceCustomerId;\r\n this.targetCustomerId = targetCustomerId;\r\n this.jsData = jsData;\r\n }\r\n\r\n add = ({ accountIds }) =>\r\n this.jsData.AccountReparentingJobAdd.create({ accountIds });\r\n\r\n update = ({\r\n updateType,\r\n lifeCycleStatus,\r\n targetCustomerId,\r\n accountIds,\r\n accountLinkingSettings,\r\n accountBillingSettings,\r\n defaultBillingSetting,\r\n }) =>\r\n this.jsData.AccountReparentingJobUpdate.update(this.reparentingId, {\r\n updateType,\r\n lifeCycleStatus,\r\n accountIds,\r\n sourceCid: this.sourceCustomerId,\r\n targetCid: targetCustomerId || this.targetCustomerId,\r\n accountLinkingSettings,\r\n accountBillingSettings,\r\n defaultBillingSetting,\r\n });\r\n\r\n load = () =>\r\n this.jsData.AccountReparentingJobLoad.find(this.reparentingId, {\r\n params: {\r\n sourceCid: this.sourceCustomerId,\r\n targetCid: this.targetCustomerId,\r\n },\r\n });\r\n\r\n loadAccounts = ids => this.jsData.AccountReparentingLoadAccounts.findAll({ accountIds: ids });\r\n\r\n submit = () =>\r\n this.jsData.AccountReparentingJobSubmit.create({\r\n id: this.reparentingId,\r\n sourceCid: this.sourceCustomerId,\r\n });\r\n}\r\n\r\nexport const useReparentingJobActions = () => useAction(ReparentingJobActions);\r\n","import { useAction } from './use-data-actions';\r\n\r\nclass ReparentingValidateActions {\r\n constructor({ reparentingId, sourceCustomerId, jsData }) {\r\n this.reparentingId = reparentingId;\r\n this.sourceCustomerId = sourceCustomerId;\r\n this.jsData = jsData;\r\n }\r\n\r\n accountIds = ({ accountIds }) =>\r\n this.jsData.AccountReparentingValidateAccounts.create({ accountIds });\r\n\r\n targetCustomer = ({ targetCustomerNumber }) =>\r\n this.jsData.AccountReparentingValidateTargetCustomer.create({\r\n targetCustomerNumber,\r\n id: this.reparentingId,\r\n sourceCid: this.sourceCustomerId,\r\n }, { cacheResponse: false });\r\n\r\n linkSettings = ({ accountLinkingSettings }) =>\r\n this.jsData.AccountReparentingValidateLinkInfo.create({\r\n id: this.reparentingId,\r\n sourceCid: this.sourceCustomerId,\r\n accountLinkingSettings,\r\n }, { cacheResponse: false });\r\n\r\n billingSettings = ({ accountBillingSettings }) =>\r\n this.jsData.AccountReparentingValidateBillingInfo.create({\r\n id: this.reparentingId,\r\n sourceCid: this.sourceCustomerId,\r\n accountBillingSettings,\r\n }, { cacheResponse: false });\r\n\r\n fullValidate = () =>\r\n this.jsData.AccountReparentingFullValidate.create({\r\n id: this.reparentingId,\r\n sourceCid: this.sourceCustomerId,\r\n });\r\n}\r\n\r\nexport const useReparentingValidateActions = () => useAction(ReparentingValidateActions);\r\n","import { edmCampaign } from '@bingads-webui/edm-campaign';\r\nimport { odata } from '@bingads-webui/http-util';\r\nimport { useAction } from './use-data-actions';\r\n\r\nclass UETTagActions {\r\n constructor({\r\n reparentingId,\r\n sourceCustomerId,\r\n }) {\r\n this.reparentingId = reparentingId;\r\n const edmCustomer = edmCampaign.Customers.$withKey(sourceCustomerId);\r\n this.userSettings = edmCustomer.ReparentingUserSettings.$withKey(this.reparentingId);\r\n }\r\n\r\n load = () => this.userSettings.get().toPromise();\r\n\r\n submit = UETTags => this.userSettings['Default.PostReparentingUserSetting'].$makeCall({\r\n payload: { TagSettings: UETTags },\r\n }).toPromise();\r\n\r\n download = () =>\r\n odata.get(this.userSettings['Default.DownloadSummary'].odataURL, {\r\n xhrFields: {\r\n responseType: 'blob',\r\n },\r\n dataType: 'binary',\r\n oDataToken: window.campaignODataConfigs ? window.campaignODataConfigs.Token : '',\r\n });\r\n}\r\n\r\nexport const useUETTagActions = () => useAction(UETTagActions);\r\n","import React, { useContext } from 'react';\r\n\r\nexport const ARWServerContext = React.createContext({\r\n Value: {},\r\n Actions: {},\r\n Permissions: {},\r\n});\r\n\r\nexport const useARWContextValue = () => useContext(ARWServerContext).Value;\r\nexport const useARWContextActions = () => useContext(ARWServerContext).Actions;\r\nexport const useARWContextPermissions = () => useContext(ARWServerContext).Permissions;\r\n","import React from 'react';\r\nimport _ from 'underscore';\r\nimport { Constants } from '@bingads-webui-clientcenter/entity-utils';\r\nimport { ServerContextProviderPropTypes } from '@bingads-webui-campaign-react/account-reparenting-props';\r\nimport { areUiInsertionOrdersEqual, convertAccountModelToServerContext, toClientSideBillingSetting } from '@bingads-webui-campaign-react/account-reparenting-utils';\r\nimport { ARWServerContext } from './arw-server-context';\r\n\r\nexport class ARWContextProvider extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n const {\r\n serverContext: {\r\n Accounts,\r\n AccountIds,\r\n CurrentCustomer,\r\n SourceCustomerId,\r\n },\r\n } = props;\r\n const sourceCustomerId = SourceCustomerId && _.isNumber(SourceCustomerId) ?\r\n SourceCustomerId :\r\n CurrentCustomer.Id;\r\n\r\n // TargetCustomer and SourceCustomer are loaded during JobLoad Call\r\n this.state = {\r\n TargetCustomer: {},\r\n SourceCustomer: { Id: sourceCustomerId },\r\n NewBillTo: {\r\n Customer: null,\r\n PaymentOptionId: null,\r\n PaymentInstrumentId: null,\r\n InsertionOrder: null,\r\n PrepayConfig: null,\r\n },\r\n Timestamp: null,\r\n AccountIds,\r\n Accounts,\r\n MandatoryNewBillToAccountIds: [],\r\n AccountBillToCustomersMap: {},\r\n IOPreApprovalRequired: false,\r\n UETTags: null,\r\n ShowSummaryPaneLinkSettings: false,\r\n ShowSummaryPaneBillingSetting: false,\r\n };\r\n this.contextActions = {\r\n UpdateJobTimestamp: this.updateJobTimestamp,\r\n DeleteAccount: this.deleteAccount,\r\n UpdateTargetCustomer: this.updateTargetCustomer,\r\n UpdateSourceCustomer: this.updateSourceCustomer,\r\n UpdateSelectedAccountIds: this.updateSelectedAccountIds,\r\n UpdateSelectedAccounts: this.updateSelectedAccounts,\r\n UpdateJobLoadAccounts: this.updateJobLoadAccounts,\r\n UpdateAccountLinks: this.updateAccountLinks,\r\n UpdateAccountBilling: this.updateAccountBilling,\r\n UpdateAccountsBillingSettings: this.updateAccountsBillingSettings,\r\n SetIOPreApprovalRequired: this.setIOPreApprovalRequired,\r\n UpdateNewBillToSettings: this.updateNewBillToSettings,\r\n UpdateAccountBillToCustomersMap: this.updateAccountBillToCustomersMap,\r\n UpdateUETTags: this.updateUETTags,\r\n SetShowSummaryPaneLinkSettings: this.setShowSummaryPaneLinkSettings,\r\n SetShowSummaryPaneBillingSetting: this.setShowSummaryPaneBillingSetting,\r\n };\r\n }\r\n\r\n setShowSummaryPaneLinkSettings = (showSummaryPaneLinkSettings) => {\r\n this.setState({ ShowSummaryPaneLinkSettings: showSummaryPaneLinkSettings });\r\n }\r\n\r\n setShowSummaryPaneBillingSetting = (showSummaryPaneBillingSetting) => {\r\n this.setState({ ShowSummaryPaneBillingSetting: showSummaryPaneBillingSetting });\r\n }\r\n\r\n setIOPreApprovalRequired = ({ ioPreApprovalRequired }) => {\r\n this.setState({ IOPreApprovalRequired: ioPreApprovalRequired });\r\n }\r\n\r\n updateAccountBillToCustomersMap = (accountBillToCustomersMap) => {\r\n this.setState({ AccountBillToCustomersMap: accountBillToCustomersMap });\r\n };\r\n\r\n updateAccountLinks = (accountLinks, mandatoryNewBillToAccountIds) => {\r\n const updatedAccounts = this.state.Accounts;\r\n\r\n // set unlink flags for broken agency links\r\n _.each(accountLinks, (accLink) => {\r\n const accountIndex = _.findIndex(updatedAccounts, acc => acc.Id === accLink.Id);\r\n const updatedAccount = updatedAccounts[accountIndex];\r\n const linkIndex = _.findIndex(\r\n updatedAccount.LinkedManagers,\r\n manager => manager.Id === accLink.LinkedManager.Id\r\n );\r\n updatedAccount.LinkedManagers[linkIndex].Unlink = accLink.LinkedManager.Unlink;\r\n });\r\n\r\n // break bill-to links based on CCMT response\r\n _.each(updatedAccounts, (acc) => {\r\n if (_.contains(mandatoryNewBillToAccountIds, acc.Id)) {\r\n acc.BillToManager.BillTo = null;\r\n }\r\n });\r\n\r\n this.setState({\r\n Accounts: updatedAccounts.slice(),\r\n MandatoryNewBillToAccountIds: mandatoryNewBillToAccountIds || [],\r\n });\r\n }\r\n\r\n updateAccountBilling = (accountsBilling) => {\r\n const updatedAccounts = this.state.Accounts;\r\n _.each(accountsBilling, (accBilling) => {\r\n const accountIndex = _.findIndex(updatedAccounts, acc => acc.Id === accBilling.Id);\r\n const updatedAccount = updatedAccounts[accountIndex];\r\n updatedAccount.BillToManager.BillTo = accBilling.BillToManager.BillTo;\r\n });\r\n\r\n this.setState({ Accounts: updatedAccounts.slice() });\r\n }\r\n\r\n updateNewBillToSettings = ({\r\n billToCustomer,\r\n paymentOptionId,\r\n paymentInstrumentId,\r\n insertionOrder,\r\n prepayConfig,\r\n }) => {\r\n this.setState({\r\n NewBillTo: {\r\n Customer: billToCustomer,\r\n PaymentOptionId: paymentOptionId,\r\n PaymentInstrumentId: paymentInstrumentId,\r\n InsertionOrder: insertionOrder,\r\n PrepayConfig: prepayConfig,\r\n },\r\n });\r\n }\r\n\r\n updateAccountsBillingSettings = ({\r\n updatedAccountsBillingSettings,\r\n }) => {\r\n const toUpdateIds = _.pluck(updatedAccountsBillingSettings, 'accountId');\r\n\r\n const updatedAccounts = _.map(\r\n this.state.Accounts,\r\n (account) => {\r\n const updatedSettingsIndex = _.findIndex(toUpdateIds, aid => aid === account.Id);\r\n\r\n if (updatedSettingsIndex < 0) {\r\n return account;\r\n }\r\n\r\n const {\r\n billToCustomer,\r\n paymentOptionId,\r\n paymentInstrumentId,\r\n insertionOrder,\r\n prepayConfig,\r\n } = updatedAccountsBillingSettings[updatedSettingsIndex];\r\n\r\n const isInvoicePaymentOption = paymentOptionId === Constants.PaymentOptionId.Invoice;\r\n\r\n if (isInvoicePaymentOption) {\r\n if (account.BillToChange && account.BillToChange.InsertionOrder && insertionOrder) {\r\n const contextInsertionOrder = account.BillToChange.InsertionOrder;\r\n\r\n const shouldResetStatus =\r\n account.BillToChange.PaymentInstrumentId !== paymentInstrumentId ||\r\n !areUiInsertionOrdersEqual(contextInsertionOrder, insertionOrder);\r\n\r\n if (shouldResetStatus) {\r\n // We had one created and was submitted again for review.\r\n if (contextInsertionOrder.ioStatus !== null) {\r\n insertionOrder.ioStatus =\r\n Constants.InsertionOrderStatus.PendingBillToPartyChangeAndUserReview;\r\n } else {\r\n insertionOrder.ioStatus = null;\r\n }\r\n } else {\r\n insertionOrder.ioStatus = contextInsertionOrder.ioStatus;\r\n }\r\n }\r\n }\r\n\r\n return {\r\n ...account,\r\n BillToCustomer: billToCustomer,\r\n BillToChange: {\r\n PaymentOptionId: paymentOptionId,\r\n PaymentInstrumentId: paymentInstrumentId,\r\n InsertionOrder: insertionOrder,\r\n PrepayConfig: prepayConfig,\r\n },\r\n };\r\n }\r\n );\r\n\r\n this.setState({\r\n Accounts: updatedAccounts,\r\n });\r\n };\r\n\r\n // Update Accounts information from JobLoad Response\r\n updateJobLoadAccounts = (accounts) => {\r\n let showSummaryPaneLinkSettings = false;\r\n let showSummaryPaneBillingSetting = false;\r\n const updatedAccounts = _.map(this.state.Accounts, (acc) => {\r\n const updatedAccount = acc;\r\n const jobAccount = _.find(accounts, jobAcc => jobAcc.AccountId === updatedAccount.Id);\r\n\r\n _.each(jobAccount.LinkSettings, (linkSetting) => {\r\n const linkIndex = _.findIndex(\r\n updatedAccount.LinkedManagers,\r\n linkedManager => linkedManager.Id === linkSetting.AgencyCustomerId\r\n );\r\n // ignore the links which might have been deleted since previous visit\r\n if (linkIndex !== -1) {\r\n updatedAccount.LinkedManagers[linkIndex].Unlink = !linkSetting.KeepLink;\r\n }\r\n showSummaryPaneLinkSettings = true; // set to true even if there is one setting available\r\n });\r\n\r\n if (!jobAccount.BillingSetting) {\r\n updatedAccount.BillToManager.BillTo = null;\r\n } else if (jobAccount.BillingSetting && !jobAccount.BillingSetting.BillToChangeSetting) {\r\n updatedAccount.BillToManager.BillTo = true;\r\n } else if (jobAccount.BillingSetting && jobAccount.BillingSetting.BillToChangeSetting) {\r\n updatedAccount.BillToManager.BillTo = false;\r\n const {\r\n billToCustomer,\r\n paymentOptionId,\r\n paymentInstrumentId,\r\n insertionOrder,\r\n prepayConfig,\r\n } = toClientSideBillingSetting(jobAccount.BillingSetting);\r\n\r\n updatedAccount.BillToCustomer = billToCustomer;\r\n updatedAccount.BillToChange = {\r\n PaymentOptionId: paymentOptionId,\r\n PaymentInstrumentId: paymentInstrumentId,\r\n InsertionOrder: insertionOrder,\r\n PrepayConfig: prepayConfig,\r\n };\r\n }\r\n\r\n if (jobAccount.BillingSetting) {\r\n showSummaryPaneBillingSetting = true; // set to true even if there is one setting available\r\n }\r\n\r\n return updatedAccount;\r\n });\r\n\r\n this.setState({\r\n Accounts: updatedAccounts,\r\n ShowSummaryPaneBillingSetting: showSummaryPaneBillingSetting,\r\n ShowSummaryPaneLinkSettings: showSummaryPaneLinkSettings,\r\n });\r\n }\r\n\r\n updateTargetCustomer = (customer) => {\r\n this.setState({ TargetCustomer: customer });\r\n }\r\n\r\n updateJobTimestamp = (timestamp) => {\r\n this.setState({ Timestamp: timestamp });\r\n }\r\n\r\n updateSourceCustomer = (customer) => {\r\n this.setState({ SourceCustomer: customer });\r\n }\r\n\r\n updateSelectedAccountIds = (accountIds) => {\r\n this.setState({ AccountIds: accountIds });\r\n }\r\n\r\n updateSelectedAccounts = (accounts) => {\r\n const updatedAccounts = _.map(accounts, acc => convertAccountModelToServerContext(acc));\r\n this.setState({ Accounts: updatedAccounts });\r\n }\r\n\r\n updateUETTags = (uetTags) => {\r\n this.setState({ UETTags: uetTags || [] });\r\n }\r\n\r\n deleteAccount = (accountId, newUETTags) => {\r\n this.setState(prevState => ({\r\n Accounts: _.reject(prevState.Accounts, acc => acc.Id === accountId),\r\n }));\r\n\r\n // update uet tags\r\n if (this.props.serverContext.Permissions.IsAccountReparentingUETEnabled &&\r\n this.state.UETTags) {\r\n this.setState({\r\n UETTags: newUETTags,\r\n });\r\n }\r\n }\r\n\r\n render = () => {\r\n const {\r\n Accounts,\r\n AccountIds,\r\n AccountBillToCustomersMap,\r\n MandatoryNewBillToAccountIds,\r\n TargetCustomer,\r\n SourceCustomer,\r\n IOPreApprovalRequired,\r\n ShowSummaryPaneBillingSetting,\r\n ShowSummaryPaneLinkSettings,\r\n NewBillTo,\r\n Timestamp,\r\n UETTags,\r\n } = this.state;\r\n const {\r\n CurrentUser,\r\n CurrentCustomer,\r\n ReparentingId,\r\n ServicesEndpoints,\r\n Permissions,\r\n } = this.props.serverContext;\r\n return (\r\n \r\n {this.props.children}\r\n \r\n );\r\n }\r\n}\r\n\r\nARWContextProvider.propTypes = ServerContextProviderPropTypes;\r\n","import _ from 'underscore';\r\nimport { useARWContextValue } from './arw-server-context';\r\n\r\n/*\r\n * return true if existing BillToCustomer is either Unlinked or chooses\r\n * to have new BillTo PI after takeover billing step\r\n */\r\nexport const useAccountsWithNewBillTo = () => {\r\n const accounts = useARWContextValue().Accounts;\r\n return _.filter(accounts, acc => !acc.BillToManager.BillTo);\r\n};\r\n\r\n/*\r\n * return true if existing link between existing BillToCustomer\r\n * and Account is retained after review linking step,\r\n * can be true/ false based on decisions previously made on this step\r\n */\r\nexport const useAccountsForBillingSetup = () => {\r\n const { Accounts, MandatoryNewBillToAccountIds } = useARWContextValue();\r\n return _.filter(Accounts, acc => !_.contains(MandatoryNewBillToAccountIds, acc.Id));\r\n};\r\n\r\nconst findIntersection = (list1, list2) => {\r\n if (list1.length === 0) return list2;\r\n return _.filter(list1, item1 =>\r\n _.any(list2, item2 => _.isEqual(item1, item2)));\r\n};\r\n\r\n/*\r\n * return intersection of all eligible Bill To Customers, pass null for all accounts\r\n */\r\nexport const useEligibleBillToCustomers = (accountId = null) => {\r\n const billToCustomersMap = useARWContextValue().AccountBillToCustomersMap;\r\n const allAccountIds = accountId ? [accountId] : _.keys(billToCustomersMap);\r\n return _.reduce(\r\n allAccountIds,\r\n (billToCustomersList, accId) =>\r\n findIntersection(billToCustomersList, billToCustomersMap[accId])\r\n , []\r\n );\r\n};\r\n\r\n/*\r\n * Returns the payment option configured for the accounts with new bill to.\r\n */\r\nexport const usePaymentOptionId = () => {\r\n const contextAccounts = useAccountsWithNewBillTo();\r\n const { PaymentOptionId } = useARWContextValue().NewBillTo;\r\n\r\n const firstAccountWithBillToChange = _.find(\r\n contextAccounts,\r\n account => account.BillToChange && account.BillToChange.PaymentOptionId\r\n );\r\n\r\n return firstAccountWithBillToChange ?\r\n firstAccountWithBillToChange.BillToChange.PaymentOptionId :\r\n PaymentOptionId;\r\n};\r\n","export const defaultSchema = {\r\n scenario: [{\r\n name: 'default',\r\n value: 'Account Reparenting Scenario',\r\n activity: [{\r\n name: 'logger',\r\n value: 'Account Reparenting Logger for default scenario',\r\n }],\r\n }],\r\n};\r\n","import _ from 'underscore';\r\nimport { INSTRUMENTATION_SYSTEM_NAME, INSTRUMENTATION_SUB_SYSTEM } from '@bingads-webui-campaign-react/account-reparenting-utils';\r\nimport { getInstrumentation as getInstrumentationInstance } from '@bingads-webui-campaign/instrumentation-setup';\r\n\r\nimport { defaultSchema } from './schemas';\r\n\r\nexport const getInstrumentation = ({ serverContext }) => {\r\n const applicationName = {\r\n systemName: INSTRUMENTATION_SYSTEM_NAME,\r\n subSystemName: INSTRUMENTATION_SUB_SYSTEM,\r\n };\r\n\r\n const userContext = _.pick(serverContext, 'CurrentUser', 'CurrentCustomer');\r\n\r\n return getInstrumentationInstance({\r\n pageTrackingId: serverContext.PageTrackingId,\r\n errorMappers: {},\r\n userContext,\r\n serverContext,\r\n applicationName,\r\n isInDevelopmentMode: true,\r\n });\r\n};\r\n\r\nexport const getInstrumentationService = ({ instrumentation }) => {\r\n instrumentation.addScenario(defaultSchema);\r\n const defaultScenario = instrumentation.default.create();\r\n const logger = defaultScenario.logger.create();\r\n\r\n return {\r\n instrumentation,\r\n logger,\r\n };\r\n};\r\n","import _ from 'underscore';\r\nimport React from 'react';\r\nimport { DomChildrenPropTypes, InstumentationServiceContextPropTypes } from '@bingads-webui-campaign-react/account-reparenting-props';\r\n\r\nexport const InstrumentationContext = React.createContext({\r\n logger: _.noop,\r\n instrumentation: _.noop,\r\n});\r\n\r\nexport const InstrumentationContextProvider = props => (\r\n \r\n {props.children}\r\n \r\n);\r\n\r\nInstrumentationContextProvider.propTypes = {\r\n context: InstumentationServiceContextPropTypes.isRequired,\r\n children: DomChildrenPropTypes.isRequired,\r\n};\r\n","import React, { useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport classNames from 'classnames';\r\n\r\nimport { Button, NavItem } from '@bingads-webui-react/primitive';\r\nimport { SearchBox } from '@bingads-webui-react/search-box';\r\nimport { withI18nConsumer } from '@bingads-webui-react/i18n-context';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { FocusLock } from '@bingads-webui-react/focus-lock';\r\n\r\nimport { CommonLocStrings } from '@bingads-webui-campaign-react/account-reparenting-localization';\r\nimport { entityPopoverClassesProps, getEntityPopoverStyles } from '@bingads-webui-campaign-react/account-reparenting-styles';\r\nimport { I18nPropTypes } from '@bingads-webui-campaign-react/account-reparenting-props';\r\n\r\nconst ListItem = ({\r\n Name,\r\n Url,\r\n}) => (\r\n Url ?\r\n \r\n {Name}\r\n :\r\n {Name}\r\n);\r\n\r\nListItem.propTypes = {\r\n Name: PropTypes.string.isRequired,\r\n Url: PropTypes.string,\r\n};\r\n\r\nListItem.defaultProps = {\r\n Url: '',\r\n};\r\n\r\nconst EntityPopover = ({\r\n i18n,\r\n classes,\r\n popoverId,\r\n entities,\r\n matchSearch,\r\n isShowing,\r\n onCancelClick,\r\n title,\r\n searchboxPlaceholder,\r\n}) => {\r\n const [searchText, setSearchText] = useState('');\r\n const entityList = _.filter(\r\n entities,\r\n entity => matchSearch(entity, searchText.toLowerCase().trim())\r\n );\r\n\r\n const className = classNames(\r\n classes.entityPopover,\r\n isShowing ? 'open' : ''\r\n );\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n {title &&

{i18n.getString(title)}

}\r\n \r\n {\r\n _.map(entityList, entity => (\r\n
\r\n \r\n {\r\n _.map(entity.Children, child => (\r\n
\r\n \r\n
\r\n ))\r\n }\r\n
\r\n ))\r\n }\r\n \r\n
\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nEntityPopover.propTypes = {\r\n classes: entityPopoverClassesProps.isRequired,\r\n i18n: I18nPropTypes.isRequired,\r\n popoverId: PropTypes.string.isRequired,\r\n isShowing: PropTypes.bool.isRequired,\r\n onCancelClick: PropTypes.func.isRequired,\r\n matchSearch: PropTypes.func.isRequired,\r\n entities: PropTypes.arrayOf(PropTypes.shape({\r\n Name: PropTypes.string.isRequired,\r\n Id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\r\n Url: PropTypes.string,\r\n Children: PropTypes.arrayOf(PropTypes.shape({\r\n Name: PropTypes.string.isRequired,\r\n Id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\r\n Url: PropTypes.string,\r\n })),\r\n })).isRequired,\r\n searchboxPlaceholder: PropTypes.string,\r\n title: PropTypes.string,\r\n};\r\n\r\nEntityPopover.defaultProps = {\r\n searchboxPlaceholder: '',\r\n title: '',\r\n};\r\n\r\nexport const ARWEntityPopover = withI18nConsumer(withDefaultStyles(\r\n EntityPopover,\r\n getEntityPopoverStyles\r\n));\r\n","import React, { useContext, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Button } from '@bingads-webui-react/primitive';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { CommonLocStrings } from '@bingads-webui-campaign-react/account-reparenting-localization';\r\n\r\nexport function ARWStepFooter(props) {\r\n const {\r\n saveAndProceed,\r\n onPreviousClick,\r\n onNextClick,\r\n onSubmitClick,\r\n onCancelClick,\r\n nextButtonDisabled,\r\n } = props;\r\n const i18n = useContext(I18nContext);\r\n\r\n const onNextButtonClick = useCallback(() => {\r\n if (saveAndProceed) {\r\n saveAndProceed(onNextClick);\r\n } else {\r\n onNextClick();\r\n }\r\n }, [onNextClick, saveAndProceed]);\r\n\r\n const onSaveAndExit = useCallback(() => {\r\n saveAndProceed(onCancelClick);\r\n }, [onCancelClick, saveAndProceed]);\r\n\r\n return (\r\n
\r\n { onPreviousClick &&\r\n \r\n }\r\n { onNextClick && (\r\n \r\n )}\r\n { onSubmitClick && (\r\n \r\n )}\r\n \r\n { saveAndProceed && (\r\n \r\n )}\r\n
\r\n );\r\n}\r\n\r\nARWStepFooter.propTypes = {\r\n saveAndProceed: PropTypes.func,\r\n onPreviousClick: PropTypes.func,\r\n onNextClick: PropTypes.func,\r\n onSubmitClick: PropTypes.func,\r\n onCancelClick: PropTypes.func,\r\n nextButtonDisabled: PropTypes.bool,\r\n};\r\n\r\nARWStepFooter.defaultProps = {\r\n saveAndProceed: null,\r\n onPreviousClick: null,\r\n onNextClick: null,\r\n onSubmitClick: null,\r\n onCancelClick: null,\r\n nextButtonDisabled: true,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\n\r\nimport { ARWStepFooter } from './arw-step-footer';\r\n\r\n/**\r\n * Base layout for ARW wizard steps. Includes UIBlocker, header and footer.\r\n * @param {*} props - See propTypes definition.\r\n * @returns {ReactNode} - Base layout component.\r\n */\r\nexport function ARWStepBaseLayout(props) {\r\n const {\r\n className,\r\n children,\r\n saveAndProceed,\r\n onCancelClick,\r\n onNextClick,\r\n onSubmitClick,\r\n onPreviousClick,\r\n nextButtonDisabled,\r\n } = props;\r\n\r\n return (\r\n \r\n
\r\n {children}\r\n
\r\n\r\n \r\n
\r\n );\r\n}\r\n\r\nARWStepBaseLayout.propTypes = {\r\n children: PropTypes.oneOfType([\r\n PropTypes.node,\r\n PropTypes.arrayOf(PropTypes.node),\r\n ]),\r\n className: PropTypes.string,\r\n saveAndProceed: PropTypes.func,\r\n onPreviousClick: PropTypes.func,\r\n onSubmitClick: PropTypes.func,\r\n onNextClick: PropTypes.func,\r\n onCancelClick: PropTypes.func,\r\n nextButtonDisabled: PropTypes.bool,\r\n};\r\n\r\nARWStepBaseLayout.defaultProps = {\r\n children: null,\r\n className: null,\r\n saveAndProceed: null,\r\n onPreviousClick: null,\r\n onSubmitClick: null,\r\n onCancelClick: null,\r\n onNextClick: null,\r\n nextButtonDisabled: true,\r\n};\r\n","import React, { useCallback } from 'react';\r\nimport classNames from 'classnames';\r\nimport _ from 'underscore';\r\nimport $ from 'jquery';\r\n\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { withUiBlock } from '@bingads-webui/uiblocker';\r\n\r\nimport { useARWContextValue, useARWContextActions, usePaymentOptionId, useARWContextPermissions } from '@bingads-webui-campaign-react/account-reparenting-context-provider';\r\nimport { summaryPaneClassesProps, getSummaryPaneStyles } from '@bingads-webui-campaign-react/account-reparenting-styles';\r\nimport { useReparentingJobActions, useUETTagActions } from '@bingads-webui-campaign-react/account-reparenting-actions';\r\nimport { JobUpdateTypes } from '@bingads-webui-campaign-react/account-reparenting-utils';\r\nimport { TransferRequestSummary } from '@bingads-webui-campaign-react/transfer-request-summary';\r\n\r\nconst SummaryPane = ({ classes }) => {\r\n const serverContext = useARWContextValue();\r\n const contextActions = useARWContextActions();\r\n const jobActions = useReparentingJobActions();\r\n const paymentOptionId = usePaymentOptionId();\r\n const uetActions = useUETTagActions();\r\n const {\r\n Accounts,\r\n SourceCustomer,\r\n TargetCustomer,\r\n CurrentUser,\r\n NewBillTo,\r\n ReparentingId,\r\n ServicesEndpoints,\r\n UETTags,\r\n ShowSummaryPaneLinkSettings,\r\n ShowSummaryPaneBillingSetting,\r\n } = serverContext;\r\n const isUETEnabled = useARWContextPermissions().IsAccountReparentingUETEnabled;\r\n const { UpdateUETTags } = contextActions;\r\n\r\n const onAccountDelete = useCallback((accountId) => {\r\n const updatedAccounts = _.reject(Accounts, acc => acc.Id === accountId);\r\n jobActions.update({\r\n updateType: JobUpdateTypes.ReparentingAccountDelete,\r\n accountIds: _.pluck(updatedAccounts, 'Id'),\r\n })\r\n .then(() => {\r\n contextActions.DeleteAccount(accountId);\r\n if (isUETEnabled) {\r\n uetActions.load()\r\n .then(({ UetSetting }) => {\r\n const tagInfos = _.extend([], UetSetting.TagInfos, {\r\n saved: UetSetting.IsSaved,\r\n });\r\n UpdateUETTags(tagInfos);\r\n })\r\n .catch(() => {\r\n // TODO, error handling\r\n })\r\n .finally(withUiBlock($('.accounts-list-popover-dialog')));\r\n }\r\n })\r\n .finally(withUiBlock($('.accounts-list-popover-dialog')));\r\n }, [Accounts, jobActions, contextActions, isUETEnabled, uetActions, UpdateUETTags]);\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nSummaryPane.propTypes = {\r\n classes: summaryPaneClassesProps.isRequired,\r\n};\r\n\r\nexport const ARWSummaryPane = withDefaultStyles(SummaryPane, getSummaryPaneStyles);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { getPageDescriptionStyles } from './styles/page-description-styles';\r\n\r\nconst UnstyledPageDescription = ({\r\n children,\r\n classes: { accountsSummaryPageDescription },\r\n}) => (\r\n
\r\n

\r\n {children}\r\n

\r\n
\r\n);\r\n\r\nUnstyledPageDescription.propTypes = {\r\n children: PropTypes.string.isRequired,\r\n classes: PropTypes.shape({\r\n accountsSummaryPageDescription: PropTypes.string,\r\n }).isRequired,\r\n};\r\n\r\nexport const AccountsPageDescription = withDefaultStyles(UnstyledPageDescription, getPageDescriptionStyles);\r\n","export const getPageDescriptionStyles = (_, { palette = {} }) => ({\r\n accountsSummaryPageDescription: {\r\n padding: {\r\n top: 20,\r\n bottom: 10,\r\n left: 32,\r\n },\r\n fontFamily: 'Segoe UI',\r\n fontSize: 14,\r\n lineHeight: '16px',\r\n color: palette.neutralPrimary,\r\n\r\n '& p': {\r\n margin: 0,\r\n },\r\n },\r\n});\r\n","import {\r\n extensionEditorStyles,\r\n helpbuttonStyle,\r\n messageBarStyle,\r\n selectElementStyle,\r\n scrollbarStyle,\r\n glyphIconStyle,\r\n validationErrorsStyle,\r\n convertToLocalStyle,\r\n mergeStyles,\r\n} from '@bingads-webui-campaign-react/common-styles';\r\n\r\nexport const getAdExtensionEditorStyles = (components, theme) => mergeStyles(\r\n { theme },\r\n convertToLocalStyle(mergeStyles(\r\n { theme },\r\n helpbuttonStyle,\r\n extensionEditorStyles,\r\n messageBarStyle,\r\n scrollbarStyle,\r\n glyphIconStyle\r\n )),\r\n components.searchboxStyle,\r\n selectElementStyle({ ...theme, includeSelector: true }),\r\n validationErrorsStyle(components, theme)\r\n);\r\n","import {\r\n helpbuttonStyle,\r\n scrollbarStyle,\r\n glyphIconStyle,\r\n convertToLocalStyle,\r\n adExtensionsAssociationsContainerLayoutType,\r\n adExtensionsAssociationsContainer,\r\n mergeStyles,\r\n} from '@bingads-webui-campaign-react/common-styles';\r\n\r\nexport const getAdExtensionsAssociationsStyles = (components, theme) => mergeStyles(\r\n { theme },\r\n convertToLocalStyle(mergeStyles(\r\n { theme },\r\n helpbuttonStyle,\r\n scrollbarStyle,\r\n glyphIconStyle\r\n )),\r\n components.searchboxStyle,\r\n components.buttonInputStyle,\r\n adExtensionsAssociationsContainer(adExtensionsAssociationsContainerLayoutType.ExpandHorizontallyToContainer)(components, theme)\r\n);\r\n","import { clone, isFunction } from 'underscore';\r\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Backbone from 'backbone';\r\nimport classNames from 'classnames';\r\nimport { DefaultButton } from '@bingads-webui-react/fabric-control';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport {\r\n adExtensionItemTemplateStyles,\r\n mergeStyles,\r\n} from '@bingads-webui-campaign-react/common-styles';\r\nimport { adExtensionEditorsGlobalStyles } from './styles/ad-extension-editor-global-styles';\r\nimport { getAdExtensionEditorStyles } from './styles/ad-extension-editors-common-styles';\r\nimport { getAdExtensionsAssociationsStyles } from './styles/ad-extensions-associations-styles';\r\n\r\nconst Extension = ({ classes, template, extension }) => (\r\n \r\n);\r\n\r\nExtension.propTypes = {\r\n classes: PropTypes.shape({\r\n extensionContainer: PropTypes.string.isRequired,\r\n }).isRequired,\r\n extension: PropTypes.shape({}).isRequired,\r\n template: PropTypes.func.isRequired,\r\n};\r\n\r\n\r\nconst getExtensionsStyles = ({ type = 'flex', itemsPerRow = 4 } = {}) => (components, theme = {}) => ({\r\n extensionsContainer: {\r\n ...mergeStyles(\r\n { theme },\r\n {\r\n ...type === 'flex' ? {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n flexWrap: 'wrap',\r\n gap: '8px',\r\n } : {\r\n display: 'grid',\r\n gridGap: '8px',\r\n gridTemplateColumns: `repeat(${itemsPerRow}, minmax(0px, 1fr))`,\r\n },\r\n\r\n '& .itemTemplate-text ul': {\r\n marginBottom: 'unset',\r\n },\r\n }\r\n ),\r\n },\r\n extensionContainer: {\r\n ...mergeStyles(\r\n { theme },\r\n {\r\n border: '1px solid #E1DFDD',\r\n borderRadius: 4,\r\n padding: [12, 14],\r\n\r\n display: 'flex',\r\n alignContent: 'center',\r\n flexWrap: 'wrap',\r\n },\r\n adExtensionItemTemplateStyles({ withEllipsisItemText: true })(theme)\r\n ),\r\n },\r\n});\r\n\r\nconst Extensions = ({\r\n layoutOptions,\r\n associations,\r\n template,\r\n}) => {\r\n const classes = useDefaultStyles(getExtensionsStyles(layoutOptions));\r\n\r\n return (\r\n
\r\n {associations.map((association, index) => (\r\n \r\n ))}\r\n
\r\n );\r\n};\r\n\r\nExtensions.propTypes = {\r\n layoutOptions: PropTypes.shape({}),\r\n template: PropTypes.func.isRequired,\r\n associations: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n};\r\n\r\nExtensions.defaultProps = {\r\n layoutOptions: undefined,\r\n};\r\n\r\nconst getEditorStyles = (components, theme = {}) => ({\r\n ...adExtensionEditorsGlobalStyles(components, theme),\r\n\r\n extensionsAssociations: {\r\n ...getAdExtensionsAssociationsStyles(components, theme),\r\n ...adExtensionItemTemplateStyles({ withEllipsisItemText: true })(theme),\r\n },\r\n editorPanel: {\r\n ...getAdExtensionEditorStyles(components, theme),\r\n },\r\n});\r\n\r\nconst Editor = ({\r\n campaignId,\r\n campaignName,\r\n associationEditor: AssociationEditor,\r\n dynamicFeatures,\r\n onSave: onEditorSave,\r\n onCancel: onEditorCancel,\r\n onChange: onEditorChange,\r\n}) => {\r\n const classes = useDefaultStyles(getEditorStyles);\r\n const view = useRef();\r\n const viewListener = useMemo(() => clone(Backbone.Events), []);\r\n let container;\r\n\r\n useEffect(() => {\r\n view.current = new AssociationEditor({\r\n useNewDlbLayout: true,\r\n showSaveButtonAsDefaultButton: true,\r\n allowSelectAll: false,\r\n allowDeselectAll: true,\r\n campaignId,\r\n campaignName,\r\n entityType: 'campaign',\r\n hasSubTitle: true,\r\n showErrorsInline: true,\r\n popupFront: '.navbar-fixed-top',\r\n usePanel: true,\r\n panelClassName: classes.editorPanel,\r\n isForVNext: true,\r\n vnextContext: { dynamicFeatures },\r\n // perfMarker: showAdAndExtensionMarker,\r\n // activityLogger: this.activityLogger,\r\n });\r\n\r\n view.current.render();\r\n view.current.$el.appendTo(container);\r\n\r\n return () => {\r\n view.current.remove();\r\n };\r\n // We want the view to be created only once,\r\n // hence ignoring all dependencies of this \"effect\".\r\n // This means that the view will ignore changes to all props.\r\n // If need be to make view pick props updates, the view\r\n // need to provide a way to communicate such updates to it.\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n const onSave = useCallback((associations) => {\r\n console.log('[DWD] Extension association editor onSave, associations=_', associations);\r\n if (isFunction(onEditorSave)) {\r\n onEditorSave(associations);\r\n }\r\n }, [onEditorSave]);\r\n\r\n const onCancel = useCallback(() => {\r\n console.log('[DWD] Extension association editor onCancel');\r\n if (isFunction(onEditorCancel)) {\r\n onEditorCancel();\r\n }\r\n }, [onEditorCancel]);\r\n\r\n const onChange = useCallback(() => {\r\n console.log('[DWD] Extension association editor onChange');\r\n if (isFunction(onEditorChange)) {\r\n onEditorChange();\r\n }\r\n }, [onEditorChange]);\r\n\r\n useEffect(() => {\r\n viewListener.listenTo(view.current, 'save', onSave);\r\n viewListener.listenTo(view.current, 'cancel', onCancel);\r\n viewListener.listenTo(view.current, 'extensions:changed', onChange);\r\n\r\n return () => viewListener.stopListening(view.current);\r\n }, [viewListener, onSave, onCancel, onChange]);\r\n\r\n return (\r\n
\r\n
{ container = ref; })} />\r\n
\r\n );\r\n};\r\n\r\nEditor.propTypes = {\r\n campaignId: PropTypes.number.isRequired,\r\n campaignName: PropTypes.string.isRequired,\r\n associationEditor: PropTypes.func.isRequired,\r\n dynamicFeatures: PropTypes.shape({}),\r\n onChange: PropTypes.func,\r\n onSave: PropTypes.func,\r\n onCancel: PropTypes.func,\r\n};\r\n\r\nEditor.defaultProps = {\r\n dynamicFeatures: undefined,\r\n onChange: undefined,\r\n onSave: undefined,\r\n onCancel: undefined,\r\n};\r\n\r\nconst getAdExtensionsAssociationsWrapperStyles = (components, theme) => ({\r\n controlsBar: {\r\n paddingTop: 16,\r\n },\r\n iconButtonColor: {\r\n color: theme.palette.themePrimary,\r\n },\r\n extensionDescription: {\r\n '& > ul > li': {\r\n lineHeight: '32px',\r\n },\r\n },\r\n});\r\n\r\nexport const AdExtensionsAssociationsWrapper = ({\r\n extensionType,\r\n campaignId,\r\n campaignName,\r\n renderDescription,\r\n associationEditor,\r\n staticFeatures,\r\n dynamicFeatures,\r\n selectedExtensionsLayoutOptions,\r\n\r\n // ...renderTimeProps\r\n i18n,\r\n extensionsAssociations,\r\n onUpdateExtensionsAssociations,\r\n}) => {\r\n const classes = useDefaultStyles(getAdExtensionsAssociationsWrapperStyles);\r\n const [isEditorOpen, setIsEditorOpen] = useState(false);\r\n\r\n const onOpenEditor = useCallback(() => {\r\n setIsEditorOpen(true);\r\n }, []);\r\n\r\n const onEditorSave = useCallback((associations) => {\r\n onUpdateExtensionsAssociations(extensionType, associations);\r\n setIsEditorOpen(false);\r\n }, [extensionType, onUpdateExtensionsAssociations]);\r\n\r\n const onEditorCancel = useCallback(() => {\r\n setIsEditorOpen(false);\r\n }, []);\r\n\r\n const associations = extensionsAssociations[extensionType] || [];\r\n\r\n if (isEditorOpen) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n if (associations.length === 0) {\r\n return (\r\n <>\r\n {renderDescription({ i18n, classes })}\r\n
\r\n \r\n
\r\n \r\n );\r\n }\r\n\r\n const dynamicTemplate = dynamicFeatures && dynamicFeatures.universalItemTemplate;\r\n const staticTemplate = staticFeatures && staticFeatures.universalItemTemplate;\r\n return (\r\n <>\r\n \r\n
\r\n \r\n
\r\n \r\n );\r\n};\r\n\r\nAdExtensionsAssociationsWrapper.propTypes = {\r\n extensionType: PropTypes.string.isRequired,\r\n campaignId: PropTypes.number.isRequired,\r\n campaignName: PropTypes.string.isRequired,\r\n renderDescription: PropTypes.func.isRequired,\r\n associationEditor: PropTypes.func.isRequired,\r\n extensionsAssociations: PropTypes.shape({}).isRequired,\r\n staticFeatures: PropTypes.shape({\r\n universalItemTemplate: PropTypes.func,\r\n }),\r\n dynamicFeatures: PropTypes.shape({\r\n universalItemTemplate: PropTypes.func,\r\n }),\r\n selectedExtensionsLayoutOptions: PropTypes.shape({}),\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n onUpdateExtensionsAssociations: PropTypes.func.isRequired,\r\n};\r\n\r\nAdExtensionsAssociationsWrapper.defaultProps = {\r\n staticFeatures: undefined,\r\n dynamicFeatures: undefined,\r\n selectedExtensionsLayoutOptions: undefined,\r\n};\r\n","import { datePickerStyle } from '@bingads-webui-campaign-react/common-styles';\r\n\r\nexport const adExtensionEditorsGlobalStyles = (components, theme) => ({\r\n '@global': {\r\n ...datePickerStyle(theme),\r\n },\r\n});\r\n","import { chain, difference, intersection, result } from 'underscore';\r\nimport React from 'react';\r\nimport classNames from 'classnames';\r\nimport { campaignTypeExtensionTypeFilter } from '@bingads-webui-campaign/ad-extensions-shared';\r\nimport appAssociationsEditor from '@bingads-webui-campaign-legacy/adextension-app/view/associationsEditor';\r\nimport { universalItemTemplate as appUniversalItemTemplate } from '@bingads-webui-campaign-legacy/adextension-app/template';\r\nimport callAssociationsEditor from '@bingads-webui-campaign-legacy/adextension-call/view/associationsEditor';\r\nimport { universalItemTemplate as callUniversalItemTemplate } from '@bingads-webui-campaign-legacy/adextension-call/template';\r\nimport calloutAssociationsEditor from '@bingads-webui-campaign-legacy/adextension-callout/view/associationsEditor';\r\nimport { universalItemTemplate as calloutUniversalItemTemplate } from '@bingads-webui-campaign-legacy/adextension-callout/template';\r\nimport locationAssociationsEditor from '@bingads-webui-campaign-legacy/adextension-location/view/associationsEditor';\r\nimport { universalItemTemplate as locationUniversalItemTemplate } from '@bingads-webui-campaign-legacy/adextension-location/template';\r\nimport priceAssociationsEditor from '@bingads-webui-campaign-legacy/adextension-price/view/associationsEditor';\r\nimport { universalItemTemplate as priceUniversalItemTemplate } from '@bingads-webui-campaign-legacy/adextension-price/template';\r\nimport reviewAssociationsEditor from '@bingads-webui-campaign-legacy/adextension-review/view/associationsEditor';\r\nimport { universalItemTemplate as reviewUniversalItemTemplate } from '@bingads-webui-campaign-legacy/adextension-review/template';\r\nimport sitelinkAssociationsEditor from '@bingads-webui-campaign-legacy/adextension-sitelink/view/associationsEditor';\r\nimport { universalItemTemplate as sitelinkUniversalItemTemplate } from '@bingads-webui-campaign-legacy/adextension-sitelink/template';\r\nimport structuredsnippetAssociationsEditor from '@bingads-webui-campaign-legacy/adextension-structuredsnippet/view/associationsEditor';\r\nimport { universalItemTemplate as structuredsnippetUniversalItemTemplate } from '@bingads-webui-campaign-legacy/adextension-structuredsnippet/template';\r\nimport promotionAssociationsEditor from '@bingads-webui-campaign-legacy/adextension-promotion/view/associationsEditor';\r\nimport filterLinkAssociationsEditor from '@bingads-webui-campaign-legacy/adextension-filter-link/view/associationsEditor';\r\nimport flyerAssociationsEditor from '@bingads-webui-campaign-legacy/adextension-flyer/view/associationsEditor';\r\nimport actionlinkAssociationsEditor from '@bingads-webui-campaign-legacy/adextension-actionlink/view/associationsEditor';\r\nimport { universalItemTemplate as actionUniversalItemTemplate } from '@bingads-webui-campaign-legacy/adextension-actionlink/template';\r\nimport { AdExtensionsAssociationsWrapper } from './ad-extensions-associations-wrapper';\r\n\r\nconst detailsFuncFactory = ([hasAssociationsKeySingular, hasAssociationsKeyPlural], noAssociationsKey) =>\r\n (i18n, associations = []) => (associations.length > 0 ?\r\n i18n.getString(associations.length > 1 ? hasAssociationsKeyPlural : hasAssociationsKeySingular, { number: associations.length }) :\r\n i18n.getString(noAssociationsKey));\r\n\r\nconst editorViewMapper = {\r\n App: {\r\n editor: appAssociationsEditor,\r\n title: _TL_('App extensions'),\r\n details: detailsFuncFactory([_TL_('1 app extension set'), _TL_('{{number}} app extensions set')], _TL_('No app extensions set')),\r\n renderDescription: ({ i18n }) => (\r\n {i18n.getString(_TL_('App extensions'))}\r\n ),\r\n },\r\n Call: {\r\n editor: callAssociationsEditor,\r\n title: _TL_('Call extensions'),\r\n details: detailsFuncFactory([_TL_('1 call extension set'), _TL_('{{number}} call exensions set')], _TL_('No call extensions set')),\r\n renderDescription: ({ i18n, classes }) => (\r\n
\r\n

{i18n.getString(_TL_('Show your business’s phone number in your ads to let customers know they can click to call.'))}

\r\n
\r\n ),\r\n topic: 'pop_BA_CampaignCreate_Ads_CallExtensions',\r\n },\r\n Callout: {\r\n editor: calloutAssociationsEditor,\r\n title: _TL_('Callout extensions'),\r\n details: detailsFuncFactory([_TL_('1 callout extension set'), _TL_('{{number}} callout extensions set')], _TL_('No callout extensions set')),\r\n renderDescription: ({ i18n, classes }) => (\r\n
\r\n

{i18n.getString(_TL_('Show extra details about your website’s products or offers in your ads.'))}

\r\n
\r\n ),\r\n topic: 'pop_BA_CampaignCreate_Ads_CalloutExtensions',\r\n },\r\n Location: {\r\n editor: locationAssociationsEditor,\r\n title: _TL_('Location extensions'),\r\n details: detailsFuncFactory([_TL_('1 location extension set'), _TL_('{{number}} location extensions set')], _TL_('No location extensions set')),\r\n renderDescription: ({ i18n, classes }) => (\r\n
\r\n

{i18n.getString(_TL_('Show the address and phone number of your closest business location in your ads.'))}

\r\n
\r\n ),\r\n selectedExtensionsLayoutOptions: {\r\n type: 'grid',\r\n itemsPerRow: 3,\r\n },\r\n topic: 'pop_BA_CampaignCreate_Ads_LocationExtensions',\r\n },\r\n Review: {\r\n editor: reviewAssociationsEditor,\r\n title: _TL_('Review extensions'),\r\n details: detailsFuncFactory([_TL_('1 review extension set'), _TL_('{{number}} review extensions set')], _TL_('No review extensions set')),\r\n renderDescription: ({ i18n, classes }) => (\r\n
\r\n

{i18n.getString(_TL_('Show a positive review from a third-party source in your ads.'))}

\r\n
\r\n ),\r\n selectedExtensionsLayoutOptions: {\r\n type: 'grid',\r\n itemsPerRow: 4,\r\n },\r\n topic: 'pop_BA_CampaignCreate_Ads_ReviewExtensions',\r\n },\r\n SiteLink: {\r\n editor: sitelinkAssociationsEditor,\r\n title: _TL_('Sitelink extensions'),\r\n details: detailsFuncFactory([_TL_('1 sitelink extension set'), _TL_('{{number}} sitelink extensions set')], _TL_('No sitelink extensions set')),\r\n renderDescription: ({ i18n, classes }) => (\r\n
\r\n

{i18n.getString(_TL_('Show additional sitelinks in your ads that take customers to specific pages of your website'))}

\r\n
\r\n ),\r\n selectedExtensionsLayoutOptions: {\r\n type: 'grid',\r\n itemsPerRow: 4,\r\n },\r\n topic: 'pop_BA_CampaignCreate_Ads_SitelinkExtensions',\r\n },\r\n StructuredSnippet: {\r\n editor: structuredsnippetAssociationsEditor,\r\n title: _TL_('Structured snippet extensions'),\r\n details: detailsFuncFactory([_TL_('1 structured snippet extension set'), _TL_('{{number}} structured snippet extensions set')], _TL_('No structured snippet extensions set')),\r\n renderDescription: ({ i18n, classes }) => (\r\n
\r\n

{i18n.getString(_TL_('Highlight specific aspects of your products and services using structured snippets.'))}

\r\n
\r\n ),\r\n selectedExtensionsLayoutOptions: {\r\n type: 'grid',\r\n itemsPerRow: 4,\r\n },\r\n topic: 'pop_BA_CampaignCreate_Ads_StructuredSnippetExtensions',\r\n },\r\n Price: {\r\n editor: priceAssociationsEditor,\r\n title: _TL_('Price extensions'),\r\n details: detailsFuncFactory([_TL_('1 price extension set'), _TL_('{{number}} price extensions set')], _TL_('No price extensions set')),\r\n renderDescription: ({ i18n, classes }) => (\r\n
\r\n

{i18n.getString(_TL_('Provide valuable price information to your prospective customers before they click on your ad.'))}

\r\n
\r\n ),\r\n selectedExtensionsLayoutOptions: {\r\n type: 'grid',\r\n itemsPerRow: 3,\r\n },\r\n topic: 'pop_BA_CampaignCreate_Ads_PriceExtensions',\r\n },\r\n Promotion: {\r\n editor: promotionAssociationsEditor,\r\n title: _TL_('Promotion extensions'),\r\n details: detailsFuncFactory([_TL_('1 promotion extension set'), _TL_('{{number}} promotion extensions set')], _TL_('No promotion extensions set')),\r\n renderDescription: ({ i18n, classes }) => (\r\n
\r\n

{i18n.getString(_TL_('Show deals for holidays and other special occasions in your ads.'))}

\r\n
\r\n ),\r\n selectedExtensionsLayoutOptions: {\r\n type: 'grid',\r\n itemsPerRow: 4,\r\n },\r\n topic: 'pop_BA_CampaignCreate_Ads_PromotionExtensions',\r\n },\r\n FilterLink: {\r\n editor: filterLinkAssociationsEditor,\r\n title: _TL_('Filter link extensions'),\r\n details: detailsFuncFactory([_TL_('1 filter link extension set'), _TL_('{{number}} filter link extensions set')], _TL_('No filter link extensions set')),\r\n renderDescription: ({ i18n, classes }) => (\r\n
\r\n

{i18n.getString(_TL_('Show links to specific products and services using filter links.'))}

\r\n
\r\n ),\r\n selectedExtensionsLayoutOptions: {\r\n type: 'grid',\r\n itemsPerRow: 4,\r\n },\r\n topic: 'pop_BA_CampaignCreate_Ads_FilteredLinkExtensions',\r\n },\r\n Flyer: {\r\n editor: flyerAssociationsEditor,\r\n title: _TL_('Flyer extensions'),\r\n details: detailsFuncFactory([_TL_('1 flyer extension set'), _TL_('{{number}} flyer extensions set')], _TL_('No flyer extensions set')),\r\n renderDescription: ({ i18n, classes }) => (\r\n
\r\n

{i18n.getString(_TL_('Showcase flyers of your chosen products and promotions, providing potential customers with more information before they buy.'))}

\r\n
\r\n ),\r\n selectedExtensionsLayoutOptions: {\r\n type: 'grid',\r\n itemsPerRow: 2,\r\n },\r\n topic: 'pop_BA_CampaignCreate_Ads_FlyerExtensions',\r\n },\r\n Action: {\r\n editor: actionlinkAssociationsEditor,\r\n title: _TL_('Action extensions'),\r\n details: detailsFuncFactory([_TL_('1 action extension set'), _TL_('{{number}} action extensions set')], _TL_('No action extensions set')),\r\n renderDescription: ({ i18n, classes }) => (\r\n
\r\n

{i18n.getString(_TL_('Show an action button in your ads.'))}

\r\n
\r\n ),\r\n topic: 'pop_BA_CampaignCreate_Ads_ActionExtensions',\r\n },\r\n};\r\n\r\nexport const extensionEntityMapping = {\r\n Action: 'ActionAdExtension',\r\n App: 'AppAdExtension',\r\n Call: 'CallAdExtension',\r\n Callout: 'CalloutAdExtension',\r\n Image: 'ImageAdExtension',\r\n Location: 'LocationAdExtension',\r\n Price: 'PriceAdExtension',\r\n Review: 'ReviewAdExtension',\r\n SiteLink: 'Sitelink2AdExtension',\r\n StructuredSnippet: 'StructuredSnippetAdExtension',\r\n Automated: 'AutomatedAdExtension',\r\n Promotion: 'PromotionAdExtension',\r\n FilterLink: 'FilterLinkAdExtension',\r\n Flyer: 'FlyerAdExtension',\r\n Video: 'VideoAdExtension',\r\n LeadForm: 'LeadFormAdExtension',\r\n BusinessInfo: 'LogoAdExtension',\r\n};\r\n\r\nexport const extensionNameMapping = {\r\n ActionAdExtension: 'Action',\r\n AppAdExtension: 'App',\r\n CallAdExtension: 'Call',\r\n CalloutAdExtension: 'Callout',\r\n ImageAdExtension: 'Image',\r\n LocationAdExtension: 'Location',\r\n PriceAdExtension: 'Price',\r\n ReviewAdExtension: 'Review',\r\n Sitelink2AdExtension: 'SiteLink',\r\n StructuredSnippetAdExtension: 'StructuredSnippet',\r\n AutomatedAdExtension: 'Automated',\r\n PromotionAdExtension: 'Promotion',\r\n FilterLinkAdExtension: 'FilterLink',\r\n FlyerAdExtension: 'Flyer',\r\n VideoAdExtension: 'Video',\r\n LeadFormAdExtension: 'LeadForm',\r\n LogoAdExtension: 'BusinessInfo',\r\n};\r\n\r\nexport const getAvailableExtensions = (permissions, campaignType) => {\r\n const campaignTypeFilter = campaignTypeExtensionTypeFilter(campaignType);\r\n\r\n return chain([\r\n ['Action', permissions.IsActionLinkExtensionAllowed],\r\n ['Price', permissions.IsPriceExtensionAllowed && !permissions.IsDomesticSimplifiedChineseEnabled],\r\n ['Location', permissions.IsLocationExtensionAllowed && !permissions.IsDomesticSimplifiedChineseEnabled],\r\n ['App', permissions.IsAppExtensionAllowed && !permissions.IsDomesticSimplifiedChineseEnabled],\r\n ['SiteLink', permissions.IsSiteLinkExtensionsAllowed],\r\n ['Call', permissions.IsCallExtensionAllowed && !permissions.IsDomesticSimplifiedChineseEnabled],\r\n ['Callout', permissions.IsCalloutExtensionAllowed && !permissions.IsDomesticSimplifiedChineseEnabled],\r\n ['Review', permissions.IsReviewExtensionAllowed && !permissions.IsDomesticSimplifiedChineseEnabled],\r\n ['StructuredSnippet', permissions.IsStructuredSnippetExtensionAllowed && !permissions.IsDomesticSimplifiedChineseEnabled],\r\n ['Promotion', permissions.IsPromotionAdExtensionEnabled],\r\n ['FilterLink', permissions.IsFilterLinkAdExtensionEnabled],\r\n ['Flyer', permissions.IsFlyerAdExtensionEnabled && !permissions.IsDomesticSimplifiedChineseEnabled],\r\n ]).filter(([type, allowed]) => allowed && campaignTypeFilter(type))\r\n .map(([name]) => name)\r\n .value();\r\n};\r\n\r\nconst getObjectiveExtensionMap = availableExtensions => ({\r\n WebsiteVisits: {\r\n suggestedExtensions: ['SiteLink', 'Action', 'Callout', 'Promotion'],\r\n otherExtensions: ['Price', 'StructuredSnippet', 'FilterLink', 'Review', 'Call', 'Location', 'Flyer'],\r\n },\r\n LocationVisits: {\r\n suggestedExtensions: ['Location', 'Call', 'Action', 'Promotion'],\r\n otherExtensions: ['Review', 'Callout', 'StructuredSnippet', 'FilterLink', 'Price', 'SiteLink', 'Flyer'],\r\n },\r\n WebsiteConversions: {\r\n suggestedExtensions: ['Action', 'Price', 'Promotion', 'SiteLink'],\r\n otherExtensions: ['Callout', 'StructuredSnippet', 'FilterLink', 'Review', 'Location', 'Call', 'Flyer'],\r\n },\r\n PhoneCalls: {\r\n suggestedExtensions: ['Call', 'Callout', 'Review', 'SiteLink'],\r\n otherExtensions: ['StructuredSnippet', 'FilterLink', 'Price', 'Promotion', 'Action', 'Flyer'],\r\n },\r\n AppInstalls: {\r\n suggestedExtensions: ['App', 'Review'],\r\n otherExtensions: difference(availableExtensions, ['App', 'Review']),\r\n },\r\n});\r\n\r\nexport const getObjectiveExtensions = (permissions, { campaignType, campaignObjective }) => {\r\n const availableExtensions = getAvailableExtensions(permissions, campaignType);\r\n const { suggestedExtensions, otherExtensions } = result(\r\n getObjectiveExtensionMap(availableExtensions),\r\n campaignObjective,\r\n { suggestedExtensions: [], otherExtensions: [] }\r\n );\r\n const suggestedObjectiveExtensions = intersection(suggestedExtensions, availableExtensions);\r\n const otherObjectiveExtensions = intersection(otherExtensions, availableExtensions);\r\n\r\n return { suggestedObjectiveExtensions, otherObjectiveExtensions };\r\n};\r\n\r\nconst adExtensionsStaticFeatures = {\r\n Action: {\r\n universalItemTemplate: actionUniversalItemTemplate,\r\n },\r\n App: {\r\n universalItemTemplate: appUniversalItemTemplate,\r\n },\r\n Call: {\r\n universalItemTemplate: callUniversalItemTemplate,\r\n },\r\n Callout: {\r\n universalItemTemplate: calloutUniversalItemTemplate,\r\n },\r\n Location: {\r\n universalItemTemplate: locationUniversalItemTemplate,\r\n },\r\n Price: {\r\n universalItemTemplate: priceUniversalItemTemplate,\r\n },\r\n Review: {\r\n universalItemTemplate: reviewUniversalItemTemplate,\r\n },\r\n SiteLink: {\r\n universalItemTemplate: sitelinkUniversalItemTemplate,\r\n },\r\n StructuredSnippet: {\r\n universalItemTemplate: structuredsnippetUniversalItemTemplate,\r\n },\r\n};\r\n\r\nexport const extensionsAssociationsFactory = (campaignId, campaignName, extensionTypes = [], adExtensionsDynamicFeatures) =>\r\n extensionTypes.map((extensionType) => {\r\n const {\r\n editor,\r\n title,\r\n topic,\r\n details,\r\n renderDescription,\r\n selectedExtensionsLayoutOptions,\r\n } = editorViewMapper[extensionType];\r\n const staticFeatures = adExtensionsStaticFeatures[extensionType];\r\n const dynamicFeatures = adExtensionsDynamicFeatures(extensionType);\r\n\r\n return {\r\n extensionType,\r\n editor,\r\n title,\r\n topic,\r\n details,\r\n renderDescription,\r\n staticFeatures,\r\n dynamicFeatures,\r\n selectedExtensionsLayoutOptions,\r\n };\r\n }).map(({\r\n extensionType,\r\n editor,\r\n title,\r\n topic,\r\n details,\r\n renderDescription,\r\n staticFeatures,\r\n dynamicFeatures,\r\n selectedExtensionsLayoutOptions,\r\n }) => {\r\n const AssociationPanel = React.memo((renderTimeProps = {}) => (\r\n \r\n ));\r\n return {\r\n extensionType,\r\n title,\r\n topic,\r\n details,\r\n AssociationPanel,\r\n };\r\n });\r\n","// copied from @bingads-webui-campaign-react/wizard-shared-components/utils/p$dadeRange to avoid depending on bing-maps\r\nimport Promise from 'bluebird';\r\nimport { WaterfallFilterStorage, WaterfallFilterType, waterfallDateFilterProcessor } from '@bingads-webui-campaign/filter-storage';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { PreferenceContext } from '@bingads-webui-react/preference-context';\r\nimport { useContext } from 'react';\r\n\r\nfunction useDateRangeDefault() {\r\n const preferenceService = useContext(PreferenceContext);\r\n const serverContext = useContext(ServerContext);\r\n const waterfallFilterStorage = new WaterfallFilterStorage({\r\n preferenceService,\r\n });\r\n const waterFallDateFilters = waterfallFilterStorage.getFilters([WaterfallFilterType.DateFilter]);\r\n const dateFilter = waterfallDateFilterProcessor(waterFallDateFilters, serverContext);\r\n return dateFilter;\r\n}\r\n\r\nexport function useP$DaterangeDefault() {\r\n const dateFilter = useDateRangeDefault();\r\n return Promise.resolve(dateFilter);\r\n}\r\n","import { getInlineDownloadStyle, helpbuttonStyle, datePickerStyle } from '@bingads-webui-campaign-react/common-styles';\r\n\r\nexport const inlineDownloadStyle = (_, theme) => ({\r\n '@global': {\r\n ...datePickerStyle(theme),\r\n },\r\n InlineDownloadWrapper: {\r\n marginTop: '24px',\r\n position: 'relative',\r\n zIndex: 11,\r\n ...getInlineDownloadStyle(theme),\r\n '& button.btn': {\r\n marginRight: '8px',\r\n },\r\n \"& input[type='checkbox']\": {\r\n bottom: 0,\r\n },\r\n '& .helpbutton': helpbuttonStyle(theme)['.helpbutton'],\r\n '& .helpbutton::before': {\r\n ...helpbuttonStyle(theme)['.helpbutton::before'],\r\n position: 'static',\r\n top: 'unset',\r\n },\r\n '& .helpbutton:after': {\r\n content: 'none',\r\n },\r\n '& .glyphicon-remove': {\r\n color: `${theme.palette.themePrimary}`,\r\n },\r\n '& .form-horizontal .form-group': {\r\n marginLeft: 0,\r\n marginRight: 0,\r\n },\r\n '& .panel': {\r\n boxShadow: 'none',\r\n '& .panel-heading ': {\r\n padding: '0px',\r\n fontWeight: '600',\r\n '& .panel-title': {\r\n fontSize: '20px',\r\n fontWeight: '600',\r\n lineHeight: '27px',\r\n },\r\n },\r\n '& .panel-body': {\r\n lineHeight: '19px',\r\n paddingLeft: '0px',\r\n marginButtom: '18px',\r\n paddingButtom: '0px',\r\n },\r\n },\r\n },\r\n});\r\n","import React, { useContext, useMemo } from 'react';\r\nimport _ from 'underscore';\r\nimport classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport Promise from 'bluebird';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { withServerContext, ServerContext } from '@bingads-webui-campaign-react/server-context';\r\n\r\nimport { useP$DaterangeDefault } from './use-daterange-default';\r\nimport { inlineDownloadStyle } from './styles';\r\n\r\n// TODO: support segments for inline download\r\nexport function useInlineDownload({\r\n processReportRule = _.identity,\r\n customDownloadService = undefined,\r\n downloadFormats = undefined,\r\n entity,\r\n totalRecordCount,\r\n validateSegmentType = () => true,\r\n isFeedbackEnabled = undefined,\r\n data = { SegmentationTypes: [] },\r\n InlineDownloadCampaignODataRepository,\r\n isForVNext = true,\r\n p$daterange = undefined,\r\n localizedHeaders,\r\n odataColumnNames,\r\n serverContext,\r\n filterUrlParam,\r\n serializedFilter,\r\n}) {\r\n const p$daterangeDefaultValue = useP$DaterangeDefault();\r\n\r\n const p$daterangeDefault = () => p$daterangeDefaultValue;\r\n\r\n const segmentationTypes = [];\r\n\r\n if (serverContext && serverContext.Permissions && serverContext.Permissions.IsCustomerHierarchyEnabled) {\r\n _.extend(data, { IsCustomerHierachyRequest: true });\r\n }\r\n\r\n const repository = _.isFunction(customDownloadService) ? {\r\n download({\r\n Format,\r\n SegmentationTypes,\r\n }) {\r\n customDownloadService(Format, SegmentationTypes[0]);\r\n return Promise.resolve();\r\n },\r\n } : new InlineDownloadCampaignODataRepository({\r\n odataColumnNames,\r\n localizedHeaders,\r\n entity,\r\n filterUrlParam,\r\n serializedFilter,\r\n processReportRule,\r\n isForVNext,\r\n p$daterange: p$daterange || p$daterangeDefault,\r\n });\r\n\r\n return {\r\n isForVNext,\r\n totalRecordCount,\r\n repository,\r\n downloadFormats,\r\n segmentationTypes,\r\n validateSegmentType,\r\n isFeedbackEnabled,\r\n data,\r\n allUsersType: entity === 'Account' ? 'Customer' : 'Account',\r\n };\r\n}\r\n\r\n// Generate a inline download react from with default props and propTypes\r\nconst InlineDownloadWrapperInternal = React.memo((props) => {\r\n const serverContext = useContext(ServerContext);\r\n const classes = useDefaultStyles(inlineDownloadStyle);\r\n const {\r\n setDownloadShown,\r\n getInlineDownloadColumns,\r\n getInlineDownloadFilter,\r\n ReportEmailRule,\r\n InlineDownloadReactForm,\r\n InlineDownloadCampaignODataRepository,\r\n totalAssetCount,\r\n entity,\r\n } = props;\r\n\r\n const {\r\n localizedHeaders,\r\n odataColumnNames,\r\n } = useMemo(getInlineDownloadColumns, []);\r\n\r\n const {\r\n filterUrlParam,\r\n serializedFilter,\r\n } = useMemo(getInlineDownloadFilter, []);\r\n\r\n const inlineDownloadConfigs = useInlineDownload({\r\n serverContext,\r\n entity: entity || 'Folder',\r\n totalRecordCount: totalAssetCount,\r\n downloadFormats: [\r\n 'Csv',\r\n 'Tsv',\r\n 'Xlsx',\r\n 'Csvzip',\r\n ],\r\n InlineDownloadCampaignODataRepository,\r\n validateSegmentType: () => true,\r\n isFeedbackEnabled: false,\r\n data: ReportEmailRule || ({ SegmentationTypes: [] }),\r\n isForVNext: true,\r\n p$daterange: undefined,\r\n localizedHeaders,\r\n odataColumnNames,\r\n filterUrlParam,\r\n serializedFilter,\r\n });\r\n\r\n return (\r\n
\r\n setDownloadShown(false)}\r\n totalRecordCount={totalAssetCount}\r\n downloadFormats={inlineDownloadConfigs.downloadFormats}\r\n segmentationTypes={[]}\r\n validateSegmentType={() => true} // if we don't have segment type, we don't need to validate it\r\n isFeedbackEnabled={false}\r\n data={inlineDownloadConfigs.data}\r\n allUsersType={inlineDownloadConfigs.allUsersType}\r\n repository={inlineDownloadConfigs.repository}\r\n clearAfterDownloadCall={false}\r\n isForVNext\r\n />\r\n
\r\n );\r\n});\r\n\r\nInlineDownloadWrapperInternal.propTypes = {\r\n setDownloadShown: PropTypes.func,\r\n totalAssetCount: PropTypes.number.isRequired,\r\n ReportEmailRule: PropTypes.shape({}),\r\n getInlineDownloadColumns: PropTypes.func.isRequired,\r\n getInlineDownloadFilter: PropTypes.func.isRequired,\r\n InlineDownloadReactForm: PropTypes.element.isRequired,\r\n InlineDownloadCampaignODataRepository: PropTypes.func.isRequired,\r\n entity: PropTypes.string,\r\n};\r\n\r\nInlineDownloadWrapperInternal.defaultProps = {\r\n setDownloadShown: () => {},\r\n ReportEmailRule: undefined,\r\n entity: undefined,\r\n};\r\n\r\nconst DelayedInlineDownloadWrapperInternal = React.lazy(() =>\r\n import(/* webpackMode: 'eager' */ '@bingads-webui-campaign-legacy/griddownload/view/loader')\r\n .then(({ InlineDownloadReactForm, InlineDownloadCampaignODataRepository }) => ({\r\n default: React.memo(props => ()),\r\n })));\r\n\r\nexport const InlineDownloadWrapper = withServerContext(DelayedInlineDownloadWrapperInternal);\r\n","import React, { useMemo, useState, useEffect } from 'react';\r\nimport appState from '@bingads-webui-component-legacy/state/index';\r\nimport { parseSync } from '@bingads-webui/safe-json';\r\nimport { InlineDownloadWrapper } from './inline-download-wrapper';\r\n\r\nconst getReportEmailRule = () => {\r\n const rule = appState.get('$ReportEmailRule');\r\n appState.unset('$ReportEmailRule');\r\n return rule;\r\n};\r\n\r\nexport const useInlineDownload = ({ overwriteFilters }) => {\r\n // ReportEmailRule state from appState is for the filter, columns and date range from the task\r\n // items of the report grid. We need to get it from appState and then remove it from appState\r\n // so that it doesn't get used in next show of the inline download.\r\n const ReportEmailRule = getReportEmailRule();\r\n const [isDownloadShown, setDownloadShown] = useState(!!ReportEmailRule);\r\n const ReportEmailRuleSnapshot = useMemo(() => ReportEmailRule, [isDownloadShown]);\r\n\r\n // Ensure not rerendering root after mount\r\n const renderInlineDownload = useMemo(\r\n () => props => (),\r\n [ReportEmailRuleSnapshot]\r\n );\r\n\r\n useEffect(() => {\r\n if (ReportEmailRuleSnapshot && ReportEmailRuleSnapshot.Filter && overwriteFilters) {\r\n // Filter is a stringified JSON object in the serializedFilter of the inline download API call.\r\n // We need to parse it and then overwrite the filters in the grid with the parsed filters.\r\n const filters = parseSync(ReportEmailRuleSnapshot.Filter);\r\n overwriteFilters(filters);\r\n }\r\n }, [overwriteFilters]);\r\n\r\n return {\r\n renderInlineDownload,\r\n ReportEmailRule,\r\n isDownloadShown,\r\n setDownloadShown,\r\n };\r\n};\r\n","import _ from 'underscore';\r\nimport { useContext, useMemo } from 'react';\r\nimport { InstrumentationContext } from '@bingads-webui-react/hoc-with-instrumentation';\r\n\r\nexport const useSetupInstrument = (scenarioName, activityName) => {\r\n const instrumentation = useContext(InstrumentationContext);\r\n\r\n const backupLogger = useMemo(() => ({\r\n trace: _.noop,\r\n error: _.noop,\r\n }), []);\r\n\r\n return useMemo(() => {\r\n if (instrumentation && instrumentation[scenarioName]) {\r\n const scenario = instrumentation[scenarioName].create();\r\n if (scenario[activityName]) {\r\n return scenario[activityName].create();\r\n }\r\n }\r\n return backupLogger;\r\n }, [activityName, backupLogger, instrumentation, scenarioName]);\r\n};\r\n","export const input2Duration = timeObj => ((parseInt(timeObj.Day, 10) * 24 * 60) + (parseInt(timeObj.Hour, 10) * 60) + parseInt(timeObj.Min, 10));\r\n\r\nexport const duration2Input = (timeInMin) => {\r\n const timeObj = { Min: 0, Hour: 0, Day: 0 };\r\n timeObj.Min = (timeInMin % 60) || 0;\r\n const remainingHours = parseInt(timeInMin / 60, 10) || 0;\r\n timeObj.Hour = remainingHours % 24;\r\n timeObj.Day = parseInt(remainingHours / 24, 10) || 0;\r\n\r\n return timeObj;\r\n};\r\n\r\nexport const findOptionbyKey = (options, searchKey, optionKey = 'key') => {\r\n const foundKeys = options.filter(option => option[optionKey] === searchKey);\r\n if (foundKeys && foundKeys.length > 0) {\r\n return foundKeys[0];\r\n }\r\n return {};\r\n};\r\n\r\nexport const allSettledPromiseWrapper = (promises) => {\r\n const wrappedPromises = promises.map(p => Promise.resolve(p)\r\n .then(\r\n val => ({ status: 'fulfilled', value: val }),\r\n err => ({ status: 'rejected', reason: err })\r\n ));\r\n return Promise.all(wrappedPromises);\r\n};\r\n","\r\nimport PropTypes from 'prop-types';\r\nimport { ActionOperatorEnum, AttributionModelTypeEnum, CategoryOperatorEnum, ConversionCountTypeEnum, GOAL_CATEGORY, GoalStatusEnum, GoalValueTypeEnum, LabelOperatorEnum, ValueOperatorEnum } from '@bingads-webui-campaign-react/goal-creation-shared-config';\r\n\r\nexport const GoalPropType = {\r\n Selected: PropTypes.bool,\r\n GoalId: PropTypes.number,\r\n GoalCategory: PropTypes.oneOf(Object.values(GOAL_CATEGORY)),\r\n Type: PropTypes.string,\r\n CurrencyCode: PropTypes.string,\r\n GoalValue: PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.number,\r\n ]),\r\n IsAccountLevel: PropTypes.bool,\r\n ConversionCountType: PropTypes.oneOf(ConversionCountTypeEnum),\r\n IsMainConversionGoal: PropTypes.bool,\r\n LookbackWindowInMinutes: PropTypes.number,\r\n LookbackWindowinStr: PropTypes.string,\r\n ViewThroughLookbackWindowinMinutes: PropTypes.number,\r\n ViewThroughLookbackWindowinStr: PropTypes.string,\r\n ActionOperator: PropTypes.oneOf(ActionOperatorEnum),\r\n Action: PropTypes.string,\r\n ValueOperator: PropTypes.oneOf(ValueOperatorEnum),\r\n Value: PropTypes.number,\r\n LabelOperator: PropTypes.oneOf(LabelOperatorEnum),\r\n Label: PropTypes.string,\r\n CategoryOperator: PropTypes.oneOf(CategoryOperatorEnum),\r\n Category: PropTypes.string,\r\n Status: PropTypes.oneOf(GoalStatusEnum),\r\n AttributionModelType: PropTypes.oneOf(AttributionModelTypeEnum),\r\n Name: PropTypes.string,\r\n GoalValueType: PropTypes.oneOf(GoalValueTypeEnum),\r\n Tag: PropTypes.shape({\r\n Id: PropTypes.number,\r\n }),\r\n IsEnhancedConversionsEnabled: PropTypes.bool,\r\n '@odata.type': PropTypes.string,\r\n};\r\n","const activities = [\r\n {\r\n name: 'goalSelectionStep',\r\n value: 'goalSelectionStep',\r\n },\r\n {\r\n name: 'goalWebsiteStep',\r\n value: 'goalWebsiteStep',\r\n },\r\n {\r\n name: 'goalDetailsStep',\r\n value: 'goalDetailsStep',\r\n },\r\n {\r\n name: 'goalManualStep',\r\n value: 'goalManualStep',\r\n },\r\n {\r\n name: 'goalDoneStep',\r\n value: 'goalDoneStep',\r\n },\r\n {\r\n name: 'selectGoalObjective',\r\n value: 'selectGoalObjective',\r\n },\r\n {\r\n name: 'selectGoalType',\r\n value: 'selectGoalType',\r\n },\r\n {\r\n name: 'editGoalDetails',\r\n value: 'editGoalDetails',\r\n },\r\n {\r\n name: 'editGoalDetails.normalGoal',\r\n value: 'editGoalDetails.normalGoal',\r\n },\r\n {\r\n name: 'editGoalDetails.smartGoal',\r\n value: 'editGoalDetails.smartGoal',\r\n },\r\n {\r\n name: 'setupTag',\r\n value: 'setupTag',\r\n },\r\n {\r\n name: 'setupTag.selectTag',\r\n value: 'setupTag.selectTag',\r\n },\r\n {\r\n name: 'setupTag.noTag',\r\n value: 'setupTag.noTag',\r\n },\r\n {\r\n name: 'setupTag.noTag.selectTagMethod',\r\n value: 'setupTag.noTag.selectTagMethod',\r\n },\r\n {\r\n name: 'setupTag.noTag.installTag',\r\n value: 'setupTag.noTag.installTag',\r\n },\r\n {\r\n name: 'setupTag.noTag.emailTag',\r\n value: 'setupTag.noTag.emailTag',\r\n },\r\n {\r\n name: 'setupTag.noTag.platformTag',\r\n value: 'setupTag.noTag.platformTag',\r\n },\r\n {\r\n name: 'setupTag.noTag.platformTagInstructions',\r\n value: 'setupTag.noTag.platformTagInstructions',\r\n },\r\n {\r\n name: 'setupTag.noTag.gtmTag',\r\n value: 'setupTag.noTag.gtmTag',\r\n },\r\n {\r\n name: 'setupTag.addEventTag',\r\n value: 'setupTag.addEventTag',\r\n },\r\n {\r\n name: 'setupTag.eventTagChoice',\r\n value: 'setupTag.eventTagChoice',\r\n },\r\n {\r\n name: 'setupTag.addEventTagWithClarity',\r\n value: 'setupTag.addEventTagWithClarity',\r\n },\r\n {\r\n name: 'endFlow',\r\n value: 'endFlow',\r\n },\r\n {\r\n name: 'createWizard',\r\n value: 'createWizard',\r\n },\r\n {\r\n name: 'editGoalDetails.enhancedConversions',\r\n value: 'editGoalDetails.enhancedConversions',\r\n },\r\n {\r\n name: 'setupTag.setupEnhancedConv',\r\n value: 'setupTag.setupEnhancedConv',\r\n },\r\n];\r\n\r\nexport const instrumentationSchema = {\r\n scenario: [\r\n // All activities must be under this scenario so that we can later use SceId to string together a session.\r\n {\r\n name: 'autoGoalCreationWizard',\r\n value: 'autoGoalCreationWizard',\r\n activity: activities,\r\n },\r\n {\r\n name: 'stepFlowScenario',\r\n value: 'step flow',\r\n activity: [\r\n {\r\n name: 'stepFlow',\r\n value: 'step flow',\r\n },\r\n ],\r\n },\r\n ],\r\n};\r\n","import React from 'react';\r\n\r\nexport const GoalWizardContext = React.createContext();\r\n","export const AUTO_GOAL_CREATION_WIZARD_STEP_PATHS = {\r\n GOAL_TYPE_SELECTION: 'GOAL_TYPE_SELECTION',\r\n WEBSITE: 'WEBSITE',\r\n GOAL_DETAIL_SETTING: 'GOAL_DETAIL_SETTING',\r\n UET_SETUP: 'UET_SETUP',\r\n DONE: 'DONE',\r\n MANUAL: 'MANUAL',\r\n};\r\n\r\nexport const FLOWS = {\r\n MANUAL_GOAL: 'MANUAL_GOAL',\r\n MANUAL_GOAL_WEBSITE: 'MANUAL_GOAL_WEBSITE',\r\n AUTO_GOAL_WITH_UET: 'AUTO_GOAL_WITH_UET',\r\n AUTO_GOAL_WITHOUT_UET: 'AUTO_GOAL_WITHOUT_UET',\r\n AUTO_GOAL_SKIP_WEBSITE_WITH_UET: 'AUTO_GOAL_SKIP_WEBSITE_WITH_UET',\r\n AUTO_GOAL_SKIP_WEBSITE_WITHOUT_UET: 'AUTO_GOAL_SKIP_WEBSITE_WITHOUT_UET',\r\n};\r\n\r\nexport const stepToPage = {\r\n [AUTO_GOAL_CREATION_WIZARD_STEP_PATHS.GOAL_TYPE_SELECTION]: 'autogoalwizard010.goalTypeSelection',\r\n [AUTO_GOAL_CREATION_WIZARD_STEP_PATHS.WEBSITE]: 'autogoalwizard020.website',\r\n [AUTO_GOAL_CREATION_WIZARD_STEP_PATHS.GOAL_DETAIL_SETTING]: 'autogoalwizard030.goaldetail',\r\n [AUTO_GOAL_CREATION_WIZARD_STEP_PATHS.UET_SETUP]: 'autogoalwizard040.uetsetup',\r\n [AUTO_GOAL_CREATION_WIZARD_STEP_PATHS.DONE]: 'autogoalwizard050.done',\r\n [AUTO_GOAL_CREATION_WIZARD_STEP_PATHS.MANUAL]: 'autogoalwizard000.manual',\r\n};\r\n","import { edmCampaign } from '@bingads-webui/edm-campaign';\r\n\r\nexport const createGoals = (payload, cid, aid) => edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Goals['Default.AddGoals']\r\n .$makeCall({ payload })\r\n .toPromise();\r\n\r\nexport const updateGoal = (goalId, payload, cid, aid) =>\r\n edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Goals.update(goalId, payload);\r\n\r\nexport const bulkEditGoals = (payload, cid, aid) => edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Goals['Default.UpdateGoals']\r\n .$makeCall({ payload })\r\n .toPromise();\r\n\r\nexport const createGoal = (payload, cid, aid) =>\r\n edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Goals.post(payload).toPromise();\r\n\r\nexport const getGoals = (cid, aid, params) => {\r\n const parameters = params || {};\r\n\r\n return edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Goals\r\n .get({\r\n filter: parameters.$filter ? { where: parameters.$filter } : {},\r\n count: parameters.$count || true,\r\n startDate: parameters.$startDate,\r\n endDate: parameters.$endDate,\r\n }).toPromise();\r\n};\r\n","import _ from 'underscore';\r\nimport { useEffect, useState } from 'react';\r\nimport { getGoals } from './uet-goal-crud';\r\n\r\nexport const useGoalwithParams = ({\r\n serverContext,\r\n activity,\r\n params,\r\n}) => {\r\n const [goals, setGoals] = useState([]);\r\n const [count, setCount] = useState(0);\r\n const { Token } = serverContext;\r\n const { Id: aid, AdvertiserCustomerID: cid } = serverContext.CurrentAccount;\r\n\r\n useEffect(() => {\r\n getGoals(cid, aid, params).then((result) => {\r\n activity.trace('Load Goals Successed');\r\n const finalResult = _.get(result, 'value', []);\r\n if (params && params.$count) {\r\n setCount(_.get(result, '@odata.count', 0));\r\n }\r\n setGoals(finalResult);\r\n }).catch((error) => {\r\n activity.error(`Load Goals Failed: ${JSON.stringify(error)}`);\r\n });\r\n }, [Token, activity, aid, cid, params]);\r\n\r\n return [goals, count];\r\n};\r\n","import { edmCampaign } from '@bingads-webui/edm-campaign';\r\n\r\nexport const getAutoGoalRecommendations = (cid, aid) => edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Goals['Default.GetGoalRecommendation']\r\n .get().toPromise();\r\n","import _ from 'underscore';\r\nimport { useEffect, useState } from 'react';\r\nimport { getAutoGoalRecommendations } from './goal-recommendations';\r\n\r\nexport const useRecommendation = ({\r\n serverContext,\r\n activity,\r\n}) => {\r\n const [recommendation, setRecommendation] = useState([]);\r\n const { Token } = serverContext;\r\n const { Id: aid, AdvertiserCustomerID: cid } = serverContext.CurrentAccount;\r\n\r\n useEffect(() => {\r\n getAutoGoalRecommendations(cid, aid, Token).then((result) => {\r\n activity.trace(`Load Recommendation : ${JSON.stringify(result)}`);\r\n const finalResult = _.get(result, 'value', []);\r\n setRecommendation(finalResult);\r\n }).catch((error) => {\r\n activity.error(`Load Recommendation Failed: ${JSON.stringify(error)}`);\r\n });\r\n }, [Token, activity, aid, cid]);\r\n\r\n return [recommendation];\r\n};\r\n","import { odata } from '@bingads-webui/http-util';\r\n\r\nconst emailInfo = {\r\n UET: {\r\n EmailNotificationId: 388,\r\n EmailTemplateName: 'UetTagInstructionsEmail',\r\n },\r\n Event: {\r\n EmailNotificationId: 389,\r\n EmailTemplateName: 'UetTagAndEventTagInstructionsEmail',\r\n },\r\n UetTagInstructionsEmailV2: {\r\n EmailNotificationId: 589,\r\n EmailTemplateName: 'UetTagInstructionsEmailV2',\r\n },\r\n UetTagAndEventTagInstructionsEmailV2: {\r\n EmailNotificationId: 590,\r\n EmailTemplateName: 'UetTagAndEventTagInstructionsEmailV2',\r\n },\r\n};\r\n\r\nexport const postEmail = (cid, aid, token, emailType, emailAddresses, emailContent) => {\r\n const { EmailNotificationId, EmailTemplateName } = emailInfo[emailType];\r\n\r\n const data = {\r\n EmailContent: Object.entries(emailContent).map(([k, v]) => ({ Key: k, Value: v })),\r\n EmailAddresses: emailAddresses,\r\n EmailTemplateName,\r\n EmailNotificationId,\r\n ToAdvertiser: true,\r\n };\r\n const url = aid ? `${window.location.origin}/ODataApi/Advertiser/V2/Customers(${cid})/Accounts(${aid})/SendEmail` :\r\n `${window.location.origin}/ODataApi/Advertiser/V2/Customers(${cid})/Accounts/SendEmail`;\r\n try {\r\n return odata.post({\r\n url,\r\n data,\r\n headers: {\r\n Authorization: `CCMTSmallToken ${token}`,\r\n },\r\n }).then((res) => {\r\n if (res && res.value) {\r\n return res;\r\n }\r\n return Promise.reject(res);\r\n });\r\n } catch (e) {\r\n return Promise.reject(e);\r\n }\r\n};\r\n","import _ from 'underscore';\r\nimport { useCallback } from 'react';\r\nimport { edmCampaign } from '@bingads-webui/edm-campaign';\r\n\r\nexport const postEventLog = (cid, aid, postData) => edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)['Default.PostABTestingEventLog']\r\n .$makeCall({\r\n payload: { data: postData },\r\n })\r\n .toPromise();\r\n\r\nexport function useStepFlowEvent(\r\n serverContext,\r\n logTrace = _.noop\r\n) {\r\n const accountId = _.get(serverContext, ['CurrentAccount', 'Id']);\r\n const customerId = _.get(serverContext, ['CurrentCustomer', 'Id']);\r\n const { token } = serverContext;\r\n\r\n const postEvent = useCallback(({ EventName, EventValue }) => {\r\n const data = {\r\n UniqueId: _.get(serverContext, ['Omniture', 'SessionId']),\r\n EventName,\r\n EventValue: JSON.stringify({\r\n AID: accountId,\r\n CID: customerId,\r\n ...EventValue,\r\n TimeStamp: new Date().toISOString(),\r\n }),\r\n };\r\n logTrace(`[PostABTestingEventLog]: UniqueId: ${data.UniqueId}, EventName: ${data.EventName}, EventValue: ${data.EventValue}`);\r\n\r\n postEventLog(customerId, accountId, data, token);\r\n }, [serverContext, accountId, customerId, logTrace, token]);\r\n\r\n return postEvent;\r\n}\r\n","import { edmCampaign } from '@bingads-webui/edm-campaign';\r\n\r\nexport const THIRD_PARTY_PLATFORM_MAPPING = {\r\n None: 'None',\r\n GTM: 'Google Tag Manager',\r\n WordPress: 'WordPress',\r\n Shopify: 'Shopify',\r\n};\r\n\r\nexport const getDetectDomainThirdParty = (cid, aid, domain) => edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Tags['Default.DetectDomainThirdParty']\r\n .$makeCall({\r\n payload: { Domain: domain },\r\n })\r\n .toPromise();\r\n\r\nexport const postTagPromise = (payload, cid, aid) => edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Tags\r\n .post(payload).toPromise().then((response) => {\r\n if (response && response.Id) {\r\n return { ...response, isAutoCreated: true };\r\n }\r\n throw new Error('Could not create tag');\r\n });\r\n\r\nexport const getTags = (cid, aid) => edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Tags\r\n .get({\r\n top: 2000,\r\n select: ['Id', 'Name', 'Owner', 'TrackingCode', 'IsPreferredTag', 'IsClarityTagEnabled', 'TrackingStatus', 'IsReadOnly'],\r\n }).toPromise().then((tagResponse) => {\r\n if (tagResponse && tagResponse.value) {\r\n return tagResponse.value;\r\n }\r\n return [];\r\n }).catch(error => Promise.reject(error));\r\n\r\nexport const updateTag = (cid, aid, tagId, payload) => {\r\n const edmCustomer = edmCampaign.Customers.$withKey(cid);\r\n const edmHolder = aid ? edmCustomer.Accounts.$withKey(aid) : edmCustomer;\r\n return edmHolder.Tags.update(tagId, payload)\r\n .then((response) => {\r\n if (response.Id) {\r\n return response;\r\n }\r\n throw response;\r\n });\r\n};\r\n\r\nexport const getExternalIntegrations = (cid, aid, tagId) => edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Tags.$withKey(tagId)['Default.GetExternalIntegrations']\r\n .$makeCall({})\r\n .toPromise().then(response => ({ ...response, hasExternalIntegrations: response.NumberOfEntities > 0 }));\r\n\r\nexport const getTagByDomain = (cid, aid, domain) => edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Tags['Default.DetectDomainUET']\r\n .$makeCall({\r\n payload: { Domain: domain },\r\n })\r\n .toPromise();\r\n","import _ from 'underscore';\r\n\r\nexport const generateAddOrEditGoalPayload = (goals) => {\r\n const result = goals.map((goal) => {\r\n const newPayloadGoal = { ...goal };\r\n\r\n delete newPayloadGoal.Domains;\r\n delete newPayloadGoal.PageUrls;\r\n\r\n newPayloadGoal.GoalValue = parseFloat(goal.GoalValue);\r\n\r\n if (newPayloadGoal.ValueOperator === 'NoValue') {\r\n delete newPayloadGoal.ValueOperator;\r\n delete newPayloadGoal.Value;\r\n }\r\n\r\n if (newPayloadGoal.LabelOperator === 'NoValue') {\r\n delete newPayloadGoal.LabelOperator;\r\n delete newPayloadGoal.Label;\r\n }\r\n\r\n if (newPayloadGoal.GoalValueType === 'NoValue') {\r\n delete newPayloadGoal.CurrencyCode;\r\n delete newPayloadGoal.GoalValue;\r\n } else {\r\n newPayloadGoal.GoalValue = (_.isUndefined(newPayloadGoal.GoalValue) || _.isNull(newPayloadGoal.GoalValue)) ? 1 : newPayloadGoal.GoalValue;\r\n newPayloadGoal.CurrencyCode = newPayloadGoal.CurrencyCode === null ? 'USD' : newPayloadGoal.CurrencyCode;\r\n }\r\n return {\r\n ...newPayloadGoal,\r\n };\r\n });\r\n return result;\r\n};\r\n\r\n","import { ActionOperatorEnum, AttributionModelTypeEnum, CategoryOperatorEnum, ConversionCountTypeEnum, GoalStatusEnum, GoalTypeEnum, GoalValueTypeEnum, LabelOperatorEnum, ValueOperatorEnum } from '@bingads-webui-campaign-react/goal-creation-shared-config';\r\n// ToDo: use campaign-odata-schemas when MT is ready\r\nexport const autoGoalSchemaFieldName = {\r\n Name: 'Name',\r\n Category: 'Category',\r\n CategoryOperator: 'CategoryOperator',\r\n Action: 'Action',\r\n ActionOperator: 'ActionOperator',\r\n Label: 'Label',\r\n LabelOperator: 'LabelOperator',\r\n Value: 'Value',\r\n ValueOperator: 'ValueOperator',\r\n Id: 'Id',\r\n Type: 'Type',\r\n Status: 'Status',\r\n LookbackWindowInMinutes: 'LookbackWindowInMinutes',\r\n LookbackWindowInMinutesGroup: 'LookbackWindowInMinutesGroup',\r\n Day: 'Day',\r\n Hour: 'Hour',\r\n Min: 'Min',\r\n IsAccountLevel: 'IsAccountLevel',\r\n ConversionCountType: 'ConversionCountType',\r\n GoalValue: 'GoalValue',\r\n CurrencyCode: 'CurrencyCode',\r\n GoalValueType: 'GoalValueType',\r\n IsMainConversionGoal: 'IsMainConversionGoal',\r\n ViewThroughLookbackWindowinMinutes: 'ViewThroughLookbackWindowinMinutes',\r\n ViewThroughLookbackWindowinMinutesGroup: 'ViewThroughLookbackWindowinMinutesGroup',\r\n AttributionModelType: 'AttributionModelType',\r\n};\r\n\r\nexport const autoGoalSettingSchema = {\r\n name: 'aut goal setting schema',\r\n type: 'object',\r\n properties: {\r\n [autoGoalSchemaFieldName.Name]: {\r\n type: 'string',\r\n minLength: 1,\r\n },\r\n [autoGoalSchemaFieldName.GoalValue]: {\r\n type: 'number',\r\n required: true,\r\n minimum: 0,\r\n maximum: 9999999,\r\n },\r\n [autoGoalSchemaFieldName.ViewThroughLookbackWindowinMinutes]: {\r\n type: 'integer',\r\n required: true,\r\n minimum: 0,\r\n maximum: 150,\r\n },\r\n [autoGoalSchemaFieldName.ViewThroughLookbackWindowinMinutesGroup]: {\r\n type: 'object',\r\n schema: {\r\n name: 'ViewThroughLookbackWindowinMinutesGroup Schema',\r\n type: 'object',\r\n properties: {\r\n [autoGoalSchemaFieldName.Day]: {\r\n type: 'integer',\r\n required: true,\r\n minimum: 0,\r\n maximum: 30,\r\n },\r\n\r\n [autoGoalSchemaFieldName.Hour]: {\r\n type: 'integer',\r\n minimum: 0,\r\n maximum: 23,\r\n },\r\n [autoGoalSchemaFieldName.Min]: {\r\n type: 'integer',\r\n minimum: 0,\r\n maximum: 59,\r\n },\r\n },\r\n },\r\n },\r\n [autoGoalSchemaFieldName.Category]: {\r\n type: 'string',\r\n },\r\n [autoGoalSchemaFieldName.CategoryOperator]: {\r\n type: 'string',\r\n enum: CategoryOperatorEnum,\r\n },\r\n [autoGoalSchemaFieldName.Action]: {\r\n type: 'string',\r\n },\r\n [autoGoalSchemaFieldName.ActionOperator]: {\r\n type: 'string',\r\n enum: ActionOperatorEnum,\r\n },\r\n [autoGoalSchemaFieldName.Label]: {\r\n type: 'string',\r\n },\r\n [autoGoalSchemaFieldName.LabelOperator]: {\r\n type: 'string',\r\n enum: LabelOperatorEnum,\r\n },\r\n [autoGoalSchemaFieldName.Value]: {\r\n type: 'object',\r\n nullable: true,\r\n },\r\n [autoGoalSchemaFieldName.ValueOperator]: {\r\n type: 'string',\r\n enum: ValueOperatorEnum,\r\n },\r\n [autoGoalSchemaFieldName.Id]: {\r\n type: 'integer',\r\n key: true,\r\n nullable: true,\r\n },\r\n [autoGoalSchemaFieldName.Type]: {\r\n type: 'string',\r\n enum: GoalTypeEnum,\r\n },\r\n [autoGoalSchemaFieldName.Status]: {\r\n type: 'string',\r\n enum: GoalStatusEnum,\r\n },\r\n [autoGoalSchemaFieldName.LookbackWindowInMinutes]: {\r\n type: 'integer',\r\n minimum: 0,\r\n maximum: 129600,\r\n },\r\n [autoGoalSchemaFieldName.LookbackWindowInMinutesGroup]: {\r\n type: 'object',\r\n schema: {\r\n name: 'LookbackWindowInMinutesGroup Schema',\r\n type: 'object',\r\n properties: {\r\n [autoGoalSchemaFieldName.Day]: {\r\n type: 'integer',\r\n required: true,\r\n minimum: 0,\r\n maximum: 90,\r\n },\r\n [autoGoalSchemaFieldName.Hour]: {\r\n type: 'integer',\r\n minimum: 0,\r\n maximum: 23,\r\n },\r\n [autoGoalSchemaFieldName.Min]: {\r\n type: 'integer',\r\n minimum: 0,\r\n maximum: 59,\r\n },\r\n },\r\n },\r\n },\r\n [autoGoalSchemaFieldName.IsAccountLevel]: {\r\n type: 'boolean',\r\n },\r\n [autoGoalSchemaFieldName.ConversionCountType]: {\r\n type: 'string',\r\n enum: ConversionCountTypeEnum,\r\n nullable: true,\r\n },\r\n [autoGoalSchemaFieldName.CurrencyCode]: {\r\n type: 'string',\r\n },\r\n [autoGoalSchemaFieldName.GoalValueType]: {\r\n type: 'string',\r\n enum: GoalValueTypeEnum,\r\n },\r\n [autoGoalSchemaFieldName.AttributionModelType]: {\r\n type: 'string',\r\n enum: AttributionModelTypeEnum,\r\n },\r\n [autoGoalSchemaFieldName.IsMainConversionGoal]: {\r\n type: 'boolean',\r\n nullable: true,\r\n },\r\n },\r\n};\r\n","export const getGoalDetailFormStyles = () => ({\r\n formBody: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '20px',\r\n '& Label': {\r\n fontWeight: 'normal',\r\n },\r\n },\r\n\r\n labelHelp: {\r\n display: 'flex',\r\n gap: '5px',\r\n\r\n '& button': {\r\n color: 'unset',\r\n },\r\n },\r\n accordionHeader: {\r\n color: '#115EA3',\r\n width: '145px',\r\n '& button': {\r\n padding: 0,\r\n },\r\n },\r\n accordionPanel: {\r\n margion: 0,\r\n },\r\n rowContainer: {\r\n display: 'flex',\r\n gap: '12px',\r\n },\r\n});\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { HelpButton } from '@bingads-webui-react/help-popup';\r\nimport { Label } from '@fluentui/react-components';\r\n\r\nexport const LabelHelpButton = ({\r\n i18n,\r\n className,\r\n labelTitle,\r\n helpId,\r\n helpIAriaLabel,\r\n}) => {\r\n const mappedArialLabel = helpIAriaLabel || i18n.getString(_TL_('Learn more about {{term}}'), { term: labelTitle });\r\n return (\r\n \r\n );\r\n};\r\n\r\nLabelHelpButton.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n className: PropTypes.string.isRequired,\r\n labelTitle: PropTypes.string.isRequired,\r\n helpId: PropTypes.string.isRequired,\r\n helpIAriaLabel: PropTypes.string,\r\n};\r\nLabelHelpButton.defaultProps = {\r\n helpIAriaLabel: null,\r\n};\r\n","import { InputLite, withErrorField } from '@bingads-webui-react/primitive-validation-fluent';\r\nimport _ from 'underscore';\r\n\r\nexport const errorMessageMapping = {\r\n required: _TL_('Field must not be empty'),\r\n type: _TL_('Invalid Character'),\r\n maxLength: _TL_('Maximum length exceeded'),\r\n minLength: _TL_('Minimum length not met'),\r\n range: _TL_('Number range is incorrect'),\r\n // [new-i18n-issue]: a workaround to use build-in validation string map\r\n Validation_Base_Field_Not_Valid: _TL_('Validation_Base_Field_Not_Valid'),\r\n Validation_NotEmpty_Required_Field: _TL_('Validation_NotEmpty_Required_Field'),\r\n Validation_String_Max_Length: _TL_('Validation_String_Max_Length'),\r\n Validation_String_Min_Length: _TL_('Validation_String_Min_Length'),\r\n Validation_String_Invalid_Characters: _TL_('Validation_String_Invalid_Characters'),\r\n Validation_Number_Require_Numeric: _TL_('Validation_Number_Require_Numeric'),\r\n Validation_Number_Max_Length: _TL_('Validation_Number_Max_Length'),\r\n Validation_Number_Range_Min: _TL_('Validation_Number_Range_Min'),\r\n Validation_Number_Range_Max: _TL_('Validation_Number_Range_Max'),\r\n Validation_Number_Range_Between: _TL_('Validation_Number_Range_Between'),\r\n};\r\n\r\nexport const handleValidationMessages = (i18n, errors, customErrorMapping = errorMessageMapping) => {\r\n const errorStrings = _.map(\r\n errors,\r\n (oldError, key) => (\r\n _.has(customErrorMapping, key) ?\r\n i18n.getString(customErrorMapping[key]) : oldError)\r\n );\r\n return _.isEmpty(errorStrings) ? [] : [_.last(errorStrings)];\r\n};\r\n\r\nexport const ValidatedInput = withErrorField(InputLite);\r\n\r\n","import _ from 'underscore';\r\nimport classNames from 'classnames';\r\nimport React, { useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Field } from '@fluentui/react-components';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { duration2Input, input2Duration } from '@bingads-webui-campaign-react/auto-goal-creation-wizard-utils';\r\nimport { ValidationGroup } from '@bingads-webui-react/primitive-validation-fluent';\r\n\r\nimport { getGoalDetailFormStyles } from '../styles/goal-details-setting-form-style';\r\nimport { ValidatedInput, errorMessageMapping, handleValidationMessages } from '../control-components/validated-helper';\r\nimport { autoGoalSettingSchema } from '../auto-goal-schema';\r\n\r\nexport const ConversionWindowFormUnstyled = ({\r\n i18n,\r\n className,\r\n classes,\r\n onChange,\r\n windowTargetName,\r\n schemaFieldGroupName,\r\n conversionWindowInMin,\r\n label,\r\n maxWindowInMin,\r\n minWindowInMin,\r\n}) => {\r\n const timeObj = duration2Input(conversionWindowInMin);\r\n const maxWindowInDay = maxWindowInMin / 24 / 60;\r\n const customError = [i18n.getString(_TL_('Enter a conversion period of up to {{day}} days.'), { day: maxWindowInDay })];\r\n const customValidator = total => total >= minWindowInMin && total <= maxWindowInMin;\r\n const [showError, setShowError] = useState(false);\r\n const onValidate = (result) => {\r\n if (result && result.isValid) {\r\n const updateObj = { ...timeObj, ..._.get(result, ['data', schemaFieldGroupName]) };\r\n const updatedTime = input2Duration(updateObj);\r\n if (customValidator(updatedTime)) {\r\n onChange(windowTargetName, updatedTime);\r\n setShowError(false);\r\n } else {\r\n setShowError(true);\r\n }\r\n }\r\n };\r\n const customErrorMapping = {\r\n ...errorMessageMapping,\r\n decimalLength: _TL_('Field requires integer value'),\r\n };\r\n\r\n const errorProcessor = errors => handleValidationMessages(i18n, errors, customErrorMapping);\r\n return (\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nConversionWindowFormUnstyled.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n className: PropTypes.string,\r\n classes: PropTypes.shape(_.mapObject(\r\n getGoalDetailFormStyles(),\r\n _.constant(PropTypes.string.isRequired)\r\n )).isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n windowTargetName: PropTypes.string.isRequired,\r\n schemaFieldGroupName: PropTypes.string.isRequired,\r\n conversionWindowInMin: PropTypes.number,\r\n maxWindowInMin: PropTypes.number.isRequired,\r\n minWindowInMin: PropTypes.number,\r\n label: PropTypes.node.isRequired,\r\n};\r\n\r\nConversionWindowFormUnstyled.defaultProps = {\r\n className: 'goal-window-form',\r\n conversionWindowInMin: 0,\r\n minWindowInMin: 0,\r\n};\r\n\r\nexport const ConversionWindowForm = withDefaultStyles(ConversionWindowFormUnstyled, getGoalDetailFormStyles);\r\n","import _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport React, { useMemo } from 'react';\r\nimport {\r\n Field,\r\n Dropdown,\r\n Option,\r\n} from '@fluentui/react-components';\r\nimport { getCurrencyOptions } from '@bingads-webui-campaign-react/conversion-utils';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { GoalPropType, findOptionbyKey } from '@bingads-webui-campaign-react/auto-goal-creation-wizard-utils';\r\n\r\nimport { getGoalDetailFormStyles } from '../styles/goal-details-setting-form-style';\r\nimport { autoGoalSchemaFieldName } from '../auto-goal-schema';\r\nimport { ValidatedInput, errorMessageMapping, handleValidationMessages } from '../control-components/validated-helper';\r\n\r\nexport const DefaultRevenueFormUnstyled = ({\r\n i18n,\r\n classes,\r\n draftGoal,\r\n onChange,\r\n}) => {\r\n const currencyOptions = useMemo(() => getCurrencyOptions(i18n), [i18n]);\r\n const selectedOption = findOptionbyKey(currencyOptions, draftGoal.CurrencyCode);\r\n const customError = {\r\n ...errorMessageMapping,\r\n decimalLength: _TL_('The number with up to 2 decimal places.'),\r\n };\r\n\r\n return (\r\n
\r\n
\r\n onChange('GoalValue', e.target.value)}\r\n validationProps={{\r\n field: autoGoalSchemaFieldName.GoalValue,\r\n errorProcessor: errors => handleValidationMessages(i18n, errors, customError),\r\n }}\r\n />\r\n
\r\n
\r\n \r\n onChange('CurrencyCode', data.optionValue || '')}\r\n value={selectedOption && selectedOption.text}\r\n selectedOptions={selectedOption && [selectedOption.key]}\r\n >\r\n {currencyOptions.map(option =>\r\n )\r\n }\r\n \r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nDefaultRevenueFormUnstyled.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n classes: PropTypes.shape(_.mapObject(\r\n getGoalDetailFormStyles(),\r\n _.constant(PropTypes.string.isRequired)\r\n )).isRequired,\r\n draftGoal: PropTypes.shape(GoalPropType).isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n};\r\nexport const DefaultRevenueForm = withDefaultStyles(DefaultRevenueFormUnstyled, getGoalDetailFormStyles);\r\n","import _ from 'underscore';\r\nimport React, { useContext, useState, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport {\r\n Accordion,\r\n AccordionHeader,\r\n AccordionItem,\r\n AccordionPanel,\r\n Field,\r\n Radio,\r\n RadioGroup,\r\n Dropdown,\r\n Option,\r\n Checkbox,\r\n Link\r\n} from '@fluentui/react-components';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ReactTemplate } from '@bingads-webui-react/react-template';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { ValidationGroup } from '@bingads-webui-react/validation';\r\nimport { goalHelpIdMapping } from '@bingads-webui-campaign-react/goal-creation-shared-config';\r\nimport { GoalPropType, findOptionbyKey } from '@bingads-webui-campaign-react/auto-goal-creation-wizard-utils';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\n\r\nimport { autoGoalSchemaFieldName, autoGoalSettingSchema } from './auto-goal-schema';\r\nimport { getGoalDetailFormStyles } from './styles/goal-details-setting-form-style';\r\nimport { LabelHelpButton } from './components/label-help-button';\r\nimport { ConversionWindowForm } from './components/window-form';\r\nimport { DefaultRevenueForm } from './components/default-revenue-value-form';\r\nimport { getAttributeModelOptions, getRevenueOptions } from './constants';\r\nimport { ValidatedInput, handleValidationMessages } from './control-components/validated-helper';\r\n\r\nexport const GoalDetailForm = ({\r\n draftGoal,\r\n setDraftGoal,\r\n setIsFormValid,\r\n accountName,\r\n activity,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const classes = useDefaultStyles(getGoalDetailFormStyles);\r\n const serverContext = useContext(ServerContext);\r\n const locale = _.get(serverContext, ['CurrentLocale'], 'en-us').toLowerCase();\r\n const languageCode = locale.split('-')[0];\r\n\r\n const onAccountLabel = `${i18n.getString(_TL_('On account:'))} ${accountName}`;\r\n const acrossAccountsLabel = i18n.getString(_TL_('Across all accounts'));\r\n const allCountLabel = i18n.getString(_TL_('All (if one ad click causes 3 purchases, 3 conversions will be counted) '));\r\n const uniqueCountLabel = i18n.getString(_TL_('Unique (if one ad click causes 3 purchases, 1 conversion will be counted)'));\r\n\r\n const setRadioValue = (name, newValue) => {\r\n const copiedGoal = _.clone(draftGoal);\r\n if (name === 'IsAccountLevel') {\r\n copiedGoal[name] = newValue === 'accountLevel';\r\n } else {\r\n copiedGoal[name] = newValue;\r\n }\r\n if (name === 'IsMainConversionGoal') {\r\n copiedGoal[name] = newValue === 'yes';\r\n }\r\n if (name === 'IsEnhancedConversionsEnabled') {\r\n copiedGoal[name] = newValue;\r\n if (activity && activity.trace) {\r\n activity.trace(`[GoalDetailForm] IsEnhancedConversionsEnabled DraftGoal ${JSON.stringify(copiedGoal)}`);\r\n }\r\n }\r\n setDraftGoal(copiedGoal);\r\n };\r\n\r\n const onValidate = (result) => {\r\n if (result) {\r\n setIsFormValid(result.isValid);\r\n }\r\n };\r\n\r\n const onGenericValueChange = (name, value) => {\r\n const copiedGoal = _.clone(draftGoal);\r\n copiedGoal[name] = value;\r\n setDraftGoal(copiedGoal);\r\n };\r\n\r\n const attributeModelOptions = useMemo(() => getAttributeModelOptions(i18n), [i18n]);\r\n const selectedAttributeModelOption = findOptionbyKey(attributeModelOptions, draftGoal.AttributionModelType);\r\n\r\n const revenueOptions = useMemo(() => getRevenueOptions(i18n), [i18n]);\r\n const selectedReveueOption = findOptionbyKey(revenueOptions, draftGoal.GoalValueType);\r\n const [isValueAvailable, setIsValueAvailable] = useState(draftGoal.GoalValueType === 'VariantValue' || draftGoal.GoalValueType === 'FixedValue');\r\n\r\n const onChangeRevenueSelection = (ev, data) => {\r\n onGenericValueChange('GoalValueType', data.optionValue || '');\r\n const shouldShowValueDropdown = data.optionValue === 'FixedValue' || data.optionValue === 'VariantValue';\r\n setIsValueAvailable(shouldShowValueDropdown);\r\n };\r\n\r\n return (\r\n
\r\n\r\n \r\n onGenericValueChange('Name', e.target.value)}\r\n validationProps={{\r\n field: autoGoalSchemaFieldName.Name,\r\n errorProcessor: errors => handleValidationMessages(i18n, errors),\r\n }}\r\n />\r\n \r\n }\r\n >\r\n \r\n {\r\n revenueOptions.map(option =>\r\n )\r\n }\r\n \r\n \r\n {isValueAvailable && ()}\r\n \r\n }\r\n >\r\n setRadioValue('IsMainConversionGoal', data.value)}\r\n value={draftGoal.IsMainConversionGoal ? 'yes' : 'no'}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n }\r\n >\r\n setRadioValue('IsEnhancedConversionsEnabled', data && data.checked)}\r\n checked={draftGoal.IsEnhancedConversionsEnabled}\r\n label={\r\n <>\r\n\r\n ({text}),\r\n policy: text => ({text}),\r\n learnMoreLink: text => ({text}),\r\n }}\r\n template={i18n.getString(_TL_('By enabling enhanced conversion tracking, you agree to Microsoft {{terms}}terms of use{{/terms}} and {{policy}}privacy policy{{/policy}}. {{learnMoreLink}}Learn more{{/learnMoreLink}}.'))}\r\n />\r\n \r\n }\r\n />\r\n \r\n\r\n \r\n \r\n \r\n {i18n.getString(_TL_('Advanced settings'))}\r\n \r\n \r\n \r\n }\r\n >\r\n setRadioValue('IsAccountLevel', data.value)}\r\n value={draftGoal.IsAccountLevel ? 'accountLevel' : 'customerLevel'}\r\n >\r\n \r\n \r\n \r\n \r\n\r\n }\r\n >\r\n setRadioValue('ConversionCountType', data.value)}\r\n value={draftGoal.ConversionCountType}\r\n >\r\n \r\n \r\n \r\n \r\n\r\n }\r\n />\r\n\r\n }\r\n />\r\n\r\n }\r\n >\r\n onGenericValueChange('AttributionModelType', data.optionValue || '')}\r\n value={selectedAttributeModelOption && selectedAttributeModelOption.text}\r\n selectedOptions={selectedAttributeModelOption && [selectedAttributeModelOption.key]}\r\n >\r\n {\r\n attributeModelOptions.map(option =>\r\n )\r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nGoalDetailForm.propTypes = {\r\n accountName: PropTypes.string.isRequired,\r\n draftGoal: PropTypes.shape(GoalPropType).isRequired,\r\n setDraftGoal: PropTypes.func.isRequired,\r\n setIsFormValid: PropTypes.func.isRequired,\r\n activity: PropTypes.shape({\r\n trace: PropTypes.func.isRequired,\r\n error: PropTypes.func.isRequired,\r\n }),\r\n};\r\n\r\nGoalDetailForm.defaultProps = {\r\n activity: {\r\n trace: _.noop,\r\n error: _.noop,\r\n },\r\n};\r\n","export const getAttributeModelOptions = i18n => [{ key: 'Default', text: i18n.getString(_TL_('Last Click')) },\r\n { key: 'LastTouch', text: i18n.getString(_TL_('Last Touch')) }];\r\n\r\nexport const getRevenueOptions = i18n => [\r\n {\r\n key: 'FixedValue',\r\n text: i18n.getString(_TL_('Each conversion action has the same value')),\r\n ariaLabel: i18n.getString(_TL_('Each conversion action has the same value')),\r\n },\r\n {\r\n key: 'VariantValue',\r\n text: i18n.getString(_TL_('Conversion action value may vary (for example, by price)')),\r\n ariaLabel: i18n.getString(_TL_('Conversion action value may vary (for example, by price)')),\r\n },\r\n {\r\n key: 'NoValue',\r\n text: i18n.getString(_TL_('Don\\'t assign a value')),\r\n ariaLabel: i18n.getString(_TL_('Don\\'t assign a value')),\r\n },\r\n];\r\n","import _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport React, { useContext, useEffect, useState } from 'react';\r\nimport { Button } from '@fluentui/react-components';\r\nimport {\r\n Drawer,\r\n DrawerHeader,\r\n DrawerHeaderTitle,\r\n DrawerBody,\r\n DrawerFooter\r\n} from '@fluentui/react-drawer';\r\nimport {\r\n MessageBar, MessageBarBody, MessageBarTitle,\r\n} from '@fluentui/react-message-bar';\r\nimport { Dismiss24Regular } from '@fluentui/react-icons';\r\nimport { GoalPropType } from '@bingads-webui-campaign-react/auto-goal-creation-wizard-utils';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\n\r\nimport { GoalDetailForm } from './goal-details-setting-form';\r\n\r\nexport const GoalDetailSettingDrawer = ({\r\n accountName,\r\n activity,\r\n goal,\r\n isOpen,\r\n isReadOnly,\r\n message,\r\n setGoal,\r\n setIsOpen,\r\n restoreFocusSourceAttributes,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const [draftGoal, setDraftGoal] = useState(_.clone(goal));\r\n const [isFormValid, setIsFormValid] = useState(true);\r\n\r\n useEffect(() => {\r\n setDraftGoal(_.clone(goal));\r\n }, [goal]);\r\n\r\n const onSaveBtnClick = () => {\r\n if (isFormValid) {\r\n setGoal(draftGoal);\r\n if (activity && activity.trace) {\r\n activity.trace(`[GoalDetailForm] onSaveBtnClick draftGoal ${JSON.stringify(draftGoal)}`);\r\n }\r\n }\r\n };\r\n\r\n const onCancelBtnClick = () => {\r\n setDraftGoal(_.clone(goal));\r\n if (activity && activity.trace) {\r\n activity.trace(`[GoalDetailForm] onCancelBtnClick draftGoal ${JSON.stringify(draftGoal)}`);\r\n }\r\n setIsOpen(false);\r\n };\r\n\r\n return (\r\n setIsOpen(open)}\r\n position=\"end\"\r\n size=\"medium\"\r\n modalType=\"modal\"\r\n\r\n >\r\n \r\n }\r\n onClick={() => setIsOpen(false)}\r\n />\r\n }\r\n >\r\n {i18n.getString(_TL_('Edit settings'))}\r\n \r\n \r\n \r\n \r\n \r\n {message &&\r\n \r\n \r\n \r\n {message}\r\n \r\n \r\n \r\n }\r\n \r\n \r\n {i18n.getString(_TL_('Save'))}\r\n \r\n \r\n {i18n.getString(_TL_('Cancel'))}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nGoalDetailSettingDrawer.propTypes = {\r\n accountName: PropTypes.string.isRequired,\r\n activity: PropTypes.shape({\r\n trace: PropTypes.func.isRequired,\r\n error: PropTypes.func.isRequired,\r\n }),\r\n goal: PropTypes.shape(GoalPropType).isRequired,\r\n isOpen: PropTypes.bool.isRequired,\r\n isReadOnly: PropTypes.bool,\r\n message: PropTypes.string,\r\n setGoal: PropTypes.func.isRequired,\r\n setIsOpen: PropTypes.func.isRequired,\r\n restoreFocusSourceAttributes: PropTypes.shape({}),\r\n};\r\n\r\nGoalDetailSettingDrawer.defaultProps = {\r\n activity: {\r\n trace: _.noop,\r\n error: _.noop,\r\n },\r\n isReadOnly: false,\r\n message: null,\r\n restoreFocusSourceAttributes: {},\r\n};\r\n","import _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport React, { useContext, useState } from 'react';\r\nimport { GoalPropType } from '@bingads-webui-campaign-react/auto-goal-creation-wizard-utils';\r\nimport { updateGoal } from '@bingads-webui-campaign-react/auto-goal-data-repository';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { getMessageFromErrors } from '@bingads-webui-campaign-react/conversion-wizard-components';\r\n\r\nimport { GoalDetailSettingDrawer } from './goal-details-setting-drawer';\r\nimport { generateAddOrEditGoalPayload } from './helper';\r\n\r\nexport const GoalDetailSettingEditDrawer = ({\r\n activity,\r\n goal,\r\n isOpen,\r\n isReadOnly,\r\n serverContext,\r\n setGoal,\r\n setIsOpen,\r\n restoreFocusSourceAttributes = {},\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const { Id: aid, AdvertiserCustomerID: cid } = serverContext.CurrentAccount;\r\n const [message, setMessage] = useState(null);\r\n const defaultErrorMessageEdit = i18n.getString(_TL_('Sorry, an error occurred while editing this goal.'));\r\n\r\n const setGoalInternal = (draftGoal) => {\r\n const editPayloads = generateAddOrEditGoalPayload([draftGoal]);\r\n\r\n updateGoal(draftGoal.Id, { ...editPayloads[0] }, cid, aid)\r\n .then((result) => {\r\n activity.trace(`[GoalDetailSettingEditDrawer] setGoalInternal draftGoal ${JSON.stringify(result)}`);\r\n setGoal(draftGoal);\r\n setIsOpen(false);\r\n })\r\n .catch(({ errors }) => {\r\n if (errors) {\r\n const errorMessage = getMessageFromErrors(i18n, errors);\r\n setMessage(errorMessage);\r\n } else {\r\n setMessage(defaultErrorMessageEdit);\r\n }\r\n });\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nGoalDetailSettingEditDrawer.propTypes = {\r\n activity: PropTypes.shape({\r\n trace: PropTypes.func.isRequired,\r\n error: PropTypes.func.isRequired,\r\n }),\r\n goal: PropTypes.shape(GoalPropType).isRequired,\r\n isOpen: PropTypes.bool.isRequired,\r\n isReadOnly: PropTypes.bool,\r\n serverContext: PropTypes.shape({\r\n CurrentAccount: PropTypes.object.isRequired,\r\n CurrentCustomer: PropTypes.object.isRequired,\r\n }).isRequired,\r\n setGoal: PropTypes.func.isRequired,\r\n setIsOpen: PropTypes.func.isRequired,\r\n restoreFocusSourceAttributes: PropTypes.shape({}),\r\n};\r\n\r\nGoalDetailSettingEditDrawer.defaultProps = {\r\n activity: {\r\n trace: _.noop,\r\n error: _.noop,\r\n },\r\n isReadOnly: false,\r\n restoreFocusSourceAttributes: {},\r\n};\r\n","import { makeStyles } from '@fluentui/react-components';\r\n\r\nexport const useStyles = makeStyles({\r\n card: {\r\n marginTop: '10px',\r\n marginLeft: '32px',\r\n width: '100%',\r\n },\r\n subTitle: {\r\n fontSize: '16px',\r\n },\r\n text: {\r\n fontSize: '12px',\r\n margin: 0,\r\n fontWeight: 400,\r\n },\r\n header: {\r\n fontWeight: 600,\r\n fontSize: '14px',\r\n },\r\n});\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { Body1Stronger, Button, Card, CardFooter, CardHeader, Divider, mergeClasses } from '@fluentui/react-components';\r\n\r\nimport { useStyles } from './styles';\r\n\r\nexport const RecommendationTile = ({\r\n i18n,\r\n isReadOnly,\r\n onClick,\r\n}) => {\r\n const styles = useStyles();\r\n\r\n return (\r\n \r\n \r\n {i18n.getString(_TL_('Add more conversion goals'))}\r\n \r\n }\r\n />\r\n \r\n \r\n {i18n.getString(_TL_('We have detected new conversion goals to add based on your website activities'))}\r\n \r\n

\r\n {i18n.getString(_TL_('Add more goals to further optimize your campaign performance.'))}\r\n

\r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nRecommendationTile.propTypes = {\r\n onClick: PropTypes.func.isRequired,\r\n i18n: PropTypes.shape({ getString: PropTypes.func }).isRequired,\r\n isReadOnly: PropTypes.bool,\r\n};\r\n\r\nRecommendationTile.defaultProps = {\r\n isReadOnly: false,\r\n};\r\n","import _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Fragment } from 'react';\r\nimport { useRecommendation, useGoalwithParams } from '@bingads-webui-campaign-react/auto-goal-data-repository';\r\n\r\nimport { RecommendationTile } from './recommendation-tile';\r\n\r\nexport const RecommendationTileWithCondition = ({\r\n activity,\r\n i18n,\r\n isReadOnly,\r\n onClick,\r\n serverContext,\r\n}) => {\r\n const [recommendation] = useRecommendation({ serverContext, activity });\r\n const formatDate = date => i18n.formatDate(date, { raw: 'M/d/yyyy' });\r\n const startDate = new Date();\r\n startDate.setFullYear(startDate.getFullYear() - 1);\r\n const params = {\r\n $filter: '(isAutoGoal eq true)', $startDate: formatDate(startDate), $endDate: formatDate(new Date()), $count: true,\r\n };\r\n const [, count] = useGoalwithParams({ serverContext, activity, params });\r\n const shouldShow = !_.isEmpty(recommendation) && count > 0;\r\n activity.trace(`[RecommendationTileWithCondition] should Show tile ${shouldShow} with auto goal count of ${count}`);\r\n\r\n const onClickInternal = (e) => {\r\n activity.trace('[RecommendationTileWithCondition] clicked');\r\n if (onClick) {\r\n onClick(e);\r\n }\r\n };\r\n\r\n return shouldShow ? : ;\r\n};\r\n\r\nRecommendationTileWithCondition.propTypes = {\r\n activity: PropTypes.shape({\r\n error: PropTypes.func,\r\n trace: PropTypes.func,\r\n }),\r\n i18n: PropTypes.shape({ getString: PropTypes.func }).isRequired,\r\n isReadOnly: PropTypes.bool,\r\n onClick: PropTypes.func.isRequired,\r\n serverContext: PropTypes.shape({\r\n CurrentAccount: PropTypes.shape({\r\n AdvertiserCustomerID: PropTypes.string,\r\n Id: PropTypes.string,\r\n }),\r\n Token: PropTypes.string,\r\n }).isRequired,\r\n};\r\n\r\nRecommendationTileWithCondition.defaultProps = {\r\n activity: { trace: _.noop, error: _.noop },\r\n isReadOnly: false,\r\n};\r\n","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n, i18nGlobal, isForVNext, showSaveAndCreateAnother) {pug_mixins[\"koErrors\"] = pug_interp = function(id, cssClass){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Cul\" + (pug.attr(\"class\", pug.classes([cssClass ? cssClass : 'alert alert-danger'], [true]), false, true)+\" data-bind=\\\"visible: errors().length > 0, foreach: errors, attr: {"aria-hidden": errors().length == 0}\\\"\"+pug.attr(\"id\", id ? id : 'KoErrors', true, true)) + \"\\u003E\\u003Cli\\u003E\\u003Cdiv data-bind=\\\"html: $data\\\" role=\\\"alert\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fli\\u003E\\u003C\\u002Ful\\u003E\";\n};\npug_html = pug_html + \"\\u003Cdiv class=\\\"form-horizontal\\\"\\u003E\\u003Cdiv data-bind=\\\"attr:{class: containerClass}\\\"\\u003E\\u003Cdiv class=\\\"panel-heading\\\" role=\\\"heading\\\" aria-level=\\\"2\\\"\\u003E\\u003Cdiv class=\\\"panel-title\\\" data-bind=\\\"text: adEditorTitle\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"panel-body-ad\\\"\\u003E\\u003Cdiv class=\\\"form-group\\\" data-bind=\\\"visible: errors().length > 0\\\"\\u003E\";\npug_mixins[\"koErrors\"]();\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group\\\" data-bind=\\\"visible: showAdGroups\\\"\\u003E\\u003Clabel class=\\\"col-sm-2 control-label\\\" data-bind=\\\"attr: {id:selectorLabelId}\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18nGlobal.get('CampaignAdGroupSelector_SelectAdGroup')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003Cdiv class=\\\"col-sm-4 adgroup-selector\\\"\\u003E\";\nif (!isForVNext) {\npug_html = pug_html + \"\\u003Cdiv data-bind=\\\"campaignAdgroupSelectorControl: selectedCampaigns, adgroupObservable: selectedAdgroups, scope: scopeContext, showAdgroupSelector: showAdGroups, selectorLabelId:selectorLabelId\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"ad-panel\\\" data-bind=\\\"visible: showEditor() && allowAdCreation()\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"p\\\" data-bind=\\\"visible: showEditor() && !allowAdCreation()\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('Ad_Cannot_Create_Ad_For_This_campaign')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"panel-footer save-bar appEditor-save-container\\\" data-bind=\\\"visible: !isDisplayAdWithCopilot() && !isXandrVideoAd() && !isMultiAdFormatDisplayAd() && !isMultiAdFormatVideoAd() && !hideFooter()\\\"\\u003E\\u003Cinput\" + (\" class=\\\"btn btn-primary save\\\"\"+\" type=\\\"button\\\"\"+pug.attr(\"value\", i18nGlobal.get('Button_Save'), true, true)+\" data-bind=\\\"enable: showEditor() && allowAdCreation() && hasWebsiteImageOptedIn(), attr: { "data-analyticsid": saveAnalyticsId() }\\\"\") + \"\\u003E\";\nif (showSaveAndCreateAnother) {\npug_html = pug_html + \"\\u003Cinput\" + (\" class=\\\"save-create-another btn btn-default\\\"\"+\" type=\\\"button\\\"\"+pug.attr(\"value\", i18n.get('Ad_SaveCreate'), true, true)+\" data-bind=\\\"visible: !hideSaveAndCreateAnother(), enable: showEditor() && allowAdCreation() && hasWebsiteImageOptedIn(), attr: { "data-analyticsid": saveCreateAnalyticsId() }\\\"\") + \"\\u003E\";\n}\npug_html = pug_html + \"\\u003Cinput\" + (\" class=\\\"btn btn-default cancel\\\"\"+\" type=\\\"button\\\"\"+pug.attr(\"value\", i18nGlobal.get('Button_Cancel'), true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"i18nGlobal\" in locals_for_with?locals_for_with.i18nGlobal:typeof i18nGlobal!==\"undefined\"?i18nGlobal:undefined,\"isForVNext\" in locals_for_with?locals_for_with.isForVNext:typeof isForVNext!==\"undefined\"?isForVNext:undefined,\"showSaveAndCreateAnother\" in locals_for_with?locals_for_with.showSaveAndCreateAnother:typeof showSaveAndCreateAnother!==\"undefined\"?showSaveAndCreateAnother: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;\n\n\n\npug_html = pug_html + \"\\u003Cdiv class=\\\"add-keywords-root\\\"\\u003E\\u003Cdiv class=\\\"panel-body\\\"\\u003E\\u003Cdiv class=\\\"row\\\"\\u003E\\u003Cdiv class=\\\"col-sm-4\\\"\\u003E\\u003Cdiv class=\\\"parser\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-1\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-7\\\" data-bind=\\\"visible: isKeywordPlannerEnabled()\\\"\\u003E\\u003Cdiv class=\\\"keyword-planner-inline\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\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 (associationType, isUINext) {pug_html = pug_html + \"\\u003Cdiv class=\\\"bingadsgrid adextensions-grid\\\"\\u003E\\u003Cdiv railviewid=\\\"AdExtensions_Load\\\" style=\\\"display: none\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([associationType + '__container'], [true]), false, true)) + \"\\u003E\\u003Cdiv class=\\\"grid-toolbar-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"filter-bar\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"editor__container bulkedit-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\\u003E\\u003Cdiv class=\\\"grid-table\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"grid-pagination-control\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"noresult-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"filter-noresult-container\\\" style=\\\"display:none\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\nif (!isUINext) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"pager\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"associationType\" in locals_for_with?locals_for_with.associationType:typeof associationType!==\"undefined\"?associationType:undefined,\"isUINext\" in locals_for_with?locals_for_with.isUINext:typeof isUINext!==\"undefined\"?isUINext: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=\\\"btn-toolbar\\\" data-bind=\\\"visible: !hideToolbar()\\\"\\u003E\\u003Cdiv class=\\\"btn-group chartToggle\\\" data-bind=\\\"visible: !hideToggleIcon()\\\"\\u003E\\u003Cbutton class=\\\"btn btn-square\\\" id=\\\"bi-chartToggle\\\" type=\\\"button\\\" title=\\\"Show graph\\\" data-bind=\\\"click: onShowChartButtonClick\\\"\\u003E\\u003Cdiv class=\\\"chart-icon\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fbutton\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"chart-container\\\" data-bind=\\\"visible: showChart()\\\" chart-iteration=\\\"0\\\"\\u003E\\u003Ctable class=\\\"cbTable\\\" id=\\\"chartTable\\\" data-bind=\\\"visible: !isChartLoading()\\\"\\u003E\\u003Ctbody\\u003E\\u003Ctr\\u003E\\u003Ctd class=\\\"chartDropdowns\\\" id=\\\"chartDropdowns\\\" colspan=\\\"2\\\"\\u003E\\u003Cdiv class=\\\"chart_ctc_title chart_biz\\\"\\u003E\\u003Cspan id=\\\"chartTitle\\\" data-bind=\\\"text: chartTitle\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Ca class=\\\"helpbutton chart_viz\\\" id=\\\"chart-helpicon\\\" data-bind=\\\"attr: { 'aria-label': learnMoreLabel}\\\" type=\\\"helppopup\\\" topic=\\\"Page_Campaigns_AccountPerformance\\\" onclick=\\\"PopupController.PopupJsClick(this)\\\" href=\\\"javascript:void(0);\\\" aria-labelledby=\\\"chart-helpicon chartTitle\\\"\\u003E\\u003C\\u002Fa\\u003E\\u003Cdiv class=\\\"inline-block metricVsSpan\\\" data-bind=\\\"visible: (isPopOn() || isMovingAverageOn()) && isComparisonDataMissing()\\\"\\u003E\\u003Cspan data-bind=\\\"comparisonDataMissingText()\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"dropdown-inline inline-block\\\"\\u003E\\u003Cdiv id=\\\"bi_ctc_dropdowns\\\"\\u003E\\u003Cspan class=\\\"metricColorLine primary-line\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"metricColorLine primary-comparison-line\\\" data-bind=\\\"visible: isPopOn()\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cdiv class=\\\"dropdown-container\\\" id=\\\"main-primary-dropdown\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cspan class=\\\"metricVsSpan\\\"\\u003Evs\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"metricColorLine secondary-line\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"metricColorLine secondary-comparison-line\\\" data-bind=\\\"visible: isPopOn()\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cdiv class=\\\"dropdown-container\\\" id=\\\"main-secondary-dropdown\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"dropdown-container\\\" id=\\\"granularity-dropdown-container\\\" data-bind=\\\"visible: isGranularityShowing()\\\"\\u003E\\u003Cdiv class=\\\"dropdown-container\\\" id=\\\"granularity-dropdown\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"inline-block\\\" id=\\\"bi-moving-average\\\" data-bind=\\\"visible: isMovingAverageVisible()\\\"\\u003E\\u003Cinput class=\\\"ma-checkbox\\\" type=\\\"checkbox\\\" data-bind=\\\"checked: isMovingAverageOn(), click: onMovingAverageClick, attr: {'aria-label': showMovingAverageText, 'aria-checked': isMovingAverageOn() ? 'true' : 'false'}\\\"\\u003E\\u003Cspan id=\\\"ShowMovingAverageLabel\\\" data-bind=\\\"text: showMovingAverageText\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Ca class=\\\"helpbutton\\\" id=\\\"chart-helpicon-PMA\\\" type=\\\"helppopup\\\" topic=\\\"pop_BA_PerformanceMovingAverage\\\" onclick=\\\"PopupController.PopupJsClick(this)\\\" href=\\\"javascript:void(0);\\\" aria-labelledby=\\\"chart-helpicon-PMA ShowMovingAverageLabel\\\" data-bind=\\\"attr: { 'aria-label': learnMoreLabel}\\\"\\u003E\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Ftd\\u003E\\u003C\\u002Ftr\\u003E\\u003Ctr id=\\\"chartMainArea\\\"\\u003E\\u003Ctd class=\\\"chartTableColumn1\\\" data-bind=\\\"visible: isDataAvailable()\\\"\\u003E\\u003Cdiv id=\\\"highcharts-container\\\" style=\\\"height: 105px;\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv id=\\\"charts-label\\\"\\u003E\\u003Cdiv class=\\\"row\\\"\\u003E\\u003Cdiv class=\\\"col-md-4\\\"\\u003E\\u003Cspan class=\\\"xAxisLabelLeft primary-date\\\" data-bind=\\\"text: xAxisStartValue()\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-md-4 col-md-offset-4\\\"\\u003E\\u003Cspan class=\\\"xAxisLabelRight primary-date\\\" data-bind=\\\"text: xAxisEndValue()\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"row\\\" data-bind=\\\"if: isPopOn()\\\"\\u003E\\u003Cdiv class=\\\"col-md-4\\\"\\u003E\\u003Cspan class=\\\"xAxisLabelLeft compared-date\\\" data-bind=\\\"text: comparedXAxisStartValue()\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-md-4 col-md-offset-4\\\"\\u003E\\u003Cspan class=\\\"xAxisLabelRight compared-date\\\" data-bind=\\\"text: comparedXAxisEndValue()\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Ftd\\u003E\\u003C\\u002Ftr\\u003E\\u003C\\u002Ftbody\\u003E\\u003C\\u002Ftable\\u003E\\u003Cdiv class=\\\"spinner\\\" data-bind=\\\"visible: isChartLoading()\\\"\\u003E\\u003Cdiv class=\\\"spinner-icon\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"chart-no-data-container\\\" data-bind=\\\"visible: !isChartLoading() && !isDataAvailable()\\\"\\u003E\\u003Cdiv class=\\\"chart-no-data-label\\\"\\u003E\\u003Cspan data-bind=\\\"html: noDataText()\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\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 (AccountNumber, EmailAddress) {pug_html = pug_html + \"\\u003Cp\\u003E\" + (pug.escape(null == (pug_interp = EmailAddress) ? \"\" : pug_interp)) + \"\\u003Cbr\\u003E\" + (pug.escape(null == (pug_interp = AccountNumber) ? \"\" : pug_interp)) + \"\\u003C\\u002Fp\\u003E\";}.call(this,\"AccountNumber\" in locals_for_with?locals_for_with.AccountNumber:typeof AccountNumber!==\"undefined\"?AccountNumber:undefined,\"EmailAddress\" in locals_for_with?locals_for_with.EmailAddress:typeof EmailAddress!==\"undefined\"?EmailAddress:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (id) {pug_html = pug_html + \"\\u003Cp\\u003E\" + (pug.escape(null == (pug_interp = id) ? \"\" : pug_interp)) + \"\\u003C\\u002Fp\\u003E\";}.call(this,\"id\" in locals_for_with?locals_for_with.id:typeof id!==\"undefined\"?id: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 (errorDetailsLabel, hasError, hasErrorCode, hasErrorSummary, hasPreview, i18n) {pug_html = pug_html + \"\\u003Cdiv class=\\\"status-row\\\"\\u003E\";\nif (hasError) {\npug_html = pug_html + \"\\u003Ca class=\\\"download-error\\\" role=\\\"button\\\" tabindex=\\\"0\\\" href=\\\"javascript:void(0);\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('Import_LastImport_DownloadErrorFile')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\";\nif (hasErrorSummary) {\npug_html = pug_html + \"\\u003Cspan\\u003E  |  \\u003C\\u002Fspan\\u003E\\u003Ca class=\\\"download-error-summary\\\" role=\\\"button\\\" tabindex=\\\"0\\\" href=\\\"javascript:void(0);\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('Import_LastImport_DownloadErrorSummaryFile')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\";\n}\n}\nelse\nif (hasPreview) {\npug_html = pug_html + \"\\u003Ca class=\\\"btn__preview\\\" role=\\\"button\\\" tabindex=\\\"0\\\" href=\\\"javascript:void(0);\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('CampaignImport_ButtonPreview')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003Cspan\\u003E | \\u003C\\u002Fspan\\u003E\\u003Ca class=\\\"btn__cancel\\\" role=\\\"button\\\" tabindex=\\\"0\\\" href=\\\"javascript:void(0);\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('CampaignImport_ButtonCancel')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\";\n}\nelse\nif (hasErrorCode) {\npug_html = pug_html + \"\\u003Ca\" + (\" class=\\\"import-actions learn-more\\\"\"+\" role=\\\"button\\\" tabindex=\\\"0\\\" href=\\\"javascript:void(0);\\\" data-toggle=\\\"tooltip\\\" data-trigger=\\\"manual\\\" data-placement=\\\"left\\\"\"+pug.attr(\"aria-label\", errorDetailsLabel, true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('Scheduled_Import_History_Actions_LearnMore')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('Import_LastImport_Dash')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";}.call(this,\"errorDetailsLabel\" in locals_for_with?locals_for_with.errorDetailsLabel:typeof errorDetailsLabel!==\"undefined\"?errorDetailsLabel:undefined,\"hasError\" in locals_for_with?locals_for_with.hasError:typeof hasError!==\"undefined\"?hasError:undefined,\"hasErrorCode\" in locals_for_with?locals_for_with.hasErrorCode:typeof hasErrorCode!==\"undefined\"?hasErrorCode:undefined,\"hasErrorSummary\" in locals_for_with?locals_for_with.hasErrorSummary:typeof hasErrorSummary!==\"undefined\"?hasErrorSummary:undefined,\"hasPreview\" in locals_for_with?locals_for_with.hasPreview:typeof hasPreview!==\"undefined\"?hasPreview:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (noAmazonImportMsg, noFacebookImportMsg, noFileImportMsg, noGoogleImportMsg, noPinterestImportMsg) {pug_html = pug_html + \"\\u003Cdiv class=\\\"section-item form-horizontal\\\"\\u003E\\u003Cdiv class=\\\"log-toolbar\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"all-log-grids bingadsgrid importLogGrid\\\"\\u003E\\u003Cdiv class=\\\"grid-table bulk-status-grid googleImportLogGrid\\\" data-bind=\\\"visible: showGoogleImportGrid()\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"grid-table bulk-status-grid facebookImportLogGrid\\\" data-bind=\\\"visible: showFacebookImportGrid()\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"grid-table bulk-status-grid amazonImportLogGrid\\\" data-bind=\\\"visible: showAmazonImportGrid()\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"grid-table bulk-status-grid pinterestImportLogGrid\\\" data-bind=\\\"visible: showPinterestImportGrid()\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"grid-table bulk-status-grid fileImportLogGrid\\\" data-bind=\\\"visible: !showGoogleImportGrid() && !showFacebookImportGrid() && !showAmazonImportGrid() && !showPinterestImportGrid()\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"grid-nodata-container\\\" data-bind=\\\"style: { display: showNoGoogleImportMsg() || showNoFileImportMsg() || showNoFacebookImportMsg() || showNoAmazonImportMsg() || showNoPinterestImportMsg() ? "inline" : "none" }\\\"\\u003E\\u003Cdiv class=\\\"grid-nodata-more\\\" data-bind=\\\"visible: showNoGoogleImportMsg\\\"\\u003E\" + (pug.escape(null == (pug_interp = noGoogleImportMsg) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"grid-nodata-more\\\" data-bind=\\\"visible: showNoFileImportMsg\\\"\\u003E\" + (pug.escape(null == (pug_interp = noFileImportMsg) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"grid-nodata-more\\\" data-bind=\\\"visible: showNoFacebookImportMsg\\\"\\u003E\" + (pug.escape(null == (pug_interp = noFacebookImportMsg) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"grid-nodata-more\\\" data-bind=\\\"visible: showNoAmazonImportMsg\\\"\\u003E\" + (pug.escape(null == (pug_interp = noAmazonImportMsg) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"grid-nodata-more\\\" data-bind=\\\"visible: showNoPinterestImportMsg\\\"\\u003E\" + (pug.escape(null == (pug_interp = noPinterestImportMsg) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"page-control\\\"\\u003E\\u003Cdiv class=\\\"google-pager-container\\\" data-bind=\\\"visible: showGoogleImportGrid()\\\"\\u003E\\u003Cdiv class=\\\"google-log-pager\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"facebook-pager-container\\\" data-bind=\\\"visible: showFacebookImportGrid()\\\"\\u003E\\u003Cdiv class=\\\"facebook-log-pager\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"amazon-pager-container\\\" data-bind=\\\"visible:showAmazonImportGrid()\\\"\\u003E\\u003Cdiv class=\\\"amazon-log-pager\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"pinterest-pager-container\\\" data-bind=\\\"visible:showPinterestImportGrid()\\\"\\u003E\\u003Cdiv class=\\\"pinterest-log-pager\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"file-pager-container\\\" data-bind=\\\"visible: !isFirstSwitch() && !showGoogleImportGrid() && !showFacebookImportGrid() && !showAmazonImportGrid() && !showPinterestImportGrid()\\\"\\u003E\\u003Cdiv class=\\\"file-log-pager\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"noAmazonImportMsg\" in locals_for_with?locals_for_with.noAmazonImportMsg:typeof noAmazonImportMsg!==\"undefined\"?noAmazonImportMsg:undefined,\"noFacebookImportMsg\" in locals_for_with?locals_for_with.noFacebookImportMsg:typeof noFacebookImportMsg!==\"undefined\"?noFacebookImportMsg:undefined,\"noFileImportMsg\" in locals_for_with?locals_for_with.noFileImportMsg:typeof noFileImportMsg!==\"undefined\"?noFileImportMsg:undefined,\"noGoogleImportMsg\" in locals_for_with?locals_for_with.noGoogleImportMsg:typeof noGoogleImportMsg!==\"undefined\"?noGoogleImportMsg:undefined,\"noPinterestImportMsg\" in locals_for_with?locals_for_with.noPinterestImportMsg:typeof noPinterestImportMsg!==\"undefined\"?noPinterestImportMsg: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 (mode) {pug_html = pug_html + \"\\u003Cp\\u003E\" + (pug.escape(null == (pug_interp = mode) ? \"\" : pug_interp)) + \"\\u003C\\u002Fp\\u003E\";}.call(this,\"mode\" in locals_for_with?locals_for_with.mode:typeof mode!==\"undefined\"?mode: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 (noAmazonImportMsg, noFacebookImportMsg, noFilteredImportMsg, noGoogleImportMsg, noImportMsgHeader, noPinterestImportMsg) {pug_html = pug_html + \"\\u003Cdiv class=\\\"section-item form-horizontal\\\"\\u003E\\u003Cdiv class=\\\"history-toolbar\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"grid-table importHistoryGrid bingadsgrid\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"grid-nodata-container\\\" data-bind=\\\"style: { display: showNoGoogleImportMsg() || showNoFacebookImportMsg() || showNoFilteredImportMsg() || showNoAmazonImportMsg() || showNoPinterestImportMsg() ? "inline" : "none" }\\\"\\u003E\\u003Cdiv class=\\\"grid-nodata\\\" data-bind=\\\"visible: showNoGoogleImportMsg() || showNoFacebookImportMsg() || showNoAmazonImportMsg() || showNoPinterestImportMsg()\\\"\\u003E\" + (pug.escape(null == (pug_interp = noImportMsgHeader) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"grid-nodata-more\\\" data-bind=\\\"visible: showNoGoogleImportMsg\\\"\\u003E\" + (pug.escape(null == (pug_interp = noGoogleImportMsg) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"grid-nodata-more\\\" data-bind=\\\"visible: showNoFacebookImportMsg\\\"\\u003E\" + (pug.escape(null == (pug_interp = noFacebookImportMsg) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"grid-nodata-more\\\" data-bind=\\\"visible: showNoAmazonImportMsg\\\"\\u003E\" + (pug.escape(null == (pug_interp = noAmazonImportMsg) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"grid-nodata-more\\\" data-bind=\\\"visible: showNoPinterestImportMsg\\\"\\u003E\" + (pug.escape(null == (pug_interp = noPinterestImportMsg) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"grid-nodata-more\\\" data-bind=\\\"visible: showNoFilteredImportMsg\\\"\\u003E\" + (pug.escape(null == (pug_interp = noFilteredImportMsg) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"page-control\\\"\\u003E\\u003Cdiv class=\\\"history-pager\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv id=\\\"history-edit-panel\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"noAmazonImportMsg\" in locals_for_with?locals_for_with.noAmazonImportMsg:typeof noAmazonImportMsg!==\"undefined\"?noAmazonImportMsg:undefined,\"noFacebookImportMsg\" in locals_for_with?locals_for_with.noFacebookImportMsg:typeof noFacebookImportMsg!==\"undefined\"?noFacebookImportMsg:undefined,\"noFilteredImportMsg\" in locals_for_with?locals_for_with.noFilteredImportMsg:typeof noFilteredImportMsg!==\"undefined\"?noFilteredImportMsg:undefined,\"noGoogleImportMsg\" in locals_for_with?locals_for_with.noGoogleImportMsg:typeof noGoogleImportMsg!==\"undefined\"?noGoogleImportMsg:undefined,\"noImportMsgHeader\" in locals_for_with?locals_for_with.noImportMsgHeader:typeof noImportMsgHeader!==\"undefined\"?noImportMsgHeader:undefined,\"noPinterestImportMsg\" in locals_for_with?locals_for_with.noPinterestImportMsg:typeof noPinterestImportMsg!==\"undefined\"?noPinterestImportMsg: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) {pug_html = pug_html + \"\\u003Cp class=\\\"truncated\\\"\\u003E\" + (pug.escape(null == (pug_interp = Name) ? \"\" : pug_interp)) + \"\\u003Cbr\\u003E\\u003C\\u002Fp\\u003E\";}.call(this,\"Name\" in locals_for_with?locals_for_with.Name:typeof Name!==\"undefined\"?Name: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 (Status, i18n) {var statusIconLabel\nif (i18n) {\nswitch (Status){\ncase 'Deleted':\nstatusIconLabel = i18n.getString('EntityStatus_Deleted')\n break;\ncase 'Paused':\nstatusIconLabel = i18n.getString('EntityStatus_Paused')\n break;\ndefault:\nstatusIconLabel = i18n.getString('EntityStatus_Active')\n break;\n}\n}\npug_html = pug_html + \"\\u003Cdiv class=\\\"grid-cell\\\"\\u003E\\u003Cdiv\" + (\" class=\\\"statusicondisplay\\\"\"+pug.attr(\"aria-label\", statusIconLabel, true, true)) + \"\\u003E\";\nif (Status === 'Paused') {\npug_html = pug_html + \"\\u003Cdiv class=\\\"statusPaused_icon\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse\nif (Status === 'Deleted') {\npug_html = pug_html + \"\\u003Cdiv class=\\\"statusDeleted_icon\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cdiv class=\\\"statusEnabled_icon\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"Status\" in locals_for_with?locals_for_with.Status:typeof Status!==\"undefined\"?Status:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n, importSettingsLabel, settingsText, showSmartType, showTooltipIcon) {pug_html = pug_html + \"\\u003Cdiv class=\\\"information-popup-container\\\"\\u003E\\u003Cdiv class=\\\"status-row\\\"\\u003E\";\nif (showSmartType) {\npug_html = pug_html + (pug.escape(null == (pug_interp = i18n.get('Scheduled_Import_Smart_Type_In_Settings')) ? \"\" : pug_interp)) + \"\\u003Cbr\\u003E\";\n}\npug_html = pug_html + \"\\u003Cdiv class=\\\"settingsText\\\"\\u003E\" + (pug.escape(null == (pug_interp = settingsText) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\nif (showTooltipIcon) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"glyph-container\\\"\\u003E\\u003Cdiv class=\\\"status-image\\\"\\u003E\\u003Cdiv\" + (\" class=\\\"status_icon gridDetailsImage spritedimagealign import-settings icon-info clickable\\\"\"+\" data-toggle=\\\"tooltip\\\" tabindex=\\\"0\\\" data-trigger=\\\"manual\\\" data-placement=\\\"left\\\" role=\\\"button\\\"\"+pug.attr(\"aria-label\", importSettingsLabel, true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"importSettingsLabel\" in locals_for_with?locals_for_with.importSettingsLabel:typeof importSettingsLabel!==\"undefined\"?importSettingsLabel:undefined,\"settingsText\" in locals_for_with?locals_for_with.settingsText:typeof settingsText!==\"undefined\"?settingsText:undefined,\"showSmartType\" in locals_for_with?locals_for_with.showSmartType:typeof showSmartType!==\"undefined\"?showSmartType:undefined,\"showTooltipIcon\" in locals_for_with?locals_for_with.showTooltipIcon:typeof showTooltipIcon!==\"undefined\"?showTooltipIcon:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n) {pug_html = pug_html + \"\\u003Cdiv class=\\\"panel panel-white\\\"\\u003E\\u003Cdiv class=\\\"panel-heading\\\"\\u003E\\u003Ch4 class=\\\"panel-title\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Import_ImportSettings_Header')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fh4\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"panel-body\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (className, i18n) {pug_html = pug_html + \"\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('GoogleImport_MicrosoftAdvertising_MultipleAccounts')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan\" + (pug.attr(\"class\", pug.classes([\"status_icon\",\"clickable\",\"gridDetailsImage\",className + '-detail'], [false,false,false,true]), false, true)+\" type=\\\"button\\\" tabindex=\\\"0\\\" role=\\\"button\\\"\"+pug.attr(\"aria-label\", i18n.get('Grid_DetailsButtonText'), true, true)) + \"\\u003E\\u003C\\u002Fspan\\u003E\";}.call(this,\"className\" in locals_for_with?locals_for_with.className:typeof className!==\"undefined\"?className:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (ImportSourceAccountInfo, IsAmazonImport, IsFacebookImport, IsGoogleImport, IsPinterestImport, Type) {pug_html = pug_html + \"\\u003Cp\\u003E\" + (pug.escape(null == (pug_interp = Type) ? \"\" : pug_interp)) + \"\\u003Cbr\\u003E\";\nif (IsGoogleImport || IsFacebookImport || IsAmazonImport || IsPinterestImport) {\npug_html = pug_html + (pug.escape(null == (pug_interp = ImportSourceAccountInfo) ? \"\" : pug_interp));\n}\npug_html = pug_html + \"\\u003C\\u002Fp\\u003E\";}.call(this,\"ImportSourceAccountInfo\" in locals_for_with?locals_for_with.ImportSourceAccountInfo:typeof ImportSourceAccountInfo!==\"undefined\"?ImportSourceAccountInfo:undefined,\"IsAmazonImport\" in locals_for_with?locals_for_with.IsAmazonImport:typeof IsAmazonImport!==\"undefined\"?IsAmazonImport:undefined,\"IsFacebookImport\" in locals_for_with?locals_for_with.IsFacebookImport:typeof IsFacebookImport!==\"undefined\"?IsFacebookImport:undefined,\"IsGoogleImport\" in locals_for_with?locals_for_with.IsGoogleImport:typeof IsGoogleImport!==\"undefined\"?IsGoogleImport:undefined,\"IsPinterestImport\" in locals_for_with?locals_for_with.IsPinterestImport:typeof IsPinterestImport!==\"undefined\"?IsPinterestImport:undefined,\"Type\" in locals_for_with?locals_for_with.Type:typeof Type!==\"undefined\"?Type: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 (dash, edit, recommendationText, runNow, showRecommendation) {if (edit) {\nif (showRecommendation) {\npug_html = pug_html + \"\\u003Cspan\" + (\" class=\\\"insight_icon import-recommondation icon-info clickable\\\"\"+\" data-toggle=\\\"tooltip\\\" tabindex=\\\"0\\\" data-trigger=\\\"manual\\\" data-placement=\\\"left\\\" role=\\\"button\\\"\"+pug.attr(\"aria-label\", recommendationText, true, true)) + \"\\u003E\\u003C\\u002Fspan\\u003E\";\n}\npug_html = pug_html + \"\\u003Ca class=\\\"edit-task\\\" href=\\\"javascript:void(0);\\\"\\u003E\" + (pug.escape(null == (pug_interp = edit) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\";\nif (runNow) {\npug_html = pug_html + \"\\u003Cspan\\u003E | \\u003C\\u002Fspan\\u003E\\u003Ca class=\\\"run-now\\\" href=\\\"javascript:void(0);\\\"\\u003E\" + (pug.escape(null == (pug_interp = runNow) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\";\n}\n}\nelse\nif (runNow) {\npug_html = pug_html + \"\\u003Ca class=\\\"run-now\\\" href=\\\"javascript:void(0);\\\"\\u003E\" + (pug.escape(null == (pug_interp = runNow) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = dash) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\n}}.call(this,\"dash\" in locals_for_with?locals_for_with.dash:typeof dash!==\"undefined\"?dash:undefined,\"edit\" in locals_for_with?locals_for_with.edit:typeof edit!==\"undefined\"?edit:undefined,\"recommendationText\" in locals_for_with?locals_for_with.recommendationText:typeof recommendationText!==\"undefined\"?recommendationText:undefined,\"runNow\" in locals_for_with?locals_for_with.runNow:typeof runNow!==\"undefined\"?runNow:undefined,\"showRecommendation\" in locals_for_with?locals_for_with.showRecommendation:typeof showRecommendation!==\"undefined\"?showRecommendation:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (model, view) {pug_html = pug_html + \"\\u003Cdiv class=\\\"preference-upload-form panel form-horizontal\\\"\\u003E\\u003Cform class=\\\"preferenceupload\\\"\\u003E\\u003Cdiv class=\\\"panel-heading\\\"\\u003E\\u003Cdiv class=\\\"panel-title\\\" role=\\\"heading\\\" aria-level=\\\"2\\\"\\u003E\" + (pug.escape(null == (pug_interp = view.title) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"panel-body\\\"\\u003E\\u003Cdiv class=\\\"preference-upload-description\\\"\\u003E\\u003Cspan class=\\\"description-text\\\"\\u003E\" + (pug.escape(null == (pug_interp = view.description) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Ca class=\\\"HelpTopic\\\" query=\\\"help:ext60175\\\" href=\\\"javascript:void(0);\\\" role=\\\"button\\\"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('Learn_more_link_text')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"preference-upload preference-create\\\"\\u003E\\u003Cdiv\" + (\" class=\\\"uploadRow form-group\\\"\"+pug.attr(\"hidden\", model.hideFilePicker, true, true)) + \"\\u003E\\u003Clabel class=\\\"col-sm-3 control-label label-width\\\"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('Import_PreferenceUpload_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003Cdiv class=\\\"col-sm-6 preference-upload-file-picker-placeholder\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-6\\\"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('Import_PreferenceUpload_AcceptFormat_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E \\u003Ca class=\\\"helpLink clickable download-template\\\" href=\\\"#\\\" role=\\\"button\\\"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('Import_PreferenceUpload_SampleFile_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (\" class=\\\"progress-container\\\"\"+pug.attr(\"hidden\", !model.uploading, true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (\" class=\\\"preference-upload-summary-grid\\\"\"+pug.attr(\"hidden\", (!model.showSummaryGrid||model.uploading), true, true)) + \"\\u003E\\u003Ctable border=\\\"1\\\" bordercolor=\\\"#ddd\\\"\\u003E\\u003Cthead\\u003E\\u003Ctr\\u003E\\u003Cth\\u003E\\u003C\\u002Fth\\u003E\\u003Cth class=\\\"grid-header-text\\\"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('Import_PreferenceUpload_Preview_Success')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fth\\u003E\\u003Cth class=\\\"grid-header-text\\\"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('Import_PreferenceUpload_Preview_Error')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fth\\u003E\\u003C\\u002Ftr\\u003E\\u003Ctr\\u003E\\u003C\\u002Ftr\\u003E\\u003C\\u002Fthead\\u003E\\u003Cthead\\u003E\\u003C\\u002Fthead\\u003E\\u003Ctbody\\u003E\\u003Ctr\\u003E\\u003Ctd class=\\\"grid-cell-text\\\"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString(model.status === view.PREFERENCE_UPLOAD_STATUS.Applied ? 'Import_PreferenceUpload_Preview_Item_Changes' : 'Import_PreferenceUpload_Preview_Expected_Item_Changes')) ? \"\" : pug_interp)) + \"\\u003C\\u002Ftd\\u003E\\u003Ctd class=\\\"grid-cell-text\\\"\\u003E\" + (pug.escape(null == (pug_interp = model.successCount) ? \"\" : pug_interp)) + \"\\u003C\\u002Ftd\\u003E\\u003Ctd class=\\\"grid-cell-text\\\"\\u003E\" + (pug.escape(null == (pug_interp = model.errorCount) ? \"\" : pug_interp)) + \"\\u003C\\u002Ftd\\u003E\\u003C\\u002Ftr\\u003E\\u003Ctr\\u003E\\u003C\\u002Ftr\\u003E\\u003C\\u002Ftbody\\u003E\\u003Ctbody\\u003E\\u003C\\u002Ftbody\\u003E\\u003C\\u002Ftable\\u003E\\u003Ctable\\u003E\\u003C\\u002Ftable\\u003E\\u003C\\u002Fdiv\\u003E\";\nif (model.errorMessage != null) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"alert alert-warning\\\"\\u003E\\u003Cspan class=\\\"alert-image\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"errorMsg\\\"\\u003E\" + (pug.escape(null == (pug_interp = model.errorMessage) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (\" class=\\\"panel-footer\\\"\"+pug.attr(\"hidden\", model.uploading, true, true)) + \"\\u003E\";\nif (model.status === view.PREFERENCE_UPLOAD_STATUS.NotStart) {\npug_html = pug_html + \"\\u003Cinput\" + (\" class=\\\"upload-and-preview btn btn-primary\\\"\"+\" type=\\\"button\\\"\"+pug.attr(\"value\", view.i18n.getString('Import_PreferenceUpload_Button_UploadAndPreview'), true, true)+pug.attr(\"disabled\", !model.isPreviewEnabled, true, true)) + \"\\u003E\\u003Cinput\" + (\" class=\\\"cancel btn btn-default\\\"\"+\" type=\\\"button\\\"\"+pug.attr(\"value\", view.i18n.getString('Import_PreferenceUpload_Button_Cancel'), true, true)) + \"\\u003E\";\n}\nelse\nif (model.status === view.PREFERENCE_UPLOAD_STATUS.Previewed) {\npug_html = pug_html + \"\\u003Cinput\" + (\" class=\\\"apply-changes btn btn-primary\\\"\"+\" type=\\\"button\\\"\"+pug.attr(\"value\", view.i18n.getString('Import_PreferenceUpload_Button_Apply'), true, true)+pug.attr(\"disabled\", !model.isApplyEnabled, true, true)) + \"\\u003E\\u003Cinput\" + (\" class=\\\"download-results btn btn-default\\\"\"+pug.attr(\"type\", (model.downloadPath === ''?'hidden':'button'), true, true)+pug.attr(\"value\", view.i18n.getString('Import_PreferenceUpload_Button_Download'), true, true)) + \"\\u003E\\u003Cinput\" + (\" class=\\\"cancel btn btn-default\\\"\"+\" type=\\\"button\\\"\"+pug.attr(\"value\", view.i18n.getString('Import_PreferenceUpload_Button_Cancel'), true, true)) + \"\\u003E\";\n}\nelse\nif (model.status === view.PREFERENCE_UPLOAD_STATUS.Applied) {\npug_html = pug_html + \"\\u003Cinput\" + (\" class=\\\"download-results btn btn-primary\\\"\"+pug.attr(\"type\", (model.downloadPath === ''?'hidden':'button'), true, true)+pug.attr(\"value\", view.i18n.getString('Import_PreferenceUpload_Button_Download'), true, true)+pug.attr(\"hidden\", (model.downloadPath === ''), true, true)) + \"\\u003E\\u003Cinput\" + (\" class=\\\"close-panel btn btn-default\\\"\"+\" type=\\\"button\\\"\"+pug.attr(\"value\", view.i18n.getString('Import_PreferenceUpload_Button_Close'), true, true)) + \"\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cinput\" + (\" class=\\\"cancel btn btn-primary\\\"\"+\" type=\\\"button\\\"\"+pug.attr(\"value\", view.i18n.getString('Import_PreferenceUpload_Button_Cancel'), true, true)) + \"\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fform\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"model\" in locals_for_with?locals_for_with.model:typeof model!==\"undefined\"?model:undefined,\"view\" in locals_for_with?locals_for_with.view:typeof view!==\"undefined\"?view:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n, isResponsiveAdForSSCEnabled, isStoreNotValid, scenario) {\n\n\n\nif (scenario === 'creation') {\npug_html = pug_html + \"\\u003Ch1\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('SmartShoppingCampaign_Header_Title')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fh1\\u003E\";\n}\nif (isStoreNotValid) {\npug_html = pug_html + \"\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('ShoppingCampaign_NoBMCAccount_Message')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Ca class=\\\"bmc_url_link\\\"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('ShoppingCampaign_BmcURL_Text')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fa\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003C!-- koErrors--\\u003E\\u003Ch3 class=\\\"type-bold campaign-settings-title\\\"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('ShoppingCampaign_CampaignSetting_SectionTitle')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fh3\\u003E\\u003Chr\\u003E\\u003Cdiv class=\\\"campaign-settings\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Ch3 class=\\\"type-bold\\\"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('ShoppingCampaign_ShoppingSetting_SectionTitle')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fh3\\u003E\\u003Chr\\u003E\\u003Cdiv class=\\\"shopping-settings\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Ch3 class=\\\"type-bold\\\"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('SectionTitle_CampaignTargeting')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fh3\\u003E\\u003Chr\\u003E\\u003Cdiv class=\\\"campaign-targeting clearfix\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\nif (scenario === 'creation') {\nif (isResponsiveAdForSSCEnabled) {\npug_html = pug_html + \"\\u003Ch3 class=\\\"type-bold\\\"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('SectionTitle_ResponsiveAd')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fh3\\u003E\\u003Chr\\u003E\\u003Cdiv class=\\\"responsive-ad clearfix\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\n}\nelse {\npug_html = pug_html + \"\\u003Ch3 class=\\\"type-bold advaced-settings-title\\\"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('SectionTitle_AdvancedSettings')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fh3\\u003E\\u003Chr\\u003E\\u003Cdiv class=\\\"advanced-settings clearfix\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\n}\npug_html = pug_html + \"\\u003Cdiv class=\\\"conversion-goal-section\\\"\\u003E\\u003Ch3 class=\\\"type-bold\\\"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('Campaign_Goals_Section_Title')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fh3\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Campaign_Goals_Help_Text')) ? \"\" : pug_interp)) + (pug.escape(null == (pug_interp = ' ') ? \"\" : pug_interp)) + \"\\u003Ca class=\\\"HelpTopic\\\" href=\\\"javascript:void(0);\\\" query=\\\"help:app54814\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('LearnMoreLinkText')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003Cdiv class=\\\"conversion-goal-selection\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"save-bar form-group create-smart-shopping-campaign-save-bar\\\"\\u003E\";\nif (!isStoreNotValid) {\npug_html = pug_html + \"\\u003Cinput\" + (\" class=\\\"btn-save btn btn-primary\\\"\"+\" type=\\\"button\\\"\"+pug.attr(\"value\", i18n.get('ShoppingCampaign_Button_Save'), true, true)) + \"\\u003E\";\n}\npug_html = pug_html + \"\\u003Cinput\" + (\" class=\\\"btn-cancel btn btn-default\\\"\"+\" type=\\\"button\\\"\"+pug.attr(\"value\", i18n.get('ShoppingCampaign_Button_Cancel'), true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"isResponsiveAdForSSCEnabled\" in locals_for_with?locals_for_with.isResponsiveAdForSSCEnabled:typeof isResponsiveAdForSSCEnabled!==\"undefined\"?isResponsiveAdForSSCEnabled:undefined,\"isStoreNotValid\" in locals_for_with?locals_for_with.isStoreNotValid:typeof isStoreNotValid!==\"undefined\"?isStoreNotValid:undefined,\"scenario\" in locals_for_with?locals_for_with.scenario:typeof scenario!==\"undefined\"?scenario: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_mixins[\"koErrors\"] = pug_interp = function(id, cssClass){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Cul\" + (pug.attr(\"class\", pug.classes([cssClass ? cssClass : 'alert alert-danger'], [true]), false, true)+\" data-bind=\\\"visible: errors().length > 0, foreach: errors, attr: {"aria-hidden": errors().length == 0}\\\"\"+pug.attr(\"id\", id ? id : 'KoErrors', true, true)) + \"\\u003E\\u003Cli\\u003E\\u003Cdiv data-bind=\\\"html: $data\\\" role=\\\"alert\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fli\\u003E\\u003C\\u002Ful\\u003E\";\n};\npug_mixins[\"koErrors\"]();\npug_html = pug_html + \"\\u003Cdiv class=\\\"update-container\\\"\\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 (i18n, learnMoreId, messageDetails) {pug_html = pug_html + \"\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = messageDetails) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\nif ((learnMoreId)) {\npug_html = pug_html + \"\\u003Ca\" + (\" class=\\\"HelpTopic\\\"\"+pug.attr(\"query\", learnMoreId, true, true)+\" href=\\\"javascript:void(0);\\\"\") + \"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Learn_more_link_text')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"save-bar form-group\\\"\\u003E\\u003Cinput\" + (\" class=\\\"btn btn-default\\\"\"+\" type=\\\"button\\\"\"+pug.attr(\"value\", i18n.getString('Button_Ok'), true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"learnMoreId\" in locals_for_with?locals_for_with.learnMoreId:typeof learnMoreId!==\"undefined\"?learnMoreId:undefined,\"messageDetails\" in locals_for_with?locals_for_with.messageDetails:typeof messageDetails!==\"undefined\"?messageDetails:undefined));;return pug_html;};\nmodule.exports = template;","import { makeStyles, tokens } from '@fluentui/react-components';\r\n\r\nexport const useBidStrategyDropdownStyles = makeStyles({\r\n root: {\r\n marginBottom: tokens.spacingVerticalMNudge,\r\n },\r\n label: {\r\n marginBottom: tokens.spacingVerticalXS,\r\n },\r\n dropdown: {\r\n },\r\n});\r\n","import React, { useCallback, useContext, useMemo } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { withValidation, GenericAdapter } from '@bingads-webui-react/validation';\r\nimport { Dropdown, DropdownProps, Option, Label, mergeClasses, useId } from '@fluentui/react-components';\r\nimport { HelpPopupInline } from '@bingads-webui-react/help-popup';\r\n\r\nimport { useBidStrategyDropdownStyles } from './styles/bid-strategy-dropdown-styles';\r\n\r\ndeclare function _TL_(arg0: string): string;\r\n\r\ninterface BidStrategyDropdownPureProps {\r\n className?: string;\r\n options: {\r\n key: string;\r\n text: string;\r\n }[];\r\n value: string;\r\n onChange: (value?: string) => void;\r\n label?: string;\r\n helpTopic?: string;\r\n helpLabel?: string;\r\n}\r\n\r\nexport const BidStrategyDropdownPure: React.FC = (props) => {\r\n const {\r\n className,\r\n options,\r\n value,\r\n onChange,\r\n label,\r\n helpTopic,\r\n helpLabel,\r\n } = props;\r\n const id = useId('bid-strategy-dropdown');\r\n const classes = useBidStrategyDropdownStyles();\r\n const i18n = useContext(I18nContext) as any;\r\n\r\n const selectedOptions = useMemo(() => [value], [value]);\r\n const selectedText = options.find(option => option.key === value)?.text;\r\n const selectedTextString = selectedText ? i18n.getString(selectedText) : selectedText;\r\n\r\n const onOptionSelect: DropdownProps['onOptionSelect'] = useCallback((ev, data) => {\r\n const newValue = options.find((option: { key: string }) => option.key === data.optionValue)?.key;\r\n onChange(newValue);\r\n }, [options, onChange]);\r\n\r\n return (\r\n
\r\n \r\n \r\n {options.map(option => (\r\n \r\n ))}\r\n \r\n
\r\n );\r\n};\r\n\r\nBidStrategyDropdownPure.defaultProps = {\r\n className: '',\r\n label: undefined,\r\n helpTopic: undefined,\r\n helpLabel: undefined,\r\n};\r\n\r\nexport const ValidatedBidStrategyDropdown = withValidation(BidStrategyDropdownPure, GenericAdapter);\r\n","import React from 'react';\r\n\r\ninterface BidStrategyIconProps {\r\n width?: number;\r\n height?: number;\r\n}\r\n\r\nconst BidStrategyIconPure: React.FC = ({ width, height }) => (\r\n \r\n \r\n \r\n);\r\n\r\nBidStrategyIconPure.defaultProps = {\r\n width: 24,\r\n height: 24,\r\n};\r\n\r\nexport const BidStrategyIcon = React.memo(BidStrategyIconPure);\r\n"],"names":["ViewModel","_createClass","_ref","_this","scope","hideFooter","isXandrVideoAd","isMultiAdFormatDisplayAd","isMultiAdFormatVideoAd","isForVNext","_ref$setAdGroupType","setAdGroupType","_","_ref$setIsDisplayPlus","setIsDisplayPlusNativeEditAdEditor","_ref$permissions","permissions","_classCallCheck","KoSchema","properties","this","scopeContext","scopeService","getScope","ko","campaignType","campaignSubType","campaignDomain","isDynamicDescriptionEnabled","isFeedBasedCampaign","selectorLabelId","showAdGroups","adGroupId","showCampaignLevel","campaignId","showEditor","allowAdCreation","selectedCampaigns","selectedAdgroups","adEditorTitle","saveAnalyticsId","saveCreateAnalyticsId","subscribe","newAdgroup","onAdGroupSelect","newCampaign","onCampaignSelect","isDisplayAdWithCopilot","isXandrDisplayAdsCampaign","dynamic","DisplayPlusCopilotAssetGeneration","isDisplayPlusNativeEdit","isAudienceCampaign","isAudienceNativeAdsCampaign","DisplayPlusEdit","containerClass","hideSaveAndCreateAnother","isSmartShoppingCampaign","key","value","current","newAdgroupId","Id","MTCampaignTypeEnum","Campaign","CampaignType","campaignName","Name","adGroupName","CampaignSubType","CampaignSettings","isTraditionalChinese","Language","adsCountMap","adGroupType","biddingStrategyType","DisplayBiddingStrategyType","AdGroupType","isXandrVideoAdsCampaign","XandrVideoCampaigns","isDisplayPlusNativeEditEnabled","setClarityTag","IsDisplayPlusAudienceNative","transformAdgroupData","data","Promise","adgroupData","resolve","pageContext","CurrentCampaign","length","EntitySelectorService","getAdsCount","CurrentAccount","CurrentCustomer","then","catch","e","console","log","adgroup","shouldKeepSmartShoppingCampaignAdGroup","result","map","item","name","status","Status","totalCount","items","i18n","window","globalLegacyI18n","get","AdgroupSelectorProxy","arguments","undefined","onEventTrigger","getCustomizedData","query","pageNumber","pageSize","adgroupSelectorView","selectorContainer","$","uiBlockContainer","hasClass","find","queryText","isDSAMixedModeCampaignEnabled","config","signleQuoteTerminatedQuery","replace","$expand","$select","concat","$skip","$top","$count","$filter","entitySet","edmCampaign","currentAccount","Campaigns","$withKey","Number","AdGroups","toJSON","jsdata","AdGroup","findAll","getAdgroupData","finally","withUiBlock","AdgroupSelectorView","fetch","_ref2","_ref2$query","_ref2$pageNumber","fecthAdgroupData","stringKeys","emptyListContent","listHeader","selectEntity","on","selectedItem","campaign","getCampaignData","campaignData","transformCampaignData","CampaignAdgroupSelectorProxy","_ref$onCampaignSelect","_ref$onAdGroupSelect","campaignAdgroupSelectorView","_ref2$pageSize","_ref3","_ref3$query","_ref3$pageNumber","_ref3$pageSize","_ref3$scopeParentItem","scopeParentItem","CampaignAdgroupSelectorView","onFetch","args","fecthCampaignData","i18nGlobal","saveIds","ExpandedText","saveCreateIds","View","_Backbone$View","_callSuper","_inherits","perfMarker","newI18n","_ref$model","model","_ref$campaignId","_ref$adGroupId","_ref$adGroupType","_ref$campaignType","_ref$campaignSubType","_ref$biddingStrategyT","_ref$isSaveToServer","isSaveToServer","_ref$isTraditionalChi","_ref$appLookupDisable","appLookupDisabled","_ref$developerName","developerName","_ref$campaignDomain","_ref$isDynamicDescrip","_ref$isFeedBasedCampa","_ref$firstTextAdModel","firstTextAdModel","_ref$firstExpandedTex","firstExpandedTextAdModel","_ref$firstResponsiveS","firstResponsiveSearchAdModel","_ref$isForVNext","_ref$inlineSuggestion","inlineSuggestionsEnabled","_ref$adsCountMap","_ref$showSaveAndCreat","showSaveAndCreateAnother","_ref$isOpenCreatePane","isOpenCreatePanel","_ref$shouldSendOpport","shouldSendOpportunityLog","logOpportunity","parentPerfMarker","serverContext","preferenceService","createChild","autoEnd","isActiveChild","PerfMarkerFactory","createMarker","willInit","hasWebsiteImageOptedInObservable","adEditor","AdEditorView","showInline","viewModel","bind","hasWebsiteImageOptedIn","ad","trigger","context","adId","setAnalyticsId","_type","type","errors","setTitle","adgroupSelectorProxy","selectedAdGroup","adgroupSelector","getAdgroupSelectorView","campaignAdgroupSelectorProxy","selectedCampaign","getCampaignAdgroupSelectorView","originalAdEditorScope","$el","empty","append","template","isDisplayPlusDisplayAd","el","render","remove","_superPropGet","save","saveAndCreateAnother","Backbone","options","isTextareaEmpty","isKeywordPlannerEnabled","createView","CreateView","keywordPlannerView","KeywordPlannerView","mode","scenario","newKeyword","addSuggestion","viewmodel","adGroup","textarea","parser","keywordsTextareaVal","textAreaSubscription","isEmpty","gridData","emptySearchTeams","initializeSuggestions","html","isAfterFirstInteraction","_this2","_this$options$adGroup","getLandingPageUrl","Ad","limit","offset","Ads","cacheResponse","campaignParams","bypassCache","queryParameters","adGroupParams","criterionLoader","load","spread","campaignLocationRes","adGroupLocationRes","landingPageUrlRes","campaignLanguageRes","adGroupLanguageRes","languages","keywordPlannerSupportedLanguages","Languages","isLanguageSupported","setLanguages","locationTargets","Criterion","setLocationTargeting","landingPageUrl","FinalUrls","DestinationUrl","allLocationsUnsupported","onSearch","url","validate","getChangedKeywords","keywordSuggestionsAdded","dispose","off","_AdapterView","getQueryOptions","params","queryOptions","filterText","where","$contains","take","skip","HotelCenterEntitySelectorService","SubAccount","results","subAccount","Type","total","HasPaged","success","error","fail","jsDataOptions","edm","SubAccounts","HotelGroups","HotelGroup","SubAccountId","SubAccountName","s$i18n","AdExtensionAssociationSchema","globalLegacySchema","GridConfig","adextensionType","columns","_ref$excludedColumns","excludedColumns","deleteAssociation","editExtension","addExtension","gridContainer","toolbarContainer","associationType","typeString","_ref$selection","selection","_ref$heroButtonText","heroButtonText","dataSourceGenerator","adExtensionTabPerfMarker","customHeaderOffset","getGridName","AdExtensionType","AssociationType","legacyGridName","tableClasses","scrolling","virtualized","viewport","header","height","sortableHeader","sortableHeaderTemplate","hasCampaignNameColumn","hasAdGroupNameColumn","defaultItems","deliveryColumn","getDeliveryColumn","entityColumns","_toConsumableArray","bingadsGridColumn","property","VerticalSubAccount","sortable","title","bodyClasses","VerticalHotelGroup","idColumn","putil","getSharedColumns","col","plugins","a11y","performanceLog","appConfig","logger","marker","filter","toolbar","helpers","singleToolbar","container","id","text","classes","onClick","disabled","Permissions","IsReadOnlyUser","button","attributes","tabindex","menu","iconLeft","dateFilter","state","isOdataActionSource","addDateChangeListener","handler","App","views","Summary","bindDateFilterChangeHandler","comparisonColumns","pagination","availablePageSizes","enableRandomPage","pageSizeText","getString","placeholder","rows","headRows","toolbarRow","constants","DEFAULT_TOOLBAR_NAME","dataSource","entity","DataStore","AdExtensionAssociations","$call","gridDataParameters","adExtensionTypes","headers","_defineProperty","schema","selectable","isAggregateRow","SubAccountAssociationsRequestFactory","ids","getBatchRequest","scopes","flatten","idList","EntityId","AdExtensionId","HotelGroupAssociationsRequestFactory","HotelAssociationsRepository","_AssociationsReposito","_schema","requestFactory","batchURL","entityType","AssociationsRepository","baseSchema","standardProperties","commonProperties","HotelCenterAdExtensionsRepository","ownedProperties","afterChangeComitted","extensionDataFormatter","associationsDataFormatter","extension","ExtensionsRepository","association","attrsProcessor","attrs","accountId","associationAdgroupId","associationCampaignId","associationAccountId","adextensionId","adextensionStatus","AdExtension","Delivery","deliveryAlertId","getTimeZoneForDateRangeText","_bingads_webui_component_legacy_timezonemapper_index","ENTITY_MAP","headerRefreshCache","updateFlagRefreshCache","operator","grid","gridView","expandToolBar","view","show","gridToolbarGroup","hideAllToolbars","call","showAllToolbars","hide","refresh","openAssociationsEditor","currentCampaignId","currentAdgroupId","adExtensionId","editFromGrid","adgroupName","isStringFormatId","adgroupId","usePanel","disableScheduling","repositoryFactory","updateContext","isUINext","createAssociationEditorForUiNext","instantiateEditor","editAssociations","selectedItems","popup","alert","deliveryStatus","alertCenter","showError","selectedCampaignId","selectedAdgroupId","editor","toLowerCase","getBulkDeleteItems","deleteMessage","confirm","in","deleteAssociations","deletedItems","associations","mappingAssociationType","createRequestFactory","destroyAllByOdata","HotelCenterBaseAdExtensionAssociationsView","_ref4","_ref4$excludedColumns","customizedFilterList","dataPostProcess","filterListProcessor","overThresholdErrorMessage","_ref4$isUINext","_ref4$createAssociati","_ref4$extendPlugins","extendPlugins","preferenceConfig","extensionsRepo","isInitialGrid","prepareGrid","event","deliveryStatusPopupFactory","showRejectionPopup","stopPropagation","document","one","closeRejectionPopup","_ref5","_ref5$attrsProcessor","defaultAttrsProcessor","_ref5$shouldNotShowGr","shouldNotShowGrid","appendLearnMoreLink","accountTimeZoneText","_ref6","_this3","_ref6$attrsProcessor","configParams","createAssociations","NewGridConfig","filterConfig","afterFindAll","resources","Code","asyncCallback","asyncEmptyText","setupGrid","gridPromise","fetchPreferenceConfig","_this4","pluginFactories","toolbarPlugin","newDateFilterPlugin","newPaginationPlugin","newUiBlockerPlugin","a11yPlugin","newAssistedSelectionPlugin","perfMarkerPlugin","placeholderPlugin","performanceLogPlugin","defaultPlugins","gridOptions","plugin","getDefaultPlugins","extendedPlugins","pgridFactory","gridConfig","AdExtensionDeliveryStatusPopupFactory","overrideEntities","overrideAssociationType","BidataNotRequired","changes","preference","sortInfo","orderby","preferencesService","Data","toolbarEditor","toolbarWithName","itemsCount","getItemCount","set","deselectAll","dismiss","eventDispatcher","cacheManager","invalidate","rejectionContainer","getElementById","style","display","css","ResetImage","removeRejectionPopup","i18nHotelCenter","hotelCenterComponentI18n","hotelCenterSharedI18n","HotelCenterAssignmentDeps","viewAdapter","hotelCenterEdm","hotelCenterJsData","crossPageSelectAll","sharedColumn","schemaUtil","customUserInfoPreferences","campaignJsData","dateFilterPreferences","HotelCenterAssignment","hotelCenterAssignmentLoader","CalloutAdExtensionSchema","CalloutAdExtensionAssociationsView","_HotelCenterBaseAdExt","isNewEntitySelector","associationOption","AssociationEditor","CalloutAssociationEditor","findScope","i18nKeys","multiSelectSubtitle","AdgroupSelectorEntityTypeAdgroups","AdgroupSelectorEntityTypeCampaigns","AdExtensionsMultiSelectSelectCampaigns","AdExtensionsMultiSelectSelectAdgroups","entitySelectorService","maxSelectedItemsCount","AssociationContainer","subtitle","ErrorGridEntityAdgroupColumn","ErrorGridEntityCampaignColumn","delete_confirm","AdExtensions_Edit_Warning","local","gridRowTemplate","Text","helpId","HotelCenterBaseAdExtensionView","hotelCenterI18n","hotelCenterShared","HotelCenterIntelligenceDeps","adapter","azureUpload","toast","calloutExtensionAssociation","segmentationPerferences","servicePreference","customeridtype","HotelCenterIntelligence","hotelCenterIntelligenceLoader","hotelCenterIntelligence","hotelCenterSchemaI18n","hotelCenterUtils","HotelCenterOverviewDeps","detailMapper","bulkEditJob","downloadViewAdapter","columnChooser","newPerformanceLog","popupEditor","decimal","jsDataCampaign","segmentationPreferences","columnChooserPreferences","HotelCenterOverview","hotelCenterOverviewLoader","userCountryService","getHotelCenterShared","SetupViewDeps","HotelCenteSetup","setupViewLoader","_getHotelCenterUtils","getHotelCenterUtils","bidUtils","bidMultiplierUtils","dateUtils","inlineDownloadUtils","fetchDbProvisionStatus","reject","cid","aid","getProvisionedUrl","Authorization","Token","isHotelAdsDBPilotEnabled","bootstrapHotelCenter","dbProvisionStatus","dbProvisionResult","getFilterPromise","filterValues","match","currentCustomer","subAccounts","getTotalSubaccounts","pageId","isPageReady","logException","err","msg","message","stack","st","JSON","stringify","logError","startPollingUntilImportStarted","taskItemExecutionId","completeCallBack","showLoadingIcon","isMultiAccount","failedTimes","wrappedCompleteCallBack","func","hideLoadingPanel","logMessage","LOGCATEGORY","TRACE","LOGLEVEL","INFO","showLoadingPanel","setTimeout","checkStatus","odata","editImportCookieName","currentUserName","cookieHelperForEditImport","createCookie","taskItemId","sessionId","cookieValue","expire","Date","setTime","getTime","cookie","deleteCookie","getSessionId","editImportCookie","safeJson","upload","file","size","allowedExtensions","UploadService","validateFunc","ext","start","urlWithoutSas","slice","indexOf","ValidatationFailed","safeJSON","customizedCategory","endActivity","asLoggingStart","setting","ACTIVITYNAME","ImportCampaignsClickToUploadFile","SCENARIONAME","ImportCampaignsFileUpload","getImportTemplateUrl","fileName","IsDSAMixedModeCampaignEnabled","IsEnhancedShoppingCampaignAllowed","TemplatesPathUrl","initFileImportPage","settings","commonDeps","createDeps","deps","azureUploader","i18nErrors","importTemplateUrl","defaultLogActivity","logActivities","clickOnImportFromFile","renderImportColumnMatching","scenarios","fileimport","create","renderImportOptions","renderImportPreview","renderImportSummary","FileImportPage","currentStep","importId","subFieldsBlacklist","getBlacklist","initGapi","initDeps","isMultiAccountImport","customerIdType","useAdvertiserCustomerId","google","jsData","clickOnImportFromGoogleAdWords","initGoogleImportDeps","UetTagSelectorView","logScenario","googleimport","renderSelectAdWordsAccount","renderSelectAdWordsCampaigns","logInAccount","selectAccount","selectCampaign","configureOptions","completeSchedule","initGoogleImportPage","MultiAccountGoogleImportPage","GoogleImportPage","initFacebookImportDeps","getEnvironment","domain","token","loadFacebookSdk","sdk","timeZoneMapper","clickOnImportFromFacebook","FB","facebookimport","initFacebookImportPage","FacebookImportPage","initAmazonImportDeps","clickOnImportFromAmazonSPA","amazonimport","renderSelectAmazonAccount","renderSelectAmazonCampaigns","initPinterestImportDeps","clickOnImportFromPinterestSPA","pinterestimport","getBlackList","statusOrderToBlockerTitleMap","statusKeyToOrderMap","PendingExecution","NotStarted","UploadInProgress","ValidationInProgress","ValidationCompleted","BulkFileGenerateInProgress","SubmitInProgress","Complete","i18nAmdLoader","interpolate","instrumentation","importFromAmazonSPA","importFromPinterestSPA","importFromFacebookSPA","importFromFileSPA","importFromGoogleAdWordsSPA","continueImport","continueImportSPA","activities","clickOnImportFromFacebookSPA","clickOnImportFromFileSPA","clickOnImportFromGoogleAdWordsSPA","loadContinueImport","loadContinueImportSPA","coupon","currency","check","dependencyName","Error","timeZoneEnumMapper","generateCombinedSchemaObject","doubleListBox","accountSelectionLists","dateUtil","campaignFilterFactory","FilterStorageFactory","featureName","adGroupFilterFactory","adFilterFactory","campaignFilterStore","filterEntityOptions","entitySchema","adgroupFilterStore","adFilterStore","formatCoupon","SearchTermGridId","AuctionInsightsGridId","CampaignTabId","AdGroupTabId","AdsTabId","KeywordsTabId","ProductsGroupId","FlattenProductsGroupId","AudienceTabId","AdExtensionsTabId","ChangeHistoryTabId","DimensionsTabId","AdGroupStatusFilterColumnName","KeywordNameFilterColumnName","LocationsTabId","DevicesTabId","AdScheduleTabId","DemographicsTabId","AdDescriptionFilterColumnName","AdExtensionCampaignAssociationStatus","AdExtensionAssociationStatus","KeywordMatchTypeColumnName","CampaignEntity","AdGroupEntity","AdEntity","KeywordEntity","SearchTermEntity","AuctionInsightEntity","AudiencesAssociationEntity","AccountEdmEntity","AdGroupCriterionEdmEntity","CampaignCriterionEdmEntity","CampaignEdmEntity","DynamicSearchAdsEdmEntity","AdGroupEdmEntity","AdEdmEntity","KeywordEdmEntity","ClickMetricId","NoneMetricId","IsViewThroughConversionEnabled","PageContext","InlineChartDropDownOption","filterOptionId","resultData","GranularityDropDownOption","_Backbone$Collection","option","usingNewDatefilter","dateObj","_possibleConstructorReturn","getPromise","daterange","dateRange","ko_model","appliedRange","comparedDateRange","compared","appliedComparedRange","mainDateDiff","_calculateDiff","comparedDateDiff","now","hourlyStartDate","setMonth","getMonth","hourlyOptionDisabled","dailyOptionDisabled","_calculateDisabled","weeklyOptionDisabled","monthlyOptionDisabled","quarterlyOptionDisabled","Infinity","longerPeriod","enumValue","startDate","endDate","end","timeDiff","Math","abs","round","dateDiff","min","max","ChartDelegateAdapter","_DelegateAdapter","dateString","dateParsedArray","split","year","month","day","request","sd","convertToDateObj","ed","granularity","numb","date","getYear","prependZero","getDate","getHours","getMinutes","getSeconds","rtnData","metricOption","obj","MetricName","PrimaryDataPoints","ComparisonDataPoints","_fillData","compareStartDate","push","dataPoints","i","generateFormattedDateString","floor","random","addHour","numbOfdataPoints","numberOfDataPoints","addDay","addMonth","generateMockData","DelegateAdapter","getMetricLocalizedNameForOdata","metric","convertedString","IsCustomerHierarchyEnabled","DataProvider","p$jsdata","_generateRequest","useInlineChartMockData","getParameter","location","href","_fetchDataUsingMockDBAdapter","_fetchDataUsingOdataAdapter","refreshGridData","transformedMetric","metricMapping","allMetrics","toString","ret","m","chartNameConverter","parentLevels","edmEntity","currentEntity","_getEntityCollectionName","Constants","period","_formatDateString","compareEndDate","metrics","filters","movingAverage","isMovingAverageOn","forceRefresh","filterRequested","filtersTypeString","filtersToUse","filterExpression","valueValid","Values","instrument","decodeURIComponent","odataFilterConverter","convertToURLParam","instrumentConsts","PerformanceTimeSeries","_getScope","_prepareData","dateStr","leftPadding","s","dt","parse","getFullYear","series","chartName","chartNameTable","convertData","point","isPrimaryData","PrimaryData","ComparisonData","DateTime","substring","dateTime","Value","transformChartPoints","navigation","_getNavigation","nav","parseInt","comparisonStartDate","comparisonEndDate","nameMapping","Keyword","Account","NegativeKeyword","NegativeKeywordList","CampaignCriterion","AdGroupCriterion","InlineChart","store","definitions","getInlineChartInfo","project","record","inlineChartData","path","keyRecord","BPromise","setInlineChartInfo","inlineChartInfo","newinlineChartInfo","update","defineResource","registerSubadapter","PreferencesSubadapter","Resource","prefix","_ref$where","_ref$where2$project","serialize","Version","deserialize","InlineChartViewModel","learnMoreLabel","isUsingVnextGrid","tab","isMovingAverageChecked","primaryMetricId","secondaryMetricId","chartDataProvider","showChart","chartTitle","isDataAvailable","noDataText","isComparisonDataMissing","comparisonDataMissingText","showMovingAverageText","newFeatureLabel","isChartLoading","isGranularityShowing","xAxisStartValue","xAxisEndValue","comparedXAxisStartValue","comparedXAxisEndValue","hideToolbar","hideToggleIcon","isDataFetchingDone","isPopOn","isMovingAverageVisible","daysBetween","granularityOptions","granularityId","primaryMetricOptions","secondaryMetricOptions","cachedChartData","_getChartDataWhenSubscribed","comparedStartDate","comparedEndDate","primaryData","secondaryData","selectedPrimaryCategory","selectedSecondaryCategory","maxDate","needUpdateChart","chartUpdatingPromise","method","queueAsync","BluebirdPromise","prefObj","_metricSelectedHandler","allColors","CurrentTabId","reloadChartData","_getParentLevels","filterUrlParam","filterObj","entityObj","_getDefaultEntityBaseOnParentLevels","filterString","odataV4","ignoreCase","encodeURI","_validateFilter","flagUpdateChart","p$granularityOptions","promiseResults","dateRangeRes","_getChartTitle","dateRangeObj","showMovingAverageInPref","granularityInPref","granularityItem","firstEnabledGranularity","metricOptions","primaryMetric","primaryIdInPref","secondaryMetric","secondaryIdInPref","isAgeOrGenderTab","unshift","_updateChart","instrumentSetting","InlineChartV2ReloadChart","timestamp","Highcharts","_getQuarter","selectedCategory","metricData","primarySum","comparisonSum","primaryAvg","comparisonAvg","dataObj","avgDiff","getUTCMonth","values","_this5","chartContext","_getChartData","xAxisStartDate","xAxisEndDate","formatDate","_alignDataForComparison","_refreshAllCharts","_logChartData","errorCode","fetchData","chartData","_setCategoryAndData","colors","currentData","comparisonData","category","color","original","xAxis","comparative","yAxis","dataObservable","categoryObservable","_getChartDataForMetric","dataSet","_this6","keys","Object","shortermetricData","longermetricData","diff","diff1","dayAfter","dayInMillisec","primaryDataDateDiff","comparisonDataDateDiff","currentLevel","CampaignState","metricId","colorRGB","currentCampaign","currentAdGroup","CurrentAdGroup","constructor","Array","numericSymbolFormatter","tickValue","tickInterval","numberFormatter","decimalPoint","thousandsSeparator","sign","formattedNumber","absTickValue","absTickInterval","numericSymbolKeys","val","absTickValueStr","dotIdx","legacy$","InlineChartView","needRedraw","inlineChartViewModel","_onShowChartChanged","_onGranularityOptionsChanged","_onPrimaryMetricOptionsChanged","_onSecondaryMetricOptionsChanged","_onPrimaryDataChanged","_onSecondaryDataChanged","onGridPageLoadingHandler","_onGridPageLoading","onTabChangeHandler","_onTabChange","inlineChartTemplate","_toggleOldNewInlineChart","_insertToolBarIfNeeded","_onGridPageLoadingNewGrid","triggeredGridPageLoading","pageTitle","chartContainer","pageTitleInclusiveWidth","width","parseFloat","highChartContainer","triggerHandler","_showNewChartOnCurrentTab","commandType","RefreshGridData","filterEntity","Entity","FilterExpressions","granularityDropdown","DropdownView","first","defaultOption","dropDownOptions","onDropDownChanged","onGranularitySelected","primaryMetricDropdown","onPrimaryMetricSelected","onPopEnabled","calculatePercentageDiff","secondaryMetricDropdown","onSecondaryMetricSelected","_redrawChart","_isDataFetchingDone","chartIteration","attr","chartRedrawMarker","logActivityDurationMarker","self","ChartView","showWeekend","koModel","highchartsOptions","tooltip","formatter","primaryPoints","comparisonPoints","tempHtml","points","x","_numberWithCommas","_round","y","_isPercentNeeded","labels","axis","lang","_updateMetricDropdownDiff","markEnd","_showOldChartOnCurrentTab","_toggleToolbar","hideChartToolbar","tabsWithNewInlineCharts","globalToolBar","globalToolBarPanel","appendTo","insertAfter","showDiff","triggerShowDifference","num","seriesName","numberWithCommas","dotIndex","currentPage","createSimilar","reportId","isForNewUI","getUrlSearch","scopeHistoryPush","convertSelectionDateRangeToDateFilter","restoreDateFilter","TaskItem","TaskItems","Rule","Selection","page","getGridPage","setPreferenceByReportEmailRule","route","getGridRouteForNewUI","navigate","getGridRoute","loadEmails","allUsersType","uid","queryString","URLSearchParams","response","json","emails","getImportButtonOptions","importChannelType","lazyInject","iconLeftGlyphName","backboneGridView","router","navigateToRoute","processBatchedImports","groupedByBatch","importResult","CampaignSplitGuid","sortedGroupedList","group","minDateIndex","StartDateTime","sortedGroupWithParentList","parent","batchImportGroup","firstInBatchIndex","cloneDeep","statisticFields","EntityStatistics","initStatistics","entityStatisticChangeTypes","initialEntity","isBatchStillInProgress","hasAnyBatchedImportFailed","hasAnyBatchedImportBeenCancelled","successCount","errorCount","index","Keys","combinedStatistics","memo","entityStatisticMap","ErrorCode","ImportStatus","SuccessCount","ErrorCount","TotalCount","ImportName","ErrorFileIdentifier","CampaignSplitStatus","CampaignSplitBatchIndex","CampaignSplitBatchCount","IsBatchParent","createParentRowForBatchedImports","processedGroup","indexTemplate","indexText","IsChildBatch","reverse","testTypeSuffix","IsUseImportTestTypeForImportTaskExecutionEnabled","FILTER_IMPORT","FILTER_MULTIACCOUNT_IMPORT","FILTER_FILE_IMPORT","FILTER_FACEBOOK_IMPORT","FILTER_AMAZON_IMPORT","FILTER_PINTEREST_IMPORT","processData","groupedByAccount","isCustomerLevel","processedItem","ImportResultList","accountitem","TaskId","IsChildAccountTask","MultiAccountTaskIndex","MultiAccountTaskCount","processMultiAccountBatchedImports","getImportLogDataSourceConfig","_ref$isFacebookImport","isFacebookImport","_ref$isAmazonImport","isAmazonImport","_ref$isPinterestImpor","isPinterestImport","supportedImportTypes","TaskItemExecution","consts","TaskItemExecutions","processedData","resource","IMPORT_TYPE","amazonImport","pinterestImport","getMemoryDataSourceConfig","updateMemoryGrid","currentGrid","patch","updateTaskItemSessionId","taskId","logMsg","adWordsSessionId","createImportTaskItemHelper","getGoogleImportInfoFromCookie","googleSessionId","taskItem","AdWordsImportContext","SessionId","AdWordsSessionUserId","SessionType","ImportUserPreferences","showSuccess","findImportTaskItem","download","identifier","downloadService","amdI18n","config1","importSettingsSummaryBuilder","ImportOptionsSummaryBuilder","fileImportSettingsSummaryBuilder","FileImportOptionsSummaryBuilder","fileImportOptionBlackList","getFileImportOptionBlackList","facebookImportOptionBlackList","getFacebookImportOptionBlackList","amazonImportOptionBlackList","getAmazonImportOptionBlackList","pinterestImportOptionBlackList","getPinterestImportOptionBlackList","getDropdownItemConfig","isFirstDropdownOption","action","viewFactory","setErrorFilterPredicate","refreshGrid","setMenuTitle","getGridSwitchDropdownItem","isGoogleImport","getToolbarConfig","isSmartAccount","isUPSmartAccount","importType","className","setImportType","updateToolbarTextForVNext","importButtonOptions","_slicedToArray","Map","getVNextToolbarConfig","isNewFeature","level","leftIconClass","getLegacyToolbarConfig","getColumnsConfig","freqColumnTmpl","Freq","StartedAt","datetime","UploadFileName","fileNameExists","nameTmpl","ariaLabel","creatorColumnTmpl","Creator","ModifiedBy","format","CreatedAt","Time","enabledOptions","settingsText","importSettings","ImportUserPreference","parsedValue","parseModelToImportUserPreference","parseJsonFormatImportOptions","showSmartType","IsSmartImportEnabled","IsSmartImport","importOptionBlackList","generateSummaryFromSelectedOptions","preferencesLogTmpl","showTooltipIcon","importSettingsLabel","importSourceAccountInfo","isAutomated","multiAccountTaskGuid","GoogleAccountName","GoogleCustomerId","ExternalAccountName","ExternalCustomerId","importTypeTmpl","IsAutomated","MultiAccountTaskGuid","IsGoogleImport","IsFacebookImport","IsAmazonImport","IsPinterestImport","ImportSourceAccountInfo","importSummaryColDataToTemplate","hasError","stat","HasWarning","hasErrorSummary","ImportNewErrorSummaryDownloadLink","ErrorSummaryFileIdentifier","hasPreview","hasErrorCode","TokenInvalidImportNotification","logColumns","column","columnData","actionsLogTmpl","errorDetailsLabel","GoogleImportLogConfig","tableAttributes","pluginsConfig","uiBlocker","gridMarker","FacebookImportLogConfig","AmazonImportLogConfig","PinterestImportLogConfig","FileImportLogConfig","showGoogleImportGrid","showFacebookImportGrid","showAmazonImportGrid","showPinterestImportGrid","showFileImportGrid","isFirstSwitch","showNoGoogleImportMsg","showNoFileImportMsg","showNoFacebookImportMsg","showNoAmazonImportMsg","showNoPinterestImportMsg","ImportSettingsTooltipView","formView","importSettingsTooltipTmpl","debouncedVersion","debounce","MultiAccountTaskExecutionId","ImportId","MultiAccountTaskId","IMPORT_TYPE_TO_IMPORT_NAME","toolbarConfig","overridingEvent","importOptionsFormLoader","summaryTableLoader","uetTagSelectorViewLoader","defaults","previewAnImport","cancelAnImport","googleImportGridRendered","googleImportGrid","facebookImportGridRendered","facebookImportGrid","amazonImportGridRendered","amazonImportGrid","pinterestImportGridRendered","pinterestImportGrid","fileImportGrid","showAllImports","predicate","execution","which","preventDefault","pageText","pageNumberText","getColumnData","dismissCallout","UseJsGapiClientOnImportLogGrid","GSILocal","require","loginRepo","GoogleLoginRepository","googleSignIn","onSuccess","onFail","useConsentPrompt","code","requestUrl","AuthCode","post","authErrors","handleGoogleLoginAuthError","w","h","callback","errorMessage","windowWidth","windowHeight","documentElement","screen","dualScreenLeft","screenLeft","left","dualScreenTop","screenTop","top","innerWidth","clientWidth","innerHeight","clientHeight","newWindow","open","focus","timer","setInterval","closed","clearInterval","windowObj","hasOwnProperty","isRedirected","isAuthSucceed","googleAccount","close","showGooglePopup","encodeURIComponent","partial","currentUser","facebookRepo","FacebookImportRepository","trace","ERROR","login","accessToken","refreshScheduledFacebookImportTaskItemSessionId","onPermissionsDeclined","_ref6$declinedScopesA","declinedScopesAndDesc","userID","declinedPerms","ds","join","handleFacebookLoginError","rerequest","pinterestLoginRepo","PinterestLoginRepository","pinterestImportRepo","PinterestImportRepository","authCode","startPinterestSession","_objectSpread","PinterestImportContext","PinterestSessionUserId","updateScheduledImportTaskItem","res","handlePinterestLoginError","tmpl","noGoogleImportMsg","noFacebookImportMsg","noAmazonImportMsg","noPinterestImportMsg","noFileImportMsg","initGrid","ToolbarView","iconRight","onChange","getGridSwitchToolbarConfig","pgrid","vnext","use","paginationPlugin","uiBlockerPlugin","flow","headerTemplateConfig","initUpdateFinishedEventListener","hasNoResult","countRows","currentTarget","tooltipView","$targetTooltip","target","$parent","eventName","uniqueId","_ref8","ImportOptionsForm","_ref9","searchAndReplaceSchema","clone","ImportSearchAndReplaceForStringProperty","findAndReplaceSuffixSchema","jsonFormatImportOptions","ImportUpdateEntityPreference","LandingPageAppendPreference","ImportAppendDestUrlPreference","LandingPageReplacePreference","ImportSearchAndReplaceDestUrlPreference","AppendTrackingTemplatePreference","AppendPreferencesForTrackingTemplate","SearchAndReplacePreferencesForTrackingTemplate","ImportPrefixAndSuffixForStringProperty","ImportAdjustmentForNumericProperty","SearchAndReplaceForCustomParameters","SearchAndReplaceForFinalURLSuffix","createDisabledUETSelectorClass","each","input","toolTipTmpl","hideTooltip","is","closest","_ref10","showSummaryDetailsPopup","itemOfElement","UploadFileIdentifier","redirectUrl","queryify","_this7","blockerElem","UIBlockerToken","UIBlocker","block","$http","__RequestVerificationToken","contentType","unblock","_len","_key","_ImportLogGridBase","importOptions","summaryTable","uetTagSelector","ImportLogGridBase","TEST_TYPE_SUFFIX","FILTER_OUT_RUNNOW","FILTER_IMPORT_TYPE","FILTER_FACEBOOK_IMPORT_TYPE","FILTER_MULTIACCOUNT_IMPORT_TYPE","FILTER_AMAZON_IMPORT_TYPE","FILTER_PINTEREST_IMPORT_TYPE","FILTER_ALL_ITEMS","FILTER_ALL_BUT_DELETED","FILTER_ALL_ITEMS_MULTIACCOUNT","FILTER_ALL_BUT_DELETED_MULTIACCOUNT","FILTER_ALL_FACEBOOK_ITEMS","FILTER_ALL_BUT_DELETED_FACEBOOK_ITEMS","FILTER_ALL_AMAZON_ITEMS","FILTER_ALL_BUT_DELETED_AMAZON_ITEMS","FILTER_ALL_PINTEREST_ITEMS","FILTER_ALL_BUT_DELETED_PINTEREST_ITEMS","preferenceUploadButtonConfig","legacyI18n","publicPath","showTopOfGridPanel","logTrace","instrumentationConstants","preferenceUploadViewModule","gridToolbar","preferenceUploadView","PreferenceUploadView","scrollTo","batchEditStatus","adoptResumeScheduleRecommendation","ruleId","State","batchRequest","ajaxBatch","textStatus","some","updateToolbarText","getToolbarConfigForVNext","historyGridFilterTitles","AccountMode","ACCOUNT_MODE","SMART","UNIFIED_SMART","getSupportedImportTypes","isMixedImports","isGoogleImportOnly","isFacebookImportOnly","isAmazonImportOnly","isPinterestImportOnly","googleAll","googleDeleted","facebookAll","facebookDeleted","amazonAll","amazonDeleted","pinterestAll","pinterestDeleted","importTypeOfFilter","getDefaultImportTypeOfFilter","toolbarSelectedConfig","_lazyInject$backboneG","ima","toolbarUnselectedConfig","isFiltered","updateUnselectedToolbarConfig","getUnselectedToolbarConfig","getPluginsConfig","batchEditCallback","pos","IsAutoFrequency","Cron","statusColumnTmpl","runNowStatusColumnTmpl","ImportPreferenceUpload","idTmpl","taskTmpl","FacebookImportContext","AmazonImportContext","IsFacebookImportEnabled","IsAmazonImportEnabled","IsPinterestImportEnabled","enabledImportTypes","accountNumber","CustomerId","AccountId","ProfileId","acctTmpl","EmailAddress","AccountName","AccountNumber","importFreqColDataToTemplate","modeTmpl","notificationType","arr","emailMapper","showRecommendation","allowEdit","enableRunNowButton","importRecommendationListName","importRecommendationListNameMap","importChannel","importChannelNameMap","supportedRecommendationTypes","supportedRecommendationTypesList","recommendationType","ifTypeSupported","linkTmpl","edit","runNow","dash","recommendationText","ImportScheduleGridConfig","getDataSourceConfig","enabled","getImportScheduleDataSourceConfig","jsdataCampaign","MultiAccountGoogleImportTaskItem","ImportTaskItem","getJsDataOptions","urlParameters","createRunNowImport","body","createUpdateStatusView","UpdateStatusView","Grid","Model","valueOf","afterChange","useStateInsteadOfStatus","addImportTypeToStatusUpdate","ignoreEmptyId","showNoFilteredImportMsg","ImportScheduleAccountsDetailView","_DeterministicWrapper","projectionGrid","DeterministicWrapperView","CNMarketExpansion","BaiduFileImport","gapiSignInSuccess","reloginToGoogle","reloginToFacebook","hasReLoggedIn","login2FB","startFacebookSession","_ref4$declinedScopesA","logout","gapiSignInMultiAccountSuccess","vNextToolbarPlugin","scheduleItems","runMultiAccountImportNow","runImportNow","ImportTaskItemList","_ref6$AdWordsImportCo","bingAccount","targetRect","getBoundingClientRect","PopoverView","position","isAbsolute","right","containerClassName","setContent","contents","TitledContent","setBody","updateStatusView","indicator","editDropDown","enable","disable","useQuickFilter","assistedSelectionPlugin","filterCheck","checkEditButton","noImportMsgHeader","noFilteredImportMsg","renderGrid","isRunnow","currentUserId","propertyOf","amazonLoginRepo","AmazonLoginRepository","amazonImportRepo","AmazonImportRepository","startAmazonSession","handleAmazonLoginError","reloginToAmazon","reloginToPinterest","goToGoogleImportWizard","_ref7","_ref7$importStep","importStep","navigator","routeName","isString","returnUrl","navigateToUrl","handleActionForScheduledImport","setDestination","handleActionForMultiAccountScheduledImport","ifUpdated","isFileImportODataMigrationEnabled","FileImportContext","FilePath","runImportNowInternal","updateData","closeEditPanel","editTaskSaveInternal","taskItemOptions","extend","FacebookSessionUserId","notificationString","UpdateAdCustomizerFeeds","ImportNewAdCustomizerFeeds","applyRecommendationInternal","SetLowerBidsToAdCenterMinBids","EnableAutoCurrencyConversion","notificationApi","showInfo","runMultiAccountImportNowInternal","isSmartImportWizardJob","facebookBody","pick","AdGroupMedium","ImportType","NotificationType","triggerRunNowImportTask","amazonBody","pinterestBody","adWordsImportContext","isSmartCampaignOnlyJob","IsSmartCampaignOnly","isPmaxRecommendationJob","DefaultImportSettings","TaskType","Event","prepareGoogleImport","importUserPreferences","timeZoneId","TimeZoneId","market","CustomerMarket","language","adGroupMedium","googleCustomerId","loginCustomerId","LoginCustomerId","campaignIds","CampaignIds","googleEntitiesBlobName","GoogleEntitiesBlobName","sessionType","initialAdWordsAccount","googleAccountName","IsEscImport","prepareMultiAccountGoogleImport","importUserPreference","importTaskItemList","originalTaskId","promisifyStartPollingUntilImportStarted","handleGridErrors","_ImportScheduleGridBa","ImportScheduleGridBase","getBlobUploadUrl","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_ref$fileExtension","odataOptions","wrap","_context","prev","next","fileExtension","sent","abrupt","stop","_x","apply","postTask","_x2","_postTask","_callee4","BlobName","SasUrl","_ref3$UploadDateTime","UploadDateTime","_context4","FileIdentifier","UploadedFileName","postPreviewTask","_callee2","_context2","_x3","postCommitTask","_callee3","_context3","_x4","pollExecutionResult","PREFERENCE_UPLOAD_STATUS","NotStart","Upload","Preview","Apply","Previewed","Applied","PREFERENCE_UPLOAD_ERROR_MAP","InvalidImportPreferenceBulkUpdateTaskType","ImportPreferenceBulkUpdateUploadFileSizeExceeded","ImportPreferenceBulkUpdateBlobDownloadError","ImportPreferenceBulkUpdateBlobUploadError","ImportPreferenceBulkUpdateFileFormatInvalid","ImportPreferenceBulkUpdateFileIsEmpty","ImportPreferenceBulkUpdateFileMissingHeaderRow","ImportPreferenceBulkUpdateColumnTaskIdNotFound","ImportPreferenceBulkUpdateColumnAccountIdNotFound","ImportPreferenceBulkUpdateColumnPreferenceNotFound","ImportPreferenceBulkUpdateColumnImportTypeNotFound","ImportPreferenceBulkUpdateParseFailedInvalidValuesInDataRows","_DeterministicView","renderPerfMarker","FilePicker","description","initFilePicker","defaultState","isApplyEnabled","hideFilePicker","isPreviewEnabled","uploading","showSummaryGrid","downloadPath","progressPercentage","setState","progressTitle","filePicker","theme","allowedFileExtensions","validator","clearError","displayFilePath","preferenceUploadTemplate","uploadAndPreview","downloadResults","templateUrl","iframeDownload","_uploadAndPreview","_yield$getBlobUploadU","uploadService","previewTask","previewResult","previewPerfMarker","willFetchData","fileObject","FilePayload","getFileExtension","blobSetting","blobName","onUploadFinish","t0","getErrorMessage","_apply","_this$getState","commitTaskSasUrl","commitTask","commitResult","applyPerfMarker","getState","isPreview","done","OutputFileSasURL","logStage","Errors","InputFileName","willRender","_this$getState3","ReactDOM","_jsx","ProgressIndicator","label","percentComplete","DeterministicView","hourMapper","hourString","hour","hourObj","adSchedulingOptions","fromHourOptions","twelveHourDisplay","frequencyMapper","cron","char","dayOfTheWeek","isAuto","frequency","getTimeZoneOptions","TimeZone","getProductData","shouldShowPlaceholderStoreIfExists","Product","productData","ProductCollectionAccounts","IsCoOpStore","IsGlobalStore","defaultAdGroupName","getAd","CampaignName","AdGroupName","PromotionalText","getProductPartition","BidAmount","ProductCondition","ProductValue","IsExcluded","IsLeaf","formatCriterions","campaignTargetingModel","dayTimeCriterions","adScheduleModel","dayTimeRanges","locationCriterions","deletedLocationCriterions","locations","deletedLocations","criterion","sort","__","b","bulkUpsertSmartShoppingCampaign","_ref2$campaignId","_ref2$adgroupId","timeZone","timezonemapper","getAccountTimeZone","adScheduleUseSearcherTimeZone","campaignTargeting","campaignSetting","criterions","shoppingSettingModel","shoppingSetting","FeedLabel","SalesCountry","smartShoppingModel","AdScheduleUseSearcherTimeZone","CampaignCriterions","Priority","adgroupToCreate","SearchBid","StartDate","EndDate","getAdGroup","ProductAds","ProductPartitions","ShoppingCampaign","createdCampaign","bulkUpdateSmartShoppingCampaign","formatModel","getCampaign","expand","createAdGroupWithDefaulSettings","defaultBidForShoppingCampaign","_bingads_webui_component_legacy_legacy_router_index","legacyRouter","isBSCSmartImportEnabled","IsBSCSmartImportEnabled","modalManager","ModalManager","campaignSettingsView","shoppingSettingsView","campaignTargetingView","cachedModel","campaignSettings","shoppingSettings","initModalManager","router_new","active","editMode","campaignInfo","campaignSettingsPlaceholder","shoppingSettingsPlaceholder","campaignTargetingPlaceholder","renderCampaignSettingsView","renderShoppingSettingsView","renderCampaignTargetingView","CampaignSettingsView","showLanguage","isNotAudienceCampaign","ShoppingSettingsView","gmcToMMCGridDeps","i18nNewDesign","CampaignTargetingView","eventDelegator","showDateSettings","isEditMode","campaign_id","summaryDataContextManager","getContext","uniq","campaignErrors","handleApiErrors","bulkApiErrors","i18nError","errMsg","querySelector","getData","toObject","getValue","eq","scrollUtil","SSCInstrumentation","oldUISmartShoppingCampaignCreationScenario","activity","SSCCreationActivity","str","signal","messageType","forEach","validationError","errorList","_SmartShoppingBase","sscInstrumentation","loadMap","isStoreNotValid","addClass","renderSubViews","advancedSettingsViewPlaceholder","advancedSettingsView","renderAdvancedSettingsView","renderGoalSelector","sendPageError","AdvancedSettingsView","nativeAdsCampaignBid","collapseAdvancedSettings","isSponsoredCampaign","isFeedFilterValid","isFeedLabelEnabled","validateFeedFilter","cashbackSettings","hasCashbackSettings","PersonalizedOffersEnabled","MonthlyBudget","goalSelectionView","GoalSelectorView","realI18n","isMultiMode","isHideSaveBar","advancedSettings","getValues","urlOptions","CampaignConversionGoalAssociations","convertToMTFormat","setData","handleErrors","navigateToCampaignSummaryPage","scrollToErrors","SmartShoppingBase","_BaseViewModel","configSchema","BaseViewModel","isEnabledDynamicFeedCampaign","IsEnabledForDynamicFeedCampaign","ccJsData","campaignScopeAllSettingsPerfMarker","hideUIBlocker","getFeedData","_ref3$","feed","isMSStoreAdsGAWorkflow","isMSStoreAdsCampaign","shoppingCampaignView","isSettingsPage","add","getODataErrors","_ref5$$top","_ref5$$skip","GetFeedData","perfMarkerEvent","ChangeBidAdjustmentModel","_BaseModel","BaseModel","prototype","BatchAction","Actions","Property","ActionType","settingView","showButtonBar","showCloseButton","selectedEntityCount","gridType","titleText","selectCount","entityNameHeader","bulkEditInfo","showAdgroupSelectedAllMixInheritWarning","isAllSelected","getSelectedEntityIdStrings","LevelOfDetails","getUrlParameter","formatBid","formatEntityString","EntityKeyObject","EntityKey","Key","isHtml","Changes","decimalNumber","fromFloatToPercentString","OriginalValue","NewValue","ChangeBidAdjustmentView","_BaseView","customValidators","checkInheritTargets","BidAdjustmentView","showButtons","ChangeBidAdjustmentViewModel","pgridPlugins","simulateResults","unset","currentModel","BidMultiplier","conditionString","filterState","getAllFilters","filterService","getCombinedFilter","idBased","idString","filterConverter","convert","conditionFragment","conditionFragmentALl","SelectedColumn","SelectedOperator","BaseView","newValue","originalValue","ChangeTargetingCashbackPercentView","_ChangeCashbackPercen","getCashbackPercentValueByAction","ChangeCashbackPercentView","definePlugin","pluginConfig","toolbarWithItem","menuId","getGridSelectionCount","totalRowsTotalPageCount","selectedKeys","editable","campaignItems","adgroupItems","AdGroupId","showAlert","messageDetails","showBulkEditor","bulkEditView","deprecatedLocationSelected","isDeprecatedLocation","checkDeprecatedLocations","inheritResult","listenTo","updateSelectedEntityCount","renderView","onOperationSuccess","ChangeCashbackPercentModel","editorContainer","overrideWith","updateToolbar","IsPersonalizedOffersEnabled","shouldSupportCashbackSettings","pollStatus","successCb","failedCb","BulkEditSession","processResponse","completeCB","failedCB","progressCB","getQueryString","projection","startdate","RangeStartDate","toISOString","enddate","RangeEndDate","getDateRange","IdStrings","IdString","idStringsFilters","CampaignId","TargetGroupDetailId","bulkEditChange","batchActions","opt","process","Description","gridFilterSerializer","toDescription","getFilter","idsCount","QueryString","deleteTargets","confirmationMessage","emitter","SuccessRowCount","TotalRowCount","toastConfirmation","toastWarning","toastError","_ref$learnMoreId","learnMoreId","CommonAlertDialog","decorate","commonAlert","_ref$title","alertView","dialogOptions","maxWidth","center","destroy","ARWJsDataContextProvider","children","_ref$serverContext","CurrentUser","ServicesEndpoints","CcJsDataContextProvider","userId","customerId","appendErrorSummary","appendJsDataErrorSummary","handleAjaxAuthFailure","clientCenterBaseUrl","ClientCenterUIAPI","useAction","Action","useARWContextValue","useJsDataContext","useMemo","reparentingId","ReparentingId","sourceCustomerId","SourceCustomer","targetCustomerId","TargetCustomer","AccountActions","fetchAll","accountIds","useAccountActions","CustomerActions","Customer","updateServiceLevel","serviceLevel","ServiceLevel","updatePilotFeatures","pilotFeatures","PilotFeatures","useCustomerActions","PaymentInstrumentActions","billToCustomerId","PaymentInstrument","fetchWithId","piId","usePaymentInstrumentActions","usePaymentInstruments","paymentInstrumentActions","_usePromise$data","usePromise","BillingActions","fetchBulkTaxEstimates","BulkEstimateTaxes","useBillingActions","ReparentingJobActions","AccountReparentingJobAdd","updateType","lifeCycleStatus","accountLinkingSettings","accountBillingSettings","defaultBillingSetting","AccountReparentingJobUpdate","sourceCid","targetCid","AccountReparentingJobLoad","loadAccounts","AccountReparentingLoadAccounts","submit","AccountReparentingJobSubmit","useReparentingJobActions","ReparentingValidateActions","AccountReparentingValidateAccounts","targetCustomer","targetCustomerNumber","AccountReparentingValidateTargetCustomer","linkSettings","AccountReparentingValidateLinkInfo","billingSettings","AccountReparentingValidateBillingInfo","fullValidate","AccountReparentingFullValidate","useReparentingValidateActions","UETTagActions","userSettings","toPromise","UETTags","$makeCall","payload","TagSettings","odataURL","xhrFields","responseType","dataType","oDataToken","campaignODataConfigs","edmCustomer","Customers","ReparentingUserSettings","useUETTagActions","ARWServerContext","React","useContext","useARWContextActions","useARWContextPermissions","ARWContextProvider","_React$Component","props","setShowSummaryPaneLinkSettings","showSummaryPaneLinkSettings","ShowSummaryPaneLinkSettings","setShowSummaryPaneBillingSetting","showSummaryPaneBillingSetting","ShowSummaryPaneBillingSetting","setIOPreApprovalRequired","ioPreApprovalRequired","IOPreApprovalRequired","updateAccountBillToCustomersMap","accountBillToCustomersMap","AccountBillToCustomersMap","updateAccountLinks","accountLinks","mandatoryNewBillToAccountIds","updatedAccounts","Accounts","accLink","accountIndex","acc","updatedAccount","linkIndex","LinkedManagers","manager","LinkedManager","Unlink","BillToManager","BillTo","MandatoryNewBillToAccountIds","updateAccountBilling","accountsBilling","accBilling","updateNewBillToSettings","billToCustomer","paymentOptionId","paymentInstrumentId","insertionOrder","prepayConfig","NewBillTo","PaymentOptionId","PaymentInstrumentId","InsertionOrder","PrepayConfig","updateAccountsBillingSettings","updatedAccountsBillingSettings","toUpdateIds","account","updatedSettingsIndex","_updatedAccountsBilli","Invoice","BillToChange","contextInsertionOrder","areUiInsertionOrdersEqual","ioStatus","InsertionOrderStatus","PendingBillToPartyChangeAndUserReview","BillToCustomer","updateJobLoadAccounts","accounts","jobAccount","jobAcc","LinkSettings","linkSetting","linkedManager","AgencyCustomerId","KeepLink","BillingSetting","BillToChangeSetting","_toClientSideBillingS","toClientSideBillingSetting","updateTargetCustomer","customer","updateJobTimestamp","Timestamp","updateSourceCustomer","updateSelectedAccountIds","AccountIds","updateSelectedAccounts","convertAccountModelToServerContext","updateUETTags","uetTags","deleteAccount","newUETTags","prevState","IsAccountReparentingUETEnabled","_this$state","_this$props$serverCon","Provider","contextActions","_props$serverContext","SourceCustomerId","UpdateJobTimestamp","DeleteAccount","UpdateTargetCustomer","UpdateSourceCustomer","UpdateSelectedAccountIds","UpdateSelectedAccounts","UpdateJobLoadAccounts","UpdateAccountLinks","UpdateAccountBilling","UpdateAccountsBillingSettings","SetIOPreApprovalRequired","UpdateNewBillToSettings","UpdateAccountBillToCustomersMap","UpdateUETTags","SetShowSummaryPaneLinkSettings","SetShowSummaryPaneBillingSetting","useAccountsWithNewBillTo","useAccountsForBillingSetup","_useARWContextValue","useEligibleBillToCustomers","billToCustomersMap","allAccountIds","billToCustomersList","accId","list1","list2","item1","item2","usePaymentOptionId","contextAccounts","firstAccountWithBillToChange","defaultSchema","getInstrumentation","applicationName","systemName","INSTRUMENTATION_SYSTEM_NAME","subSystemName","INSTRUMENTATION_SUB_SYSTEM","userContext","getInstrumentationInstance","pageTrackingId","PageTrackingId","errorMappers","isInDevelopmentMode","getInstrumentationService","addScenario","defaultScenario","default","InstrumentationContext","InstrumentationContextProvider","ListItem","Url","NavItem","defaultProps","EntityPopover","popoverId","entities","matchSearch","isShowing","onCancelClick","searchboxPlaceholder","_useState","useState","_useState2","searchText","setSearchText","entityList","trim","classNames","entityPopover","FocusLock","onExit","focusFirstItemOnMount","isControlledFocusLock","isFocusLock","_jsxs","SearchBox","onQueryChange","Children","child","Button","CommonLocStrings","CloseLabel","ARWEntityPopover","withI18nConsumer","withDefaultStyles","getEntityPopoverStyles","ARWStepFooter","saveAndProceed","onPreviousClick","onNextClick","onSubmitClick","nextButtonDisabled","I18nContext","onNextButtonClick","useCallback","onSaveAndExit","BackLabel","NextLabel","SubmitLabel","CancelLabel","SaveAndExitLabel","ARWStepBaseLayout","ARWSummaryPane","jobActions","uetActions","isUETEnabled","onAccountDelete","JobUpdateTypes","ReparentingAccountDelete","UetSetting","tagInfos","TagInfos","saved","IsSaved","summaryPaneContainer","TransferRequestSummary","sourceCustomer","newBillTo","clientCenterUIAPI","getSummaryPaneStyles","AccountsPageDescription","accountsSummaryPageDescription","_ref$palette","palette","padding","bottom","fontFamily","fontSize","lineHeight","neutralPrimary","margin","getAdExtensionEditorStyles","components","mergeStyles","convertToLocalStyle","helpbuttonStyle","extensionEditorStyles","messageBarStyle","scrollbarStyle","glyphIconStyle","searchboxStyle","selectElementStyle","includeSelector","validationErrorsStyle","getAdExtensionsAssociationsStyles","buttonInputStyle","adExtensionsAssociationsContainer","adExtensionsAssociationsContainerLayoutType","ExpandHorizontallyToContainer","Extension","extensionContainer","dangerouslySetInnerHTML","__html","Extensions","layoutOptions","useDefaultStyles","_ref2$type","_ref2$itemsPerRow","itemsPerRow","extensionsContainer","flexDirection","flexWrap","gap","gridGap","gridTemplateColumns","marginBottom","border","borderRadius","alignContent","adExtensionItemTemplateStyles","withEllipsisItemText","getExtensionsStyles","getEditorStyles","datePickerStyle","adExtensionEditorsGlobalStyles","extensionsAssociations","editorPanel","Editor","associationEditor","dynamicFeatures","onEditorSave","onSave","onEditorCancel","onCancel","onEditorChange","useRef","viewListener","useEffect","useNewDlbLayout","showSaveButtonAsDefaultButton","allowSelectAll","allowDeselectAll","hasSubTitle","showErrorsInline","popupFront","panelClassName","vnextContext","isFunction","stopListening","ref","getAdExtensionsAssociationsWrapperStyles","controlsBar","paddingTop","iconButtonColor","themePrimary","extensionDescription","AdExtensionsAssociationsWrapper","extensionType","renderDescription","staticFeatures","selectedExtensionsLayoutOptions","onUpdateExtensionsAssociations","isEditorOpen","setIsEditorOpen","onOpenEditor","_Fragment","DefaultButton","iconProps","iconName","_TL_","dynamicTemplate","universalItemTemplate","staticTemplate","detailsFuncFactory","noAssociationsKey","hasAssociationsKeySingular","hasAssociationsKeyPlural","number","editorViewMapper","appAssociationsEditor","details","Call","callAssociationsEditor","topic","Callout","calloutAssociationsEditor","Location","locationAssociationsEditor","Review","reviewAssociationsEditor","SiteLink","sitelinkAssociationsEditor","StructuredSnippet","structuredsnippetAssociationsEditor","Price","priceAssociationsEditor","Promotion","promotionAssociationsEditor","_ref11","FilterLink","filterLinkAssociationsEditor","_ref12","Flyer","flyerAssociationsEditor","_ref13","actionlinkAssociationsEditor","_ref14","extensionEntityMapping","Image","Automated","Video","LeadForm","BusinessInfo","extensionNameMapping","ActionAdExtension","AppAdExtension","CallAdExtension","CalloutAdExtension","ImageAdExtension","LocationAdExtension","PriceAdExtension","ReviewAdExtension","Sitelink2AdExtension","StructuredSnippetAdExtension","AutomatedAdExtension","PromotionAdExtension","FilterLinkAdExtension","FlyerAdExtension","VideoAdExtension","LeadFormAdExtension","LogoAdExtension","getAvailableExtensions","campaignTypeFilter","campaignTypeExtensionTypeFilter","chain","IsActionLinkExtensionAllowed","IsPriceExtensionAllowed","IsDomesticSimplifiedChineseEnabled","IsLocationExtensionAllowed","IsAppExtensionAllowed","IsSiteLinkExtensionsAllowed","IsCallExtensionAllowed","IsCalloutExtensionAllowed","IsReviewExtensionAllowed","IsStructuredSnippetExtensionAllowed","IsPromotionAdExtensionEnabled","IsFilterLinkAdExtensionEnabled","IsFlyerAdExtensionEnabled","_ref15","_ref16","_ref17","getObjectiveExtensions","_ref19","campaignObjective","availableExtensions","_result","WebsiteVisits","suggestedExtensions","otherExtensions","LocationVisits","WebsiteConversions","PhoneCalls","AppInstalls","difference","getObjectiveExtensionMap","suggestedObjectiveExtensions","intersection","otherObjectiveExtensions","adExtensionsStaticFeatures","actionUniversalItemTemplate","appUniversalItemTemplate","callUniversalItemTemplate","calloutUniversalItemTemplate","locationUniversalItemTemplate","priceUniversalItemTemplate","reviewUniversalItemTemplate","sitelinkUniversalItemTemplate","structuredsnippetUniversalItemTemplate","extensionsAssociationsFactory","adExtensionsDynamicFeatures","_editorViewMapper$ext","_ref20","AssociationPanel","renderTimeProps","useP$DaterangeDefault","PreferenceContext","ServerContext","waterFallDateFilters","WaterfallFilterStorage","getFilters","WaterfallFilterType","DateFilter","waterfallDateFilterProcessor","useDateRangeDefault","inlineDownloadStyle","InlineDownloadWrapper","marginTop","zIndex","getInlineDownloadStyle","marginRight","content","marginLeft","boxShadow","fontWeight","paddingLeft","marginButtom","paddingButtom","InlineDownloadWrapperInternal","setDownloadShown","getInlineDownloadColumns","getInlineDownloadFilter","ReportEmailRule","InlineDownloadReactForm","InlineDownloadCampaignODataRepository","totalAssetCount","_useMemo","localizedHeaders","odataColumnNames","_useMemo2","inlineDownloadConfigs","_ref$processReportRul","processReportRule","_ref$customDownloadSe","customDownloadService","_ref$downloadFormats","downloadFormats","totalRecordCount","_ref$validateSegmentT","validateSegmentType","_ref$isFeedbackEnable","isFeedbackEnabled","_ref$data","SegmentationTypes","_ref$p$daterange","p$daterange","serializedFilter","p$daterangeDefaultValue","IsCustomerHierachyRequest","repository","Format","segmentationTypes","useInlineDownload","gridId","toggleToolbarVisibility","clearAfterDownloadCall","DelayedInlineDownloadWrapperInternal","withServerContext","overwriteFilters","rule","appState","getReportEmailRule","isDownloadShown","ReportEmailRuleSnapshot","renderInlineDownload","Filter","parseSync","useSetupInstrument","scenarioName","activityName","backupLogger","input2Duration","PropTypes","GOAL_CATEGORY","ConversionCountTypeEnum","ActionOperatorEnum","ValueOperatorEnum","LabelOperatorEnum","CategoryOperatorEnum","GoalStatusEnum","AttributionModelTypeEnum","GoalValueTypeEnum","timeObj","Day","Hour","Min","duration2Input","timeInMin","remainingHours","findOptionbyKey","searchKey","optionKey","foundKeys","allSettledPromiseWrapper","promises","wrappedPromises","p","reason","all","instrumentationSchema","GoalWizardContext","AUTO_GOAL_CREATION_WIZARD_STEP_PATHS","GOAL_TYPE_SELECTION","WEBSITE","GOAL_DETAIL_SETTING","UET_SETUP","DONE","MANUAL","FLOWS","MANUAL_GOAL","MANUAL_GOAL_WEBSITE","AUTO_GOAL_WITH_UET","AUTO_GOAL_WITHOUT_UET","AUTO_GOAL_SKIP_WEBSITE_WITH_UET","AUTO_GOAL_SKIP_WEBSITE_WITHOUT_UET","stepToPage","createGoals","Goals","updateGoal","goalId","bulkEditGoals","useGoalwithParams","goals","setGoals","_useState3","_useState4","count","setCount","_serverContext$Curren","AdvertiserCustomerID","parameters","$startDate","$endDate","getGoals","finalResult","getAutoGoalRecommendations","useRecommendation","recommendation","setRecommendation","emailInfo","UET","EmailNotificationId","EmailTemplateName","UetTagInstructionsEmailV2","UetTagAndEventTagInstructionsEmailV2","postEmail","emailType","emailAddresses","emailContent","_emailInfo$emailType","EmailContent","entries","EmailAddresses","ToAdvertiser","origin","postEventLog","postData","useStepFlowEvent","EventName","EventValue","UniqueId","AID","CID","TimeStamp","THIRD_PARTY_PLATFORM_MAPPING","None","GTM","WordPress","Shopify","getDetectDomainThirdParty","Tags","Domain","postTagPromise","isAutoCreated","getTags","select","tagResponse","updateTag","tagId","getExternalIntegrations","hasExternalIntegrations","NumberOfEntities","getTagByDomain","generateAddOrEditGoalPayload","goal","newPayloadGoal","Domains","PageUrls","GoalValue","ValueOperator","LabelOperator","Label","GoalValueType","CurrencyCode","autoGoalSchemaFieldName","autoGoalSettingSchema","_properties3","minLength","required","minimum","maximum","enum","nullable","GoalTypeEnum","getGoalDetailFormStyles","formBody","labelHelp","accordionHeader","accordionPanel","margion","rowContainer","LabelHelpButton","labelTitle","mappedArialLabel","helpIAriaLabel","term","HelpButton","errorMessageMapping","maxLength","range","Validation_Base_Field_Not_Valid","Validation_NotEmpty_Required_Field","Validation_String_Max_Length","Validation_String_Min_Length","Validation_String_Invalid_Characters","Validation_Number_Require_Numeric","Validation_Number_Max_Length","Validation_Number_Range_Min","Validation_Number_Range_Max","Validation_Number_Range_Between","handleValidationMessages","customErrorMapping","errorStrings","oldError","ValidatedInput","withErrorField","InputLite","ConversionWindowFormUnstyled","windowTargetName","schemaFieldGroupName","conversionWindowInMin","maxWindowInMin","minWindowInMin","maxWindowInDay","customError","setShowError","decimalLength","errorProcessor","Field","hint","validationMessage","ValidationGroup","validationProps","onValidate","isValid","updateObj","updatedTime","fieldProps","field","ConversionWindowForm","DefaultRevenueForm","draftGoal","currencyOptions","getCurrencyOptions","selectedOption","Dropdown","dropdownWidth","onOptionSelect","ev","optionValue","selectedOptions","Option","GoalDetailForm","setDraftGoal","setIsFormValid","accountName","locale","languageCode","onAccountLabel","acrossAccountsLabel","allCountLabel","uniqueCountLabel","setRadioValue","copiedGoal","onGenericValueChange","attributeModelOptions","getAttributeModelOptions","selectedAttributeModelOption","AttributionModelType","revenueOptions","getRevenueOptions","selectedReveueOption","isValueAvailable","setIsValueAvailable","goalHelpIdMapping","Revenue","shouldShowValueDropdown","OptimizeCampaign","RadioGroup","IsMainConversionGoal","Radio","EnhancedConversions","Checkbox","checked","IsEnhancedConversionsEnabled","ReactTemplate","terms","Link","rel","underline","policy","learnMoreLink","Accordion","collapsible","AccordionItem","AccordionHeader","expandIconPosition","AccordionPanel","IsAccountLevel","ConversionCountType","LookbackWindowInMinutes","ViewThroughLookbackWindowinMinutes","GoalDetailSettingDrawer","isOpen","isReadOnly","setGoal","setIsOpen","restoreFocusSourceAttributes","isFormValid","Drawer","onOpenChange","modalType","DrawerHeader","DrawerHeaderTitle","appearance","icon","Dismiss24Regular","DrawerBody","DrawerFooter","MessageBar","shape","intent","MessageBarBody","MessageBarTitle","GoalDetailSettingEditDrawer","_ref$restoreFocusSour","setMessage","defaultErrorMessageEdit","Title","editPayloads","getMessageFromErrors","useStyles","makeStyles","card","subTitle","RecommendationTile","styles","Card","mergeClasses","CardHeader","Divider","Body1Stronger","CardFooter","RecommendationTileWithCondition","_useRecommendation","raw","setFullYear","_useGoalwithParams","shouldShow","Fragment","pug","module","exports","locals","pug_interp","pug_html","pug_mixins","locals_for_with","cssClass","escape","statusIconLabel","isResponsiveAdForSSCEnabled","useBidStrategyDropdownStyles","root","tokens","spacingVerticalMNudge","spacingVerticalXS","dropdown","BidStrategyDropdownPure","helpTopic","helpLabel","useId","selectedText","selectedTextString","htmlFor","HelpPopupInline","ValidatedBidStrategyDropdown","withValidation","GenericAdapter","BidStrategyIconPure","viewBox","fill","xmlns","d","BidStrategyIcon"],"sourceRoot":""}