{"version":3,"file":"static/js/application.async.landing~cf06b57c.e7343a98.chunk.js","mappings":"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","sources":["../../../node_modules/@bingads-webui-campaign/ad-previews/src/responsiveAd/responsive-ad-template.js","../../../node_modules/@bingads-webui-campaign/ad-previews/src/dynamicSearchAd/dynamic-search-ad-template.js","../../../node_modules/@bingads-webui-campaign/ad-schedule/src/legacy-ad-schedule.js","../../../node_modules/@bingads-webui-campaign/ad-schedule/src/validated-ad-schedule.js","../../../node_modules/@bingads-webui-campaign/ad-schedule/src/utils.js","../../../node_modules/@bingads-webui-campaign/adcustomizers/src/keyword-editor/keyword-editor-view.js","../../../node_modules/@bingads-webui-campaign/audience-adgroup-creation-wizard/src/view.js","../../../node_modules/@bingads-webui-campaign/audience-adgroup-settings-wizard/src/view.js","../../../node_modules/@bingads-webui-campaign/audience-advanced-target-settings/src/helper.js","../../../node_modules/@bingads-webui-campaign/audience-advanced-target-settings/src/view.js","../../../node_modules/@bingads-webui-campaign/audience-campaign-creation-wizard/src/bmc-redirect/view.js","../../../node_modules/@bingads-webui-campaign/audience-campaign-creation-wizard/src/utils.js","../../../node_modules/@bingads-webui-campaign/audience-campaign-creation-wizard/src/view.js","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/search-based-target/search-based-target-type.js","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/search-based-target/search-based-target-grid-view.js","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/search-based-target/search-based-target-setting.js","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/search-based-target/company-name-target-setting/search-result/search-result-view.js","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/search-based-target/search-view-base.js","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/search-based-target/company-name-target-setting/search-view/search-view.js","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/search-based-target/shared-utils/bid-adjustment-utils.js","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/search-based-target/company-name-target-setting/company-name-target-setting.js","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/target-or-bid-selector/target-or-bid-selector.js","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/audience-criterion-setting-base.js","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/search-based-target/company-name-target-setting/company-name-criterion-setting.js","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/search-based-target/job-function-target-setting/search-result/search-result-view.js","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/search-based-target/job-function-target-setting/search-view/search-view.js","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/search-based-target/job-function-target-setting/job-function-target-setting.js","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/search-based-target/job-function-target-setting/job-function-criterion-setting.js","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/search-based-target/industry-target-setting/search-view/search-view.js","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/search-based-target/industry-target-setting/industry-target-setting.js","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/search-based-target/industry-target-setting/industry-criterion-setting.js","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/search-based-target/search-based-target-grid-view-placement.js","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/search-based-target/placement-setting/search-view/search-view.js","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/search-based-target/placement-setting/placement-target-setting.js","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/search-based-target/placement-setting/placement-setting.js","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/checkbox-based-target/checkbox-selection-base/view.js","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/checkbox-based-target/age-target-setting/view.js","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/checkbox-based-target/age-target-setting/age-criterion-setting.js","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/checkbox-based-target/device-target-setting/view.js","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/checkbox-based-target/device-target-setting/device-criterion-setting.js","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/checkbox-based-target/gender-target-setting/view.js","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/checkbox-based-target/gender-target-setting/gender-criterion-setting.js","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/external-based-target/audience-target-setting/view.js","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/external-based-target/audience-target-setting/audience-criterion-setting.js","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/external-based-target/location-target-setting/load-location-map.js","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/external-based-target/location-target-setting/view.js","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/external-based-target/location-target-setting/location-criterion-setting.js","../../../node_modules/@bingads-webui-campaign/audience-target-info/src/index.js","../../../node_modules/@bingads-webui-campaign/automated-rules/src/cron-selection/options.js","../../../node_modules/@bingads-webui-campaign/automated-rules/src/cron-selection/viewmodel.js","../../../node_modules/@bingads-webui-campaign/automated-rules/src/cron-selection/view.js","../../../node_modules/@bingads-webui-campaign/automated-rules/src/options.js","../../../node_modules/@bingads-webui-campaign/automated-rules/src/viewmodel.js","../../../node_modules/@bingads-webui-campaign/automated-rules/src/grid-helper.js","../../../node_modules/@bingads-webui-campaign/automated-rules/src/entity-settings/base.js","../../../node_modules/@bingads-webui-campaign/automated-rules/src/action-view/constants.js","../../../node_modules/@bingads-webui-campaign/automated-rules/src/action-view/util.js","../../../node_modules/@bingads-webui-campaign/automated-rules/src/action-view/campaign/viewmodel.js","../../../node_modules/@bingads-webui-campaign/automated-rules/src/action-view/campaign/view.js","../../../node_modules/@bingads-webui-campaign/automated-rules/src/entity-settings/campaign.js","../../../node_modules/@bingads-webui-campaign/automated-rules/src/action-view/adgroup/viewmodel.js","../../../node_modules/@bingads-webui-campaign/automated-rules/src/action-view/adgroup/view.js","../../../node_modules/@bingads-webui-campaign/automated-rules/src/entity-settings/adgroup.js","../../../node_modules/@bingads-webui-campaign/automated-rules/src/action-view/keyword/viewmodel.js","../../../node_modules/@bingads-webui-campaign/automated-rules/src/action-view/keyword/view.js","../../../node_modules/@bingads-webui-campaign/automated-rules/src/entity-settings/keyword.js","../../../node_modules/@bingads-webui-campaign/automated-rules/src/entity-settings/assetgroup.js","../../../node_modules/@bingads-webui-campaign/automated-rules/src/helper.js","../../../node_modules/@bingads-webui-campaign/automated-rules/src/predicate-list-backbone-view.js","../../../node_modules/@bingads-webui-campaign/automated-rules/src/view.js","../../../node_modules/@bingads-webui-campaign/automated-rules/src/entity-settings/get-entity-setting.js","../../../node_modules/@bingads-webui-campaign/automated-rules/src/model.js","../../../node_modules/@bingads-webui-campaign/bid-landscape-style/src/style.js","../../../node_modules/@bingads-webui-campaign/bid-strategy/src/legacy-bid-strategy.js","../../../node_modules/@bingads-webui-campaign/bid-strategy/src/validated-bid-strategy.js","../../../node_modules/@bingads-webui-campaign/budget-suggestion-popup-style/src/style.js","../../../node_modules/@bingads-webui-campaign/ad-previews/src/dynamicSearchAd/template.pug","../../../node_modules/@bingads-webui-campaign/ad-previews/src/responsiveAd/template.pug","../../../node_modules/@bingads-webui-campaign/adcustomizers/src/keyword-editor/keyword-editor-template.pug","../../../node_modules/@bingads-webui-campaign/audience-adgroup-creation-wizard/src/template.pug","../../../node_modules/@bingads-webui-campaign/audience-adgroup-settings-wizard/src/audience-target-selector-collapse.pug","../../../node_modules/@bingads-webui-campaign/audience-adgroup-settings-wizard/src/template.pug","../../../node_modules/@bingads-webui-campaign/audience-advanced-target-settings/src/template.pug","../../../node_modules/@bingads-webui-campaign/audience-campaign-creation-wizard/src/bmc-redirect/template.pug","../../../node_modules/@bingads-webui-campaign/audience-campaign-creation-wizard/src/template.pug","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/checkbox-based-target/checkbox-selection-base/template.pug","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/criterion-setting-template.pug","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/external-based-target/audience-target-setting/template.pug","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/external-based-target/location-target-setting/template.pug","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/search-based-target/company-name-target-setting/search-result/search-result-view-template.pug","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/search-based-target/industry-target-setting/search-view/search-view-template.pug","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/search-based-target/job-function-target-setting/search-result/search-result-view-template.pug","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/search-based-target/pagination-template.pug","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/search-based-target/placement-setting/placement-setting-template.pug","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/search-based-target/placement-setting/search-view/search-view-template.pug","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/search-based-target/search-based-target-grid-remove-column-template.pug","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/search-based-target/search-based-target-grid-state-template.pug","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/search-based-target/search-based-target-grid-view-template.pug","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/search-based-target/search-based-target-setting-template.pug","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/search-based-target/search-view-base-template.pug","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/search-based-target/shared-utils/bid-adjustment.pug","../../../node_modules/@bingads-webui-campaign/audience-criterion-setting/src/target-or-bid-selector/target-or-bid-selector-template.pug","../../../node_modules/@bingads-webui-campaign/automated-rules/src/action-view/adgroup/changebid.pug","../../../node_modules/@bingads-webui-campaign/automated-rules/src/action-view/campaign/changebudget.pug","../../../node_modules/@bingads-webui-campaign/automated-rules/src/action-view/keyword/changebid.pug","../../../node_modules/@bingads-webui-campaign/automated-rules/src/cron-selection/template.pug","../../../node_modules/@bingads-webui-campaign/automated-rules/src/template.pug"],"sourcesContent":["import template from './template.pug';\r\n\r\nconst responsiveAdThumbnailWidth = 114;\r\nconst responsiveAdThumbnailHeight = 60;\r\nconst resizeQueryString = `&w=${responsiveAdThumbnailWidth}&h=${responsiveAdThumbnailHeight}`;\r\n\r\nconst responsiveAdPreviewTemplate = function ({\r\n itemViewModel, i18n, withContainer, isMMAV2Enabled,\r\n}) {\r\n const { isVideo } = itemViewModel;\r\n\r\n // if we find originalImageUrlToUse, then it means this image is from V2 and we will use original image URL for preview.\r\n let imageUrlToUse = isMMAV2Enabled && itemViewModel.OriginalImageMediaUrl ? itemViewModel.OriginalImageMediaUrl : itemViewModel.LandscapeImageMediaUrl;\r\n\r\n if (imageUrlToUse && !isVideo) {\r\n // strip off the resizing from MT as we need a smaller resizing\r\n const indexOfResizeInfo = imageUrlToUse.indexOf('&w=');\r\n if (indexOfResizeInfo > 0) {\r\n imageUrlToUse = imageUrlToUse.substr(0, indexOfResizeInfo);\r\n }\r\n\r\n itemViewModel.LandscapeImageMediaUrl = `${imageUrlToUse}${resizeQueryString}`; // eslint-disable-line\r\n }\r\n\r\n return template({ itemViewModel, i18n, withContainer });\r\n};\r\n\r\nexport { responsiveAdPreviewTemplate };\r\n","import template from './template.pug';\r\n\r\nfunction getCombinedPath(path1, path2) {\r\n if (!path1) {\r\n return '';\r\n }\r\n\r\n return path1 + (path2 ? `/${path2}` : '');\r\n}\r\n\r\nfunction getDisplayUrl(domain, path) {\r\n if (!domain) {\r\n return '';\r\n }\r\n\r\n if (!path) {\r\n return domain;\r\n }\r\n\r\n return `${domain}/${path}`;\r\n}\r\n\r\nfunction getDynamicSearchAdDisplayUrl(domain, path1, path2) {\r\n return getDisplayUrl(domain, getCombinedPath(path1, path2));\r\n}\r\n\r\nconst dynamicSearchAdPreviewTemplate = function ({ itemViewModel, i18n }) {\r\n const newVM = {\r\n convertedTitle: `{${i18n.getString('Ad_DSA_Title')}}`,\r\n convertedDisplayUrl: getDynamicSearchAdDisplayUrl(\r\n itemViewModel.DisplayUrl,\r\n itemViewModel.Path1,\r\n itemViewModel.Path2\r\n ),\r\n Text: itemViewModel.Text,\r\n };\r\n\r\n return template({ itemViewModel: newVM, i18n });\r\n};\r\n\r\nexport { dynamicSearchAdPreviewTemplate, getDynamicSearchAdDisplayUrl };\r\n","/* eslint-disable no-param-reassign */\r\nimport { each } from 'underscore';\r\nimport React, { useEffect, useRef, useMemo, useCallback, useContext } from 'react';\r\nimport classnames from 'classnames';\r\nimport AdScheduleView from '@bingads-webui-campaign-legacy/ad-schedule/view/index';\r\nimport PropTypes from 'prop-types';\r\nimport { advancedSettingsSectionStyle, toggleButtonStyle, datePickerStyle } from '@bingads-webui-campaign-react/common-styles';\r\nimport {\r\n creationCommonStyle\r\n} from '@bingads-webui-campaign-react/campaign-adgroup-settings-shared-styles';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\n\r\nconst getStyles = (__, core) =>\r\n ({\r\n '@global': {\r\n ...datePickerStyle(core),\r\n },\r\n adScheduleContainer: {\r\n '& .advanced-scheduling-grid': {\r\n width: '918px',\r\n },\r\n ...creationCommonStyle(core),\r\n ...advancedSettingsSectionStyle(core),\r\n '& .radio-inline': {\r\n display: 'block',\r\n },\r\n '& .adschedule-targets-container': {\r\n borderTop: 'unset',\r\n paddingTop: '0px',\r\n },\r\n '& .toggle-campaign-settings-switch.form-control-static[data-bind]': {\r\n display: 'inline-block',\r\n textDecoration: 'none',\r\n paddingRight: '8px',\r\n float: 'left',\r\n },\r\n ...toggleButtonStyle(core),\r\n '& .date-settings-intro': {\r\n paddingLeft: 0,\r\n },\r\n '& .date-settings': {\r\n '& .col-sm-12': {\r\n paddingLeft: 0,\r\n },\r\n '& table': {\r\n width: '500px',\r\n '& td': {\r\n width: '100%',\r\n display: 'block',\r\n },\r\n },\r\n },\r\n '& .alert-danger': {\r\n backgroundColor: 'unset',\r\n color: '#A80000',\r\n },\r\n '& table tbody .col-sm-9': {\r\n width: 'unset',\r\n paddingLeft: 'unset',\r\n },\r\n '& table tbody .item-label.schedule-item-label.form-control-static': {\r\n fontWeight: '600',\r\n color: '#323130',\r\n paddingTop: '10px',\r\n display: 'block',\r\n },\r\n '& table tbody .form-control:focus': {\r\n outline: '1px solid #0078d4',\r\n },\r\n '& .adschedule-targets-container .advanced-scheduling-grid .ad-scheduling-panel table tr:nth-child(3) td .radio-inline:nth-child(2)': {\r\n top: 'unset',\r\n },\r\n '& .alert-info': {\r\n '& .alert-info-inline': {\r\n '& a:focus': {\r\n outline: '1px solid #605e5c',\r\n },\r\n },\r\n },\r\n },\r\n });\r\n\r\nexport const LegacyAdSchedule = React.memo((props) => {\r\n const {\r\n entity,\r\n data,\r\n campaignDayTimeRanges,\r\n onChange,\r\n setAdScheduleView,\r\n level,\r\n hideUseCampaignSetting,\r\n hideMinuteOptions,\r\n showDateSettings,\r\n showBidAdjustmentColumn,\r\n i18nKeys,\r\n campaignAdScheduleUseSearcherTimeZone,\r\n } = props;\r\n const view = useRef();\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n let container;\r\n const classes = useDefaultStyles(getStyles);\r\n const deletedDayTimeCb = useCallback((deletedDayTimeCriterions) => {\r\n each(deletedDayTimeCriterions, (criterion) => {\r\n criterion.Criterion.BidAdjustment = 0;\r\n criterion.Status = 'Deleted';\r\n criterion.Campaign = {\r\n Id: entity.data.Id,\r\n };\r\n });\r\n }, [entity.data.Id]);\r\n\r\n const adScheduleOption = useMemo(\r\n () => {\r\n const model = {\r\n dayTimeRanges: data.dayTimeRanges,\r\n timeZone: entity.data.TimeZone,\r\n adScheduleUseSearcherTimeZone: entity.data.AdScheduleUseSearcherTimeZone,\r\n };\r\n return {\r\n model,\r\n i18nKeys,\r\n level,\r\n hideMinuteOptions,\r\n showDateSettings,\r\n hideAdScheduleBidAdjustments: false,\r\n showBidAdjustmentColumn,\r\n hideUseCampaignSetting,\r\n campaignDayTimeRanges,\r\n campaignAdScheduleUseSearcherTimeZone,\r\n activityLogger: activity,\r\n onChange: (newData, isValid) => {\r\n const updatedData = {\r\n adSchedulesBulkUpsert: newData,\r\n AdScheduleUseSearcherTimeZone: view.current.getAdScheduleUseSearcherTimeZone(),\r\n };\r\n\r\n if (showDateSettings) {\r\n updatedData.adScheduleDateSettings = view.current.getDateSettings();\r\n }\r\n\r\n onChange(updatedData, isValid);\r\n },\r\n deleteCb: deletedDayTimeCb,\r\n };\r\n },\r\n [data.dayTimeRanges, entity.data.TimeZone, entity.data.AdScheduleUseSearcherTimeZone, i18nKeys, level, hideMinuteOptions, showDateSettings, showBidAdjustmentColumn, hideUseCampaignSetting, campaignDayTimeRanges, activity, deletedDayTimeCb, onChange]\r\n );\r\n\r\n useEffect(() => {\r\n view.current = new AdScheduleView({\r\n ...adScheduleOption,\r\n });\r\n\r\n view.current.render();\r\n view.current.$el.appendTo(container);\r\n setAdScheduleView(view);\r\n onChange(view.current.getValues(deletedDayTimeCb), true, false);\r\n\r\n return () => {\r\n view.current.remove();\r\n };\r\n // We will refresh the view if data changes\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [data.dayTimeRanges]);\r\n\r\n return (\r\n \r\n
\r\n
{ container = ref; }} />\r\n
\r\n
\r\n );\r\n});\r\n\r\nLegacyAdSchedule.propTypes = {\r\n entity: PropTypes.shape({\r\n data: PropTypes.shape({\r\n Id: PropTypes.number,\r\n TimeZone: PropTypes.shape({}),\r\n AdScheduleUseSearcherTimeZone: PropTypes.shape({}),\r\n }),\r\n }),\r\n data: PropTypes.shape({\r\n dayTimeRanges: PropTypes.shape({}),\r\n }).isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n setAdScheduleView: PropTypes.func,\r\n level: PropTypes.string,\r\n hideUseCampaignSetting: PropTypes.bool,\r\n hideMinuteOptions: PropTypes.bool,\r\n showDateSettings: PropTypes.bool,\r\n showBidAdjustmentColumn: PropTypes.bool,\r\n campaignDayTimeRanges: PropTypes.shape({}),\r\n i18nKeys: PropTypes.shape({}),\r\n campaignAdScheduleUseSearcherTimeZone: PropTypes.bool,\r\n};\r\n\r\nLegacyAdSchedule.defaultProps = {\r\n entity: {},\r\n level: 'campaign',\r\n setAdScheduleView: () => {},\r\n hideUseCampaignSetting: false,\r\n hideMinuteOptions: false,\r\n showDateSettings: false,\r\n showBidAdjustmentColumn: false,\r\n campaignDayTimeRanges: {},\r\n i18nKeys: {\r\n Warning: 'TargetingSettings_AdSchedule_Warning_PMax',\r\n },\r\n campaignAdScheduleUseSearcherTimeZone: false,\r\n};\r\n","import React, { useCallback, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { LegacyAdSchedule } from './legacy-ad-schedule';\r\n\r\nconst LegacyAdScheduleWithCustomValidation = ({\r\n validationProps, updateValidation, ...restProps\r\n}) => {\r\n const { data: adSchedules } = validationProps;\r\n\r\n const i18n = useContext(I18nContext);\r\n const activity = useContext(ActivityContext);\r\n\r\n const onChange = useCallback((newData, newIsValid, shouldDirty = true) => {\r\n updateValidation(newIsValid ? [] : [i18n.getString(_TL_('Ad schedule has validation errors'))], newData, shouldDirty);\r\n // onChange will triggered every time data changed. We only want to trace the manually change.\r\n // Please refer ./legacy-ad-schedule.js line: 150.\r\n if (activity && shouldDirty !== false) {\r\n activity.signal(`onLegacyAdScheduleChange - ${JSON.stringify(newData)}`);\r\n }\r\n }, [updateValidation, i18n, activity]);\r\n\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nLegacyAdScheduleWithCustomValidation.propTypes = {\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({}),\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n activity: PropTypes.shape({\r\n signal: PropTypes.func,\r\n }),\r\n};\r\n\r\nLegacyAdScheduleWithCustomValidation.defaultProps = {\r\n activity: null,\r\n};\r\n\r\nexport const ValidatedLegacyAdSchedule = withCustomValidation(LegacyAdScheduleWithCustomValidation);\r\n","import _ from 'underscore';\r\n\r\nexport const minuteToSaveMap = {\r\n ZERO: 0,\r\n FIFTEEN: 15,\r\n THIRTY: 30,\r\n FORTY_FIVE: 45,\r\n};\r\n\r\nexport const minuteMap = {\r\n 0: 'ZERO',\r\n 15: 'FIFTEEN',\r\n 30: 'THIRTY',\r\n 45: 'FORTY_FIVE',\r\n};\r\n\r\nexport const getDay = (day) => {\r\n switch (day) {\r\n case 'Alldays':\r\n return _TL_('All days');\r\n case 'Monday':\r\n return _TL_('Monday');\r\n case 'Tuesday':\r\n return _TL_('Tuesday');\r\n case 'Wednesday':\r\n return _TL_('Wednesday');\r\n case 'Thursday':\r\n return _TL_('Thursday');\r\n case 'Friday':\r\n return _TL_('Friday');\r\n case 'Saturday':\r\n return _TL_('Saturday');\r\n case 'Sunday':\r\n return _TL_('Sunday');\r\n case 'MondayToFriday':\r\n return _TL_('Monday - Friday');\r\n default:\r\n return _TL_('All days');\r\n }\r\n};\r\n\r\nexport const getMin = (min) => {\r\n switch (min) {\r\n case 0:\r\n return '00';\r\n case 15:\r\n return '15';\r\n case 30:\r\n return '30';\r\n case 45:\r\n return '45';\r\n default:\r\n return '00';\r\n }\r\n};\r\n\r\nexport const getTime = (hour, is12) => {\r\n switch (hour) {\r\n case 0:\r\n return is12 ? _TL_('12:{{min}} AM') : _TL_('00:{{min}}');\r\n case 1:\r\n return is12 ? _TL_('01:{{min}} AM') : _TL_('01:{{min}}');\r\n case 2:\r\n return is12 ? _TL_('02:{{min}} AM') : _TL_('02:{{min}}');\r\n case 3:\r\n return is12 ? _TL_('03:{{min}} AM') : _TL_('03:{{min}}');\r\n case 4:\r\n return is12 ? _TL_('04:{{min}} AM') : _TL_('04:{{min}}');\r\n case 5:\r\n return is12 ? _TL_('05:{{min}} AM') : _TL_('05:{{min}}');\r\n case 6:\r\n return is12 ? _TL_('06:{{min}} AM') : _TL_('06:{{min}}');\r\n case 7:\r\n return is12 ? _TL_('07:{{min}} AM') : _TL_('07:{{min}}');\r\n case 8:\r\n return is12 ? _TL_('08:{{min}} AM') : _TL_('08:{{min}}');\r\n case 9:\r\n return is12 ? _TL_('09:{{min}} AM') : _TL_('09:{{min}}');\r\n case 10:\r\n return is12 ? _TL_('10:{{min}} AM') : _TL_('10:{{min}}');\r\n case 11:\r\n return is12 ? _TL_('11:{{min}} AM') : _TL_('11:{{min}}');\r\n case 12:\r\n return is12 ? _TL_('12:{{min}} PM') : _TL_('12:{{min}}');\r\n case 13:\r\n return is12 ? _TL_('01:{{min}} PM') : _TL_('13:{{min}}');\r\n case 14:\r\n return is12 ? _TL_('02:{{min}} PM') : _TL_('14:{{min}}');\r\n case 15:\r\n return is12 ? _TL_('03:{{min}} PM') : _TL_('15:{{min}}');\r\n case 16:\r\n return is12 ? _TL_('04:{{min}} PM') : _TL_('16:{{min}}');\r\n case 17:\r\n return is12 ? _TL_('05:{{min}} PM') : _TL_('17:{{min}}');\r\n case 18:\r\n return is12 ? _TL_('06:{{min}} PM') : _TL_('18:{{min}}');\r\n case 19:\r\n return is12 ? _TL_('07:{{min}} PM') : _TL_('19:{{min}}');\r\n case 20:\r\n return is12 ? _TL_('08:{{min}} PM') : _TL_('20:{{min}}');\r\n case 21:\r\n return is12 ? _TL_('09:{{min}} PM') : _TL_('21:{{min}}');\r\n case 22:\r\n return is12 ? _TL_('10:{{min}} PM') : _TL_('22:{{min}}');\r\n case 23:\r\n return is12 ? _TL_('11:{{min}} PM') : _TL_('23:{{min}}');\r\n case 24:\r\n return is12 ? _TL_('12:{{min}} AM') : _TL_('24:{{min}}');\r\n default:\r\n return is12 ? _TL_('00:{{min}} AM') : _TL_('00:{{min}}');\r\n }\r\n};\r\n\r\n\r\nexport const getDayTimeDetails = (i18n, dayTime, is12, hideBidAdjustment = false) => {\r\n const startHour = dayTime().StartHour();\r\n const endHour = dayTime().EndHour();\r\n const startMin = getMin(minuteToSaveMap[dayTime().StartMinute()]);\r\n const endMin = getMin(minuteToSaveMap[dayTime().EndMinute()]);\r\n const dateTimePart = `${i18n.getString(getDay(dayTime().Day()))} ${i18n.getString(_TL_('from {{from}} to {{to}}'), {\r\n from: i18n.getString(getTime(startHour, is12), { min: startMin }),\r\n to: i18n.getString(getTime(endHour, is12), { min: endMin }),\r\n })}`;\r\n\r\n if (hideBidAdjustment) {\r\n return dateTimePart;\r\n }\r\n return `${dateTimePart}: ${(_.isUndefined(dayTime().BidAdjustmentType()) || dayTime().BidAdjustmentType() > 0) ? i18n.getString(_TL_('Increase By')) : i18n.getString(_TL_('Decrease By'))}\r\n ${_.isUndefined(dayTime().BidAdjustmentAmount()) ? 0 : dayTime().BidAdjustmentAmount()}%`;\r\n};\r\n\r\nexport const getAdScheduleDetails = (i18n, adScheduleView, hideBidAdjustment = false) => {\r\n if (adScheduleView) {\r\n const useCampaignSettings = adScheduleView.koModel.useCampaignSettings();\r\n const schedules = useCampaignSettings ? adScheduleView.koModel.campaignDayTimeRanges() : adScheduleView.koModel.dayTimeRanges();\r\n let details = '';\r\n const dateSettings = adScheduleView.getDateSettings();\r\n if (!_.isEmpty(dateSettings) && dateSettings.EndDate !== '1/1/3000') {\r\n details = i18n.getString(_TL_('Scheduled from {{from}} to {{to}}: '), { from: dateSettings.StartDate, to: dateSettings.EndDate });\r\n }\r\n\r\n const hideAdScheduleBidAdjustments = adScheduleView.koModel.hideAdScheduleBidAdjustments();\r\n if (!hideAdScheduleBidAdjustments) {\r\n const is12 = adScheduleView.koModel.timeDisplayType() === '12-hour';\r\n const len = schedules.length;\r\n schedules.forEach((schedule, index) => {\r\n details += getDayTimeDetails(i18n, schedule, is12, hideBidAdjustment);\r\n if (details && index < len - 1) {\r\n details += ', ';\r\n }\r\n });\r\n }\r\n const adScheduleUseSearcherTimeZone = adScheduleView.getAdScheduleUseSearcherTimeZone();\r\n if (adScheduleUseSearcherTimeZone) {\r\n details += ` ${i18n.getString(_TL_('In Ad viewer\\'s time zone'))}`;\r\n } else {\r\n details += ` ${i18n.getString(_TL_('In Your account\\'s time zone'))}`;\r\n }\r\n return details;\r\n }\r\n return '';\r\n};\r\n","import $ from 'jquery';\r\nimport _ from 'underscore';\r\nimport Backbone from 'backbone';\r\n\r\nimport { SimpleForm } from '@bingads-webui/simple-form';\r\n\r\nimport template from './keyword-editor-template.pug';\r\n\r\n/**\r\n * Keyword editor view\r\n * @private\r\n */\r\nclass KeywordEditor extends Backbone.View {\r\n /**\r\n * init Keyword Editor, it will generate a view based on\r\n * options, and show the view based on the target location\r\n * @private\r\n * @param {Object} target - the input element that keyword editor should attach to\r\n * @param {Object} options - editor model and cursor position info\r\n * @param {I18n} i18n - i18n object that provides getString\r\n * @returns {undefined} - initialize view\r\n */\r\n initialize({\r\n target,\r\n options: {\r\n defaultText = '',\r\n keywordCase,\r\n prefix = '',\r\n suffix = '',\r\n updateAction,\r\n },\r\n i18n,\r\n }) {\r\n this.target = target;\r\n\r\n const keywords = {\r\n TitleCase: 'KeyWord',\r\n SentenceCase: 'Keyword',\r\n LowerCase: 'keyword',\r\n };\r\n\r\n const schema = {\r\n name: 'Keyword',\r\n type: 'object',\r\n properties: {\r\n defaultText: {\r\n type: 'string',\r\n },\r\n keywordCase: {\r\n type: 'string',\r\n enum: [..._.keys(keywords)],\r\n },\r\n syntax: {\r\n type: 'string',\r\n },\r\n },\r\n required: ['defaultText'],\r\n };\r\n\r\n const fields = [\r\n {\r\n property: 'defaultText',\r\n label: i18n.getString('KeywordEditor_DefaultText_Label'),\r\n validators: {\r\n required: {\r\n message: i18n.getString('KeywordEditor_DefaultText_RequiredValidationMessage'),\r\n },\r\n },\r\n },\r\n {\r\n property: 'keywordCase',\r\n label: i18n.getString('KeywordEditor_Case_Label'),\r\n control: 'radios',\r\n valueMessages: {\r\n TitleCase: i18n.getString('KeywordEditor_Case_TitleCase'),\r\n SentenceCase: i18n.getString('KeywordEditor_Case_SentenceCase'),\r\n LowerCase: i18n.getString('KeywordEditor_Case_LowerCase'),\r\n },\r\n },\r\n {\r\n property: 'syntax',\r\n label: {\r\n depends: ['keywordCase'],\r\n computedBy(kCase) {\r\n const keywordText = keywords[kCase];\r\n return `${i18n.getString('AdCustomizers_Editor_Syntax_Prefix_Label')} {${keywordText}:${i18n.getString('KeywordEditor_DefaultText')}}`;\r\n },\r\n },\r\n },\r\n ];\r\n\r\n const model = {\r\n defaultText,\r\n keywordCase,\r\n };\r\n\r\n this.form = new SimpleForm({\r\n schema,\r\n fields,\r\n model,\r\n template,\r\n i18n,\r\n });\r\n\r\n this.form.on('save', (newModel) => {\r\n const keywordText = keywords[newModel.keywordCase];\r\n const newValue = `${prefix}{${keywordText}:${newModel.defaultText}}${suffix}`;\r\n const cursorPosition = newValue.length - suffix.length;\r\n\r\n updateAction(newValue);\r\n target.setSelectionRange(cursorPosition, cursorPosition);\r\n target.focus();\r\n\r\n hideKeywordEditor(); // eslint-disable-line no-use-before-define\r\n });\r\n\r\n this.form.on('cancel', () => hideKeywordEditor()); // eslint-disable-line no-use-before-define\r\n\r\n return this;\r\n }\r\n\r\n render() {\r\n const $target = $(this.target);\r\n const position = $target.offset();\r\n\r\n position.top += $target.outerHeight();\r\n\r\n this.$el.css({\r\n position: 'absolute',\r\n visibility: 'visible',\r\n left: position.left,\r\n top: position.top,\r\n });\r\n\r\n this.$el.append(this.form.render().el);\r\n\r\n // Clicking on elements having 'ac-helper-area' class won't hide currently visible helper\r\n this.$el.addClass('ac-helper-area adCustomizersEditor');\r\n\r\n return this;\r\n }\r\n}\r\n\r\n/**\r\n * TODO: Bug 957242, refactor out this singleton\r\n * Editor instance (used by hideKeywordEditor() and show() to update,\r\n * register/deregister events and change visibility)\r\n * @private\r\n */\r\nlet editor = null;\r\n\r\n/**\r\n * Hides keyword editor when user clicks outside of ad customizer helper areas and date picker areas\r\n * @param {object} event - click event\r\n * @returns {undefined}\r\n * @private\r\n */\r\nfunction clickedAway(event) {\r\n const target = $(event.target);\r\n\r\n if (target.closest('.ac-helper-area').length === 0) {\r\n hideKeywordEditor(); // eslint-disable-line no-use-before-define\r\n }\r\n}\r\n\r\n/**\r\n * Handles key down events.\r\n * Hides editor when user hits escape.\r\n * @param {object} event - click event\r\n * @returns {undefined}\r\n * @private\r\n */\r\nfunction keydown(event) {\r\n const keyCode = event.key || event.code;\r\n switch (keyCode) {\r\n case 'Escape':\r\n hideKeywordEditor(); // eslint-disable-line no-use-before-define\r\n break;\r\n default:\r\n break;\r\n }\r\n}\r\n\r\n/**\r\n * Hides keyword editor and deregisters clickaway event.\r\n * @returns {undefined}\r\n */\r\nexport function hideKeywordEditor() {\r\n if (editor) {\r\n $(editor.target).off('keydown', keydown);\r\n $(window).off('click', clickedAway);\r\n editor.remove();\r\n editor = null;\r\n }\r\n}\r\n\r\n/**\r\n * Shows keyword editor and registers to global click events.\r\n * @param {object} target - element the editor will be attached to.\r\n * @param {object} options - editor model and cursor position info.\r\n * @param {string} options.defaultText - text show in the editor input box\r\n * @param {string} options.keywordCase - keyword case enum. TitleCase/SentenceCase/LowerCase\r\n * @param {string} options.prefix - string before keyword customizer\r\n * @param {string} options.suffix - string after keyword customizer\r\n * @param {function} options.updateAction - function to update input box text value\r\n * @param {I18n} i18n - i18n object that provides getString\r\n * @returns {undefined}\r\n */\r\nexport function showKeywordEditor(target, options, i18n) {\r\n hideKeywordEditor();\r\n\r\n editor = new KeywordEditor({ target, options, i18n });\r\n $('body').append(editor.render().el);\r\n $(window).on('click', clickedAway);\r\n $(target).on('keydown', keydown);\r\n}\r\n\r\n/**\r\n * Checks whether keyword editor is visible\r\n * @returns {bool} true if visible\r\n */\r\nexport function isKeywordEditorVisible() {\r\n return editor !== null;\r\n}\r\n","import Backbone from 'backbone';\r\nimport Promise from 'bluebird';\r\nimport _ from 'underscore';\r\nimport { StepsWizard } from '@bingads-webui/steps-wizard';\r\nimport { AudienceTargetInfo } from '@bingads-webui-campaign/audience-target-info';\r\nimport { ResponsiveAdEditor } from '@bingads-webui-campaign/responsive-ad-editor';\r\nimport { CrudAudienceAdgroup, CrudAudienceAdgroupBasic } from '@bingads-webui-campaign/crud-audience-adgroup';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport { schema } from '@bingads-webui-campaign/audience-campaign-shared';\r\nimport template from './template.pug';\r\n\r\n/**\r\n * AudienceAdgroupCreationWizard class for the AudienceCampaign creation\r\n *\r\n * @class AudienceAdgroupCreationWizard\r\n * @extends {Backbone.View}\r\n */\r\nexport class AudienceAdgroupCreationWizard extends Backbone.View {\r\n /**\r\n * Initializes the {AudienceAdgroupCreationWizard} class.\r\n *\r\n * @param {Object} options - options for initializing the class.\r\n * @param {Object} options.viewContext = viewContext for the View.\r\n * @returns {undefined}\r\n */\r\n initialize(options) {\r\n this.viewContext = options.viewContext;\r\n this.i18n = DependencyResolver.get('component/i18n/loader!campaignui/feature/audience-campaign');\r\n this.audienceCampaignType = options.audienceCampaignType || '';\r\n this.options = options;\r\n this.options.currentLevelTargetInfo = new AudienceTargetInfo({ resourceName: 'AdGroupCriterion', isForVNext: !!options.isForVNext, isAudienceCreationWorkflow: true });\r\n\r\n const router = _.chain(options.deps).result('router', {}).value();\r\n this.navigateToRoute = router.navigateToRoute || _.noop;\r\n this.eventDelegator = _.result(options.deps, 'eventDelegator');\r\n\r\n this.options.scenario = 'adgroup-creation';\r\n this.perfMarker = options.perfMarker;\r\n\r\n this.setupInstrumentation();\r\n if (this.audienceCampaignType !== 'shopping') {\r\n this.options.lastStep = 'ResponsiveAdEditor';\r\n } else { this.options.lastStep = 'CrudAudienceAdgroup'; }\r\n\r\n const crudOptions = _.extend(this.options, {\r\n wizardElement: this.$el,\r\n });\r\n\r\n this.step1 = new CrudAudienceAdgroupBasic(_.extend(crudOptions, {\r\n perfMarker: this.perfMarker.createChild('AdGroupBasic'),\r\n workflow: 'createadgroup',\r\n }));\r\n this.step2 = new CrudAudienceAdgroup(_.extend(crudOptions, {\r\n workflow: 'createadgroup',\r\n }));\r\n\r\n const crudAdOptions = _.extend(crudOptions, {\r\n perfMarker: this.perfMarker.createChild('CrudAudienceAd'),\r\n isImpressionTrackingUrlsEnabled: options.isImpressionTrackingUrlsEnabled,\r\n });\r\n\r\n this.handlePopState = () => {\r\n const campaignId = this.viewContext.currentCampaign.Id;\r\n this.navigateToRoute('campaign_adgroup', { campaign_id: campaignId });\r\n };\r\n\r\n window.addEventListener('popstate', this.handlePopState);\r\n\r\n this.loadCrudAudienceAdPromise = new Promise((resolve) => {\r\n // eslint-disable-next-line\r\n if (this.audienceCampaignType !== 'shopping') {\r\n this.step3 = new ResponsiveAdEditor(crudAdOptions);\r\n }\r\n\r\n this.listenTo(this.step1, 'saveAndExit', this.saveAndExit);\r\n this.listenTo(this.step1, 'canceled', this.onExit);\r\n this.listenTo(this.step2, 'saveAndExit', this.saveAndExit);\r\n this.listenTo(this.step2, 'canceled', this.onExit);\r\n if (this.step3) {\r\n this.listenTo(this.step3, 'saveAndExit', this.saveAndExit);\r\n }\r\n\r\n resolve();\r\n });\r\n }\r\n\r\n setupInstrumentation() {\r\n const instr = DependencyResolver.get('campaignui/feature/instrumentation/index');\r\n\r\n instr.addScenario(schema);\r\n\r\n if (this.audienceCampaignType === 'shopping') {\r\n this.aimAdGroupCreationScenario = instr.aimShoppingAdGroupCreationWizard.create();\r\n } else {\r\n this.aimAdGroupCreationScenario = instr.aimAdGroupCreationWizard.create();\r\n }\r\n\r\n this.options.logScenario = this.aimAdGroupCreationScenario;\r\n\r\n const inContextRepairRecScenario = instr.inContextRepairRecommendation.create();\r\n this.options.applyActivity = inContextRepairRecScenario.applyDeliveryStatus.create();\r\n }\r\n\r\n /**\r\n * Renders the View.\r\n *\r\n * @returns {View} - returns the view itself.\r\n */\r\n render() {\r\n this.perfMarker.willRender();\r\n this.loadCrudAudienceAdPromise.then(() => {\r\n this.wizard = new StepsWizard({\r\n config: this.getStepConfig(),\r\n currentStep: 'audience-adgroup-creation-wizard-step1',\r\n });\r\n\r\n this.$el.html(template(this));\r\n\r\n this.wizard.render();\r\n\r\n if (_.isFunction(this.options.callbackBeforeRender)) {\r\n this.options.callbackBeforeRender(() => {\r\n this.$('.audience-adgroup-creation-wizard').append(this.wizard.$el);\r\n });\r\n } else {\r\n this.$('.audience-adgroup-creation-wizard').append(this.wizard.$el);\r\n }\r\n this.perfMarker.done();\r\n });\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Get Steps config.\r\n *\r\n * @private\r\n * @returns {object} - config.\r\n */\r\n getStepConfig() {\r\n const steps = [];\r\n\r\n steps.push({\r\n name: 'audience-adgroup-creation-wizard-step1',\r\n view: this.step1,\r\n });\r\n\r\n steps.push({\r\n name: 'audience-adgroup-creation-wizard-step2',\r\n view: this.step2,\r\n });\r\n\r\n // Ad step not supported for shopping campaign\r\n if (this.audienceCampaignType !== 'shopping') {\r\n steps.push({\r\n name: 'audience-adgroup-creation-wizard-step3',\r\n view: this.step3,\r\n });\r\n }\r\n\r\n const extendConfig = {};\r\n if (_.isFunction(this.options.layout)) {\r\n extendConfig.layout = this.options.layout;\r\n } else if (_.isUndefined(this.options.isHorizontal)) {\r\n extendConfig.isHorizontal = true;\r\n } else {\r\n extendConfig.isHorizontal = !!this.options.isHorizontal;\r\n }\r\n\r\n if (_.isFunction(this.options.headerTemplate)) {\r\n extendConfig.headerTemplate = this.options.headerTemplate;\r\n }\r\n\r\n return {\r\n steps,\r\n ...extendConfig,\r\n };\r\n }\r\n\r\n /**\r\n * Restores Wunderbar. Called when view is removed.\r\n *\r\n * @returns {undefined}\r\n */\r\n remove() {\r\n if (this.wizard) {\r\n this.wizard.remove();\r\n }\r\n if (_.isFunction(this.options.callbackBeforeRemove)) {\r\n this.options.callbackBeforeRemove();\r\n }\r\n\r\n const panel = document.querySelector('.audience-creation-panel.isOpen');\r\n\r\n if (panel && panel.remove) {\r\n panel.remove();\r\n }\r\n\r\n window.removeEventListener('popstate', this.handlePopState);\r\n\r\n super.remove();\r\n }\r\n\r\n /**\r\n * Handles the event when the exit is requested from the child steps\r\n * It navigates to the campaign and restore the wunderbar.\r\n *\r\n * @returns {undefined}\r\n */\r\n onExit() {\r\n const campaignId = this.viewContext.currentCampaign.Id;\r\n this.navigateToRoute('campaign_adgroup', { campaign_id: campaignId });\r\n }\r\n\r\n /**\r\n * Handles the event when the save & exit is requested from the child steps\r\n * It enables the adgroup before navigating to the summary page\r\n *\r\n * @returns {undefined}\r\n */\r\n saveAndExit() {\r\n return this.enableAdGroup()\r\n .then(() => {\r\n this.navigateToSummaryPage();\r\n })\r\n .catch((response) => {\r\n if (response && response.errors) {\r\n this.errorsView.setErrors(this.i18nErrors.getBulkApiErrors(response.errors));\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Enable AdGroups by setting status to Active\r\n *\r\n * @returns {undefined}\r\n */\r\n enableAdGroup() {\r\n const jsdata = DependencyResolver.get('component/js-data-campaign/index');\r\n\r\n const campaign = this.viewContext.currentCampaign;\r\n const adgroup = this.viewContext.currentAdGroup;\r\n const params = {\r\n Id: adgroup.Id,\r\n Campaign: { Id: campaign.Id },\r\n Status: 'Active',\r\n };\r\n\r\n return jsdata.AdGroup\r\n .update(adgroup.Id, params, { adapter: 'bulk' });\r\n }\r\n\r\n\r\n /**\r\n * Reload and Navigate to Summary page\r\n *\r\n * @returns {undefined}\r\n */\r\n navigateToSummaryPage() {\r\n const summaryDataContextManager = DependencyResolver.get('SummaryDataContextManager');\r\n\r\n summaryDataContextManager.getContext('/campaign/newadgroup/create?');\r\n\r\n if (this.eventDelegator) {\r\n this.eventDelegator.trigger('adGroupReload');\r\n }\r\n\r\n this.onExit();\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport ReactDOM from 'react-dom';\r\nimport React from 'react';\r\nimport Promise from 'bluebird';\r\nimport _ from 'underscore';\r\nimport { withUiBlock } from '@bingads-webui/uiblocker';\r\nimport { observeInDOM } from '@bingads-webui-campaign/observe-in-dom';\r\nimport { AudienceTargetInfo } from '@bingads-webui-campaign/audience-target-info';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport { AudienceAdvancedTargetSettings } from '@bingads-webui-campaign/audience-advanced-target-settings';\r\nimport { CrudAudienceAdgroupBasic, OptTgtToggle } from '@bingads-webui-campaign/crud-audience-adgroup';\r\nimport { shouldSupportCashbackSettings, logAdGroupPersonalizedOffers } from '@bingads-webui-campaign/personalized-offer-shared';\r\nimport {\r\n AudienceCampaignErrorsView,\r\n schema,\r\n getBulkErrorsLogMessage,\r\n BidStrategy,\r\n getFeedInfo,\r\n isFeedBasedAudienceCampaign,\r\n} from '@bingads-webui-campaign/audience-campaign-shared';\r\nimport { ReachEstimateControl, EstimateRequestFactory } from '@bingads-webui-campaign/reach-estimate-control';\r\nimport { asyncFunctionWithPerfMarker } from '@bingads-webui/performance-marker';\r\nimport { showIMAReachModal, getLocationsInfo, getLocationsInfoFromCampaignCriterions } from '@bingads-webui-campaign-react/ima-reach-representation';\r\nimport template from './template.pug';\r\nimport collapseTemplate from './audience-target-selector-collapse.pug';\r\n\r\n/**\r\n * AudienceAdgroupSettingsWizard class for the Adgroup settings\r\n *\r\n * @class AudienceAdgroupSettingsWizard\r\n * @extends {Backbone.View}\r\n */\r\nexport class AudienceAdgroupSettingsWizard extends Backbone.View {\r\n /**\r\n * Initializes the {AudienceAdgroupSettingsWizard} class.\r\n *\r\n * @param {Object} options - options for initializing the class.\r\n * @param {Object} options.viewContext = viewContext for the View.\r\n * @returns {undefined}\r\n */\r\n initialize(options) {\r\n this.perfMarker = options.perfMarker;\r\n this.perfMarker.willInit();\r\n this.setupInstrumentation();\r\n this.viewContext = options.viewContext;\r\n this.i18n = DependencyResolver.get('component/i18n/loader!campaignui/feature/audience-campaign');\r\n this.decimal = DependencyResolver.get('component/humanize/decimal');\r\n this.i18nErrors = DependencyResolver.get('component/api-errors-campaign/index');\r\n this.options = options;\r\n this.options.scenario = 'adgroup-settings';\r\n this.options.viewContext.level = 'adgroup';\r\n this.reachControlOptions = this.options.reachControlOptions;\r\n\r\n const permissionConfig = DependencyResolver.get('component/config/index');\r\n this.permissions = permissionConfig.get('Permissions');\r\n this.isShowDisclaimerBannerEnabled = _.get(this.permissions, ['dynamic', 'AgeGenderDisclaimer'], false);\r\n this.isBoostConversionBasedSegmentEnabled = _.get(this.permissions, ['dynamic', 'BoostConversionBasedSegment'], false) &&\r\n _.get(this.permissions, ['IsAmplifyEnabled'], false);\r\n\r\n const targetInfoPerf = this.perfMarker.createChild('currentLevelTargetInfo');\r\n targetInfoPerf.willInit();\r\n this.currentLevelTargetInfo = new AudienceTargetInfo({\r\n resourceName: 'AdGroupCriterion',\r\n isForVNext: !!(options.deps && options.deps.isNewUI),\r\n initAudienceAssociationView: false,\r\n });\r\n targetInfoPerf.done();\r\n this.optTgtReactComponent = React.createRef();\r\n\r\n const parentTargetInfoPerf = this.perfMarker.createChild('parentLevelTargetInfo');\r\n parentTargetInfoPerf.willInit();\r\n this.parentLevelTargetInfo = new AudienceTargetInfo({ resourceName: 'CampaignCriterion', isForVNext: !!(options.deps && options.deps.isNewUI), initAudienceAssociationView: false });\r\n parentTargetInfoPerf.done();\r\n\r\n this.options.currentLevelTargetInfo = this.currentLevelTargetInfo;\r\n this.options.parentLevelTargetInfo = this.parentLevelTargetInfo;\r\n\r\n this.errorsView = new AudienceCampaignErrorsView();\r\n\r\n this.loadAdGroupDataTask = this.loadAdGroupDataAsync();\r\n\r\n const deps = this.options.deps || {};\r\n this.isNewUI = deps.isNewUI;\r\n this.router = deps.router;\r\n\r\n if (this.isNewUI) {\r\n this.currentCampaign = this.options.viewContext.currentCampaign;\r\n // mock\r\n // this.currentCampaign.CashbackSettings = { CashbackMonthlyBudget: 1 };\r\n\r\n this.supportCashbackSettings = shouldSupportCashbackSettings(\r\n this.currentCampaign,\r\n this.permissions\r\n );\r\n }\r\n\r\n this.saveSettingsActivityLogger = this.aimAdGroupSettingsWizardScenario.saveSettings.create();\r\n\r\n const campaignSubType = _.get(this.viewContext, 'currentCampaign.CampaignSubType', 0);\r\n this.isAudienceFeedBasedCampaign = (campaignSubType === 1) &&\r\n (_.get(this.viewContext, 'currentCampaign.CampaignType', 0) === 8);\r\n // we are intentionally not changing the above variable name because we do not know all scenarios where it's being used\r\n this.isAudienceFeedBasedCampaignNew = isFeedBasedAudienceCampaign(campaignSubType);\r\n }\r\n\r\n setupInstrumentation() {\r\n const instr = DependencyResolver.get('campaignui/feature/instrumentation/index');\r\n\r\n instr.addScenario(schema);\r\n\r\n this.aimAdGroupSettingsWizardScenario = instr.aimAdGroupSettingsWizard.create();\r\n }\r\n\r\n /**\r\n * Fetch AdGroup and AdGroup Criterion data\r\n * @private\r\n *\r\n * @returns {undefined} - undefined\r\n */\r\n loadAdGroupDataAsync() {\r\n if (this.loadAdGroupDataTask) {\r\n return this.loadAdGroupDataTask;\r\n }\r\n\r\n this.perfMarker.willFetchData();\r\n\r\n const loadSettingsActivityLogger =\r\n this.aimAdGroupSettingsWizardScenario.loadSettings.create();\r\n\r\n loadSettingsActivityLogger.start();\r\n\r\n const jsdata = DependencyResolver.get('component/js-data-campaign/index');\r\n const edmCampaign = DependencyResolver.get('component/edm-campaign/index');\r\n\r\n this.initializeAdgroupAudience();\r\n\r\n const getAdGroupTask =\r\n asyncFunctionWithPerfMarker(\r\n this.perfMarker.createChild('getAdGroup'),\r\n jsdata.AdGroup.find\r\n )(\r\n Number(this.viewContext.currentAdGroup.Id),\r\n { entitySet: edmCampaign.currentCampaign.AdGroups, bypassCache: true }\r\n );\r\n\r\n const getAdGroupCriterionsTask =\r\n asyncFunctionWithPerfMarker(\r\n this.perfMarker.createChild('getCriterions'),\r\n this.currentLevelTargetInfo.fetchCriterions,\r\n this.currentLevelTargetInfo\r\n )(\r\n this.viewContext.currentCampaign.Id,\r\n this.viewContext.currentAdGroup.Id,\r\n null,\r\n this.permissions.IsAmplifyEnabled && this.permissions.IsContextualTargetEnabled\r\n );\r\n\r\n const getCampaignCriterionsTask =\r\n asyncFunctionWithPerfMarker(\r\n this.perfMarker.createChild('getCampaignCriterions'),\r\n this.parentLevelTargetInfo.initializeWithCampaignAsync,\r\n this.parentLevelTargetInfo\r\n )(this.viewContext.currentCampaign.Id);\r\n\r\n this.reachControl = new ReachEstimateControl(_.extend({\r\n isSticky: true,\r\n scenario: this.aimAdGroupSettingsWizardScenario.value,\r\n }, this.reachControlOptions || {}));\r\n\r\n this.estimateRequestFactory = new EstimateRequestFactory({\r\n currentLevelTargetInfo: this.currentLevelTargetInfo,\r\n parentLevelTargetInfo: this.parentLevelTargetInfo,\r\n });\r\n\r\n return Promise.join(\r\n getAdGroupTask,\r\n getAdGroupCriterionsTask,\r\n getCampaignCriterionsTask,\r\n (adgroup) => {\r\n this.options.viewContext.currentAdGroup = adgroup;\r\n\r\n this.onAdGroupInitialized();\r\n }\r\n ).then(() => {\r\n this.handleEstimateUpdates();\r\n this.listenTo(this.currentLevelTargetInfo, 'AdGroupCriterionChanged', this.handleEstimateUpdates);\r\n this.listenTo(\r\n this.currentLevelTargetInfo,\r\n 'AdGroupCriterionChanged',\r\n this.disableOptToggle\r\n );\r\n\r\n if (this.parentLevelTargetInfo) {\r\n this.listenTo(this.parentLevelTargetInfo, 'CampaignCriterionChanged', this.handleEstimateUpdates);\r\n }\r\n\r\n // Listent to TargetBidSelector of each control\r\n this.listenTo(\r\n this.optTgtReactComponent,\r\n 'targetSettingChanged',\r\n this.handleAgeGenderExclusion\r\n );\r\n this.listenTo(\r\n this.advancedTargetSetting.companyNameTargetSetting.targetOrBidSelector,\r\n 'targetSettingChanged',\r\n this.handleEstimateUpdates\r\n );\r\n this.listenTo(\r\n this.advancedTargetSetting.industryTargetSetting.targetOrBidSelector,\r\n 'targetSettingChanged',\r\n this.handleEstimateUpdates\r\n );\r\n this.listenTo(\r\n this.advancedTargetSetting.jobFunctionTargetSetting.targetOrBidSelector,\r\n 'targetSettingChanged',\r\n this.handleEstimateUpdates\r\n );\r\n this.listenTo(\r\n this.advancedTargetSetting.audienceTargetSetting.targetOrBidSelector,\r\n 'targetSettingChanged',\r\n this.handleEstimateUpdates\r\n );\r\n\r\n loadSettingsActivityLogger.stop();\r\n }).catch((response) => {\r\n if (response) {\r\n return false;\r\n }\r\n\r\n return true;\r\n });\r\n }\r\n\r\n initializeAdgroupAudience() {\r\n const getAdGroupCriterionsTask =\r\n asyncFunctionWithPerfMarker(\r\n this.perfMarker.createChild('getAdGroupCriterions'),\r\n this.currentLevelTargetInfo.initializeWithhAdGroupAudience,\r\n this.currentLevelTargetInfo\r\n )(\r\n this.viewContext.currentCampaign.Id,\r\n this.viewContext.currentAdGroup.Id\r\n );\r\n\r\n getAdGroupCriterionsTask.finally(withUiBlock(\r\n this.$('.audience-adgroup-settings-wizard-container'),\r\n this.i18n.getString('Loading')\r\n )).then(() => {\r\n const targetSetting = this.advancedTargetSetting.audienceTargetSetting;\r\n if (targetSetting) {\r\n this.advancedTargetSetting.$('.audience-target-setting-container')\r\n .empty().append(targetSetting.render().$el);\r\n }\r\n\r\n const nonEmptyKeys = this.currentLevelTargetInfo.getAllNoneEmptyTypeKeys();\r\n const targetSelector = this.advancedTargetSetting.audienceTargetSelector;\r\n const isAudienceEnabled = _.contains(nonEmptyKeys, 'Audience');\r\n\r\n if (isAudienceEnabled) {\r\n if (targetSelector) {\r\n targetSelector.turnOnAudienceTarget();\r\n }\r\n this.advancedTargetSetting.updateUnmodifiedCriterions();\r\n } else {\r\n const el = document.querySelector('.audience-target-setting-container');\r\n\r\n if (el) {\r\n el.style.display = 'none';\r\n }\r\n }\r\n });\r\n }\r\n\r\n disableOptToggle() {\r\n if (!this.isAudienceFeedBasedCampaign && this.optTgtReactComponent && this.optTgtReactComponent.current) {\r\n this.optTgtReactComponent.current.disableByValidation.call(this.optTgtReactComponent.current);\r\n }\r\n }\r\n\r\n onRenderedInDOM() {\r\n this.loadAdGroupDataTask.finally(withUiBlock(\r\n this.$('.audience-adgroup-settings-wizard-container'),\r\n this.i18n.getString('Loading')\r\n ));\r\n }\r\n\r\n /**\r\n * Since AdGroup criterion initialize takes network calls,\r\n * This callback function is called when everything is initialized\r\n *\r\n * @returns {object} - the view itself\r\n */\r\n onAdGroupInitialized() {\r\n this.crudAudienceAdgroupBasic = new CrudAudienceAdgroupBasic(_.extend(\r\n {\r\n perfMarker: this.perfMarker.createChild('crudAudienceAdGroupBasic'),\r\n supportCashbackSettings: this.supportCashbackSettings,\r\n },\r\n this.options\r\n ));\r\n this.advancedTargetSetting = new AudienceAdvancedTargetSettings(_.extend(\r\n {\r\n perfMarker: this.perfMarker.createChild('advancedTargetSetting'),\r\n supportCashbackSettings: this.supportCashbackSettings,\r\n },\r\n this.options\r\n ));\r\n\r\n this.renderSettingsControls();\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click .save-button': 'onSaveButtonClicked',\r\n 'click .cancel-button': 'onCancelButtonClicked',\r\n };\r\n }\r\n\r\n onCashbackPercentChange(value) {\r\n const { cashbackSettingsView } = this.crudAudienceAdgroupBasic;\r\n if (cashbackSettingsView.viewModel.validateCashbackPercent(value)) {\r\n const formattedValue = value === '' || value == null ? null : this.decimal.fromLocalToFloat(value);\r\n\r\n if (this.advancedTargetSetting) {\r\n this.advancedTargetSetting.toggleCashbackPercentColumns(true, {\r\n level: 'AdGroup',\r\n value: formattedValue,\r\n });\r\n }\r\n }\r\n }\r\n\r\n onSaveButtonClicked() {\r\n return this.validateAndSave();\r\n }\r\n\r\n onCancelButtonClicked() {\r\n const CampaignId = Number(this.viewContext.currentCampaign.Id);\r\n\r\n const AdGroupId = this.viewContext.currentAdGroup ?\r\n Number(this.viewContext.currentAdGroup.Id) : undefined;\r\n\r\n this.router.navigateToRoute('adgroup_ad', { campaign_id: CampaignId, adgroup_id: AdGroupId });\r\n }\r\n\r\n validate() {\r\n return this.advancedTargetSetting.validate()\r\n && this.crudAudienceAdgroupBasic.validate();\r\n }\r\n\r\n /**\r\n * It validates the reach and privacy of selected targets and then\r\n * attempts to save and return true if the save is done succefully.\r\n *\r\n * @returns {boolean} - returns true if save was succesful\r\n */\r\n validateAndSave() {\r\n if (!this.validate()) {\r\n return false;\r\n }\r\n\r\n return Promise.all([\r\n this.reachControl.validate(),\r\n this.advancedTargetSetting.locationTargetSetting\r\n .targetSelectionView.locationTargetsViewPromise,\r\n ]).then((isValid) => {\r\n if (isValid[0]) {\r\n return this.checkIMAReachAndSave();\r\n }\r\n const message = this.reachControl.errorMessage;\r\n\r\n this.errorsView.setErrors([{ message }]);\r\n\r\n return false;\r\n }).catch(() => {\r\n // TODO: log here\r\n });\r\n }\r\n\r\n /**\r\n * Get the data that is used for the parameter for saving.\r\n *\r\n * @returns {Object} - object representing the data for the adgroup to be saved.\r\n */\r\n getData() {\r\n const params = {};\r\n\r\n _.extend(params, this.crudAudienceAdgroupBasic.getData());\r\n\r\n const targetSettingsData = this.advancedTargetSetting.getData();\r\n\r\n // Separate audience criterion with others\r\n const allAdGroupCriterions = targetSettingsData.AdGroupCriterions;\r\n const audienceCriterions =\r\n _.filter(allAdGroupCriterions, target => target.Criterion.Type === 'Audience');\r\n const otherCriterions =\r\n _.reject(allAdGroupCriterions, target => target.Criterion.Type === 'Audience');\r\n\r\n params.AdGroupCriterions = _.union(params.AdGroupCriterions, otherCriterions);\r\n params.AdGroupAudienceCriterions = audienceCriterions;\r\n\r\n params.TargetSetting = this.getTargetSettings().length > 0 ? this.getTargetSettings().join(';') : 'delete_value';\r\n\r\n if (this.permissions && this.permissions.dynamic && this.permissions.dynamic.Enable1PPlacementTargeting\r\n && !this.isAudienceFeedBasedCampaignNew) {\r\n params.BoostAdunitIds = this.getAdUnitIds();\r\n }\r\n\r\n if (this.isAudienceFeedBasedCampaign) {\r\n params.UseOptimizedTargeting = true;\r\n } else {\r\n const useOptimizedTargeting = this.optTgtReactComponent.current.getData();\r\n params.UseOptimizedTargeting = useOptimizedTargeting;\r\n }\r\n\r\n return params;\r\n }\r\n\r\n getAllAdGroupLocationCriterion() {\r\n let adGroupCriterions = this.advancedTargetSetting.getAllLocations() || [];\r\n\r\n adGroupCriterions = _.filter(adGroupCriterions, c => c.Status !== 'Deleted');\r\n const adGroupCriterionsWithoutIntent = _.filter(adGroupCriterions, c => c.CriterionType !== 'LocationIntentCriterion');\r\n const campaignCriterions = this.advancedTargetSetting.getCampaignLocationCriterions();\r\n\r\n // inherit locations\r\n if (adGroupCriterionsWithoutIntent.length === 0 &&\r\n campaignCriterions &&\r\n campaignCriterions.length > 0) {\r\n const overrideInfo = getLocationsInfoFromCampaignCriterions(campaignCriterions);\r\n\r\n return overrideInfo.locations.concat(overrideInfo.intent);\r\n }\r\n\r\n return adGroupCriterions;\r\n }\r\n\r\n\r\n checkIMAReachAndSave() {\r\n let checkIMAReachPromise = Promise.resolve(false);\r\n\r\n const locationCriterions = this.getAllAdGroupLocationCriterion() || [];\r\n\r\n const config = DependencyResolver.get('component/config/index');\r\n const accountInfo = config.get('CurrentAccount');\r\n const isIMAReachRepresentationPhase1Enabled = _.result(config.get('Permissions'), 'IsIMAReachRepresentationPhase1Enabled');\r\n const params = this.getData();\r\n\r\n const changedLocationCriterions = params && params.AdGroupCriterions\r\n && _.filter(params.AdGroupCriterions, item =>\r\n item && (item.CriterionType === 'Location' || item.CriterionType === 'Radius'));\r\n\r\n const hasLocationChanged = changedLocationCriterions && changedLocationCriterions.length > 0;\r\n\r\n if (hasLocationChanged && isIMAReachRepresentationPhase1Enabled\r\n && this.isNewUI && locationCriterions.length > 0) {\r\n const onYes = () => this.saveAsync();\r\n const locationsInfo = getLocationsInfo(locationCriterions);\r\n\r\n checkIMAReachPromise = showIMAReachModal({\r\n locationsInfo,\r\n onYes,\r\n deliveryChannel: 'AIM',\r\n campaignId: Number(this.viewContext.currentCampaign.Id),\r\n adGroupId: Number(this.viewContext.currentAdGroup.Id),\r\n i18n: this.i18n,\r\n aid: accountInfo.Id,\r\n cid: accountInfo.AdvertiserCustomerID,\r\n });\r\n }\r\n\r\n return checkIMAReachPromise.then((isIMAReachModalShow) => {\r\n if (isIMAReachModalShow) {\r\n return false;\r\n }\r\n return this.saveAsync();\r\n });\r\n }\r\n\r\n /**\r\n * Save the adgroup with the given setting.\r\n *\r\n * @returns {Promise} - returns promise of returning boolean value indicating\r\n * if the save process is succesful or not.\r\n */\r\n saveAsync() {\r\n const params = this.getData();\r\n\r\n const jsdata = DependencyResolver.get('component/js-data-campaign/index');\r\n\r\n const updateAdGroupTask = jsdata.AdGroup.update(\r\n this.viewContext.currentAdGroup.Id,\r\n params,\r\n { adapter: 'bulk', cacheResponse: false }\r\n );\r\n\r\n this.errorsView.removeErrors();\r\n\r\n return updateAdGroupTask\r\n .then((data) => {\r\n if (_.isFinite(data.Id)) {\r\n this.viewContext.currentAdGroup = data;\r\n const saveSettingsActivity = this.aimAdGroupSettingsWizardScenario.saveSettings.create();\r\n logAdGroupPersonalizedOffers(\r\n this.supportCashbackSettings,\r\n saveSettingsActivity.signal.bind(saveSettingsActivity), params\r\n );\r\n return true;\r\n }\r\n\r\n return false;\r\n })\r\n .then((isSuccess) => {\r\n if (isSuccess) {\r\n return this.crudAudienceAdgroupBasic.advancedSettings.saveExtensions();\r\n }\r\n\r\n return Promise.resolve(false);\r\n })\r\n .then((isSuccess) => {\r\n if (window.App) {\r\n const CampaignId = Number(this.viewContext.currentCampaign.Id);\r\n const AdGroupId = Number(this.viewContext.currentAdGroup.Id);\r\n\r\n window.App.trigger('adGroupUpdated', {\r\n data: [{\r\n Id: AdGroupId,\r\n Name: this.viewContext.currentAdGroup.Name,\r\n CampaignId,\r\n }],\r\n });\r\n if (isSuccess) {\r\n this.router.navigateToRoute('adgroup_ad', { campaign_id: CampaignId, adgroup_id: AdGroupId });\r\n }\r\n }\r\n\r\n return isSuccess;\r\n })\r\n .catch((response) => {\r\n this.handleErrors(response);\r\n\r\n return Promise.resolve(false);\r\n })\r\n .finally(withUiBlock(this.$el, this.i18n.getString('Loading'), true));\r\n }\r\n\r\n handleErrors(response) {\r\n const saveSettingsActivity = this.aimAdGroupSettingsWizardScenario.saveSettings.create();\r\n\r\n if (response && response.entity) {\r\n const hasErrors = response && !_.isUndefined(response.errors);\r\n\r\n if (hasErrors) {\r\n if (response.errors.length) {\r\n const bulkApiErrors = this.i18nErrors.getBulkApiErrors(response.errors);\r\n const noMappedErrors = _.every(bulkApiErrors, error => error.code === error.message);\r\n\r\n if (_.isEmpty(bulkApiErrors) || noMappedErrors) {\r\n this.errorsView.setErrors([{ message: this.i18n.getString('GenericErrorMessage_Short') }]);\r\n\r\n saveSettingsActivity.error(`${getBulkErrorsLogMessage(response.errors)}, Entity:${JSON.stringify(response.entity)}`);\r\n } else {\r\n this.errorsView.setErrors(bulkApiErrors);\r\n\r\n saveSettingsActivity.trace(getBulkErrorsLogMessage(response.errors));\r\n }\r\n }\r\n } else {\r\n saveSettingsActivity.error(JSON.stringify(response));\r\n }\r\n } else {\r\n // Ajax error\r\n this.errorsView.setErrors(this.i18nErrors.getODataErrors(response.errors));\r\n }\r\n }\r\n\r\n /**\r\n * Renders the View.\r\n *\r\n * @returns {View} - returns the view itself.\r\n */\r\n render() {\r\n observeInDOM(\r\n this.$el,\r\n () => this.onRenderedInDOM()\r\n );\r\n\r\n this.$el.html(template(this));\r\n\r\n return this;\r\n }\r\n\r\n renderSettingsControls() {\r\n this.perfMarker.willRender();\r\n\r\n if (this.crudAudienceAdgroupBasic && this.advancedTargetSetting) {\r\n this.crudAudienceAdgroupBasic.render();\r\n this.advancedTargetSetting.render();\r\n\r\n this.$('.audience-adgroup-settings-container').append(this.crudAudienceAdgroupBasic.$el);\r\n this.$('.audience-adgroup-targets-container').append(this.advancedTargetSetting.$el);\r\n if (!this.isAudienceFeedBasedCampaign) {\r\n this.$('.audience-adgroup-targets-container').append('
');\r\n this.$('.optimized-container').html(collapseTemplate(this));\r\n this.renderOptTgtSwtich();\r\n }\r\n }\r\n\r\n if (this.crudAudienceAdgroupBasic.cashbackSettingsView) {\r\n this.crudAudienceAdgroupBasic.cashbackSettingsView.viewModel.CashbackPercent\r\n .subscribe((v) => {\r\n this.onCashbackPercentChange(v);\r\n });\r\n }\r\n\r\n this.$('.errors-container').append(this.errorsView.render().$el);\r\n\r\n if (!this.isAudienceFeedBasedCampaign) {\r\n this.$('.audience-reach-estimate-container').append(this.reachControl.render().$el);\r\n }\r\n\r\n this.perfMarker.done();\r\n }\r\n\r\n /**\r\n * Event handler for handling the updating of reach estimates.\r\n * @private\r\n * @param {object} parent - all raw critierions\r\n * @returns {View} - returns the view itself.\r\n */\r\n handleEstimateUpdates(parent = null) {\r\n const settingView = parent == null ? this : parent;\r\n const targetSettings = settingView.getTargetSettings();\r\n // This can be undefined if it's first displayed but has value when come from next step\r\n const biddingSchemeType = settingView.viewContext.currentCampaign &&\r\n settingView.viewContext.currentCampaign.BiddingScheme &&\r\n settingView.viewContext.currentCampaign.BiddingScheme.Type;\r\n const subType = settingView.viewContext.currentCampaign &&\r\n settingView.viewContext.currentCampaign.CampaignSubType;\r\n const bidinfo = BidStrategy[biddingSchemeType];\r\n const campaignSetting = _.first(_.get(settingView.viewContext.currentCampaign, 'CampaignSettings')) || {};\r\n const feedInfo = getFeedInfo(campaignSetting);\r\n const useOptimizedTargeting = settingView.optTgtReactComponent.current &&\r\n settingView.optTgtReactComponent.current.getData();\r\n // eslint-disable-next-line max-len\r\n const targets = this.estimateRequestFactory.createWithTargetSettings(\r\n targetSettings,\r\n bidinfo, subType, feedInfo, useOptimizedTargeting\r\n );\r\n const hasAudienceRemarketingList =\r\n settingView.currentLevelTargetInfo.hasAudienceRemarketingList();\r\n\r\n settingView.reachControl.updateEstimate(targets, hasAudienceRemarketingList);\r\n }\r\n\r\n /**\r\n * Event handler for Age/Gender Exclusion for PT\r\n * @private\r\n * @returns {View} - returns true if age/gender setting view is re-rendered.\r\n */\r\n handleAgeGenderExclusion() {\r\n const { advancedTargetSetting } = this;\r\n let shouldShowWarningMessage = false;\r\n if (advancedTargetSetting && (_.get(this.viewContext, 'currentCampaign.CampaignType') === 8) &&\r\n (_.get(this.viewContext, 'currentCampaign.CampaignSubType') === 0) &&\r\n advancedTargetSetting.showTargetExclusionActualDeliveryStatus) {\r\n if (advancedTargetSetting.criterionsHaveNoDataInOriginalPayload &&\r\n (!_.isEmpty(advancedTargetSetting.criterionsHaveNoDataInOriginalPayload.Age) ||\r\n !_.isEmpty(advancedTargetSetting.criterionsHaveNoDataInOriginalPayload.Gender))) {\r\n // if no-data target is found, we should show this warning because we are delivery actual delivery status with PT setting and target type.\r\n shouldShowWarningMessage = true;\r\n }\r\n const useOptimizedTargeting = this.optTgtReactComponent.current && this.optTgtReactComponent.current.getData();\r\n const genderTargetSelectionView = advancedTargetSetting.genderTargetSetting && advancedTargetSetting.genderTargetSetting.targetSelectionView;\r\n const ageTargetSelectionView = advancedTargetSetting.ageTargetSetting && advancedTargetSetting.ageTargetSetting.targetSelectionView;\r\n advancedTargetSetting.setupVirtualTargets(useOptimizedTargeting, ageTargetSelectionView, genderTargetSelectionView);\r\n ageTargetSelectionView.render();\r\n genderTargetSelectionView.render();\r\n }\r\n return shouldShowWarningMessage;\r\n }\r\n\r\n /**\r\n * Get User selected Target Setting options\r\n * @private\r\n *\r\n * @returns {Array} - Select TargetAndBid Targets\r\n */\r\n getTargetSettings() {\r\n // Location is not part of the TargetSetting Property\r\n let selectedTypes = this.currentLevelTargetInfo.getAllNoneEmptyTypeKeys();\r\n selectedTypes = _.reject(\r\n selectedTypes,\r\n selectedType => selectedType === 'Location' ||\r\n selectedType === 'Radius' ||\r\n selectedType === 'NegativeLocation' ||\r\n selectedType === 'Device' ||\r\n selectedType === 'ContextualTarget'\r\n );\r\n\r\n const targetSettingsSetByUser = this.advancedTargetSetting.getTargetSettings();\r\n const selectedAndTargetSetted = _.intersection(selectedTypes, targetSettingsSetByUser);\r\n\r\n return selectedAndTargetSetted;\r\n }\r\n\r\n getAdUnitIds() {\r\n return this.advancedTargetSetting.getAdUnitIds();\r\n }\r\n\r\n renderOptTgtSwtich() {\r\n ReactDOM.render(\r\n ,\r\n this.$('.optimized-toggle')[0]\r\n );\r\n }\r\n\r\n remove() {\r\n const locationTargetView = _.get(this, 'advancedTargetSetting.locationTargetSetting.targetSelectionView.locationTargetsView');\r\n if (locationTargetView) {\r\n locationTargetView.remove();\r\n }\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport {\r\n ageSettingOptionsFactory,\r\n genderSettingOptionsFactory,\r\n deviceSettingOptions\r\n} from '@bingads-webui-campaign/audience-campaign-shared';\r\n\r\nfunction getConfigs(isAudienceCampaign = false, isSearchDSAShoppingAdgroupLevel = false) {\r\n return {\r\n Age: ageSettingOptionsFactory(isAudienceCampaign || isSearchDSAShoppingAdgroupLevel),\r\n Gender: genderSettingOptionsFactory(isAudienceCampaign),\r\n Device: deviceSettingOptions,\r\n };\r\n}\r\n\r\nfunction populateCriterions(\r\n targetInfo, isAudienceCampaign, isSearchDSAShoppingAdgroupLevel, isTargetAndBidArr,\r\n useOptimizedTargeting, showTargetExclusionActualDeliveryStatus, criterionsHaveNoDataInOriginalPayload,\r\n ageTargetSelectionView, genderTargetSelectionView,\r\n criterionType\r\n) {\r\n const config = getConfigs(isAudienceCampaign, isSearchDSAShoppingAdgroupLevel)[criterionType];\r\n\r\n const savedSelections = _.map(\r\n targetInfo.getAllByType(criterionType),\r\n criterion => criterion.Criterion[`${criterionType}Criterion`][config.criterionTypeTarget]\r\n );\r\n\r\n // if all targets are all unselected or selected, we do not need to mock included status for Age/gender target\r\n const isTargetAllUnselectedOrSelected = savedSelections.length === 0;\r\n\r\n const unsavedSelections = _.difference(_.keys(config.selections), savedSelections);\r\n\r\n // eslint-disable-next-line no-param-reassign\r\n showTargetExclusionActualDeliveryStatus = showTargetExclusionActualDeliveryStatus && _.contains(isTargetAndBidArr, criterionType) && !isTargetAllUnselectedOrSelected;\r\n // map no data into included/excluded\r\n if (showTargetExclusionActualDeliveryStatus &&\r\n _.isEmpty(criterionsHaveNoDataInOriginalPayload[criterionType])) {\r\n _.extend(criterionsHaveNoDataInOriginalPayload[criterionType], unsavedSelections);\r\n } else if (showTargetExclusionActualDeliveryStatus && criterionsHaveNoDataInOriginalPayload[criterionType]) {\r\n // revert the mapping and fallback to default backfill behavior\r\n if (criterionType === 'Age' && ageTargetSelectionView) {\r\n ageTargetSelectionView.saveSnapshot();\r\n _.map(criterionsHaveNoDataInOriginalPayload[criterionType], (criterion) => {\r\n // eslint-disable-next-line no-param-reassign\r\n ageTargetSelectionView.selections[criterion].isSelected = useOptimizedTargeting;\r\n });\r\n ageTargetSelectionView.updateCriterionDataAsync();\r\n } else if (criterionType === 'Gender' && genderTargetSelectionView) {\r\n genderTargetSelectionView.saveSnapshot();\r\n _.map(criterionsHaveNoDataInOriginalPayload[criterionType], (criterion) => {\r\n // eslint-disable-next-line no-param-reassign\r\n genderTargetSelectionView.selections[criterion].isSelected = useOptimizedTargeting;\r\n });\r\n genderTargetSelectionView.updateCriterionDataAsync();\r\n }\r\n }\r\n\r\n // if isTargetAndBid and has positive and audienceCampaign and non-empty\r\n // fill with negative else fill with positive\r\n let shouldFillWithNegative = false;\r\n const isTargetAndBid = _.contains(isTargetAndBidArr, criterionType);\r\n\r\n if ((isAudienceCampaign || (isSearchDSAShoppingAdgroupLevel && criterionType === 'Age')) &&\r\n isTargetAndBid && targetInfo.getAllByType(criterionType).length > 0 &&\r\n !(showTargetExclusionActualDeliveryStatus && useOptimizedTargeting)\r\n ) {\r\n shouldFillWithNegative = _.some(\r\n targetInfo.getAllByType(criterionType),\r\n criterion => criterion.CriterionType === criterionType\r\n );\r\n }\r\n\r\n return _.map(unsavedSelections, (selection) => {\r\n const criterion = {\r\n CriterionType: shouldFillWithNegative ? `Negative${criterionType}` : criterionType,\r\n Criterion: {\r\n Type: criterionType,\r\n BidAdjustment: 0,\r\n [`${criterionType}Criterion`]: {\r\n [config.criterionTypeTarget]: selection,\r\n },\r\n },\r\n };\r\n\r\n return targetInfo.createAsync(criterion);\r\n });\r\n}\r\n\r\n\r\n/**\r\n * populate checkbox based criterions\r\n * @param {Object} targetInfo - instance of AudienceTargetInfo\r\n * @param {Boolean} isAudienceCampaign - boolean value indicating audience campaign type\r\n * @param {Array} isTargetAndBidArr - array containing CriterionTypes that are TargetAndBid\r\n *\r\n * @returns {Promise} - async task to create criterions\r\n */\r\nexport function populateCheckboxBasedCriterions({\r\n targetInfo,\r\n isAudienceCampaign = false,\r\n isSearchDSAShoppingAdgroupLevel = false,\r\n isTargetAndBidArr = [],\r\n useOptimizedTargeting = false,\r\n showTargetExclusionActualDeliveryStatus = false,\r\n criterionsHaveNoDataInOriginalPayload = {},\r\n ageTargetSelectionView,\r\n genderTargetSelectionView,\r\n}) {\r\n if (!targetInfo) {\r\n return Promise.resolve();\r\n }\r\n\r\n const populator = _.partial(\r\n populateCriterions,\r\n targetInfo,\r\n isAudienceCampaign,\r\n isSearchDSAShoppingAdgroupLevel,\r\n isTargetAndBidArr,\r\n useOptimizedTargeting,\r\n showTargetExclusionActualDeliveryStatus,\r\n criterionsHaveNoDataInOriginalPayload,\r\n ageTargetSelectionView,\r\n genderTargetSelectionView\r\n );\r\n const criterionTypes = _.keys(getConfigs());\r\n const asyncTasks = _.map(criterionTypes, populator);\r\n\r\n return Promise.all(_.flatten(asyncTasks));\r\n}\r\n\r\nexport function isCashbackPercentEmpty(percent) {\r\n return percent == null || percent === '';\r\n}\r\n\r\n/**\r\n * This function compacts the populated criterions with bid adjustment 0.\r\n * This function should only be used in non audience campaign scnearios in campaign level\r\n * @param {Array} criterions - criterions returned from compareAndGetCriterionsDelta\r\n * @param {Boolean} supportCashbackSettings - whether cashback offer is enabled\r\n *\r\n * @returns {Array} - array of criterions to save\r\n */\r\nexport function compactPopulatedCriterions(criterions) {\r\n const hasNonZeroDeviceCriterion = _.find(criterions, criterion =>\r\n (criterion.CriterionType === 'Device') &&\r\n (criterion.Criterion.BidAdjustment !== 0 ||\r\n !isCashbackPercentEmpty(criterion.Criterion.CashbackPercent)));\r\n\r\n const criterionsToReturn =\r\n _.reject(criterions, criterion =>\r\n // Not saved in MT\r\n (criterion.Id < 0) &&\r\n // No bid adjustment is set\r\n (criterion.Criterion.BidAdjustment === 0) &&\r\n isCashbackPercentEmpty(criterion.Criterion.CashbackPercent) &&\r\n // Only Age, Gender and Device criterions were populated\r\n _.contains(['Age', 'Gender', 'Device'], criterion.CriterionType) &&\r\n // If there is non-zero Device criterion, we need to keep all other device criterions\r\n // This happens in campaign creation scenario\r\n !((criterion.CriterionType === 'Device') && hasNonZeroDeviceCriterion));\r\n\r\n return criterionsToReturn;\r\n}\r\n\r\nexport function removeAllVirtuals(criterions) {\r\n let ageCriterions = _.filter(criterions, criterion => criterion.CriterionType === 'Age');\r\n let genderCriterions = _.filter(criterions, criterion => criterion.CriterionType === 'Gender');\r\n let deviceCriterions = _.filter(criterions, criterion => criterion.CriterionType === 'Device');\r\n const others = _.reject(\r\n criterions,\r\n criterion => (criterion.CriterionType === 'Age' ||\r\n criterion.CriterionType === 'Gender' ||\r\n criterion.CriterionType === 'Device')\r\n );\r\n\r\n // remove all ageCriterions in the given conditions\r\n const shouldRemoveAge = ageCriterions.length === 6 &&\r\n _.every(\r\n ageCriterions,\r\n ageCriterion => (\r\n ageCriterion.Id < 0 &&\r\n ageCriterion.Criterion.BidAdjustment === 0 &&\r\n isCashbackPercentEmpty(ageCriterion.Criterion.CashbackPercent)\r\n )\r\n );\r\n\r\n if (shouldRemoveAge) {\r\n ageCriterions = [];\r\n }\r\n\r\n const shouldRemoveGender = genderCriterions.length === 3 &&\r\n _.every(\r\n genderCriterions,\r\n genderCriterion => (\r\n genderCriterion.Id < 0 &&\r\n genderCriterion.Criterion.BidAdjustment === 0 &&\r\n isCashbackPercentEmpty(genderCriterion.Criterion.CashbackPercent)\r\n )\r\n );\r\n\r\n if (shouldRemoveGender) {\r\n genderCriterions = [];\r\n }\r\n\r\n const shouldRemoveDevice = deviceCriterions.length === 3 &&\r\n _.every(\r\n deviceCriterions,\r\n deviceCriterion => (\r\n deviceCriterion.Id < 0 &&\r\n deviceCriterion.Criterion.BidAdjustment === 0 &&\r\n isCashbackPercentEmpty(deviceCriterion.Criterion.CashbackPercent)\r\n )\r\n );\r\n\r\n if (shouldRemoveDevice) {\r\n deviceCriterions = [];\r\n }\r\n\r\n const criterionsToReturn = [\r\n ...ageCriterions,\r\n ...genderCriterions,\r\n ...deviceCriterions,\r\n ...others,\r\n ];\r\n\r\n return criterionsToReturn;\r\n}\r\n\r\nfunction isFeedBasedAudienceCampaign(campaignSubType) {\r\n // AudienceFeedBased = 1,\r\n // AudienceDynamicFeedBased = 2,\r\n return campaignSubType === 1 || campaignSubType === 2 || campaignSubType === 'AudienceFeedBased' || campaignSubType === 'AudienceDynamicFeedBased';\r\n}\r\n\r\nexport function getBlackListCriterions({\r\n campaignType, campaignSubType, permissions = {}, selectedTypeKeys = [], isMSStoreAdsGAWorkflow,\r\n} = {}) {\r\n let config;\r\n const isWindowsStoreAdsEnabled = isMSStoreAdsGAWorkflow;\r\n const isWindowsStoreAdsManualCPAEnabled = (permissions && permissions.dynamic && permissions.dynamic.WindowsStoreAdsManualCPA) || isMSStoreAdsGAWorkflow;\r\n const isDomesticSimplifiedChineseEnabled = permissions && permissions.IsDomesticSimplifiedChineseEnabled;\r\n\r\n if (campaignType === 'shopping' && campaignSubType === 'ShoppingSponsoredProductAd' &&\r\n isWindowsStoreAdsEnabled && isWindowsStoreAdsManualCPAEnabled) {\r\n config = ['device', 'audience', 'placement'];\r\n } else {\r\n const blackListMap = {\r\n // For audience campaign, device targeting is not allowed for the close-beta time frame\r\n audience: ['device'],\r\n // For search, DSA and shopping campaign, audience targeting and 1p placements are not applicable\r\n default: ['audience', 'placement'],\r\n };\r\n\r\n config = _.result(blackListMap, campaignType, blackListMap.default);\r\n }\r\n\r\n if (isFeedBasedAudienceCampaign(campaignSubType)) {\r\n // For feed based audience campaign, device targeting is not allowed\r\n config = _.union(['placement'], config);\r\n }\r\n\r\n if (isDomesticSimplifiedChineseEnabled) {\r\n // For campaign under Pilot 1183 DomesticSimplifiedChinese, companyName, industry, jobFunction is not applicable\r\n config = _.union(['companyName', 'industry', 'jobFunction'], config);\r\n }\r\n\r\n return _.difference(config, selectedTypeKeys);\r\n}\r\n","import Backbone from 'backbone';\r\nimport _ from 'underscore';\r\nimport ko from 'knockout';\r\nimport { cloneDeep } from '@bingads-webui-universal/primitive-utilities';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport {\r\n CompanyNameCriterionSetting,\r\n JobFunctionCriterionSetting,\r\n IndustryCriterionSetting,\r\n AgeCriterionSetting,\r\n DeviceCriterionSetting,\r\n GenderCriterionSetting,\r\n AudienceCriterionSetting,\r\n LocationCriterionSetting,\r\n PlacementSetting,\r\n PlacementWithIds,\r\n} from '@bingads-webui-campaign/audience-criterion-setting';\r\nimport {\r\n AudienceTargetSelector,\r\n criterionHelper,\r\n getCampaignType,\r\n} from '@bingads-webui-campaign/audience-campaign-shared';\r\nimport template from './template.pug';\r\nimport {\r\n populateCheckboxBasedCriterions,\r\n compactPopulatedCriterions,\r\n removeAllVirtuals,\r\n getBlackListCriterions,\r\n} from './helper';\r\n\r\nlet permissions = {};\r\n/**\r\n * Class for handling advanced target setting\r\n * Which shows both targeting and bid adjustment\r\n *\r\n */\r\nexport class AudienceAdvancedTargetSettings extends Backbone.View {\r\n /**\r\n * Initializes the Audience advanced target setting\r\n *\r\n * @param {Object} options - options for the target setting\r\n * @param {Object} options.viewContext - view context\r\n * @param {Object} options.adGroupTargetInfo - adgroup target info\r\n * @returns {undefined}\r\n */\r\n initialize(options) {\r\n this.options = options;\r\n this.activityLogger = options.activityLogger;\r\n this.viewContext = options.viewContext || {};\r\n this.i18n = DependencyResolver.get('component/i18n/loader!campaignui/feature/audience-campaign');\r\n this.supportedTypes = [\r\n 'Age',\r\n 'Gender',\r\n 'Device',\r\n 'Location',\r\n 'Radius',\r\n 'NegativeLocation',\r\n 'CompanyName',\r\n 'Industry',\r\n 'JobFunction',\r\n 'Audience'];\r\n this.supportCashbackSettings = options.supportCashbackSettings;\r\n\r\n this.deps = options.deps || {};\r\n const permissionConfig = DependencyResolver.get('component/config/index');\r\n permissions = permissionConfig.get('Permissions');\r\n\r\n this.Enable1PPlacementTargeting = permissions && permissions.dynamic && permissions.dynamic.Enable1PPlacementTargeting;\r\n\r\n this.supportedTypes = _.compact([\r\n 'Age',\r\n 'Gender',\r\n 'Device',\r\n 'Location',\r\n 'Radius',\r\n 'NegativeLocation',\r\n 'CompanyName',\r\n 'Industry',\r\n 'JobFunction',\r\n 'Audience',\r\n this.Enable1PPlacementTargeting && 'Placement',\r\n ]);\r\n this.currentLevelTargetInfo = options.currentLevelTargetInfo;\r\n this.parentLevelTargetInfo = options.parentLevelTargetInfo;\r\n\r\n // Location criterion is purely handled by the location criterion control\r\n this.supportedTypes = _.reject(this.supportedTypes, type =>\r\n (type === 'Location' || type === 'Radius' || type === 'NegativeLocation'));\r\n\r\n // Unmodified needs to be saved, so that comparison can be made\r\n this.unmodifiedCriterions =\r\n cloneDeep(this.currentLevelTargetInfo.getAllByTypes(this.supportedTypes));\r\n\r\n this.populateInitialTargetOrBidSettings();\r\n\r\n // Create virtual targets for Age and Gender\r\n // but save the original data for further use\r\n this.showTargetExclusionActualDeliveryStatus = _.get(permissions, 'dynamic.PredictiveTargetingShowAgeGenderTargetExclusionActualDeliveryStatus', false);\r\n this.criterionsHaveNoDataInOriginalPayload = { Age: [], Gender: [] };\r\n const useOptimizedTargeting = _.get(this.viewContext, 'currentAdGroup.UseOptimizedTargeting', false);\r\n\r\n this.setupVirtualTargets(useOptimizedTargeting);\r\n\r\n const parentLevelSelectedTypeKeys =\r\n this.parentLevelTargetInfo ? this.parentLevelTargetInfo.getAllNoneEmptyTypeKeys() : [];\r\n const currentLevelSelectedTypeKeys = this.currentLevelTargetInfo.getAllNoneEmptyTypeKeys();\r\n this.initialSelectedTypeKeys = _.union(\r\n parentLevelSelectedTypeKeys,\r\n currentLevelSelectedTypeKeys\r\n );\r\n\r\n const { currentAdGroup } = this.viewContext;\r\n if (this.Enable1PPlacementTargeting && currentAdGroup && currentAdGroup.Settings) {\r\n const settingIndex = _.findIndex(currentAdGroup.Settings, setting => setting['@odata.type'] === '#Model.BoostPlacementSetting');\r\n const originalAdUnitIds = settingIndex === -1 ? [] : currentAdGroup.Settings[settingIndex].AdUnitIds;\r\n this.placementSelections = _.compact(_.map(PlacementWithIds, (value) => {\r\n if (_.difference(value.adUnitIds, originalAdUnitIds).length === 0) {\r\n return value;\r\n }\r\n return null;\r\n }));\r\n if (!_.isEmpty(this.placementSelections)) {\r\n this.initialSelectedTypeKeys.push('Placement');\r\n }\r\n }\r\n this.initializeTargetSettings();\r\n this.viewmodel = {\r\n isEditTargetCategoriesExpanded: ko.observable(false),\r\n };\r\n }\r\n\r\n get className() {\r\n return 'audience-advanced-target-settings-root';\r\n }\r\n\r\n setupVirtualTargets(useOptimizedTargeting = false, ageTargetSelectionView, genderTargetSelectionView) {\r\n if (!this.isAudienceCampaign) {\r\n return;\r\n }\r\n\r\n populateCheckboxBasedCriterions({\r\n targetInfo: this.currentLevelTargetInfo,\r\n isAudienceCampaign: true,\r\n isTargetAndBidArr: this.initialTargetSetting,\r\n useOptimizedTargeting,\r\n showTargetExclusionActualDeliveryStatus: this.showTargetExclusionActualDeliveryStatus,\r\n criterionsHaveNoDataInOriginalPayload: this.criterionsHaveNoDataInOriginalPayload,\r\n ageTargetSelectionView,\r\n genderTargetSelectionView,\r\n });\r\n }\r\n\r\n // Note: this is the audience feature adopted notion of campaignType mixed with more common, but\r\n // lower-cased notion of campaign type from Campaign UI\r\n get campaignType() {\r\n return getCampaignType(this.viewContext.currentCampaign) ||\r\n (_.isString(this.options.campaignType) && this.options.campaignType.toLowerCase());\r\n }\r\n\r\n get campaignSubType() {\r\n return this.viewContext.currentCampaign.CampaignSubType ||\r\n this.viewContext.currentCampaign.campaignSubType ||\r\n this.options.campaignSubType;\r\n }\r\n\r\n get isAudienceCampaign() {\r\n return this.campaignType === 'audience';\r\n }\r\n\r\n get isSearchDSAShoppingAdgroupLevel() {\r\n return _.contains(['search', 'dynamicSearch', 'shopping'], this.campaignType)\r\n && permissions && permissions.dynamic && permissions.dynamic.NegativeAgeTargetForAdGroups\r\n && this.viewContext.level === 'adgroup';\r\n }\r\n\r\n populateInitialTargetOrBidSettings() {\r\n this.initialTargetSetting = [];\r\n\r\n // Initialize target settings with all TargetAndBid targets\r\n const adGroupTargetSettings = _.result(this.viewContext.currentAdGroup, 'TargetSetting', null);\r\n if (adGroupTargetSettings) {\r\n _.each(adGroupTargetSettings.Details, (targetSetting) => {\r\n if (!targetSetting.TargetAll) {\r\n this.initialTargetSetting.push(targetSetting.CriterionType);\r\n }\r\n });\r\n }\r\n }\r\n\r\n getAdUnitIds() {\r\n if (this.Enable1PPlacementTargeting) {\r\n return this.placementSetting.getSnapshot();\r\n }\r\n return null;\r\n }\r\n /**\r\n * Handler for initialization after the criterion fetched\r\n *\r\n * @returns {Object} - this object.\r\n */\r\n initializeTargetSettings() {\r\n const parentLevelSelectedTypeKeys =\r\n this.parentLevelTargetInfo ? this.parentLevelTargetInfo.getAllNoneEmptyTypeKeys() : [];\r\n const currentLevelSelectedTypeKeys = this.currentLevelTargetInfo.getAllNoneEmptyTypeKeys();\r\n const selectedTypeKeys = _.union(parentLevelSelectedTypeKeys, currentLevelSelectedTypeKeys);\r\n if (this.Enable1PPlacementTargeting && !_.isEmpty(this.placementSelections)) {\r\n selectedTypeKeys.push('Placement');\r\n }\r\n const blackListCriterions = getBlackListCriterions({\r\n campaignType: this.campaignType,\r\n campaignSubType: this.campaignSubType,\r\n permissions,\r\n selectedTypeKeys: this.initialSelectedTypeKeys\r\n .filter((key) => {\r\n if (this.options.isMSStoreAdsGAWorkflow) {\r\n return key !== 'Device';\r\n }\r\n return true;\r\n }).map(key => key.toLocaleLowerCase()),\r\n isMSStoreAdsGAWorkflow: this.options.isMSStoreAdsGAWorkflow,\r\n });\r\n\r\n let lockedKeys = ['location', 'device'];\r\n\r\n if (this.activityLogger) {\r\n if (_.isArray(blackListCriterions) && !_.isEmpty(blackListCriterions)) {\r\n const conflictingKeys = _.intersection(lockedKeys, blackListCriterions);\r\n if (!_.isEmpty(conflictingKeys)) {\r\n this.activityLogger.signal(`conflicting audience target categories. lockedKeys: ${lockedKeys}; blackListCriterions: ${blackListCriterions}`, 'audience advanced target settings');\r\n }\r\n }\r\n }\r\n\r\n lockedKeys = _.difference(lockedKeys, blackListCriterions);\r\n\r\n this.audienceTargetSelector = new AudienceTargetSelector({\r\n selectedTypeKeys,\r\n blackListKeys: blackListCriterions,\r\n lockedKeys,\r\n level: this.viewContext.level,\r\n activityLogger: this.activityLogger,\r\n permissions,\r\n });\r\n this.listenTo(this.audienceTargetSelector, 'selectionChanged', this.onSelectionChanged);\r\n\r\n const checkBoxBasedOptions = {\r\n currentLevelTargetInfo: this.currentLevelTargetInfo,\r\n parentLevelTargetInfo: this.parentLevelTargetInfo,\r\n showTargetSelection: true,\r\n showBidAdjustment: true,\r\n showTargetOrBid: false,\r\n isLiveUpdateEnabled: false,\r\n // level toggle is only enabled for non-audience campaign\r\n enableLevelToggle: !this.isAudienceCampaign,\r\n viewContext: this.viewContext,\r\n isAudienceCampaign: this.isAudienceCampaign,\r\n isSearchDSAShoppingAdgroupLevel: this.isSearchDSAShoppingAdgroupLevel,\r\n supportCashbackSettings: this.supportCashbackSettings,\r\n };\r\n\r\n const searchBasedOptions = {\r\n currentLevelTargetInfo: this.currentLevelTargetInfo,\r\n parentLevelTargetInfo: this.parentLevelTargetInfo,\r\n showTargetSelection: true,\r\n showBidAdjustment: true,\r\n // For search, DSA and shopping campaign, the target settings are bid only\r\n // For audience campaign, user can choose between bid only / target and bid\r\n showTargetOrBid: this.isAudienceCampaign,\r\n // level toggle is only enabled for non-audience campaign\r\n enableLevelToggle: !this.isAudienceCampaign,\r\n viewContext: this.viewContext,\r\n showBidOnlyNote: !this.isAudienceCampaign,\r\n showExclusion: this.isAudienceCampaign,\r\n defaultBidAdjustment: this.isAudienceCampaign ? 0 : 15,\r\n supportCashbackSettings: this.supportCashbackSettings,\r\n isFilterCriterionLevelAdGroup: permissions.isFilterCriterionLevelAdGroup,\r\n };\r\n\r\n this.ageTargetSetting = new AgeCriterionSetting(_.extend({\r\n isTargetAndBid: _.contains(this.initialTargetSetting, 'Age'),\r\n activityLogger: this.activityLogger,\r\n }, checkBoxBasedOptions));\r\n\r\n this.genderTargetSetting = new GenderCriterionSetting(_.extend({\r\n isTargetAndBid: _.contains(this.initialTargetSetting, 'Gender'),\r\n activityLogger: this.activityLogger,\r\n }, checkBoxBasedOptions));\r\n\r\n if (!_.contains(blackListCriterions, 'device')) {\r\n this.deviceTargetSetting = new DeviceCriterionSetting(_.extend({\r\n isTargetAndBid: _.contains(this.initialTargetSetting, 'Device'),\r\n activityLogger: this.activityLogger,\r\n }, _.defaults({\r\n // For device, level toggle is always enabled regardless of the type.\r\n enableLevelToggle: true,\r\n scenario: this.options.scenario,\r\n }, checkBoxBasedOptions)));\r\n }\r\n\r\n this.companyNameTargetSetting = new CompanyNameCriterionSetting(_.extend({\r\n isTargetAndBid: _.contains(this.initialTargetSetting, 'CompanyName'),\r\n activityLogger: this.activityLogger,\r\n }, searchBasedOptions));\r\n\r\n this.industryTargetSetting = new IndustryCriterionSetting(_.extend({\r\n isTargetAndBid: _.contains(this.initialTargetSetting, 'Industry'),\r\n activityLogger: this.activityLogger,\r\n }, searchBasedOptions));\r\n if (this.Enable1PPlacementTargeting) {\r\n this.placementSetting = new PlacementSetting(_.defaults({\r\n showBidAdjustment: false,\r\n showExclusion: false,\r\n placementSelections: this.placementSelections,\r\n }, searchBasedOptions));\r\n }\r\n\r\n this.jobFunctionTargetSetting = new JobFunctionCriterionSetting(_.extend({\r\n isTargetAndBid: _.contains(this.initialTargetSetting, 'JobFunction'),\r\n activityLogger: this.activityLogger,\r\n }, searchBasedOptions));\r\n\r\n // Location Target Setting is solely done on the existing control.\r\n this.locationTargetSetting = new LocationCriterionSetting({\r\n currentLevelTargetInfo: this.currentLevelTargetInfo,\r\n viewContext: this.viewContext,\r\n scenario: this.options.scenario,\r\n showTargetSelection: true,\r\n showBidAdjustment: false,\r\n showTargetOrBid: false,\r\n hideTitleLabel: !((this.options.scenario === 'campaign-creation') && (_.contains(['search', 'dynamicSearch'], this.campaignType))),\r\n deps: this.deps,\r\n supportCashbackSettings: this.supportCashbackSettings,\r\n activityLogger: this.activityLogger,\r\n });\r\n\r\n if (!_.contains(blackListCriterions, 'audience')) {\r\n this.audienceTargetSetting = new AudienceCriterionSetting({\r\n currentLevelTargetInfo: this.currentLevelTargetInfo,\r\n isTargetAndBid: _.contains(this.initialTargetSetting, 'Audience'),\r\n showTargetSelection: true,\r\n showBidAdjustment: true,\r\n showTargetOrBid: true,\r\n supportCashbackSettings: this.supportCashbackSettings,\r\n viewContext: this.viewContext,\r\n activityLogger: this.activityLogger,\r\n });\r\n }\r\n\r\n // populate the current targets for search, DSA and shopping campaign\r\n if (!this.isAudienceCampaign) {\r\n populateCheckboxBasedCriterions({\r\n targetInfo: this.currentLevelTargetInfo,\r\n isSearchDSAShoppingAdgroupLevel: this.isSearchDSAShoppingAdgroupLevel,\r\n });\r\n }\r\n\r\n populateCheckboxBasedCriterions({\r\n targetInfo: this.parentLevelTargetInfo,\r\n isAudienceCampaign: this.isAudienceCampaign,\r\n });\r\n\r\n return true;\r\n }\r\n\r\n getTargetSettings() {\r\n // Location, Device not supported, Age and Gender only follow the intial target setting\r\n const targetSettings = _.compact([\r\n ..._.intersection(this.initialTargetSetting, ['Age', 'Gender']),\r\n this.audienceTargetSetting && this.audienceTargetSetting.getIsTargetAndBid() ? 'Audience' : null,\r\n this.companyNameTargetSetting.getIsTargetAndBid() ? 'CompanyName' : null,\r\n this.industryTargetSetting.getIsTargetAndBid() ? 'Industry' : null,\r\n this.jobFunctionTargetSetting.getIsTargetAndBid() ? 'JobFunction' : null,\r\n ]);\r\n\r\n return targetSettings;\r\n }\r\n\r\n onSelectionChanged(containerId) {\r\n this.$(this.getContainerNameFromId(containerId)).show();\r\n }\r\n\r\n getContainerNameFromId(id) {\r\n return `.${id}-target-setting-container`;\r\n }\r\n\r\n /**\r\n * Define events and event handlers for them.\r\n *\r\n * @readonly\r\n * @returns {Object} returns object defining events\r\n */\r\n get events() {\r\n return {\r\n 'click .toggle-edit-target-category': 'onToggleEditTargetCategory',\r\n };\r\n }\r\n\r\n getSubViews() {\r\n return _.compact([\r\n this.ageTargetSetting,\r\n this.genderTargetSetting,\r\n this.deviceTargetSetting,\r\n this.audienceTargetSetting,\r\n this.companyNameTargetSetting,\r\n this.industryTargetSetting,\r\n this.jobFunctionTargetSetting,\r\n this.locationTargetSetting,\r\n this.Enable1PPlacementTargeting && this.placementSetting,\r\n ]);\r\n }\r\n\r\n toggleCashbackPercentColumns(isCashbackPercentColumnVisible, inheritInfo) {\r\n this.supportCashbackSettings = isCashbackPercentColumnVisible;\r\n\r\n const subViews = this.getSubViews();\r\n subViews.forEach((subView) => {\r\n if (subView.resetSupportCashbackSettings) {\r\n subView.resetSupportCashbackSettings(isCashbackPercentColumnVisible, inheritInfo);\r\n }\r\n });\r\n }\r\n\r\n validate() {\r\n return this.ageTargetSetting.validate() &&\r\n this.genderTargetSetting.validate() &&\r\n (this.deviceTargetSetting ? this.deviceTargetSetting.validate() : true) &&\r\n (this.audienceTargetSetting ? this.audienceTargetSetting.validate() : true) &&\r\n this.companyNameTargetSetting.validate() &&\r\n this.industryTargetSetting.validate() &&\r\n this.jobFunctionTargetSetting.validate();\r\n }\r\n\r\n getCampaignLocationCriterions() {\r\n return this.locationTargetSetting ?\r\n this.locationTargetSetting.getCampaignLocationCriterions() : [];\r\n }\r\n\r\n getAllLocations() {\r\n const {\r\n intent = [],\r\n locations = [],\r\n } = this.locationTargetSetting ? this.locationTargetSetting.getAllLocations() : {};\r\n\r\n return locations.concat(intent);\r\n }\r\n\r\n // Audience Target Setting is fetched after the view is rendered.\r\n // Need to update the original criterions after the view is rendered so that the final calcultion will be correct.\r\n updateUnmodifiedCriterions() {\r\n this.unmodifiedCriterions = cloneDeep(this.currentLevelTargetInfo.getAllComputedByTypes(this.supportedTypes));\r\n }\r\n\r\n /**\r\n * Get the object data to save the AdGroup.\r\n *\r\n * @returns {Object} - data representation of the object.\r\n */\r\n getData() {\r\n const params = {};\r\n\r\n // use compact to remove null value for placement, it will be handle by placementSetting\r\n const modifiedCriterions =\r\n _.compact(cloneDeep(this.currentLevelTargetInfo.getAllComputedByTypes(this.supportedTypes)));\r\n let targets =\r\n criterionHelper.compareAndGetCriterionsDelta(_.compact(this.unmodifiedCriterions), modifiedCriterions);\r\n\r\n if (!this.isAudienceCampaign && (this.viewContext.level === 'campaign')) {\r\n targets = compactPopulatedCriterions(targets);\r\n } else if (this.isAudienceCampaign && this.viewContext.level !== 'campaign') {\r\n targets = removeAllVirtuals(targets);\r\n }\r\n\r\n const {\r\n intent = [],\r\n locations = [],\r\n deletedLocations = [],\r\n } = this.locationTargetSetting ? this.locationTargetSetting.getData() : {};\r\n const locationCriterions = this.isAudienceCampaign ? locations.concat(deletedLocations) :\r\n intent.concat(locations).concat(deletedLocations);\r\n\r\n targets = targets.concat(locationCriterions);\r\n\r\n if (this.deviceTargetSetting &&\r\n this.deviceTargetSetting.bidAdjustmentGrid.deviceTargetsUpdateView &&\r\n permissions.IsOriginalDeviceTargetingEnabled\r\n ) {\r\n const { deviceTargetsUpdateView } = this.deviceTargetSetting.bidAdjustmentGrid;\r\n const originalDeviceCriterions =\r\n deviceTargetsUpdateView.targetsView.viewmodel.getValues();\r\n\r\n if (originalDeviceCriterions && originalDeviceCriterions.length > 0) {\r\n _.each(originalDeviceCriterions, (target) => {\r\n target.Status = _.isEmpty(target.Status) ? 'Active' : target.Status;//eslint-disable-line\r\n });\r\n\r\n targets = _.filter(targets, target => target.CriterionType !== 'Device');\r\n targets = targets.concat(originalDeviceCriterions);\r\n }\r\n }\r\n\r\n _.each(targets, (target) => {\r\n if (target.Id < 0) {\r\n delete target.Id; //eslint-disable-line\r\n }\r\n\r\n // Since it is settings, ensure all criterions have Id for the scope.\r\n if (this.viewContext.level === 'campaign') {\r\n target.Campaign = { //eslint-disable-line\r\n Id: this.viewContext.currentCampaign.Id,\r\n };\r\n } else {\r\n target.AdGroup = { //eslint-disable-line\r\n Id: this.viewContext.currentAdGroup.Id,\r\n };\r\n }\r\n });\r\n\r\n this.removeCashbackPercent(targets);\r\n\r\n params[`${this.currentLevelTargetInfo.resourceName}s`] = targets;\r\n\r\n return params;\r\n }\r\n\r\n removeCashbackPercent(targets) {\r\n if (!this.supportCashbackSettings) {\r\n targets.forEach((criterion) => {\r\n delete criterion.Criterion.CashbackPercent; // eslint-disable-line\r\n });\r\n }\r\n }\r\n\r\n fillCriterionsWithId(criterions) {\r\n if (_.isArray(criterions) && criterions.length) {\r\n this.currentLevelTargetInfo.fillCriterionsWithId(criterions);\r\n }\r\n }\r\n\r\n /**\r\n * Handler for the edit category change\r\n *\r\n * @returns {undefined}\r\n */\r\n onToggleEditTargetCategory() {\r\n this.$('.audience-target-selector-container').toggle();\r\n this.viewmodel.isEditTargetCategoriesExpanded(!this.viewmodel.isEditTargetCategoriesExpanded());\r\n }\r\n\r\n /**\r\n * Renders this view\r\n *\r\n * @returns {Object} - the view itself\r\n */\r\n render() {\r\n this.$el.html(template({\r\n i18n: this.i18n,\r\n }));\r\n\r\n ko.applyBindings(this.viewmodel, this.el);\r\n\r\n const { initialSelectedTypeKeys } = this;\r\n\r\n this.$('.audience-target-selector-container').empty().append(this.audienceTargetSelector.render().$el);\r\n this.$('.location-target-setting-container').empty().append(this.locationTargetSetting.render().$el);\r\n\r\n // hide other criterions\r\n this.$('.age-target-setting-container').empty().append(this.ageTargetSetting.render().$el);\r\n\r\n if (!_.contains(initialSelectedTypeKeys, 'Age')) {\r\n this.$('.age-target-setting-container').hide();\r\n }\r\n\r\n this.$('.gender-target-setting-container').empty().append(this.genderTargetSetting.render().$el);\r\n\r\n if (!_.contains(initialSelectedTypeKeys, 'Gender')) {\r\n this.$('.gender-target-setting-container').hide();\r\n }\r\n\r\n // Device is always shown, either all or none is created.\r\n if (this.deviceTargetSetting) {\r\n this.$('.device-target-setting-container').empty().append(this.deviceTargetSetting.render().$el);\r\n }\r\n\r\n this.$('.companyName-target-setting-container').empty().append(this.companyNameTargetSetting.render().$el);\r\n\r\n if (!_.contains(initialSelectedTypeKeys, 'CompanyName')) {\r\n this.$('.companyName-target-setting-container').hide();\r\n }\r\n\r\n this.$('.industry-target-setting-container').empty().append(this.industryTargetSetting.render().$el);\r\n\r\n if (!_.contains(initialSelectedTypeKeys, 'Industry')) {\r\n this.$('.industry-target-setting-container').hide();\r\n }\r\n\r\n this.$('.jobFunction-target-setting-container').empty().append(this.jobFunctionTargetSetting.render().$el);\r\n\r\n if (!_.contains(initialSelectedTypeKeys, 'JobFunction')) {\r\n this.$('.jobFunction-target-setting-container').hide();\r\n }\r\n\r\n if (this.Enable1PPlacementTargeting) {\r\n this.$('.placement-target-setting-container').empty().append(this.placementSetting.render().$el);\r\n\r\n if (!_.contains(initialSelectedTypeKeys, 'Placement')) {\r\n this.$('.placement-target-setting-container').hide();\r\n }\r\n }\r\n return this;\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport _ from 'underscore';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport template from './template.pug';\r\n\r\nexport class BmcRedirectView extends Backbone.View {\r\n /**\r\n * Initializes the {BmcRedirectView} class.\r\n *\r\n * @param {Object} options - options for initializing the class.\r\n * @returns {undefined}\r\n */\r\n initialize(options) {\r\n this.options = options;\r\n this.i18n = DependencyResolver.get('component/i18n/loader!campaignui/feature/audience-campaign');\r\n const router = _.chain(options.deps).result('router', {}).value();\r\n this.navigateToRoute = router.navigateToRoute || _.noop;\r\n this.activityLogger = options.logScenario.bmcRedirect.create();\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click .btn-cancel': 'onExit',\r\n 'click .bmc_url_link': 'redirect2BMC',\r\n 'click .feed_url_link': 'redirect2UploadFeed',\r\n };\r\n }\r\n\r\n /**\r\n * Renders the View.\r\n *\r\n * @returns {View} - returns the view itself.\r\n */\r\n render() {\r\n this.$el.html(template(this));\r\n this.activityLogger.signal('have no store');\r\n return this;\r\n }\r\n\r\n /**\r\n * Handles the event when click BMC url\r\n *\r\n * @returns {undefined}\r\n */\r\n redirect2BMC() {\r\n this.activityLogger.signal('store creation link click');\r\n this.navigateToRoute('bing_merchant_center');\r\n }\r\n\r\n /**\r\n * Handles the event when click upload Feed url\r\n *\r\n * @returns {undefined}\r\n */\r\n redirect2UploadFeed() {\r\n this.activityLogger.signal('feed upload link click');\r\n this.navigateToRoute('dynamicdata_management');\r\n }\r\n\r\n /**\r\n * Handles the event when the exit is requested\r\n * and navigates to Campaign page\r\n *\r\n * @returns {undefined}\r\n */\r\n onExit() {\r\n if (_.isFunction(this.options.callbackBeforeRemove)) {\r\n this.options.callbackBeforeRemove();\r\n }\r\n this.activityLogger.signal('cancel clicked');\r\n this.navigateToRoute('campaign');\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\n\r\nexport const displaySuccessDialog = () => {\r\n const stateManager = DependencyResolver.get('component/statemanager/campaignStateManager');\r\n const config = DependencyResolver.get('component/config/index');\r\n const preferencesService = DependencyResolver.get('component/preference/service/index');\r\n\r\n const usePreferencesService = _.result(config.get('Permissions'), 'IsUsePreferencesServiceEnabled');\r\n\r\n function showSuccessDialog() {\r\n const context = DependencyResolver.get('audienceCampaignPageContext');\r\n const constants = DependencyResolver.get('Constants');\r\n\r\n const { CurrentAccount } = context;\r\n if (_.isObject(CurrentAccount)) {\r\n const aid = CurrentAccount.Id;\r\n const cid = CurrentAccount.AdvertiserCustomerID;\r\n const AccountStatus = constants.enums.accountStatus;\r\n const isPendingPayment = CurrentAccount.Status === AccountStatus.pendingPaymentInstrument;\r\n const isAccountOnHold = CurrentAccount.Status !== AccountStatus.active;\r\n\r\n let accountPausedReason = constants.enums.accountInactiveReason.notSet;\r\n\r\n if (_.isArray(CurrentAccount.InactiveReasons) &&\r\n CurrentAccount.InactiveReasons.length > 0) {\r\n const accountPausedReasons = [\r\n constants.enums.accountInactiveReason.pausedDueToSystemIssue,\r\n constants.enums.accountInactiveReason.pausedZeroBalance,\r\n constants.enums.accountInactiveReason.pausedNoValidiO,\r\n ];\r\n\r\n _.some(CurrentAccount.InactiveReasons, (reason) => {\r\n if (accountPausedReasons.indexOf(reason) !== -1) {\r\n accountPausedReason = reason;\r\n return true;\r\n }\r\n\r\n return false;\r\n });\r\n }\r\n\r\n const SuccessDialog = DependencyResolver.get('campaignui/feature/campaign-create-advanced/view/success-dialog');\r\n\r\n const successDialog = new SuccessDialog({\r\n aid,\r\n cid,\r\n isPendingPayment,\r\n isAccountOnHold,\r\n accountPausedReason,\r\n });\r\n successDialog.show();\r\n }\r\n }\r\n\r\n if (usePreferencesService === true) {\r\n preferencesService.initialize().then(() => {\r\n const prefix = config.get('StateManagerKeyPrefix');\r\n const gridPreference = preferencesService.findByName(`${prefix}successDialog`);\r\n\r\n if (!gridPreference || !gridPreference.Data.doNotShowAgain) {\r\n showSuccessDialog();\r\n }\r\n });\r\n } else {\r\n stateManager.getItem('successDialog', (err, data) => {\r\n if (err || !data || !data.permanent.doNotShowAgain) {\r\n showSuccessDialog();\r\n }\r\n });\r\n }\r\n};\r\n\r\nexport const getFeedData = ({ $top = 20, $skip = 0, permissions = {} } = {}) => {\r\n const jsdata = DependencyResolver.get('component/js-data-campaign/index');\r\n\r\n const query = {\r\n $filter: 'Status eq Enum.FeedStatus\\'Active\\' and FeedCategories/any(c:c eq Enum.FeedCategory\\'DynamicData\\')',\r\n // set a large number so that we don't miss any feed\r\n $top,\r\n $skip,\r\n };\r\n\r\n const supportedFeedTypeForDynamicDataFeedCamapign = {\r\n DynamicDataAutosListingFeed: 'DynamicDataAutosListingFeed',\r\n DynamicDataEventsFeed: 'DynamicDataEventsFeed',\r\n DynamicDataHotelsAndVacationRentalsFeed: 'DynamicDataHotelsAndVacationRentalsFeed',\r\n DynamicDataToursAndActivitiesFeed: 'DynamicDataToursAndActivitiesFeed',\r\n };\r\n\r\n if (_.result(permissions, 'IsCuriseFeedForAudienceCampaignEnabled')) {\r\n supportedFeedTypeForDynamicDataFeedCamapign.DynamicDataCruisesFeed = 'DynamicDataCruisesFeed';\r\n }\r\n\r\n return jsdata.Feed.findAll({\r\n query,\r\n }).then(data => _.reject(data, item =>\r\n !supportedFeedTypeForDynamicDataFeedCamapign[item.FeedType]));\r\n};\r\n","import _ from 'underscore';\r\nimport Backbone from 'backbone';\r\nimport Promise from 'bluebird';\r\nimport { StepsWizard } from '@bingads-webui/steps-wizard';\r\nimport { AudienceTargetInfo } from '@bingads-webui-campaign/audience-target-info';\r\nimport { ResponsiveAdEditor } from '@bingads-webui-campaign/responsive-ad-editor';\r\nimport { AlertHelper } from '@bingads-webui-campaign/alert-helper';\r\nimport { CrudAudienceBudgetBid } from '@bingads-webui-campaign/crud-audience-budget-bid';\r\nimport { CrudAudienceCampaign, CrudAudienceShoppingCampaign } from '@bingads-webui-campaign/crud-audience-campaign';\r\nimport { CrudAudienceAdgroup } from '@bingads-webui-campaign/crud-audience-adgroup';\r\nimport { getLocalStorage } from '@bingads-webui/storage';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport { withDFMCache } from '@bingads-webui/dfm-cache';\r\nimport { getProductScopeData as GetProductScopeData, mergeData } from '@bingads-webui-campaign-react/product-services';\r\nimport { serverContextStore } from '@bingads-webui-campaign/global-context-store';\r\nimport {\r\n schema,\r\n getProductData as GetProductData,\r\n ExperimentName,\r\n postABTestingEventLog,\r\n postABTestingFlightLog,\r\n getAudienceCreationPath,\r\n} from '@bingads-webui-campaign/audience-campaign-shared';\r\nimport { BmcRedirectView } from './bmc-redirect/view';\r\nimport { displaySuccessDialog, getFeedData as GetFeedData } from './utils';\r\nimport template from './template.pug';\r\n\r\n/**\r\n * AudienceCampaignCreationWizard class for the AudienceCampaign creation\r\n *\r\n * @class AudienceCampaignCreationWizard\r\n * @extends {Backbone.View}\r\n */\r\nexport class AudienceCampaignCreationWizard extends Backbone.View {\r\n /**\r\n * Initializes the {AudienceCampaignCreationWizard} class.\r\n *\r\n * @param {Object} options - options for initializing the class.\r\n * @param {Object} options.viewContext = viewContext for the View.\r\n * @returns {undefined}\r\n */\r\n initialize(options) {\r\n this.config = DependencyResolver.get('component/config/index');\r\n this.permissions = this.config.get('Permissions');\r\n this.isSwapStepsEnabled = this.permissions.IsAudienceCampaignSwapAdsBudgetAndBidsEnabled &&\r\n this.audienceCampaignType !== 'shopping';\r\n this.isCopyCampaignSettingsAudienceCampaignEnabled =\r\n this.permissions.IsCopyCampaignSettingsAudienceCampaignEnabled;\r\n this.isAudienceCampaignCollapseTargetSelectionEnabled =\r\n this.permissions.IsAudienceCampaignCollapseTargetSelectionEnabled;\r\n this.campaignCreationFlowImporvementEnabled = this.isCopyCampaignSettingsAudienceCampaignEnabled\r\n && this.isAudienceCampaignCollapseTargetSelectionEnabled\r\n && this.isSwapStepsEnabled;\r\n this.isOdataGetProductScopeEnabled = _.get(this.permissions, ['dynamic', 'OdataGetProductScope'], false);\r\n\r\n // fetch cache in DFM\r\n this.getProductWithDFM = withDFMCache(this.getProductData, 'getAudienceProductScopeDFM', this);\r\n this.getFeedWithDFM = withDFMCache(this.getFeedData, 'getFeedScopeDFM', this);\r\n\r\n this.viewContext = options.viewContext;\r\n this.i18n = DependencyResolver.get('component/i18n/loader!campaignui/feature/audience-campaign');\r\n this.audienceCampaignType = options.audienceCampaignType || '';\r\n this.localStorage = getLocalStorage();\r\n this.options = options;\r\n\r\n this.startToFinishMarker = options.perfMarker.createChild('audienceCampaignCreationTimeSpend');\r\n\r\n this.options.currentLevelTargetInfo = new AudienceTargetInfo({\r\n resourceName: 'AdGroupCriterion',\r\n isShoppingCampaign: this.audienceCampaignType === 'shopping',\r\n deps: options.deps,\r\n isForVNext: options.isForVNext,\r\n isAudienceCreationWorkflow: true,\r\n });\r\n this.options.scenario = 'campaign-creation';\r\n this.options.isAdImpressions = this.localStorage.get('CampaignObjective') === 'AdImpressions';\r\n this.perfMarker = options.perfMarker;\r\n const router = _.chain(options.deps).result('router', {}).value();\r\n this.navigateToRoute = router.navigateToRoute || _.noop;\r\n this.eventDelegator = _.result(options.deps, 'eventDelegator');\r\n this.setupInstrumentation();\r\n\r\n if (this.wizardActivity) {\r\n this.wizardActivity.signal('setup campaign');\r\n this.wizardActivity.trace(`wizard initialized with swap steps ${this.isSwapStepsEnabled ? 'enabled' : 'disabled'}`);\r\n }\r\n this.wizardRenderTime = 0;\r\n }\r\n\r\n setupInstrumentation() {\r\n const instr = DependencyResolver.get('campaignui/feature/instrumentation/index');\r\n\r\n instr.addScenario(schema);\r\n\r\n if (this.audienceCampaignType === 'shopping') {\r\n this.aimCampaignCreationScenario = instr.aimShoppingCampaignCreationWizard.create();\r\n this.wizardActivity = this.aimCampaignCreationScenario.wizardActivity.create();\r\n } else {\r\n this.aimCampaignCreationScenario = instr.aimCampaignCreationWizard.create();\r\n this.wizardActivity = this.aimCampaignCreationScenario.wizardActivity.create();\r\n }\r\n\r\n this.options.logScenario = this.aimCampaignCreationScenario;\r\n }\r\n\r\n logShoppingCampaignCreationEvent(log) {\r\n if (this.audienceCampaignType === 'shopping') {\r\n const logContent = {\r\n ...log,\r\n flow: 'audience-shopping/old',\r\n guid: this.wizardActivity.id,\r\n };\r\n if (['Switch Done', 'Exit by CancelButton', 'SaveAndExit'].includes(log.status)) {\r\n const currentTime = new Date().getTime();\r\n logContent.stepDuration = currentTime - this.wizardRenderTime;\r\n logContent.preStep = this.wizard.stepIndex === 0 ? '' : this.wizard.previousStepName;\r\n this.wizardRenderTime = currentTime;\r\n }\r\n this.wizardActivity.trace(JSON.stringify(logContent));\r\n }\r\n }\r\n\r\n get ComponentsLoadedPromise() {\r\n return this.loadCrudAudienceAdPromise;\r\n }\r\n\r\n showError(msg) {\r\n const alertHelper = new AlertHelper({ i18n: this.i18n });\r\n alertHelper.showError(msg);\r\n }\r\n\r\n /**\r\n * Renders the View.\r\n *\r\n * @returns {View} - returns the view itself.\r\n */\r\n render() {\r\n this.perfMarker.willRender();\r\n const config = DependencyResolver.get('component/config/index');\r\n const isEnabledForVerifiedImpressionTrackingAtCampaignLevel = _.result(config.get('Permissions'), 'IsEnabledForVerifiedImpressionTrackingAtCampaignLevel');\r\n\r\n if (this.audienceCampaignType === 'shopping') {\r\n const shoppingCrudPerfMarker =\r\n this.perfMarker.createChild('ShoppingCampaignCrud');\r\n const isEnabledForDynamicFeedCampaign = _.result(config.get('Permissions'), 'IsEnabledForDynamicFeedCampaign');\r\n\r\n // If Store not available, and:\r\n // a. if isEnabledForDynamicFeedCampaign = true,\r\n // check if no feed data, show BMC redirect view\r\n // b. if isEnabledForDynamicFeedCampaign = false,\r\n // this.feedData will always equal to undefined\r\n /* istanbul ignore next */\r\n if ((_.isEmpty(this.productData) ||\r\n _.isEmpty(this.productData.ProductCollectionAccounts) ||\r\n // GlobalStore and CoOpStore will be filtered out befoe the page is fully rendered\r\n // If there is no other stores, we should consider it as there is no store\r\n _.findIndex(this.productData.ProductCollectionAccounts, item => !item.IsGlobalStore && !item.IsCoOpStore) < 0) &&\r\n (!this.feedData || this.feedData.length <= 0)\r\n ) {\r\n const bmcRedirectOptions = _.extend(\r\n _.pick(this.options, ['deps', 'callbackBeforeRemove', 'logScenario']),\r\n {\r\n isEnabledForDynamicFeedCampaign,\r\n }\r\n );\r\n const bmcRedirectView = new BmcRedirectView(bmcRedirectOptions);\r\n this.$el.append(bmcRedirectView.render().$el);\r\n return this;\r\n }\r\n\r\n const shoppingCampaignOptions = _.extend(\r\n this.options,\r\n {\r\n data: this.productData,\r\n perfMarker: shoppingCrudPerfMarker,\r\n wizardElement: this.$el,\r\n feedData: this.feedData,\r\n isEnabledForVerifiedImpressionTrackingAtCampaignLevel,\r\n }\r\n );\r\n\r\n this.crudAudienceCampaign = new CrudAudienceShoppingCampaign(shoppingCampaignOptions);\r\n } else {\r\n const campaignCrudPerfMarker =\r\n this.perfMarker.createChild('CampaignCrud');\r\n\r\n const campaignOptions = _.extend(\r\n this.options,\r\n {\r\n perfMarker: campaignCrudPerfMarker,\r\n wizardElement: this.$el,\r\n isEnabledForVerifiedImpressionTrackingAtCampaignLevel: false,\r\n }\r\n );\r\n\r\n this.crudAudienceCampaign = new CrudAudienceCampaign(campaignOptions);\r\n }\r\n\r\n const crudAudienceAdgroupOptions = _.extend(\r\n this.options,\r\n {\r\n perfMarker: this.perfMarker.createChild('CrudAdGroup'),\r\n wizardElement: this.$el,\r\n }\r\n );\r\n\r\n this.crudAudienceAdgroup = new CrudAudienceAdgroup(crudAudienceAdgroupOptions);\r\n\r\n this.loadCrudAudienceAdPromise = new Promise((resolve) => {\r\n if (this.audienceCampaignType === 'shopping') {\r\n resolve(null);\r\n } else {\r\n const crudAudienceAdOptions = _.extend(\r\n this.options,\r\n {\r\n audienceCampaignType: 'Audience',\r\n perfMarker: this.perfMarker.createChild('CrudAd'),\r\n wizardElement: this.$el,\r\n }\r\n );\r\n\r\n resolve(new ResponsiveAdEditor(crudAudienceAdOptions));\r\n }\r\n }).then((crudAudienceAdInstance) => {\r\n this.crudAudienceAd = crudAudienceAdInstance;\r\n\r\n const crudBudgetBidOptions = _.extend(\r\n this.options,\r\n {\r\n perfMarker: this.perfMarker.createChild('BudgetBid'),\r\n wizardElement: this.$el,\r\n }\r\n );\r\n\r\n this.crudAudienceBudgetBid = new CrudAudienceBudgetBid(crudBudgetBidOptions);\r\n\r\n this.listenTo(this.crudAudienceCampaign, 'saveAndExit', this.saveAndExit);\r\n this.listenTo(this.crudAudienceCampaign, 'canceled', this.onExit);\r\n this.listenTo(this.crudAudienceAdgroup, 'saveAndExit', this.saveAndExit);\r\n if (this.crudAudienceAd) {\r\n this.listenTo(this.crudAudienceAd, 'saveAndExit', this.saveAndExit);\r\n this.listenTo(this.crudAudienceAd, 'canceled', this.onExit);\r\n }\r\n this.listenTo(this.crudAudienceBudgetBid, 'saveAndExit', this.saveAndExit);\r\n\r\n this.wizard = new StepsWizard({\r\n config: this.getStepConfig(),\r\n currentStep: 'audience-campaign-creation-wizard-step1',\r\n });\r\n\r\n this.$el.html(template(this));\r\n this.$('.audience-campaign-creation-wizard').append(this.wizard.$el);\r\n\r\n if (_.isFunction(this.options.callbackBeforeRender)) {\r\n this.options.callbackBeforeRender(() => {\r\n this.wizard.render();\r\n this.wizardRenderTime = new Date().getTime();\r\n if (window.ApexPlatform) {\r\n window.ApexPlatform.Refresh();\r\n }\r\n });\r\n } else {\r\n this.wizard.render();\r\n this.wizardRenderTime = new Date().getTime();\r\n if (window.ApexPlatform) {\r\n window.ApexPlatform.Refresh();\r\n }\r\n }\r\n\r\n this.wizard.on('switch:finish', ({ stepName }) => {\r\n if (window.ApexPlatform) {\r\n window.ApexPlatform.Refresh();\r\n }\r\n this.logShoppingCampaignCreationEvent({ step: stepName, status: 'Switch Done' });\r\n postABTestingEventLog({\r\n UniqueId: this.wizardActivity.id, // creation session id\r\n EventName: `${ExperimentName.MSANCampaignCreationFlowImporvement}:${getAudienceCreationPath()}:DuringCreation`,\r\n EventValue: stepName,\r\n });\r\n });\r\n\r\n this.wizard.on('step:next', ({ currentStepName }) => {\r\n this.wizardActivity.trace('Wizard click next');\r\n this.logShoppingCampaignCreationEvent({ step: currentStepName, status: 'Next Click' });\r\n postABTestingEventLog({\r\n UniqueId: this.wizardActivity.id, // creation session id\r\n EventName: `${ExperimentName.MSANCampaignCreationFlowImporvement}:${getAudienceCreationPath()}:Next`,\r\n EventValue: currentStepName,\r\n });\r\n });\r\n\r\n this.wizard.on('step:back', ({ currentStepName }) => {\r\n this.wizardActivity.trace('Wizard click back');\r\n this.logShoppingCampaignCreationEvent({ step: currentStepName, status: 'Back Click' });\r\n postABTestingEventLog({\r\n UniqueId: this.wizardActivity.id, // creation session id\r\n EventName: `${ExperimentName.MSANCampaignCreationFlowImporvement}:${getAudienceCreationPath()}:Back`,\r\n EventValue: currentStepName,\r\n });\r\n });\r\n\r\n postABTestingFlightLog([{\r\n UniqueId: this.wizardActivity.id, // creation session id\r\n RandomizationIdType: 'AccountId',\r\n RandomizationId: String(_.result(this.config.get('CurrentAccount'), 'Id')), // Accountid\r\n ExperimentName: ExperimentName.MSANCampaignCreationFlowImporvement,\r\n Flight: this.campaignCreationFlowImporvementEnabled ? 'Control' : 'Treatment',\r\n }]);\r\n\r\n postABTestingEventLog({\r\n UniqueId: this.wizardActivity.id, // creation session id\r\n EventName: `${ExperimentName.MSANCampaignCreationFlowImporvement}:${getAudienceCreationPath()}:Start`,\r\n EventValue: this.wizard.currentStepName,\r\n });\r\n this.logShoppingCampaignCreationEvent({ step: this.wizard.currentStepName, status: 'Start' });\r\n });\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Get Steps config.\r\n *\r\n * @private\r\n * @returns {object} - config.\r\n */\r\n getStepConfig() {\r\n const steps = [];\r\n\r\n steps.push({\r\n name: 'audience-campaign-creation-wizard-step1',\r\n railviewId: this.options.isForVNext ? null : 'MSANCampaignCreate_Step1',\r\n view: this.crudAudienceCampaign,\r\n });\r\n\r\n steps.push({\r\n name: 'audience-campaign-creation-wizard-step2',\r\n railviewId: this.options.isForVNext ? null : 'MSANCampaignCreate_Step2',\r\n view: this.crudAudienceAdgroup,\r\n });\r\n\r\n if (this.isSwapStepsEnabled) {\r\n steps.push({\r\n name: 'audience-campaign-creation-wizard-step4',\r\n railviewId: this.options.isForVNext ? null : 'MSANCampaignCreate_Step4',\r\n view: this.crudAudienceBudgetBid,\r\n });\r\n\r\n // Ad step not supported for shopping campaign\r\n if (this.audienceCampaignType !== 'shopping') {\r\n steps.push({\r\n name: 'audience-campaign-creation-wizard-step3',\r\n railviewId: this.options.isForVNext ? null : 'MSANCampaignCreate_Step3',\r\n view: this.crudAudienceAd,\r\n });\r\n }\r\n } else {\r\n // Ad step not supported for shopping campaign\r\n if (this.audienceCampaignType !== 'shopping') {\r\n steps.push({\r\n name: 'audience-campaign-creation-wizard-step3',\r\n railviewId: this.options.isForVNext ? null : 'MSANCampaignCreate_Step3',\r\n view: this.crudAudienceAd,\r\n });\r\n }\r\n\r\n steps.push({\r\n name: 'audience-campaign-creation-wizard-step4',\r\n railviewId: this.options.isForVNext ? null : 'MSANCampaignCreate_Step4',\r\n view: this.crudAudienceBudgetBid,\r\n });\r\n }\r\n\r\n const extendConfig = {};\r\n if (_.isFunction(this.options.layout)) {\r\n extendConfig.layout = this.options.layout;\r\n } else if (_.isUndefined(this.options.isHorizontal)) {\r\n extendConfig.isHorizontal = true;\r\n } else {\r\n extendConfig.isHorizontal = !!this.options.isHorizontal;\r\n }\r\n\r\n if (_.isFunction(this.options.headerTemplate)) {\r\n extendConfig.headerTemplate = this.options.headerTemplate;\r\n }\r\n\r\n return _.extend({\r\n steps,\r\n }, extendConfig);\r\n }\r\n\r\n /**\r\n * Get Product Scope data.\r\n *\r\n * @private\r\n * @returns {View} - Product Scope.\r\n */\r\n /* istanbul ignore next */\r\n getProductScopeData() {\r\n const options = {\r\n countryCode: 'US',\r\n getProductConditionOptions: true,\r\n getSalesCountryCollection: true,\r\n getDynamicDataFeedOptions: true,\r\n getCategoryFullData: true,\r\n getProductTypeFullData: true,\r\n dataName: 'AudienceMetaData',\r\n bypassCache: false,\r\n cacheResponse: true,\r\n };\r\n const serverContext = _.get(serverContextStore, ['state', 'serverContext'], {});\r\n const p = GetProductScopeData(null, serverContext, options)\r\n .then((pData) => {\r\n const data = mergeData(pData);\r\n this.productDataProcess(data);\r\n }).catch(() => {\r\n this.showError(this.i18n.getString('GenericErrorMessage_Short'));\r\n });\r\n\r\n return p;\r\n }\r\n\r\n getProductData() {\r\n /* istanbul ignore if */\r\n if (this.isOdataGetProductScopeEnabled) {\r\n return this.getProductScopeData();\r\n }\r\n\r\n return GetProductData()\r\n .then(data => this.productDataProcess(data)).catch(() => {\r\n this.showError(this.i18n.getString('GenericErrorMessage_Short'));\r\n });\r\n }\r\n\r\n getFeedData({ $top = 20, $skip = 0 } = {}) {\r\n return GetFeedData({ $top, $skip }).then((data) => {\r\n this.feedData = data;\r\n }).catch(() => {\r\n this.showError(this.i18n.getString('GenericErrorMessage_Short'));\r\n });\r\n }\r\n\r\n getProductDataInit() {\r\n return this.getProductWithDFM().then((data) => {\r\n if (data) {\r\n /* istanbul ignore if */\r\n if (this.isOdataGetProductScopeEnabled) {\r\n const mergedData = mergeData(data);\r\n this.productDataProcess(mergedData);\r\n } else {\r\n this.productDataProcess(data);\r\n }\r\n }\r\n }).catch(() => {\r\n this.showError(this.i18n.getString('GenericErrorMessage_Short'));\r\n });\r\n }\r\n\r\n getFeedDataInit() {\r\n return this.getFeedWithDFM().then((data) => {\r\n if (data) {\r\n this.feedData = data;\r\n }\r\n }).catch(() => {\r\n this.showError(this.i18n.getString('GenericErrorMessage_Short'));\r\n });\r\n }\r\n\r\n productDataProcess(data) {\r\n this.productData = data;\r\n this.productData.ProductCollectionAccounts =\r\n _.filter(data.ProductCollectionAccounts, store => !store.IsCoOpStore);\r\n }\r\n\r\n /**\r\n * Restores Wunderbar. Called when view is removed.\r\n *\r\n * @returns {undefined}\r\n */\r\n remove() {\r\n if (this.wizard) {\r\n this.wizard.remove();\r\n }\r\n if (_.isFunction(this.options.callbackBeforeRemove)) {\r\n this.options.callbackBeforeRemove();\r\n }\r\n\r\n const panel = document.querySelector('.audience-creation-panel.isOpen');\r\n\r\n if (panel && panel.remove) {\r\n panel.remove();\r\n }\r\n super.remove();\r\n }\r\n\r\n /**\r\n * Handles the event when the exit is requested from the child steps\r\n * It navigates to the campaign and restore the wunderbar.\r\n *\r\n * @returns {undefined}\r\n */\r\n onExit() {\r\n postABTestingEventLog({\r\n UniqueId: this.wizardActivity.id, // creation session id\r\n EventName: `${ExperimentName.MSANCampaignCreationFlowImporvement}:${getAudienceCreationPath()}:Exit`,\r\n EventValue: this.wizard.currentStepName,\r\n });\r\n\r\n this.navigateToRoute('campaign');\r\n this.logShoppingCampaignCreationEvent({ step: this.wizard.currentStepName, status: 'Exit by CancelButton' });\r\n }\r\n\r\n saveAndExit() {\r\n postABTestingEventLog({\r\n UniqueId: this.wizardActivity.id, // creation session id\r\n EventName: `${ExperimentName.MSANCampaignCreationFlowImporvement}:${getAudienceCreationPath()}:SaveAndExit`,\r\n EventValue: this.wizard.currentStepName,\r\n });\r\n this.logShoppingCampaignCreationEvent({ step: this.wizard.currentStepName, status: 'SaveAndExit' });\r\n /* istanbul ignore next */\r\n if (this.wizard.currentStepName === 'audience-campaign-creation-wizard-step3') {\r\n this.startToFinishMarker.done({ campaignType: this.audienceCampaignType || 'Audience' });\r\n this.wizardActivity.signal('finish creating campaign');\r\n }\r\n\r\n const summaryDataContextManager = DependencyResolver.get('SummaryDataContextManager');\r\n summaryDataContextManager.getContext('/campaign/NewCampaign/Create?');\r\n\r\n if (this.eventDelegator &&\r\n !_.isEmpty(this.viewContext.currentCampaign) &&\r\n !_.isEmpty(this.viewContext.currentCampaign.Id) &&\r\n !_.isEmpty(this.viewContext.currentCampaign.Name)) {\r\n this.eventDelegator.trigger('campaignReload');\r\n }\r\n\r\n this.navigateToRoute('campaign');\r\n\r\n displaySuccessDialog();\r\n\r\n if (this.wizardActivity) {\r\n this.wizardActivity.trace(`wizard saved and exited with swap steps ${this.isSwapStepsEnabled ? 'enabled' : 'disabled'}`);\r\n }\r\n }\r\n}\r\n","export const Included = 'Included';\r\nexport const Excluded = 'Excluded';\r\nexport const All = 'All'; // Included + Excluded\r\n","import Backbone from 'backbone';\r\nimport _ from 'underscore';\r\nimport pgrid from 'projection-grid';\r\nimport { paginationPlugin } from '@bingads-webui/projection-grid-pagination';\r\nimport { cloneDeep } from '@bingads-webui-universal/primitive-utilities';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport template from './search-based-target-grid-view-template.pug';\r\nimport paginationTemplate from './pagination-template.pug';\r\nimport * as targetTypes from './search-based-target-type';\r\n\r\n/**\r\n * Class for grid view for linkedin targets\r\n *\r\n * @class SearchBasedTargetGridView\r\n * @extends {Backbone.View}\r\n */\r\nexport class SearchBasedTargetGridView extends Backbone.View {\r\n /**\r\n * Initializes the class.\r\n * @param {Object} options - options object\r\n *\r\n * @returns {undefined}\r\n */\r\n initialize(options = {}) {\r\n this.options = _.defaults(options, {\r\n level: 'adgroup',\r\n targetType: targetTypes.All,\r\n });\r\n\r\n this.isolated = this.options.targetType !== targetTypes.All;\r\n this.i18n = DependencyResolver.get('component/i18n/loader!campaignui/feature/audience-campaign');\r\n this.vm = {\r\n i18n: this.i18n,\r\n gridData: [],\r\n targetType: this.options.targetType,\r\n removeAllVisibleClass: this.isolated ? 'hide' : '',\r\n };\r\n\r\n this.grid = null;\r\n this.currentLevelTargetInfo = this.options.currentLevelTargetInfo;\r\n\r\n this.listenTo(\r\n this.currentLevelTargetInfo,\r\n `${this.currentLevelTargetInfo.resourceName}${this.options.type}Changed`,\r\n () => {\r\n if (options.activityLogger) {\r\n options.activityLogger.signal(`audienceCriterionSettingChanged: ${this.currentLevelTargetInfo.resourceName}${this.options.type}`);\r\n }\r\n this.onCriterionChange();\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Define events and event handlers for them.\r\n *\r\n * @readonly\r\n * @returns {Object} returns object defining events\r\n */\r\n get events() {\r\n return {\r\n 'click .target-grid-remove-all-container a': 'onRemoveAllTargets',\r\n };\r\n }\r\n\r\n /**\r\n * Renders the view\r\n *\r\n * @returns {View} returns the view itself\r\n */\r\n render() {\r\n this.$el.html(template(this.vm));\r\n\r\n this.initializeAndRenderGrid();\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Event handler for criterion change\r\n * @private\r\n *\r\n * @returns {undefined}\r\n */\r\n onCriterionChange() {\r\n if (this.isolated) {\r\n const allData = cloneDeep(this.currentLevelTargetInfo.getAllByType(this.options.type));\r\n const datas = _.partition(allData, d => d.CriterionType === this.options.type);\r\n this.vm.gridData = this.options.targetType === targetTypes.Included ? datas[0] : datas[1];\r\n } else {\r\n this.vm.gridData = cloneDeep(this.currentLevelTargetInfo.getAllByType(this.options.type));\r\n }\r\n\r\n this.refreshGridSource();\r\n\r\n if (this.vm.gridData.length === 0) {\r\n this.$(`.linked-in-target-grid-view.${this.options.targetType}`).addClass('hide');\r\n } else {\r\n this.$(`.linked-in-target-grid-view.${this.options.targetType}`).removeClass('hide');\r\n }\r\n }\r\n\r\n /**\r\n * Refreshes the grid source\r\n * @private\r\n *\r\n * @returns {undefined}\r\n */\r\n refreshGridSource() {\r\n if (this.grid && this.grid.gridView) {\r\n this.grid.gridView.patch({\r\n dataSource: {\r\n data: this.vm.gridData,\r\n },\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Initializes and renders the grid\r\n * @private\r\n *\r\n * @returns {undefined}\r\n */\r\n initializeAndRenderGrid() {\r\n this.commonGridConfig = {\r\n tableClasses: ['table', 'table--no-border', 'grid'],\r\n dataSource: {\r\n type: 'memory',\r\n data: [],\r\n primaryKey: 'Id',\r\n },\r\n rows: {\r\n bodyRows: [{\r\n type: 'data-rows',\r\n classes: ['linked-in-target-grid__area-row'],\r\n }],\r\n },\r\n events: {\r\n 'click .linked-in-target-grid__remove-col': e => this.removeSearchBasedTarget(e),\r\n 'click .linked-in-target-grid__removeall-header': e => this.removeSearchBasedTargets(e),\r\n },\r\n plugins: {\r\n pagination: {\r\n pageSize: this.isolated ? 5 : 10,\r\n availablePageSizes: this.isolated ? [5] : [10, 20, 50, 100],\r\n enableRandomPage: false,\r\n template: this.isolated ? paginationTemplate : undefined,\r\n pageNumberLabelText: this.i18n.getString('GridPage_Colon'),\r\n pageSizeText: this.i18n.getString('Grid_ShowRows'),\r\n totalPageCountText: this.i18n.getString('Grid_PageOf'),\r\n },\r\n },\r\n };\r\n\r\n const gridConfig = this.isolated ?\r\n this.options.gridConfig(this.options.targetType) :\r\n this.options.gridConfig;\r\n\r\n this.grid = pgrid.factory({ vnext: true })\r\n .use(paginationPlugin)\r\n .create(_.defaults(gridConfig, this.commonGridConfig));\r\n\r\n this.$('.target-grid').html(this.grid.gridView.render().el);\r\n\r\n this.grid.gridView.on('didUpdate', () => {\r\n // update coulumn header using grid rows count\r\n if (this.isolated) {\r\n const firstColumnHeaderSpan = this.grid.gridView.$el.find('th span.targeting-status');\r\n firstColumnHeaderSpan.text(firstColumnHeaderSpan.text()\r\n .replace(/\\d+|\\{\\{count\\}\\}/, this.grid.gridView.totalCountRows));\r\n }\r\n });\r\n\r\n // After initial creation, make the onCriterionChange to read from data\r\n this.onCriterionChange();\r\n }\r\n\r\n /**\r\n * Remove the targeted/excluded linked in target\r\n * @private\r\n * @param {object} e - event object\r\n *\r\n * @returns {Promise} - promise of destroying the linked in target\r\n */\r\n removeSearchBasedTarget(e) {\r\n e.stopPropagation();\r\n const targetId = _.result(this.grid.gridView.itemOfElement(e.target), 'Id');\r\n\r\n return this.currentLevelTargetInfo.destroyAsync(targetId);\r\n }\r\n\r\n /**\r\n * Remove all targeted/excluded in grid\r\n * @private\r\n * @param {object} e - event object\r\n *\r\n * @returns {undefined}\r\n */\r\n removeSearchBasedTargets(e) {\r\n if (this.isolated) {\r\n const allData = cloneDeep(this.currentLevelTargetInfo.getAllByType(this.options.type));\r\n const datas = _.partition(allData, d => d.CriterionType === this.options.type);\r\n const targetDatas = this.options.targetType === targetTypes.Included ? datas[0] : datas[1];\r\n\r\n e.stopPropagation();\r\n _.each(targetDatas, (d) => {\r\n this.currentLevelTargetInfo.destroyAsync(d.Id);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Event handler for removing all linked in targets\r\n * @private\r\n *\r\n * @param {object} e - event object\r\n * @returns {Promise} - Promise of destroying target type\r\n */\r\n onRemoveAllTargets(e) {\r\n e.stopPropagation();\r\n\r\n return this.currentLevelTargetInfo.destroyTargetTypeAsync(this.options.type);\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport Backbone from 'backbone';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport { SearchBasedTargetGridView } from './search-based-target-grid-view';\r\nimport template from './search-based-target-setting-template.pug';\r\nimport searchBasedTargetGridRemoveColumnTemplate from './search-based-target-grid-remove-column-template.pug';\r\nimport searchBasedTargetGridStateTemplate from './search-based-target-grid-state-template.pug';\r\nimport * as targetTypes from './search-based-target-type';\r\n\r\nexport const removeAllColumnConfig = i18n => ({\r\n name: 'removeAll',\r\n template: () => searchBasedTargetGridRemoveColumnTemplate({ i18n }),\r\n headClasses: ['linked-in-target-grid__removeall-header', 'text-right'],\r\n bodyClasses: ['text-right'],\r\n html:\r\n `${i18n.getString('Audience_Campaign_Target_Setting_Company_Grid_Column_Remove_All')}`,\r\n});\r\n\r\nexport const statusColumnConfig = targetType => ({\r\n name: 'Status',\r\n template: () => searchBasedTargetGridStateTemplate({\r\n isIncluded: targetType === 'Included',\r\n isExcluded: targetType === 'Excluded',\r\n includedString: '',\r\n excludedString: '',\r\n }),\r\n property: _.identity,\r\n});\r\n\r\nexport const nameColumnConfig = type => ({\r\n template: (local) => {\r\n const criterion = local.value.Criterion[type];\r\n return criterion.Name;\r\n },\r\n property: _.identity,\r\n});\r\n\r\n/**\r\n * Class for setting search based targets\r\n *\r\n * @class SearchBasedTargetSetting\r\n * @extends {TargetSettingBase}\r\n */\r\nexport class SearchBasedTargetSetting extends Backbone.View {\r\n initialize(options) {\r\n this.options = options;\r\n\r\n this.currentLevelTargetInfo = options.currentLevelTargetInfo;\r\n this.showBidOnlyNote = options.showBidOnlyNote;\r\n this.i18n = DependencyResolver.get('component/i18n/loader!campaignui/feature/audience-campaign');\r\n this.decimal = DependencyResolver.get('component/humanize/decimal');\r\n\r\n const targetOptions = options.isolatedGrid ?\r\n _.defaults({ targetType: targetTypes.Included }, options) :\r\n options;\r\n this.searchBasedTargetGridView = new SearchBasedTargetGridView(targetOptions);\r\n if (options.isolatedGrid) {\r\n this.excludedSearchBasedTargetGridView =\r\n new SearchBasedTargetGridView(_.defaults({ targetType: targetTypes.Excluded }, options));\r\n }\r\n }\r\n\r\n /**\r\n * Renders the view\r\n *\r\n * @returns {View} returns the view itself\r\n */\r\n render() {\r\n this.$el.html(template(this));\r\n\r\n this.searchView.render();\r\n this.$('.linked-in-target-search-container').append(this.searchView.$el);\r\n\r\n this.searchBasedTargetGridView.render();\r\n this.$('.linked-in-target-grid-container').append(this.searchBasedTargetGridView.$el);\r\n\r\n if (this.options.isolatedGrid) {\r\n this.excludedSearchBasedTargetGridView.render();\r\n this.$('.linked-in-excluded-grid-container').append(this.excludedSearchBasedTargetGridView.$el);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Check if the selection control has any targetting setting.\r\n *\r\n * @returns {boolean} boolean value indicating if the control has target or not.\r\n */\r\n isTargeted() {\r\n const criterions = _.clone(this.currentLevelTargetInfo.getAllByType(this.options.type));\r\n const hasTaget = criterions.length > 0;\r\n\r\n return hasTaget;\r\n }\r\n\r\n setDefaultCashbackPercent(percent) {\r\n this.searchView.setDefaultCashbackPercent(percent);\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport Promise from 'bluebird';\r\nimport $ from 'jquery';\r\nimport _ from 'underscore';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport { criterionHelper } from '@bingads-webui-campaign/audience-campaign-shared';\r\nimport template from './search-result-view-template.pug';\r\n\r\n/**\r\n * Class for search result view for linkedin targets\r\n *\r\n * @class SearchResultView\r\n * @extends {Backbone.View}\r\n */\r\nexport class SearchResultView extends Backbone.View {\r\n /**\r\n * Initializes the class.\r\n * @param {Object} options - options for the initialize\r\n *\r\n * @returns {undefined}\r\n */\r\n initialize(options) {\r\n this.options = options;\r\n this.currentLevelTargetInfo = this.options.currentLevelTargetInfo;\r\n this.showExclusion = _.has(options, 'showExclusion') ? options.showExclusion : true;\r\n this.defaultBidAdjustment = _.has(options, 'defaultBidAdjustment') ? options.defaultBidAdjustment : 0;\r\n this.defaultCashbackPercent = options.defaultCashbackPercent;\r\n this.i18n = DependencyResolver.get('component/i18n/loader!campaignui/feature/audience-campaign');\r\n\r\n this.items = [];\r\n this.isVisible = false;\r\n }\r\n\r\n /**\r\n * Define events and event handlers for them.\r\n *\r\n * @readonly\r\n * @returns {Object} returns object defining events\r\n */\r\n get events() {\r\n return {\r\n 'click a.company-search-include-link': 'onInclude',\r\n 'click a.company-search-exclude-link': 'onExclude',\r\n };\r\n }\r\n\r\n /**\r\n * Update the state of the state\r\n *\r\n * @param {Object} searchResult - array of search result\r\n * @param {boolean} isVisible - boolean value indication if the search result is visible or not\r\n *\r\n * @return {Object} - view itself.\r\n */\r\n updateState(searchResult = [], isVisible) {\r\n if (!_.isUndefined(isVisible)) {\r\n this.isVisible = isVisible;\r\n }\r\n\r\n this.items = searchResult;\r\n\r\n // 'ms-Panel' event handling is needed when component is integrated in fluent panel\r\n const evenHandler = this.clickHandling.bind(this);\r\n $(document).off('click.company-name-result');\r\n document.getElementsByClassName('ms-Panel')[0]?.removeEventListener('click', evenHandler);\r\n\r\n if (this.isVisible) {\r\n $(document).on('click.company-name-result', evenHandler);\r\n document.getElementsByClassName('ms-Panel')[0]?.addEventListener('click', evenHandler);\r\n }\r\n\r\n this.render();\r\n }\r\n\r\n /**\r\n * Renders the view\r\n *\r\n * @returns {View} returns the view itself\r\n */\r\n render() {\r\n this.$el.html(template(this));\r\n const ariaLiveResultsText = this.items.length < 1 ? this.i18n.getString('Audience_Campaign_Target_Setting_Company_Search_No_Result') : this.i18n.getString('Found {{totalCount}} Results', { totalCount: this.items.length });\r\n this.$el.closest('.search-result-view-container').find('.search-result.live-region').text(ariaLiveResultsText);\r\n\r\n return this;\r\n }\r\n\r\n clickHandling(e) {\r\n if (!$(e.target).hasClass('search-box__icon') &&\r\n $(e.target).closest('.search-result-view-container').length === 0) {\r\n this.updateState([], false);\r\n }\r\n }\r\n\r\n setDefaultCashbackPercent(percent) {\r\n this.defaultCashbackPercent = percent;\r\n }\r\n\r\n /**\r\n * Event handler for target include action\r\n * @private\r\n *\r\n * @param {Object} e - click event object\r\n * @returns {Promise} - Promise of handling onInclude event\r\n */\r\n onInclude(e) {\r\n e.stopPropagation();\r\n\r\n if (!e.target) {\r\n return Promise.resolve(false);\r\n }\r\n\r\n const companyTargetItem =\r\n _.first(_.filter(this.items, item => item.id === parseInt(e.target.dataset.id, 10)));\r\n\r\n const criterion = criterionHelper.buildLinkedInCriterion(\r\n 'CompanyName',\r\n companyTargetItem,\r\n true,\r\n this.defaultBidAdjustment,\r\n this.defaultCashbackPercent\r\n );\r\n\r\n return this.currentLevelTargetInfo.createAsync(criterion);\r\n }\r\n\r\n /**\r\n * Event handler for target exclude action\r\n * @private\r\n *\r\n * @param {Object} e - click event object\r\n * @returns {Promise} - Promise of handling onExclude event\r\n */\r\n onExclude(e) {\r\n e.stopPropagation();\r\n\r\n if (!e.target) {\r\n return Promise.resolve(false);\r\n }\r\n\r\n const companyTargetItem =\r\n _.first(_.filter(this.items, item => item.id === parseInt(e.target.dataset.id, 10)));\r\n\r\n const criterion = criterionHelper.buildLinkedInCriterion(\r\n 'CompanyName',\r\n companyTargetItem,\r\n false,\r\n this.defaultBidAdjustment\r\n );\r\n\r\n return this.currentLevelTargetInfo.createAsync(criterion);\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport { SearchBox } from '@bingads-webui/search-box';\r\nimport template from './search-view-base-template.pug';\r\n\r\n// Temporary fix to prevent search glyph click event from bubbling up\r\n// TODO: Remove once PermissionDenied IE error has been verified fixed\r\nfunction onClickSearchContainer(event) {\r\n // If event has been bubble up from search glyph icon click then stop propagating\r\n if (event.target.className === 'search-box__icon glyphicon glyphicon-search') {\r\n event.stopPropagation();\r\n }\r\n}\r\n\r\n/**\r\n * Class for search view for linked in targets\r\n *\r\n * @class SearchViewBase\r\n * @extends {Backbone.View}\r\n */\r\nexport class SearchViewBase extends Backbone.View {\r\n /**\r\n * Initializes the class.\r\n * @param {Object} options - options object\r\n *\r\n * @returns {undefined}\r\n */\r\n initialize(options) {\r\n this.options = options;\r\n this.currentLevelTargetInfo = this.options.currentLevelTargetInfo;\r\n this.i18n = DependencyResolver.get('component/i18n/loader!campaignui/feature/audience-campaign');\r\n this.criterionType = options.criterionType;\r\n\r\n this.searchBox = new SearchBox({\r\n placeholder: this.i18n.getString(`Audience_Campaign_Target_Setting_${this.criterionType}_Search_Placeholder`),\r\n maxLength: this.options.maxLength,\r\n value: '',\r\n iconClasses: ['glyphicon', 'glyphicon-search'],\r\n });\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click .searchbox-container': onClickSearchContainer,\r\n };\r\n }\r\n\r\n /**\r\n * Renders the view\r\n *\r\n * @returns {View} returns the view itself\r\n */\r\n render() {\r\n this.$el.html(template(this));\r\n\r\n this.searchBox.render();\r\n this.$('.searchbox-container').prepend(this.searchBox.$el);\r\n this.searchResultView.render();\r\n this.$('.search-result-view-container').append(this.searchResultView.$el);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Event handler for search result reseted\r\n * clear the searchbox\r\n * @private\r\n *\r\n * @returns {undefined}\r\n */\r\n onSearchResultReseted() {\r\n this.searchBox.viewModel.value('');\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport { withUiBlock } from '@bingads-webui/uiblocker';\r\nimport { companySizeEnumToString } from '@bingads-webui-campaign/audience-campaign-shared';\r\nimport { SearchResultView } from '../search-result/search-result-view';\r\nimport { SearchViewBase } from '../../search-view-base';\r\n\r\n/**\r\n * Class for search view for linked in targets\r\n *\r\n * @class CompanyNameSearchView\r\n * @extends {Backbone.View}\r\n */\r\nexport class CompanyNameSearchView extends SearchViewBase {\r\n /**\r\n * Initializes the class.\r\n * @param {Object} options - options object\r\n *\r\n * @returns {undefined}\r\n */\r\n initialize(options) {\r\n super.initialize(options);\r\n\r\n this.searchBox.on('search', searchTerm => this.onSearch(searchTerm));\r\n\r\n this.searchResultView = new SearchResultView(this.options);\r\n this.listenTo(this.searchResultView, 'searchResultReseted', this.onSearchResultReseted);\r\n\r\n this.listenTo(\r\n this.currentLevelTargetInfo,\r\n `${this.currentLevelTargetInfo.resourceName}CompanyNameChanged`,\r\n () => this.onCriterionChange()\r\n );\r\n }\r\n\r\n setDefaultCashbackPercent(percent) {\r\n this.searchResultView.setDefaultCashbackPercent(percent);\r\n }\r\n\r\n /**\r\n * Event handler for search requested\r\n * @private\r\n *\r\n * @param {string} searchTerm - search keyword\r\n * @returns {Object} - promise of setting the search result\r\n */\r\n onSearch(searchTerm) {\r\n if (!searchTerm) {\r\n return null;\r\n }\r\n\r\n const escapedSearchTerm = encodeURIComponent(searchTerm);\r\n const odata = DependencyResolver.get('component/http/channel/odata');\r\n const context = DependencyResolver.get('audienceCampaignPageContext');\r\n const demogrphicsUrl = `Customers(${context.CurrentCustomerId})/Accounts(${context.CurrentAccount.Id})/Demographics/`;\r\n const companySearchUrl = `Model.Company?$search=${escapedSearchTerm}&$top=20`;\r\n\r\n return odata.get(demogrphicsUrl + companySearchUrl).then((data) => {\r\n this.searchData = data.value;\r\n this.setSearchResult(true);\r\n })\r\n .finally(withUiBlock(this.$el, this.i18n.getString('Loading')));\r\n }\r\n\r\n /**\r\n * Set the search result for the render\r\n * @private\r\n * @param {boolean} makeSearchResultVisible - Make it visible\r\n *\r\n * @returns {undefined}\r\n */\r\n setSearchResult(makeSearchResultVisible) {\r\n const companies = _.clone(this.currentLevelTargetInfo.getAllByType('CompanyName'));\r\n const targetedCompanyIds = _.map(companies, (company) => {\r\n if (company.CriterionType === 'CompanyName') {\r\n return parseInt(company.Criterion.CompanyNameCriterion.Target, 10);\r\n }\r\n\r\n return -1;\r\n });\r\n const excludedCompanyIds = _.map(companies, (company) => {\r\n if (company.CriterionType === 'NegativeCompanyName') {\r\n return parseInt(company.Criterion.CompanyNameCriterion.Target, 10);\r\n }\r\n\r\n return -1;\r\n });\r\n\r\n const results = _.map(this.searchData, (result) => {\r\n const item = {\r\n id: result.Id,\r\n name: result.Name,\r\n logoUrl: result.LogoUrl,\r\n industry: result.Industry,\r\n size: companySizeEnumToString(result.Size),\r\n isIncluded: _.contains(targetedCompanyIds, result.Id),\r\n isExcluded: _.contains(excludedCompanyIds, result.Id),\r\n };\r\n\r\n return item;\r\n });\r\n\r\n this.searchResultView.updateState(results, makeSearchResultVisible);\r\n }\r\n\r\n onCriterionChange() {\r\n this.setSearchResult();\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport $ from 'jquery';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport { CashbackPercentControlView } from '@bingads-webui-campaign/cashback-percent-control-view';\r\nimport bidAdjustmentTemplate from './bid-adjustment.pug';\r\n\r\nconst getBidAdjustmentOptions = () => {\r\n const i18n = DependencyResolver.get('component/i18n/loader!campaignui/feature/audience-campaign');\r\n\r\n return {\r\n percentage: 0,\r\n availableOptions: [\r\n { key: 'inc', text: i18n.getString('Audience_Campaign_Settings_BidAdjustment_Increase') },\r\n { key: 'dec', text: i18n.getString('Audience_Campaign_Settings_BidAdjustment_Decrease') },\r\n ],\r\n selectedOption: 'inc',\r\n };\r\n};\r\n\r\nconst isCriterionExcluded = (criterion) => {\r\n let isExcluded = false;\r\n\r\n if (criterion.Status && criterion.Status === 'Excluded') {\r\n isExcluded = true;\r\n }\r\n\r\n if (criterion.SelectionStatus && criterion.SelectionStatus === 'Excluded') {\r\n isExcluded = true;\r\n }\r\n\r\n // Linked in target knows the excluded state by the type.\r\n if (criterion.CriterionType && criterion.CriterionType.indexOf('Negative') >= 0) {\r\n isExcluded = true;\r\n }\r\n\r\n return isExcluded;\r\n};\r\n\r\n/**\r\n * Function to compute bid adjustment\r\n * @param {string} rawBidPercentage Bid percentage input\r\n * @param {string} bidAdjOptionText Bid adjustment option input\r\n *\r\n * @returns {int} Computed Bid adjustment value\r\n */\r\nconst computeBidAdjustment = (rawBidPercentage, bidAdjOptionText) => {\r\n const percentage = Number(rawBidPercentage);\r\n\r\n const bidAdjustmentOptions = getBidAdjustmentOptions();\r\n const bidAdjOption = _.find(\r\n bidAdjustmentOptions.availableOptions,\r\n option => option.text === bidAdjOptionText\r\n );\r\n\r\n const bidAdjOptionKey = _.result(bidAdjOption, 'key');\r\n\r\n return bidAdjOptionKey === 'dec' ? -percentage : percentage;\r\n};\r\n\r\nconst onBidAdjChange = (vm, e, criterionName) => {\r\n const bidAdjustmentControl = vm.$(e.target).parent();\r\n const targetId = e.target.id || bidAdjustmentControl.children('input')[0].id;\r\n\r\n const bidAdjPercentage = bidAdjustmentControl.children('input').val();\r\n const bidAdjOption = bidAdjustmentControl.children('select').val();\r\n const criterion = vm.currentLevelTargetInfo.criterionsByType[criterionName];\r\n const bidAdj = computeBidAdjustment(bidAdjPercentage, bidAdjOption);\r\n\r\n const targetCrit = criterion.find(d => (d.Criterion[criterionName] ?\r\n (d.Criterion[criterionName] === targetId) :\r\n (d.Criterion.Name === targetId)));\r\n if (targetCrit && targetCrit.Criterion) {\r\n targetCrit.Criterion.BidAdjustment = bidAdj;\r\n }\r\n};\r\n\r\nconst isUsingCampaignSettings = CriterionType => (\r\n $(`.criterion-setting-${CriterionType} .toggle.toggle-off`).length > 0);\r\n\r\nconst onCashbackPercentChange = (vm, validated, cashbackPercent, id, criterionName) => {\r\n const criterion = vm.currentLevelTargetInfo.criterionsByType[criterionName];\r\n const targetCrit = criterion.find(d => (d.Criterion[criterionName] ?\r\n (d.Criterion[criterionName] === id) :\r\n (d.Criterion.Name === id)));\r\n\r\n if (validated) {\r\n if (targetCrit && targetCrit.Criterion) {\r\n targetCrit.Criterion.CashbackPercent = cashbackPercent;\r\n vm.currentLevelTargetInfo.updateAsync(targetCrit, true);\r\n }\r\n }\r\n};\r\n\r\nconst cashbackPercentColumnConfig = (vm, i18n) => ({\r\n i18n,\r\n name: 'CashbackPercent',\r\n property: item => item,\r\n bodyClasses: ['cashback-percent-cell-wrap'],\r\n title: 'Campaign_Maximum_Cashback_Offer',\r\n template: (locals) => {\r\n const that = vm;\r\n const criterion = locals.value;\r\n\r\n if (isCriterionExcluded(locals.value)) {\r\n return '-';\r\n }\r\n\r\n let cashbackPercentValue = null;\r\n if (criterion.Criterion.CashbackAdjustment != null) {\r\n cashbackPercentValue = criterion.Criterion.CashbackAdjustment;\r\n }\r\n\r\n if (criterion.Criterion.CashbackPercent != null) {\r\n cashbackPercentValue = criterion.Criterion.CashbackPercent;\r\n }\r\n\r\n if (isUsingCampaignSettings(criterion.CriterionType)) {\r\n that.readonly = false;\r\n } else {\r\n that.readonly = true;\r\n }\r\n\r\n const cashbackPercentControlView = new CashbackPercentControlView({\r\n viewContext: vm.options.viewContext,\r\n i18n: vm.i18n,\r\n decimal: vm.decimal,\r\n CashbackPercent: cashbackPercentValue,\r\n isParentLevel: that.readonly,\r\n });\r\n\r\n const name = criterion.Criterion[criterion.CriterionType] ?\r\n criterion.Criterion[criterion.CriterionType] : criterion.Criterion.Name;\r\n\r\n setTimeout(() => {\r\n // eslint-disable-next-line no-underscore-dangle\r\n const key = locals.value.Id;\r\n const row = vm.$(`tr[data-key='${key}']`);\r\n const root = vm.$(row).find('.cashback-percent-cell-wrap');\r\n root.empty().append(cashbackPercentControlView.render().$el);\r\n cashbackPercentControlView.on('change', (validated, val) => {\r\n vm.onCashbackPercentChange(vm, validated, val, name, vm.criterionName);\r\n });\r\n });\r\n\r\n return '';\r\n },\r\n});\r\n\r\nconst bidAdjColumnConfig = (vm, i18n) => ({\r\n i18n,\r\n name: 'BidAdjustment',\r\n property: item => item,\r\n title: 'Audience_Campaign_Settings_BidAdjustment',\r\n template: (locals) => {\r\n const that = vm;\r\n\r\n const criterion = locals.value;\r\n\r\n if (isCriterionExcluded(locals.value)) {\r\n return '-';\r\n }\r\n\r\n const bidAdjustmentOptions = getBidAdjustmentOptions();\r\n\r\n let bidValue = 0;\r\n\r\n // For Audience Criterions\r\n if (criterion.Criterion.BidMultiplier != null) {\r\n bidValue = criterion.Criterion.BidMultiplier;\r\n }\r\n\r\n // For ones that are generated\r\n if (criterion.Criterion.BidAdjustment != null) {\r\n bidValue = criterion.Criterion.BidAdjustment;\r\n }\r\n\r\n bidAdjustmentOptions.percentage = Math.abs(bidValue);\r\n\r\n // negtive or -0\r\n if ((bidValue < 0) || (1 / bidValue === -Infinity)) {\r\n bidAdjustmentOptions.selectedOption = 'dec';\r\n }\r\n\r\n if (isUsingCampaignSettings(criterion.CriterionType)) {\r\n that.readonly = false;\r\n } else {\r\n that.readonly = true;\r\n }\r\n\r\n return bidAdjustmentTemplate({\r\n size: 5, // input control size\r\n percentage: bidAdjustmentOptions.percentage === null ? 0 : bidAdjustmentOptions.percentage,\r\n availableOptions: bidAdjustmentOptions.availableOptions,\r\n selectedOption: bidAdjustmentOptions.selectedOption,\r\n readonly: that.readonly,\r\n i18n: that.i18n,\r\n Name: criterion.Criterion[criterion.CriterionType] ?\r\n criterion.Criterion[criterion.CriterionType] : criterion.Criterion.Name,\r\n });\r\n },\r\n bodyClasses: ['bid-adjustment-target-column'],\r\n});\r\n\r\nexport {\r\n getBidAdjustmentOptions,\r\n isCriterionExcluded,\r\n onBidAdjChange,\r\n bidAdjColumnConfig,\r\n onCashbackPercentChange,\r\n cashbackPercentColumnConfig,\r\n isUsingCampaignSettings\r\n};\r\n","import _ from 'underscore';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport { companyTargetItemTemplate } from '@bingads-webui-campaign/audience-campaign-shared';\r\nimport { SearchBasedTargetSetting, removeAllColumnConfig, statusColumnConfig, nameColumnConfig } from '../search-based-target-setting';\r\nimport searchBasedTargetGridRemoveColumnTemplate from '../search-based-target-grid-remove-column-template.pug';\r\nimport searchBasedTargetGridStateTemplate from '../search-based-target-grid-state-template.pug';\r\nimport { CompanyNameSearchView } from './search-view/search-view';\r\nimport { cashbackPercentColumnConfig } from '../shared-utils/bid-adjustment-utils';\r\n\r\nconst companyColumnConfig = i18n => ({\r\n i18n,\r\n name: 'targetName',\r\n title: 'Audience_Campaign_Target_Setting_Company_Grid_Column_Companies',\r\n template: (local) => {\r\n const criterion = local.value.Criterion.CompanyNameCriterion;\r\n const item = {\r\n name: criterion.Name,\r\n logoUrl: criterion.LogoUrl,\r\n industry: criterion.Industry,\r\n size: criterion.Size,\r\n i18n,\r\n };\r\n\r\n return companyTargetItemTemplate({ item, i18n });\r\n },\r\n property: _.identity,\r\n});\r\n\r\nexport class CompanyNameTargetSetting extends SearchBasedTargetSetting {\r\n initialize(options) {\r\n this.options = options;\r\n this.showExclusion = _.has(options, 'showExclusion') ? options.showExclusion : true;\r\n\r\n this.i18nKeys = {\r\n titleKey: 'Audience_Campaign_Target_Setting_Company_Title',\r\n helpKey: 'pop_BA_CampaignCreate_AudTargets_Company',\r\n descriptionKey: this.showExclusion\r\n ? 'Audience_Campaign_Target_Setting_Company_Description'\r\n : 'Audience_Campaign_Target_Setting_Company_Description_Bid_Only',\r\n };\r\n\r\n this.criterionName = 'CompanyName';\r\n this.currentLevelTargetInfo = options.currentLevelTargetInfo;\r\n const i18n = DependencyResolver.get('component/i18n/loader!campaignui/feature/audience-campaign');\r\n const bingadsGridColumn = DependencyResolver.get('component/bingads-grid/shared/column');\r\n const pageContext = DependencyResolver.get('audienceCampaignPageContext');\r\n this.isFilterCriterionLevelAdGroup =\r\n options.isFilterCriterionLevelAdGroup || pageContext.isFilterCriterionLevelAdGroup;\r\n this.supportCashbackSettings = options.supportCashbackSettings;\r\n\r\n const companySettingGridConfig = {\r\n columns: [\r\n bingadsGridColumn({\r\n name: 'isIncludedOrExcluded',\r\n title: this.showExclusion ? i18n.getString('Audience_Campaign_Target_Setting_Company_Grid_Column_Target') : '',\r\n template: (local) => {\r\n const criterionType = local.value.CriterionType;\r\n\r\n return searchBasedTargetGridStateTemplate({\r\n isIncluded: criterionType === 'CompanyName',\r\n isExcluded: criterionType === 'NegativeCompanyName',\r\n includedString: i18n.getString('Audience_Campaign_Target_Setting_Included_Status'),\r\n excludedString: i18n.getString('Audience_Campaign_Target_Setting_Excluded_Status'),\r\n });\r\n },\r\n property: _.identity,\r\n }),\r\n bingadsGridColumn(companyColumnConfig(i18n)),\r\n ...(options.currentLevel === 'adgroup'\r\n && (this.options.showBidOnlyNote || this.options.showExclusion)\r\n && this.isFilterCriterionLevelAdGroup && this.supportCashbackSettings) ?\r\n [bingadsGridColumn(cashbackPercentColumnConfig(this, i18n, 'CompanyName'))] : [],\r\n bingadsGridColumn({\r\n name: 'removeAll',\r\n template: () => searchBasedTargetGridRemoveColumnTemplate({ i18n }),\r\n headClasses: ['linked-in-target-grid__remove-body'],\r\n bodyClasses: ['text-right'],\r\n }),\r\n ],\r\n };\r\n\r\n const companySettingNewUIGridConfig = targetType => ({\r\n columns: [\r\n {\r\n name: 'CompanyNameTarget',\r\n property: _.identity,\r\n html: `${i18n.getString(`Audience_Campaign_Target_Setting_Company_${targetType}_Grid_Title`)}`,\r\n columns: [\r\n bingadsGridColumn(_.extend({}, statusColumnConfig(targetType), { headClasses: 'hide' })),\r\n bingadsGridColumn(_.extend({}, companyColumnConfig(i18n), { headClasses: 'hide' })),\r\n ],\r\n },\r\n bingadsGridColumn(removeAllColumnConfig(i18n)),\r\n ],\r\n });\r\n\r\n const isolatedCompanySettingGridConfig = targetType => ({\r\n columns: [\r\n {\r\n name: 'CompanyNameTarget',\r\n property: _.identity,\r\n html: searchBasedTargetGridStateTemplate({\r\n isIncluded: targetType === 'Included',\r\n isExcluded: targetType === 'Excluded',\r\n includedString: i18n.getString(`Audience_Campaign_Target_Setting_Company_${targetType}_Status`),\r\n excludedString: i18n.getString(`Audience_Campaign_Target_Setting_Company_${targetType}_Status`),\r\n }),\r\n columns: [\r\n bingadsGridColumn(_.extend({}, nameColumnConfig('CompanyNameCriterion'), {\r\n name: 'CompanyName',\r\n headClasses: 'hide',\r\n })),\r\n bingadsGridColumn({\r\n name: 'CompanyType',\r\n headClasses: 'hide',\r\n template: (local) => {\r\n const criterion = local.value.Criterion.CompanyNameCriterion;\r\n return criterion.Industry;\r\n },\r\n property: _.identity,\r\n }),\r\n bingadsGridColumn({\r\n name: 'CompanyEmplyee',\r\n headClasses: 'hide',\r\n template: (local) => {\r\n const criterion = local.value.Criterion.CompanyNameCriterion;\r\n return `${criterion.Size} ${i18n.getString('Audience_Campaign_Target_Setting_Company_Employee_Count')}`;\r\n },\r\n property: _.identity,\r\n }),\r\n ],\r\n },\r\n bingadsGridColumn(removeAllColumnConfig(i18n)),\r\n ],\r\n });\r\n\r\n if (this.options.isolatedGrid) {\r\n if (this.options.isForVNext) {\r\n this.options.gridConfig = companySettingNewUIGridConfig;\r\n } else {\r\n this.options.gridConfig = isolatedCompanySettingGridConfig;\r\n }\r\n } else {\r\n this.options.gridConfig = companySettingGridConfig;\r\n }\r\n this.searchView = new CompanyNameSearchView(this.options);\r\n\r\n super.initialize(this.options);\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport template from './target-or-bid-selector-template.pug';\r\n\r\nconst targetAndBidClassName = 'target-and-bid-radio-check';\r\nconst bidOnlyClassName = 'bid-only-radio-check';\r\n\r\nexport class TargetOrBidSelector extends Backbone.View {\r\n initialize(options = {}) {\r\n this.i18n = DependencyResolver.get('component/i18n/loader!campaignui/feature/audience-campaign');\r\n this.isLabelHidden = options.isLabelHidden;\r\n this.isTargetAndBid = options.isTargetAndBid;\r\n }\r\n\r\n /**\r\n * Renders the view\r\n *\r\n * @returns {View} returns the view itself\r\n */\r\n render() {\r\n this.$el.html(template(this));\r\n\r\n if (this.isTargetAndBid) {\r\n this.$(`.${targetAndBidClassName}`).prop('checked', true);\r\n } else {\r\n this.$(`.${bidOnlyClassName}`).prop('checked', true);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n get events() {\r\n return {\r\n 'change input[type=radio]': e => this.onTargetSettingChanged(e),\r\n };\r\n }\r\n\r\n setIsTargetAndBid(isTargetAndBid) {\r\n this.isTargetAndBid = isTargetAndBid;\r\n\r\n if (this.isTargetAndBid) {\r\n this.$(`.${targetAndBidClassName}`).prop('checked', true);\r\n } else {\r\n this.$(`.${bidOnlyClassName}`).prop('checked', true);\r\n }\r\n }\r\n\r\n getIsTargetAndBid() {\r\n return this.isTargetAndBid;\r\n }\r\n\r\n onTargetSettingChanged(e) {\r\n if (e.currentTarget.className === targetAndBidClassName) {\r\n this.isTargetAndBid = true;\r\n } else if (e.currentTarget.className === bidOnlyClassName) {\r\n this.isTargetAndBid = false;\r\n }\r\n\r\n this.trigger('targetSettingChanged');\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport Promise from 'bluebird';\r\nimport _ from 'underscore';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport { BidAdjustment } from '@bingads-webui-campaign/target-bid-adjustment';\r\nimport { cloneDeep } from '@bingads-webui-universal/primitive-utilities';\r\nimport { TargetOrBidSelector } from './target-or-bid-selector/target-or-bid-selector';\r\nimport template from './criterion-setting-template.pug';\r\n\r\nconst targetI18nMap = i18n => ({\r\n Age: i18n.getString('Demographic_Grid_Override_Age'),\r\n Gender: i18n.getString('Demographic_Grid_Override_Gender'),\r\n CompanyName: i18n.getString('Demographic_Grid_Override_Company'),\r\n Industry: i18n.getString('Demographic_Grid_Override_Industry'),\r\n JobFunction: i18n.getString('Demographic_Grid_Override_JobFunction'),\r\n Device: i18n.getString('Demographic_Grid_Override_Device'),\r\n});\r\n\r\nexport class AudienceCriterionSettingBase extends Backbone.View {\r\n initialize(options = {\r\n showTargetSelection: false,\r\n showBidAdjustment: false,\r\n showTargetOrBid: false,\r\n enableLevelToggle: false,\r\n activityLogger: null,\r\n supportCashbackSettings: false,\r\n }) {\r\n this.decimal = DependencyResolver.get('component/humanize/decimal');\r\n this.i18n = DependencyResolver.get('component/i18n/loader!campaignui/feature/audience-campaign');\r\n this.currentLevelTargetInfo = options.currentLevelTargetInfo;\r\n this.parentLevelTargetInfo = options.parentLevelTargetInfo;\r\n this.viewContext = options.viewContext || {};\r\n this.isAudienceCampaign = options.isAudienceCampaign;\r\n this.isTargetAndBid = options.isTargetAndBid;\r\n this.activityLogger = options.activityLogger;\r\n this.supportCashbackSettings = options.supportCashbackSettings;\r\n\r\n this.showTargetSelection = options.showTargetSelection;\r\n this.showBidAdjustment = options.showBidAdjustment;\r\n this.showTargetOrBid = options.showTargetOrBid;\r\n this.showLevelToggle = options.enableLevelToggle && (this.viewContext.level === 'adgroup');\r\n this.isTargetSelectionViewValid = true;\r\n\r\n this.hideTitleLabel = options.hideTitleLabel;\r\n this.target = targetI18nMap(this.i18n)[this.criterionType];\r\n this.scenario = options.scenario;\r\n this.getInitializePromise = options.getInitializePromise || Promise.resolve(true);\r\n\r\n if (this.showBidAdjustment) {\r\n this.initializeBidAdjustmentGrid();\r\n }\r\n\r\n if (this.showTargetOrBid) {\r\n this.initializeTargetOrBidSelector();\r\n }\r\n\r\n if (this.showLevelToggle) {\r\n this.initializeLevelToggle();\r\n if (this.showBidAdjustment && !_.isEmpty(this.parentLevelTargetInfo)) {\r\n this.initializeParentLevelBidAdjustmentGrid();\r\n }\r\n }\r\n\r\n if (this.currentLevelTargetInfo) {\r\n this.listenTo(\r\n this.currentLevelTargetInfo,\r\n `${this.currentLevelTargetInfo.resourceName}${this.criterionType}Changed`,\r\n () => this.changeVisibility(true)\r\n );\r\n }\r\n }\r\n\r\n initializeLevelToggle() {\r\n const ToggleView = DependencyResolver.get('component/toggle/view/index');\r\n const useCampaignSettings = this.isUsingCampaignSettings();\r\n\r\n this.levelToggle = new ToggleView({\r\n // override default toggle text\r\n toggleText: {},\r\n labelledbyId: 'criterion-use-campaign-settings',\r\n });\r\n this.levelToggle.setToggleState(useCampaignSettings ? 'on' : 'off');\r\n if (this.currentLevelTargetInfo) {\r\n this.currentLevelTargetInfo.setParentLevelToggle(this.criterionType, useCampaignSettings);\r\n }\r\n this.showAdGroupOverrideInformation = useCampaignSettings;\r\n this.listenTo(this.levelToggle, 'change', this.onLevelToggleChange);\r\n }\r\n\r\n isUsingCampaignSettings() {\r\n if (this.currentLevelTargetInfo) {\r\n const targetCriterions = this.currentLevelTargetInfo.getAllByType(this.criterionType);\r\n const useCampaignSettings =\r\n // Only location has multiple types, but it is handled by external component\r\n // So here use this.criterionType is good enough\r\n (this.viewContext.level === 'adgroup') &&\r\n (targetCriterions.length === 0 ||\r\n (targetCriterions.length > 0 &&\r\n _.every(targetCriterions, criterion => criterion.Id < 0)\r\n )\r\n );\r\n\r\n return useCampaignSettings;\r\n }\r\n return false;\r\n }\r\n\r\n setAdGroupInfoVisibility() {\r\n if (this.showAdGroupOverrideInformation) {\r\n this.$('.adgroup-override-info').show();\r\n } else {\r\n this.$('.adgroup-override-info').hide();\r\n }\r\n }\r\n\r\n onLevelToggleChange(toggleState) {\r\n const useCampaignSettings = toggleState === 'on';\r\n this.showAdGroupOverrideInformation = useCampaignSettings;\r\n this.setAdGroupInfoVisibility();\r\n if (this.currentLevelTargetInfo) {\r\n this.currentLevelTargetInfo.setParentLevelToggle(this.criterionType, useCampaignSettings);\r\n }\r\n\r\n if (useCampaignSettings) {\r\n this.closeTargetEditView();\r\n this.$('.target-edit-container').addClass('hide');\r\n this.$('.current-level-bid-adjustment-grid').addClass('hide');\r\n this.$('.parent-level-bid-adjustment-grid').removeClass('hide');\r\n } else {\r\n if (this.criterionType === 'Age' && this.isSearchDSAShoppingAdgroupLevel\r\n && !(this.targetSelectionView.hasSavedSelections || this.targetSelectionView.hasSavedNegSelections)) {\r\n this.saveSnapshot();\r\n }\r\n\r\n // copy parent criterions to child criterions if child criterions are empty\r\n this.copyParentCriterionsAsync().catch(() => {\r\n throw new Error('Failure in copying parent criterions');\r\n });\r\n\r\n this.$('.target-edit-container').removeClass('hide');\r\n this.$('.current-level-bid-adjustment-grid').removeClass('hide');\r\n this.$('.parent-level-bid-adjustment-grid').addClass('hide');\r\n this.$('.target-edit-container .bid-adjustment-target-column .form-inline .form-control').removeAttr('disabled');\r\n }\r\n }\r\n\r\n changeVisibility(fromCriterionChanged = false) {\r\n if (this.criterionType) {\r\n if (this.getInitializePromise && typeof this.getInitializePromise === 'function') {\r\n const initPromise = this.getInitializePromise();\r\n initPromise.then(() => {\r\n this.changeVisAction(fromCriterionChanged);\r\n });\r\n } else {\r\n this.changeVisAction(fromCriterionChanged);\r\n }\r\n }\r\n }\r\n\r\n changeVisAction(fromCriterionChanged = false) {\r\n const hasData = this.currentLevelTargetInfo && this.currentLevelTargetInfo.parentLevelTogglesByType[this.criterionType] ?\r\n (this.parentLevelTargetInfo &&\r\n this.parentLevelTargetInfo.getAllByType(this.criterionType).length > 0) :\r\n this.currentLevelTargetInfo.getAllByType(this.criterionType).length > 0;\r\n\r\n if (this.levelToggle\r\n && (this.viewContext.level === 'adgroup')\r\n && this.currentLevelTargetInfo\r\n && this.currentLevelTargetInfo.getAllByType(this.criterionType).length > 0\r\n && fromCriterionChanged) {\r\n if (this.currentLevelTargetInfo && this.currentLevelTargetInfo.getAllByType(this.criterionType)[0].LevelOfDetails === 'AdGroup') {\r\n this.levelToggle.setToggleState('off');\r\n } else if (!_.any(this.currentLevelTargetInfo.getAllByType(this.criterionType), d => d.LevelOfDetails !== 'Campaign')) {\r\n this.levelToggle.setToggleState('on');\r\n }\r\n }\r\n\r\n if (this.showBidAdjustment) {\r\n if (hasData) {\r\n this.$('.bid-adjustment-grids-container').show();\r\n this.$('.no-target-exist-edit-label').hide();\r\n } else {\r\n this.$('.bid-adjustment-grids-container').hide();\r\n this.$('.no-target-exist-edit-label').show();\r\n }\r\n }\r\n\r\n if (this.showTargetOrBid) {\r\n if (hasData) {\r\n this.$('.bid-or-target-and-bid-selector').show();\r\n } else {\r\n this.$('.bid-or-target-and-bid-selector').hide();\r\n }\r\n }\r\n }\r\n\r\n copyParentCriterionsAsync() {\r\n if (this.currentLevelTargetInfo && this.currentLevelTargetInfo.getAllByType(this.criterionType).length > 0) {\r\n return Promise.resolve(false);\r\n }\r\n\r\n const criterionsToCopy = this.parentLevelTargetInfo.getAllByType(this.criterionType);\r\n const createTasks = [];\r\n\r\n _.each(criterionsToCopy, (criterion) => {\r\n // omit property belongs to parent criterions\r\n const copiedCriterion = _.pick(\r\n cloneDeep(criterion),\r\n 'AdGroup',\r\n 'Criterion',\r\n 'CriterionType'\r\n );\r\n if (this.currentLevelTargetInfo) {\r\n createTasks.push(this.currentLevelTargetInfo.createAsync(copiedCriterion));\r\n }\r\n });\r\n\r\n return Promise.all(createTasks);\r\n }\r\n\r\n initializeBidAdjustmentGrid() {\r\n this.bidAdjustmentGrid = new BidAdjustment({\r\n currentLevelTargetInfo: this.currentLevelTargetInfo,\r\n parentLevelTargetInfo: this.parentLevelTargetInfo,\r\n criterionTypes: this.criterionTypes ? this.criterionTypes : [this.criterionType],\r\n isAudienceCampaign: this.isAudienceCampaign,\r\n showExclusion: this.showExclusion,\r\n activityLogger: this.activityLogger,\r\n campaignId: this.viewContext.currentCampaign ? this.viewContext.currentCampaign.Id : '',\r\n adgroupId: this.viewContext.currentAdGroup ? this.viewContext.currentAdGroup.Id : '',\r\n level: this.viewContext.level,\r\n scenario: this.scenario,\r\n supportCashbackSettings: this.supportCashbackSettings,\r\n viewContext: this.viewContext,\r\n isSearchDSAShoppingAdgroupLevel: this.isSearchDSAShoppingAdgroupLevel,\r\n });\r\n }\r\n\r\n initializeParentLevelBidAdjustmentGrid() {\r\n this.parentLevelBidAdjustmentGrid = new BidAdjustment({\r\n currentLevelTargetInfo: this.parentLevelTargetInfo,\r\n criterionTypes: this.criterionTypes ? this.criterionTypes : [this.criterionType],\r\n readonly: true,\r\n showExclusion: this.showExclusion,\r\n campaignId: this.viewContext.currentCampaign ? this.viewContext.currentCampaign.Id : '',\r\n adgroupId: this.viewContext.currentAdGroup ? this.viewContext.currentAdGroup.Id : '',\r\n level: this.viewContext.level,\r\n scenario: this.scenario,\r\n supportCashbackSettings: this.supportCashbackSettings,\r\n viewContext: this.viewContext,\r\n });\r\n }\r\n\r\n initializeTargetOrBidSelector() {\r\n this.targetOrBidSelector = new TargetOrBidSelector({\r\n isTargetAndBid: this.isTargetAndBid,\r\n });\r\n }\r\n\r\n get isCashbackPercentValid() {\r\n if (this.supportCashbackSettings) {\r\n const cashbackPercentErrorSelector = [\r\n '.bid-adjustment-grid .table-container td[data-Column=CashbackPercent] .error',\r\n '.target-grid .table-container td[data-Column=CashbackPercent] .error',\r\n ].join(',');\r\n const $cashbackPercentErrors = this.$el.find(cashbackPercentErrorSelector);\r\n return _.every($cashbackPercentErrors, (__, i) => {\r\n const $err = $cashbackPercentErrors.eq(i);\r\n return $err.text() === '';\r\n });\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Returns true if the control is in a valid state\r\n * This should be overriden by the child components\r\n *\r\n * @returns {bool} - true if valid\r\n */\r\n validate() {\r\n const isBidAdjustmentGridValid = this.bidAdjustmentGrid ?\r\n this.bidAdjustmentGrid.getState().isValid : true;\r\n return isBidAdjustmentGridValid &&\r\n this.isTargetSelectionViewValid &&\r\n this.isCashbackPercentValid;\r\n }\r\n\r\n get events() {\r\n return {\r\n 'change .bid-adj-col': 'onBidAdjChange',\r\n 'change select[aria-label=\"Bid adjustment options\"]': 'onBidAdjChange',\r\n 'click .edit-target-show-button': 'onEditTargetShowButtonClicked',\r\n 'click .done-editing-target-button': 'onEditTargetDoneButtonClicked',\r\n };\r\n }\r\n\r\n onEditTargetShowButtonClicked() {\r\n if (!this.validate()) {\r\n return;\r\n }\r\n if (this.targetSelectionView && this.targetSelectionView.saveSnapshot) {\r\n // Before showing the target, save the snapshot.\r\n this.targetSelectionView.saveSnapshot();\r\n }\r\n\r\n this.$('.target-selection-container').removeClass('hide');\r\n this.$('.current-level-bid-adjustment-grid').addClass('hide');\r\n this.$('.edit-target-show-button-container').addClass('hide');\r\n this.$('.done-editing-target-button').removeClass('hide');\r\n this.$('.bid-only-note-container').addClass('hide');\r\n }\r\n\r\n onEditTargetDoneButtonClicked() {\r\n // we should validate the grid before switch view\r\n if (this.validate()) {\r\n if (this.targetSelectionView && this.targetSelectionView.updateCriterionDataAsync) {\r\n // When it is done, update the audience target info.\r\n this.targetSelectionView.updateCriterionDataAsync();\r\n // for search based editor, we need to refresh the bid adjustment grid\r\n } else if (this.targetSelectionView && this.targetSelectionView.searchBasedTargetGridView &&\r\n this.bidAdjustmentGrid) {\r\n this.bidAdjustmentGrid.onCriterionChanged();\r\n }\r\n this.closeTargetEditView();\r\n }\r\n }\r\n\r\n closeTargetEditView() {\r\n this.$('.target-selection-container').addClass('hide');\r\n this.$('.current-level-bid-adjustment-grid').removeClass('hide');\r\n this.$('.edit-target-show-button-container').removeClass('hide');\r\n this.$('.done-editing-target-button').addClass('hide');\r\n this.$('.bid-only-note-container').removeClass('hide');\r\n }\r\n\r\n resetSupportCashbackSettings(supportCashbackSettings, inheritInfo) {\r\n this.supportCashbackSettings = supportCashbackSettings;\r\n\r\n if (this.bidAdjustmentGrid) {\r\n this.bidAdjustmentGrid.remove();\r\n this.initializeBidAdjustmentGrid();\r\n }\r\n\r\n if (this.parentLevelBidAdjustmentGrid) {\r\n this.parentLevelBidAdjustmentGrid.remove();\r\n this.initializeParentLevelBidAdjustmentGrid();\r\n }\r\n\r\n if (inheritInfo != null) {\r\n const { value, level } = inheritInfo;\r\n if (level === 'AdGroup') {\r\n const originalAdGroupCashback = _.chain(this.viewContext)\r\n .result('currentAdGroup')\r\n .result('AdGroupCashback', {})\r\n .value();\r\n\r\n this.viewContext.currentAdGroup = {\r\n ..._.result(this.viewContext, 'currentAdGroup', {}),\r\n AdGroupCashback: {\r\n ...originalAdGroupCashback,\r\n Percent: value,\r\n },\r\n };\r\n } else {\r\n const originalCampaignCashback = _.chain(this.viewContext)\r\n .result('currentCampaign')\r\n .result('CampaignCashback', {})\r\n .value();\r\n\r\n this.viewContext.currentCampaign = {\r\n ..._.result(this.viewContext, 'currentCampaign', {}),\r\n CampaignCashback: {\r\n ...originalCampaignCashback,\r\n Percent: value,\r\n },\r\n };\r\n }\r\n }\r\n\r\n this.renderGrids();\r\n }\r\n\r\n renderGrids() {\r\n if (this.bidAdjustmentGrid) {\r\n this.bidAdjustmentGrid.render();\r\n this.$('.current-level-bid-adjustment-grid').empty().append(this.bidAdjustmentGrid.$el);\r\n }\r\n\r\n if (this.parentLevelBidAdjustmentGrid) {\r\n this.parentLevelBidAdjustmentGrid.render();\r\n this.$('.parent-level-bid-adjustment-grid').empty().append(this.parentLevelBidAdjustmentGrid.$el);\r\n }\r\n\r\n if (this.supportCashbackSettings) {\r\n this.$('.criterion-setting-container').addClass('show-cashback-percent');\r\n } else {\r\n this.$('.criterion-setting-container').removeClass('show-cashback-percent');\r\n }\r\n }\r\n\r\n /**\r\n * Renders the view\r\n *\r\n * @returns {View} returns the view itself\r\n */\r\n render() {\r\n this.$el.html(template(this));\r\n this.$('.criterion-setting-container').addClass(`criterion-setting-${this.criterionType}`);\r\n\r\n if (this.targetSelectionView) {\r\n this.targetSelectionView.render();\r\n this.$('.target-selection-container').empty().append(this.targetSelectionView.$el);\r\n }\r\n\r\n this.renderGrids();\r\n\r\n if (this.targetOrBidSelector) {\r\n this.targetOrBidSelector.render();\r\n this.$('.bid-or-target-and-bid-selector').empty().append(this.targetOrBidSelector.$el);\r\n }\r\n\r\n if (this.levelToggle) {\r\n this.levelToggle.render();\r\n this.$('.level-toggle').empty().append(this.levelToggle.$el);\r\n if (this.currentLevelTargetInfo && this.currentLevelTargetInfo.getParentLevelToggle(this.criterionType)) {\r\n this.$('.target-edit-container').addClass('hide');\r\n this.$('.current-level-bid-adjustment-grid').addClass('hide');\r\n this.$('.parent-level-bid-adjustment-grid').removeClass('hide');\r\n }\r\n }\r\n\r\n this.changeVisibility();\r\n this.setAdGroupInfoVisibility();\r\n\r\n return this;\r\n }\r\n\r\n getIsTargetAndBid() {\r\n return this.targetOrBidSelector.getIsTargetAndBid();\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport { CompanyNameTargetSetting } from './company-name-target-setting';\r\nimport { AudienceCriterionSettingBase } from '../../audience-criterion-setting-base';\r\nimport { onBidAdjChange } from '../shared-utils/bid-adjustment-utils';\r\n\r\nexport class CompanyNameCriterionSetting extends AudienceCriterionSettingBase {\r\n initialize(options) {\r\n this.criterionType = 'CompanyName';\r\n this.type = 'CompanyName';\r\n this.currentLevelTargetInfo = options.currentLevelTargetInfo;\r\n this.showBidOnlyNote = options.showBidOnlyNote;\r\n this.showExclusion = _.has(options, 'showExclusion') ? options.showExclusion : true;\r\n this.defaultBidAdjustment = _.has(options, 'defaultBidAdjustment') ? options.defaultBidAdjustment : null;\r\n this.viewContext = options.viewContext || {};\r\n this.supportCashbackSettings = options.supportCashbackSettings;\r\n this.isFilterCriterionLevelAdGroup = options.isFilterCriterionLevelAdGroup;\r\n this.i18n = DependencyResolver.get('component/i18n/loader!campaignui/feature/audience-campaign');\r\n this.activityLogger = options.activityLogger;\r\n\r\n if (options.showTargetSelection) {\r\n this.initializeTargetSelectionView();\r\n }\r\n\r\n super.initialize(options);\r\n }\r\n onBidAdjChange(e) {\r\n onBidAdjChange(this, e, 'CompanyName');\r\n }\r\n\r\n initializeTargetSelectionView() {\r\n this.targetSelectionView = new CompanyNameTargetSetting({\r\n currentLevelTargetInfo: this.currentLevelTargetInfo,\r\n criterionType: this.criterionType,\r\n type: this.type,\r\n showBidOnlyNote: this.showBidOnlyNote,\r\n showExclusion: this.showExclusion,\r\n defaultBidAdjustment: this.defaultBidAdjustment,\r\n currentLevel: this.viewContext.level,\r\n supportCashbackSettings: this.supportCashbackSettings,\r\n viewContext: this.viewContext,\r\n isFilterCriterionLevelAdGroup: this.isFilterCriterionLevelAdGroup,\r\n activityLogger: this.activityLogger,\r\n });\r\n }\r\n\r\n get titleKey() {\r\n return 'Audience_Campaign_Target_Setting_Company_Title';\r\n }\r\n\r\n get helpKey() {\r\n return 'pop_BA_CampaignCreate_AudTargets_Company';\r\n }\r\n\r\n getSnapshot() {\r\n return this.targetSelectionView.currentLevelTargetInfo.criterionsByType.CompanyName;\r\n }\r\n\r\n getTargetedCriterion() {\r\n const targetedCriterion = _.filter(\r\n this.getSnapshot(),\r\n criterion => criterion.CriterionType === 'CompanyName'\r\n );\r\n\r\n return targetedCriterion;\r\n }\r\n\r\n getExcludedCriterion() {\r\n const excludedCriterion = _.filter(\r\n this.getSnapshot(),\r\n criterion => criterion.CriterionType === 'NegativeCompanyName'\r\n );\r\n\r\n return excludedCriterion;\r\n }\r\n\r\n // Turns list into array. ToDo: This method may be unneeded. Future Cleanup. Same for exclude.\r\n getTargetedValues() {\r\n const criterions = this.getTargetedCriterion();\r\n const selected = [];\r\n const len = criterions.length;\r\n let i = 0;\r\n for (i = 0; i < len; i += 1) {\r\n selected.push(criterions[i].Criterion.Name);\r\n }\r\n return selected;\r\n }\r\n\r\n getExcludedValues() {\r\n const criterions = this.getExcludedCriterion();\r\n const selected = [];\r\n const len = criterions.length;\r\n let i = 0;\r\n for (i = 0; i < len; i += 1) {\r\n selected.push(criterions[i].Criterion.Name);\r\n }\r\n return selected;\r\n }\r\n\r\n getSelectedString(arr) {\r\n let summary = '';\r\n if (arr.length > 1) {\r\n summary = `${arr[0]}, ${this.i18n.getString('CampaignImport_And')} ` +\r\n `${arr.length - 1} ${this.i18n.getString('Page_More')}`;\r\n } else {\r\n summary = `${arr[0]}`;\r\n }\r\n return summary;\r\n }\r\n\r\n getTargetedSummary() {\r\n const selected = this.getTargetedValues();\r\n const data = this.getSnapshot();\r\n\r\n let summary = '';\r\n if (data.length === 0) {\r\n summary = `${this.i18n.getString('Audience_Campaign_Target_Setting_Company_Grid_Column_Target')}\r\n ${this.i18n.getString('Audience_Campaign_Target_Setting_Company_Grid_Column_Companies')}`;\r\n } else if (selected.length !== 0) {\r\n summary = `${this.i18n.getString('AudienceDashboard_Targeted')}: `;\r\n summary += this.getSelectedString(selected);\r\n }\r\n\r\n return summary;\r\n }\r\n\r\n getExcludedSummary() {\r\n const selected = this.getExcludedValues();\r\n let summary = '';\r\n\r\n if (selected.length !== 0) {\r\n summary = `${this.i18n.getString('AudienceDashboard_Excluded')}: `;\r\n summary += this.getSelectedString(selected);\r\n }\r\n\r\n return summary;\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport Promise from 'bluebird';\r\nimport _ from 'underscore';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport { criterionHelper } from '@bingads-webui-campaign/audience-campaign-shared';\r\nimport template from './search-result-view-template.pug';\r\n\r\n/**\r\n * Class for search result view for linkedin targets\r\n *\r\n * @class SearchResultView\r\n * @extends {Backbone.View}\r\n */\r\nexport class SearchResultView extends Backbone.View {\r\n /**\r\n * Initializes the class.\r\n * @param {Object} options - options for the initialize\r\n *\r\n * @returns {undefined}\r\n */\r\n initialize(options) {\r\n this.options = options;\r\n this.currentLevelTargetInfo = this.options.currentLevelTargetInfo;\r\n this.showExclusion = _.has(options, 'showExclusion') ? options.showExclusion : true;\r\n this.defaultBidAdjustment = _.has(options, 'defaultBidAdjustment') ? options.defaultBidAdjustment : 0;\r\n this.defaultCashbackPercent = options.defaultCashbackPercent;\r\n this.i18n = DependencyResolver.get('component/i18n/loader!campaignui/feature/audience-campaign');\r\n\r\n this.items = [];\r\n this.isVisible = true;\r\n }\r\n\r\n /**\r\n * Define events and event handlers for them.\r\n *\r\n * @readonly\r\n * @returns {Object} returns object defining events\r\n */\r\n get events() {\r\n return {\r\n 'click a.job-function-search-include-link': 'onInclude',\r\n 'click a.job-function-search-exclude-link': 'onExclude',\r\n };\r\n }\r\n\r\n /**\r\n * Update the state of the state\r\n *\r\n * @param {Object} searchResult - array of search result\r\n * @param {String} searchTerm - search term string.\r\n *\r\n * @return {Object} - view itself.\r\n */\r\n setResults(searchResult, searchTerm) {\r\n this.items = _.map(searchResult, (resultItem) => {\r\n const item = resultItem;\r\n\r\n const matchStartIndex = item.name.toLowerCase().indexOf(searchTerm.toLowerCase());\r\n\r\n if (matchStartIndex >= 0) {\r\n const matchEndIndex = matchStartIndex + searchTerm.length;\r\n\r\n item.caseMatchedSearchTerm = item.name.substring(matchStartIndex, matchEndIndex);\r\n }\r\n\r\n return item;\r\n });\r\n\r\n return this.render();\r\n }\r\n\r\n /**\r\n * Renders the view\r\n *\r\n * @returns {View} returns the view itself\r\n */\r\n render() {\r\n this.$el.html(template(this));\r\n const ariaLiveResultsText = this.items.length < 1 ? this.i18n.getString('Audience_Campaign_Target_Setting_Company_Search_No_Result') : this.i18n.getString('Found {{totalCount}} Results', { totalCount: this.items.length });\r\n this.$el.closest('.search-result-view-container').find('.search-result.live-region').text(ariaLiveResultsText);\r\n\r\n return this;\r\n }\r\n\r\n setDefaultCashbackPercent(percent) {\r\n this.defaultCashbackPercent = percent;\r\n }\r\n\r\n\r\n /**\r\n * Event handler for target include action\r\n * @private\r\n *\r\n * @param {Object} e - click event object\r\n * @returns {Promise} - Promise of handling onInclude event\r\n */\r\n onInclude(e) {\r\n e.stopPropagation();\r\n\r\n if (!e.target) {\r\n return Promise.resolve(false);\r\n }\r\n\r\n const jobFunctionTargetItem =\r\n _.first(_.filter(this.items, item => item.id === parseInt(e.target.dataset.id, 10)));\r\n\r\n const criterion = criterionHelper.buildLinkedInCriterion(\r\n 'JobFunction',\r\n jobFunctionTargetItem,\r\n true,\r\n this.defaultBidAdjustment,\r\n this.defaultCashbackPercent\r\n );\r\n\r\n return this.currentLevelTargetInfo.createAsync(criterion);\r\n }\r\n\r\n /**\r\n * Event handler for target exclude action\r\n * @private\r\n *\r\n * @param {Object} e - click event object\r\n * @returns {Promise} - Promise of handling onExclude event\r\n */\r\n onExclude(e) {\r\n e.stopPropagation();\r\n\r\n if (!e.target) {\r\n return Promise.resolve(false);\r\n }\r\n\r\n const jobFunctionTargetItem =\r\n _.first(_.filter(this.items, item => item.id === parseInt(e.target.dataset.id, 10)));\r\n\r\n const criterion = criterionHelper.buildLinkedInCriterion(\r\n 'JobFunction',\r\n jobFunctionTargetItem,\r\n false,\r\n this.defaultBidAdjustment\r\n );\r\n\r\n return this.currentLevelTargetInfo.createAsync(criterion);\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport { SearchResultView } from '../search-result/search-result-view';\r\nimport { SearchViewBase } from '../../search-view-base';\r\n\r\n/**\r\n * Class for search view for linked in targets\r\n *\r\n * @class JobFunctionSearchView\r\n * @extends {Backbone.View}\r\n */\r\nexport class JobFunctionSearchView extends SearchViewBase {\r\n /**\r\n * Initializes the class.\r\n * @param {Object} options - options object\r\n *\r\n * @returns {undefined}\r\n */\r\n initialize(options) {\r\n super.initialize(options);\r\n\r\n this.initializeSearchDataTask = this.initializeSearchData();\r\n this.searchBox.on('search', searchTerm => this.onSearch(searchTerm));\r\n this.searchResultView = new SearchResultView(this.options);\r\n this.searchTerm = '';\r\n\r\n this.listenTo(\r\n this.currentLevelTargetInfo,\r\n `${this.currentLevelTargetInfo.resourceName}JobFunctionChanged`,\r\n () => this.onCriterionChange()\r\n );\r\n }\r\n\r\n /**\r\n * Initialize search data by fetching data from the MT\r\n * @private\r\n *\r\n * @returns {Promise} - promise of having data from MT\r\n */\r\n initializeSearchData() {\r\n const odata = DependencyResolver.get('component/http/channel/odata');\r\n const context = DependencyResolver.get('audienceCampaignPageContext');\r\n const demogrphicsUrl = `Customers(${context.CurrentCustomerId})/Accounts(${context.CurrentAccount.Id})/Demographics/`;\r\n const jobFunctionUrl = 'Model.JobFunction';\r\n\r\n return odata.get(demogrphicsUrl + jobFunctionUrl)\r\n .then((data) => {\r\n this.searchData = data.value;\r\n this.setSearchResult();\r\n });\r\n }\r\n\r\n /**\r\n * Event handler for search requested\r\n * @private\r\n *\r\n * @param {string} searchTerm - search keyword\r\n * @returns {Object} - promise of setting the search result\r\n */\r\n onSearch(searchTerm) {\r\n return this.initializeSearchDataTask.then(() => {\r\n this.searchTerm = searchTerm;\r\n\r\n this.setSearchResult();\r\n });\r\n }\r\n\r\n onCriterionChange() {\r\n this.setSearchResult();\r\n }\r\n\r\n setDefaultCashbackPercent(percent) {\r\n this.searchResultView.setDefaultCashbackPercent(percent);\r\n }\r\n\r\n /**\r\n * Set the search result for the render\r\n * @private\r\n *\r\n * @returns {undefined}\r\n */\r\n setSearchResult() {\r\n const jobFunctions = this.currentLevelTargetInfo.getAllByType('JobFunction');\r\n const targetedJobFunctionIds = _.map(jobFunctions, (jobFunction) => {\r\n if (jobFunction.CriterionType === 'JobFunction') {\r\n return parseInt(jobFunction.Criterion.JobFunctionCriterion.Target, 10);\r\n }\r\n\r\n return -1;\r\n });\r\n const excludedJobFunctionIds = _.map(jobFunctions, (jobFunction) => {\r\n if (jobFunction.CriterionType === 'NegativeJobFunction') {\r\n return parseInt(jobFunction.Criterion.JobFunctionCriterion.Target, 10);\r\n }\r\n\r\n return -1;\r\n });\r\n\r\n // Filter the results based on search term\r\n const searchText = this.searchTerm.toLowerCase();\r\n\r\n let searchResults = this.searchData;\r\n\r\n if (this.searchTerm.length > 0) {\r\n searchResults =\r\n _.filter(this.searchData, item => item.Name.toLowerCase().indexOf(searchText) > -1);\r\n }\r\n\r\n const results = _.map(searchResults, (result) => {\r\n const item = {\r\n id: result.Id,\r\n name: result.Name,\r\n isIncluded: _.contains(targetedJobFunctionIds, result.Id),\r\n isExcluded: _.contains(excludedJobFunctionIds, result.Id),\r\n };\r\n\r\n return item;\r\n });\r\n\r\n this.searchResultView.setResults(results, this.searchTerm);\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport { SearchBasedTargetSetting, removeAllColumnConfig, statusColumnConfig, nameColumnConfig } from '../search-based-target-setting';\r\nimport searchBasedTargetGridRemoveColumnTemplate from '../search-based-target-grid-remove-column-template.pug';\r\nimport searchBasedTargetGridStateTemplate from '../search-based-target-grid-state-template.pug';\r\nimport { JobFunctionSearchView } from './search-view/search-view';\r\nimport { cashbackPercentColumnConfig } from '../shared-utils/bid-adjustment-utils';\r\n\r\nexport class JobFunctionTargetSetting extends SearchBasedTargetSetting {\r\n initialize(options) {\r\n this.options = options;\r\n this.showExclusion = _.has(options, 'showExclusion') ? options.showExclusion : true;\r\n\r\n this.i18nKeys = {\r\n titleKey: 'Audience_Campaign_Target_Setting_Job_Function_Title',\r\n helpKey: 'pop_BA_CampaignCreate_AudTargets_JobFunction',\r\n descriptionKey: this.showExclusion\r\n ? 'Audience_Campaign_Target_Setting_Job_Function_Description'\r\n : 'Audience_Campaign_Target_Setting_Job_Function_Description_Bid_Only',\r\n };\r\n\r\n this.currentLevelTargetInfo = options.currentLevelTargetInfo;\r\n this.criterionName = 'JobFunction';\r\n const i18n = DependencyResolver.get('component/i18n/loader!campaignui/feature/audience-campaign');\r\n const bingadsGridColumn = DependencyResolver.get('component/bingads-grid/shared/column');\r\n const pageContext = DependencyResolver.get('audienceCampaignPageContext');\r\n this.isFilterCriterionLevelAdGroup =\r\n options.isFilterCriterionLevelAdGroup || pageContext.isFilterCriterionLevelAdGroup;\r\n this.supportCashbackSettings = options.supportCashbackSettings;\r\n\r\n const jobFunctionSettingGridConfig = {\r\n columns: [\r\n bingadsGridColumn({\r\n name: 'isIncludedOrExcluded',\r\n title: this.showExclusion ? i18n.getString('Audience_Campaign_Target_Setting_Job_Function_Grid_Column_Target') : '',\r\n template: (local) => {\r\n const criterionType = local.value.CriterionType;\r\n\r\n return searchBasedTargetGridStateTemplate({\r\n isIncluded: criterionType === 'JobFunction',\r\n isExcluded: criterionType === 'NegativeJobFunction',\r\n includedString: i18n.getString('Audience_Campaign_Target_Setting_Included_Status'),\r\n excludedString: i18n.getString('Audience_Campaign_Target_Setting_Excluded_Status'),\r\n });\r\n },\r\n property: _.identity,\r\n }),\r\n bingadsGridColumn(_.extend({}, nameColumnConfig('JobFunctionCriterion'), {\r\n i18n,\r\n name: 'name',\r\n title: 'Audience_Campaign_Target_Setting_Job_Function_Grid_Column_Job_Functions',\r\n })),\r\n ...(options.currentLevel === 'adgroup'\r\n && (this.options.showBidOnlyNote || this.options.showExclusion)\r\n && this.isFilterCriterionLevelAdGroup && this.supportCashbackSettings) ?\r\n [bingadsGridColumn(cashbackPercentColumnConfig(this, i18n, 'JobFunction'))] : [],\r\n bingadsGridColumn({\r\n name: 'removeAll',\r\n template: () => searchBasedTargetGridRemoveColumnTemplate({ i18n }),\r\n headClasses: ['linked-in-target-grid__remove-body'],\r\n bodyClasses: ['text-right'],\r\n }),\r\n ],\r\n };\r\n\r\n const isolatedJobFunctionSettingGridConfig = targetType => ({\r\n columns: [\r\n bingadsGridColumn(_.extend({}, nameColumnConfig('JobFunctionCriterion'), {\r\n name: 'name',\r\n html: searchBasedTargetGridStateTemplate({\r\n isIncluded: targetType === 'Included',\r\n isExcluded: targetType === 'Excluded',\r\n includedString: i18n.getString(`Audience_Campaign_Target_Setting_Job_Function_${targetType}_Status`),\r\n excludedString: i18n.getString(`Audience_Campaign_Target_Setting_Job_Function_${targetType}_Status`),\r\n }),\r\n })),\r\n bingadsGridColumn(removeAllColumnConfig(i18n)),\r\n ],\r\n });\r\n\r\n const jobFunctionSettingNewUIGridConfig = targetType => ({\r\n columns: [\r\n {\r\n name: 'JobFuncitonTarget',\r\n property: _.identity,\r\n html: `${i18n.getString(`Audience_Campaign_Target_Setting_Job_Function_${targetType}_Grid_Title`)}`,\r\n columns: [\r\n bingadsGridColumn(_.extend({}, statusColumnConfig(targetType), { headClasses: 'hide' })),\r\n bingadsGridColumn(_.extend({}, nameColumnConfig('JobFunctionCriterion'), {\r\n name: 'name',\r\n headClasses: 'hide',\r\n })),\r\n ],\r\n },\r\n bingadsGridColumn(removeAllColumnConfig(i18n)),\r\n ],\r\n });\r\n\r\n if (this.options.isolatedGrid) {\r\n if (this.options.isForVNext) {\r\n this.options.gridConfig = jobFunctionSettingNewUIGridConfig;\r\n } else {\r\n this.options.gridConfig = isolatedJobFunctionSettingGridConfig;\r\n }\r\n } else {\r\n this.options.gridConfig = jobFunctionSettingGridConfig;\r\n }\r\n this.searchView = new JobFunctionSearchView(this.options);\r\n\r\n super.initialize(this.options);\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport { JobFunctionTargetSetting } from './job-function-target-setting';\r\nimport { AudienceCriterionSettingBase } from '../../audience-criterion-setting-base';\r\nimport { onBidAdjChange } from '../shared-utils/bid-adjustment-utils';\r\n\r\nexport class JobFunctionCriterionSetting extends AudienceCriterionSettingBase {\r\n initialize(options) {\r\n this.criterionType = 'JobFunction';\r\n this.type = 'JobFunction';\r\n this.currentLevelTargetInfo = options.currentLevelTargetInfo;\r\n this.showBidOnlyNote = options.showBidOnlyNote;\r\n this.showExclusion = _.has(options, 'showExclusion') ? options.showExclusion : true;\r\n this.defaultBidAdjustment = _.has(options, 'defaultBidAdjustment') ? options.defaultBidAdjustment : null;\r\n this.viewContext = options.viewContext || {};\r\n this.supportCashbackSettings = options.supportCashbackSettings;\r\n this.isFilterCriterionLevelAdGroup = options.isFilterCriterionLevelAdGroup;\r\n this.i18n = DependencyResolver.get('component/i18n/loader!campaignui/feature/audience-campaign');\r\n this.activityLogger = options.activityLogger;\r\n\r\n if (options.showTargetSelection) {\r\n this.initializeTargetSelectionView();\r\n }\r\n\r\n super.initialize(options);\r\n }\r\n\r\n onBidAdjChange(e) {\r\n onBidAdjChange(this, e, 'JobFunction');\r\n }\r\n\r\n initializeTargetSelectionView() {\r\n this.targetSelectionView = new JobFunctionTargetSetting({\r\n currentLevelTargetInfo: this.currentLevelTargetInfo,\r\n criterionType: this.criterionType,\r\n type: this.type,\r\n showBidOnlyNote: this.showBidOnlyNote,\r\n showExclusion: this.showExclusion,\r\n defaultBidAdjustment: this.defaultBidAdjustment,\r\n currentLevel: this.viewContext.level,\r\n supportCashbackSettings: this.supportCashbackSettings,\r\n viewContext: this.viewContext,\r\n isFilterCriterionLevelAdGroup: this.isFilterCriterionLevelAdGroup,\r\n activityLogger: this.activityLogger,\r\n });\r\n }\r\n\r\n get titleKey() {\r\n return 'Audience_Campaign_Target_Setting_Job_Function_Title';\r\n }\r\n\r\n get helpKey() {\r\n return 'pop_BA_CampaignCreate_AudTargets_JobFunction';\r\n }\r\n\r\n getSnapshot() {\r\n return this.targetSelectionView.currentLevelTargetInfo.criterionsByType.JobFunction;\r\n }\r\n\r\n getTargetedCriterion() {\r\n const targetedCriterion = _.filter(\r\n this.getSnapshot(),\r\n criterion => criterion.CriterionType === 'JobFunction'\r\n );\r\n\r\n return targetedCriterion;\r\n }\r\n\r\n getExcludedCriterion() {\r\n const excludedCriterion = _.filter(\r\n this.getSnapshot(),\r\n criterion => criterion.CriterionType === 'NegativeJobFunction'\r\n );\r\n\r\n return excludedCriterion;\r\n }\r\n\r\n getTargetedValues() {\r\n const criterions = this.getTargetedCriterion();\r\n const selected = [];\r\n const len = criterions.length;\r\n let i = 0;\r\n for (i = 0; i < len; i += 1) {\r\n selected.push(criterions[i].Criterion.Name);\r\n }\r\n return selected;\r\n }\r\n\r\n getExcludedValues() {\r\n const criterions = this.getExcludedCriterion();\r\n const selected = [];\r\n const len = criterions.length;\r\n let i = 0;\r\n for (i = 0; i < len; i += 1) {\r\n selected.push(criterions[i].Criterion.Name);\r\n }\r\n return selected;\r\n }\r\n\r\n getSelectedString(arr) {\r\n let summary = '';\r\n if (arr.length > 1) {\r\n summary = `${arr[0]}, ${this.i18n.getString('CampaignImport_And')} ${arr.length - 1}`\r\n + ` ${this.i18n.getString('Page_More')}`;\r\n } else {\r\n summary = `${arr[0]}`;\r\n }\r\n\r\n return summary;\r\n }\r\n\r\n getTargetedSummary() {\r\n const selected = this.getTargetedValues();\r\n const data = this.getSnapshot();\r\n let summary = '';\r\n\r\n if (data.length === 0) {\r\n summary = `${this.i18n.getString('Audience_Campaign_Target_Setting_Company_Grid_Column_Target')}\r\n ${this.i18n.getString('Audience_Campaign_Target_Setting_Job_Function_Grid_Column_Job_Functions')}`;\r\n } else if (selected.length !== 0) {\r\n summary = `${this.i18n.getString('AudienceDashboard_Targeted')}: `;\r\n summary += this.getSelectedString(selected);\r\n }\r\n\r\n return summary;\r\n }\r\n\r\n getExcludedSummary() {\r\n const selected = this.getExcludedValues();\r\n let summary = '';\r\n\r\n if (selected.length !== 0) {\r\n summary = `${this.i18n.getString('AudienceDashboard_Excluded')}: `;\r\n summary += this.getSelectedString(selected);\r\n }\r\n\r\n return summary;\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport _ from 'underscore';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport { Treeview } from '@bingads-webui/treeview';\r\nimport { criterionHelper } from '@bingads-webui-campaign/audience-campaign-shared';\r\nimport template from './search-view-template.pug';\r\n\r\n/**\r\n * Class for search view for linked in targets\r\n *\r\n * @class SearchView\r\n * @extends {Backbone.View}\r\n */\r\nexport class SearchView extends Backbone.View {\r\n /**\r\n * Initializes the class.\r\n * @param {Object} options - options object\r\n *\r\n * @returns {undefined}\r\n */\r\n initialize(options) {\r\n this.options = options;\r\n this.currentLevelTargetInfo = this.options.currentLevelTargetInfo;\r\n this.showExclusion = _.has(options, 'showExclusion') ? options.showExclusion : true;\r\n this.defaultBidAdjustment = _.has(options, 'defaultBidAdjustment') ? options.defaultBidAdjustment : 0;\r\n\r\n this.listenTo(\r\n this.currentLevelTargetInfo,\r\n `${this.currentLevelTargetInfo.resourceName}IndustryChanged`,\r\n () => this.onCriterionChange()\r\n );\r\n\r\n this.i18n = DependencyResolver.get('component/i18n/loader!campaignui/feature/audience-campaign');\r\n\r\n this.searchTreeInitializationPromise = this.initializeSearchTree();\r\n this.defaultCashbackPercent = options.defaultCashbackPercent;\r\n\r\n this.refreshTargetedStates();\r\n }\r\n\r\n /**\r\n * Renders the view\r\n *\r\n * @returns {View} returns the view itself\r\n */\r\n render() {\r\n this.$el.html(template(this));\r\n\r\n this.searchTreeInitializationPromise.then(() => {\r\n this.treeView.render();\r\n this.$('.search-result-view-container').append(this.treeView.$el);\r\n });\r\n\r\n return this;\r\n }\r\n\r\n setDefaultCashbackPercent(percent) {\r\n this.defaultCashbackPercent = percent;\r\n }\r\n\r\n /**\r\n * Event handler for target include action\r\n * @private\r\n *\r\n * @param {Object} data - criterion data\r\n * @returns {Promise} - Promise of handling onInclude event\r\n */\r\n onInclude(data) {\r\n const criterion = criterionHelper.buildLinkedInCriterion(\r\n 'Industry',\r\n data,\r\n true,\r\n this.defaultBidAdjustment,\r\n this.defaultCashbackPercent\r\n );\r\n\r\n return this.currentLevelTargetInfo.createAsync(criterion);\r\n }\r\n\r\n /**\r\n * Event handler for target exclude action\r\n * @private\r\n *\r\n * @param {Object} data - criterion data\r\n * @returns {Promise} - Promise of handling onExclude event\r\n */\r\n onExclude(data) {\r\n const criterion = criterionHelper.buildLinkedInCriterion(\r\n 'Industry',\r\n data,\r\n false,\r\n this.defaultBidAdjustment\r\n );\r\n\r\n return this.currentLevelTargetInfo.createAsync(criterion);\r\n }\r\n\r\n /**\r\n * Initializes the search tree by fetching the data\r\n *\r\n * @returns {Promise} - promise of creating a search tree instance\r\n */\r\n initializeSearchTree() {\r\n const odata = DependencyResolver.get('component/http/channel/odata');\r\n const context = DependencyResolver.get('audienceCampaignPageContext');\r\n const demogrphicsUrl = `Customers(${context.CurrentCustomerId})/Accounts(${context.CurrentAccount.Id})/Demographics/`;\r\n const industryUrl = 'Model.Industry';\r\n\r\n return odata.get(demogrphicsUrl + industryUrl)\r\n .then(data => this.processIndustryRowData(data.value))\r\n .then((treeData) => {\r\n const options = {\r\n i18n: this.i18n,\r\n actions: (() => {\r\n const actions = [];\r\n\r\n if (this.showExclusion) {\r\n actions.push({\r\n title: this.i18n.getString('Audience_Campaign_Target_Setting_Exclude_Action'),\r\n callback: node => this.onExclude(node.data),\r\n });\r\n }\r\n actions.push({\r\n title: this.i18n.getString('Audience_Campaign_Target_Setting_Include_Action'),\r\n callback: node => this.onInclude(node.data),\r\n });\r\n\r\n return actions;\r\n })(),\r\n setLeafState: (leafNodeData) => {\r\n const state = {\r\n shouldSetState: false,\r\n stateValue: '',\r\n };\r\n\r\n if (_.contains(this.targetedIndustryIds, leafNodeData.Id)) {\r\n state.shouldSetState = true;\r\n state.stateValue = this.i18n.getString('Audience_Campaign_Target_Setting_Included_Status');\r\n } else if (_.contains(this.excludedIndustryIds, leafNodeData.Id)) {\r\n state.shouldSetState = true;\r\n state.stateValue = this.i18n.getString('Audience_Campaign_Target_Setting_Excluded_Status');\r\n }\r\n\r\n return state;\r\n },\r\n placeHolderText: this.i18n.getString('Audience_Campaign_Target_Setting_Industry_Search_Placeholder'),\r\n };\r\n\r\n this.treeView = new Treeview(treeData, options);\r\n });\r\n }\r\n\r\n /**\r\n * Update the search result.\r\n *\r\n * @returns {undefined}\r\n */\r\n updateSearchResult() {\r\n if (this.treeView) {\r\n this.treeView.updateView();\r\n }\r\n }\r\n\r\n /**\r\n * Using the data from the MT, it populates the Criterion field to be saved\r\n *\r\n * @param {Array} data - array of data objects containing the information\r\n * @returns {Object} groupedTree - tree structured data\r\n */\r\n processIndustryRowData(data) {\r\n const groupedTree = {\r\n children: [],\r\n };\r\n\r\n _.each(data, (item) => {\r\n const node = {\r\n title: item.Name,\r\n data: item,\r\n };\r\n\r\n if (!_.some(groupedTree.children, child => child.title === item.IndustryGroupName)) {\r\n groupedTree.children.push({\r\n title: item.IndustryGroupName,\r\n children: [],\r\n });\r\n }\r\n\r\n const groupToInsert = _.findWhere(groupedTree.children, { title: item.IndustryGroupName });\r\n\r\n groupToInsert.children.push(node);\r\n });\r\n\r\n return groupedTree;\r\n }\r\n\r\n /**\r\n * Event handler for criterion change\r\n * @private\r\n *\r\n * @returns {undefined}\r\n */\r\n onCriterionChange() {\r\n this.refreshTargetedStates();\r\n\r\n this.updateSearchResult();\r\n }\r\n\r\n /**\r\n * Refreses the trageted state in memory data by reading what is svaed in Intermediate\r\n *\r\n * @returns {undefined}\r\n */\r\n refreshTargetedStates() {\r\n const industries = this.currentLevelTargetInfo.getAllByType('Industry');\r\n this.targetedIndustryIds = _.map(industries, (industry) => {\r\n if (industry.CriterionType === 'Industry') {\r\n return parseInt(industry.Criterion.IndustryCriterion.Target, 10);\r\n }\r\n\r\n return -1;\r\n });\r\n this.excludedIndustryIds = _.map(industries, (industry) => {\r\n if (industry.CriterionType === 'NegativeIndustry') {\r\n return parseInt(industry.Criterion.IndustryCriterion.Target, 10);\r\n }\r\n\r\n return -1;\r\n });\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport { SearchBasedTargetSetting, removeAllColumnConfig, statusColumnConfig, nameColumnConfig } from '../search-based-target-setting';\r\nimport searchBasedTargetGridRemoveColumnTemplate from '../search-based-target-grid-remove-column-template.pug';\r\nimport searchBasedTargetGridStateTemplate from '../search-based-target-grid-state-template.pug';\r\nimport { SearchView } from './search-view/search-view';\r\nimport { cashbackPercentColumnConfig } from '../shared-utils/bid-adjustment-utils';\r\n\r\nexport class IndustryTargetSetting extends SearchBasedTargetSetting {\r\n initialize(options) {\r\n this.options = options;\r\n this.showExclusion = _.has(options, 'showExclusion') ? options.showExclusion : true;\r\n\r\n this.i18nKeys = {\r\n titleKey: 'Audience_Campaign_Target_Setting_Industry_Title',\r\n helpKey: 'pop_BA_CampaignCreate_AudTargets_Industry',\r\n descriptionKey: this.showExclusion\r\n ? 'Audience_Campaign_Target_Setting_Industry_Description'\r\n : 'Audience_Campaign_Target_Setting_Industry_Description_Bid_Only',\r\n };\r\n\r\n this.criterionName = 'Industry';\r\n this.currentLevelTargetInfo = options.currentLevelTargetInfo;\r\n const i18n = DependencyResolver.get('component/i18n/loader!campaignui/feature/audience-campaign');\r\n const bingadsGridColumn = DependencyResolver.get('component/bingads-grid/shared/column');\r\n const pageContext = DependencyResolver.get('audienceCampaignPageContext');\r\n this.isFilterCriterionLevelAdGroup =\r\n options.isFilterCriterionLevelAdGroup || pageContext.isFilterCriterionLevelAdGroup;\r\n this.supportCashbackSettings = options.supportCashbackSettings;\r\n\r\n const industrySettingGridConfig = {\r\n columns: [\r\n bingadsGridColumn({\r\n name: 'isIncludedOrExcluded',\r\n title: this.showExclusion ? i18n.getString('Audience_Campaign_Target_Setting_Industry_Grid_Column_Target') : '',\r\n template: (local) => {\r\n const criterionType = local.value.CriterionType;\r\n\r\n return searchBasedTargetGridStateTemplate({\r\n isIncluded: criterionType === 'Industry',\r\n isExcluded: criterionType === 'NegativeIndustry',\r\n includedString: i18n.getString('Audience_Campaign_Target_Setting_Included_Status'),\r\n excludedString: i18n.getString('Audience_Campaign_Target_Setting_Excluded_Status'),\r\n });\r\n },\r\n property: _.identity,\r\n }),\r\n bingadsGridColumn(_.extend({}, nameColumnConfig('IndustryCriterion'), {\r\n i18n,\r\n name: 'name',\r\n title: 'Audience_Campaign_Target_Setting_Industry_Grid_Column_Industries',\r\n })),\r\n ...(options.currentLevel === 'adgroup'\r\n && (this.options.showBidOnlyNote || this.options.showExclusion)\r\n && this.isFilterCriterionLevelAdGroup && this.supportCashbackSettings) ?\r\n [bingadsGridColumn(cashbackPercentColumnConfig(this, i18n, 'Industry'))] : [],\r\n bingadsGridColumn({\r\n name: 'removeAll',\r\n template: () => searchBasedTargetGridRemoveColumnTemplate({ i18n }),\r\n headClasses: ['linked-in-target-grid__remove-body'],\r\n bodyClasses: ['text-right'],\r\n }),\r\n ],\r\n };\r\n\r\n const isolatedIndustrySettingGridConfig = targetType => ({\r\n columns: [\r\n bingadsGridColumn({\r\n name: 'IndustryName',\r\n template: (local) => {\r\n const criterion = local.value.Criterion.IndustryCriterion;\r\n\r\n return criterion.Name;\r\n },\r\n property: _.identity,\r\n html: searchBasedTargetGridStateTemplate({\r\n isIncluded: targetType === 'Included',\r\n isExcluded: targetType === 'Excluded',\r\n includedString: i18n.getString(`Audience_Campaign_Target_Setting_Industry_${targetType}_Status`),\r\n excludedString: i18n.getString(`Audience_Campaign_Target_Setting_Industry_${targetType}_Status`),\r\n }),\r\n }),\r\n bingadsGridColumn(removeAllColumnConfig(i18n)),\r\n ],\r\n });\r\n\r\n const industrySettingNewUIGridConfig = targetType => ({\r\n columns: [\r\n {\r\n name: 'IndustryTarget',\r\n property: _.identity,\r\n html: `${i18n.getString(`Audience_Campaign_Target_Setting_Industry_${targetType}_Grid_Title`)}`,\r\n columns: [\r\n bingadsGridColumn(_.extend({}, statusColumnConfig(targetType), { headClasses: 'hide' })),\r\n bingadsGridColumn(_.extend({}, nameColumnConfig('IndustryCriterion'), {\r\n name: 'IndustryName',\r\n headClasses: 'hide',\r\n })),\r\n ],\r\n },\r\n bingadsGridColumn(removeAllColumnConfig(i18n)),\r\n ],\r\n });\r\n\r\n if (this.options.isolatedGrid) {\r\n if (this.options.isForVNext) {\r\n this.options.gridConfig = industrySettingNewUIGridConfig;\r\n } else {\r\n this.options.gridConfig = isolatedIndustrySettingGridConfig;\r\n }\r\n } else {\r\n this.options.gridConfig = industrySettingGridConfig;\r\n }\r\n this.searchView = new SearchView(this.options);\r\n\r\n super.initialize(this.options);\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport { IndustryTargetSetting } from './industry-target-setting';\r\nimport { AudienceCriterionSettingBase } from '../../audience-criterion-setting-base';\r\nimport { onBidAdjChange } from '../shared-utils/bid-adjustment-utils';\r\n\r\nexport class IndustryCriterionSetting extends AudienceCriterionSettingBase {\r\n initialize(options) {\r\n this.criterionType = 'Industry';\r\n this.type = 'Industry';\r\n this.currentLevelTargetInfo = options.currentLevelTargetInfo;\r\n this.showBidOnlyNote = options.showBidOnlyNote;\r\n this.showExclusion = _.has(options, 'showExclusion') ? options.showExclusion : true;\r\n this.defaultBidAdjustment = _.has(options, 'defaultBidAdjustment') ? options.defaultBidAdjustment : null;\r\n this.supportCashbackSettings = options.supportCashbackSettings;\r\n this.viewContext = options.viewContext || {};\r\n this.isFilterCriterionLevelAdGroup = options.isFilterCriterionLevelAdGroup;\r\n this.i18n = DependencyResolver.get('component/i18n/loader!campaignui/feature/audience-campaign');\r\n this.activityLogger = options.activityLogger;\r\n\r\n if (options.showTargetSelection) {\r\n this.initializeTargetSelectionView();\r\n }\r\n\r\n super.initialize(options);\r\n }\r\n\r\n onBidAdjChange(e) {\r\n onBidAdjChange(this, e, 'Industry');\r\n }\r\n\r\n initializeTargetSelectionView() {\r\n this.targetSelectionView = new IndustryTargetSetting({\r\n currentLevelTargetInfo: this.currentLevelTargetInfo,\r\n criterionType: this.criterionType,\r\n type: this.type,\r\n showBidOnlyNote: this.showBidOnlyNote,\r\n showExclusion: this.showExclusion,\r\n defaultBidAdjustment: this.defaultBidAdjustment,\r\n currentLevel: this.viewContext.level,\r\n supportCashbackSettings: this.supportCashbackSettings,\r\n viewContext: this.viewContext,\r\n isFilterCriterionLevelAdGroup: this.isFilterCriterionLevelAdGroup,\r\n activityLogger: this.activityLogger,\r\n });\r\n }\r\n\r\n get titleKey() {\r\n return 'Audience_Campaign_Target_Setting_Industry_Title';\r\n }\r\n\r\n get helpKey() {\r\n return 'pop_BA_CampaignCreate_AudTargets_Industry';\r\n }\r\n\r\n getSnapshot() {\r\n return this.targetSelectionView.currentLevelTargetInfo.criterionsByType.Industry;\r\n }\r\n\r\n getTargetedCriterion() {\r\n const targetedCriterion = _.filter(\r\n this.getSnapshot(),\r\n criterion => criterion.CriterionType === 'Industry'\r\n );\r\n\r\n return targetedCriterion;\r\n }\r\n\r\n getExcludedCriterion() {\r\n const excludedCriterion = _.filter(\r\n this.getSnapshot(),\r\n criterion => criterion.CriterionType === 'NegativeIndustry'\r\n );\r\n\r\n return excludedCriterion;\r\n }\r\n\r\n getTargetedValues() {\r\n const criterions = this.getTargetedCriterion();\r\n const selected = [];\r\n const len = criterions.length;\r\n let i = 0;\r\n for (i = 0; i < len; i += 1) {\r\n selected.push(criterions[i].Criterion.Name);\r\n }\r\n return selected;\r\n }\r\n\r\n getExcludedValues() {\r\n const criterions = this.getExcludedCriterion();\r\n const selected = [];\r\n const len = criterions.length;\r\n let i = 0;\r\n for (i = 0; i < len; i += 1) {\r\n selected.push(criterions[i].Criterion.Name);\r\n }\r\n return selected;\r\n }\r\n\r\n getSelectedString(arr) {\r\n let summary = '';\r\n if (arr.length > 1) {\r\n summary = `${arr[0]}, ${this.i18n.getString('CampaignImport_And')} ` +\r\n `${arr.length - 1} ${this.i18n.getString('Page_More')}`;\r\n } else {\r\n summary = `${arr[0]}`;\r\n }\r\n return summary;\r\n }\r\n\r\n getTargetedSummary() {\r\n const selected = this.getTargetedValues();\r\n const data = this.getSnapshot();\r\n let summary = '';\r\n\r\n if (data.length === 0) {\r\n summary = `${this.i18n.getString('Audience_Campaign_Target_Setting_Company_Grid_Column_Target')}\r\n ${this.i18n.getString('Audience_Campaign_Target_Setting_Industry_Grid_Column_Industries')}`;\r\n } else if (selected.length !== 0) {\r\n summary = `${this.i18n.getString('AudienceDashboard_Targeted')}: `;\r\n summary += this.getSelectedString(selected);\r\n }\r\n\r\n return summary;\r\n }\r\n\r\n getExcludedSummary() {\r\n const selected = this.getExcludedValues();\r\n let summary = '';\r\n\r\n if (selected.length !== 0) {\r\n summary = `${this.i18n.getString('AudienceDashboard_Excluded')}: `;\r\n summary += this.getSelectedString(selected);\r\n }\r\n\r\n return summary;\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport _ from 'underscore';\r\nimport pgrid from 'projection-grid';\r\nimport { paginationPlugin } from '@bingads-webui/projection-grid-pagination';\r\nimport { cloneDeep } from '@bingads-webui-universal/primitive-utilities';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport template from './search-based-target-grid-view-template.pug';\r\nimport paginationTemplate from './pagination-template.pug';\r\nimport * as targetTypes from './search-based-target-type';\r\n\r\n/**\r\n * Class for grid view for linkedin targets\r\n *\r\n * @class SearchBasedTargetGridViewPlacement\r\n * @extends {Backbone.View}\r\n */\r\nexport class SearchBasedTargetGridViewPlacement extends Backbone.View {\r\n /**\r\n * Initializes the class.\r\n * @param {Object} options - options object\r\n *\r\n * @returns {undefined}\r\n */\r\n initialize(options = {}) {\r\n this.options = _.defaults(options, {\r\n level: 'adgroup',\r\n targetType: targetTypes.All,\r\n });\r\n\r\n this.i18n = DependencyResolver.get('component/i18n/loader!campaignui/feature/audience-campaign');\r\n this.vm = {\r\n i18n: this.i18n,\r\n gridData: [],\r\n targetType: this.options.targetType,\r\n removeAllVisibleClass: 'hide',\r\n };\r\n\r\n this.grid = null;\r\n this.adUnitSelection = this.options.adUnitSelectionRef;\r\n this.triggerSearchViewRefreshRef = this.options.triggerSearchViewRefreshRef;\r\n }\r\n\r\n /**\r\n * Define events and event handlers for them.\r\n *\r\n * @readonly\r\n * @returns {Object} returns object defining events\r\n */\r\n get events() {\r\n return {};\r\n }\r\n\r\n /**\r\n * Renders the view\r\n *\r\n * @returns {View} returns the view itself\r\n */\r\n render() {\r\n this.$el.html(template(this.vm));\r\n\r\n this.initializeAndRenderGrid();\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Event handler for criterion change\r\n * @private\r\n *\r\n * @returns {undefined}\r\n */\r\n onCriterionChange() {\r\n this.refreshGridSource();\r\n const selectedData = this.adUnitSelection.current;\r\n if (_.isEmpty(selectedData)) {\r\n this.$(`.linked-in-target-grid-view.${this.options.targetType}`).addClass('hide');\r\n } else {\r\n this.$(`.linked-in-target-grid-view.${this.options.targetType}`).removeClass('hide');\r\n }\r\n if (this.triggerSearchViewRefreshRef.current) {\r\n this.triggerSearchViewRefreshRef.current();\r\n }\r\n }\r\n\r\n /**\r\n * Refreshes the grid source\r\n * @private\r\n *\r\n * @returns {undefined}\r\n */\r\n refreshGridSource() {\r\n if (this.grid && this.grid.gridView) {\r\n const selectedData = this.adUnitSelection.current;\r\n this.gridData = cloneDeep(selectedData);\r\n this.grid.gridView.patch({\r\n dataSource: {\r\n data: this.gridData,\r\n },\r\n });\r\n }\r\n if (this.displayGrid && this.displayGrid.gridView) {\r\n this.displayGrid.gridView.patch({\r\n dataSource: {\r\n data: this.gridData,\r\n },\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Initializes and renders the grid\r\n * @private\r\n *\r\n * @returns {undefined}\r\n */\r\n initializeAndRenderGrid() {\r\n this.commonGridConfig = {\r\n tableClasses: ['table', 'table--no-border', 'grid'],\r\n dataSource: {\r\n type: 'memory',\r\n data: [],\r\n primaryKey: 'Id',\r\n },\r\n rows: {\r\n bodyRows: [{\r\n type: 'data-rows',\r\n classes: ['linked-in-target-grid__area-row'],\r\n }],\r\n },\r\n events: {\r\n 'click .linked-in-target-grid__remove-col': e => this.removeSearchBasedTarget(e),\r\n },\r\n plugins: {\r\n pagination: {\r\n pageSize: this.isolated ? 5 : 10,\r\n availablePageSizes: this.isolated ? [5] : [10, 20, 50, 100],\r\n enableRandomPage: false,\r\n template: this.isolated ? paginationTemplate : undefined,\r\n pageNumberLabelText: this.i18n.getString('GridPage_Colon'),\r\n pageSizeText: this.i18n.getString('Grid_ShowRows'),\r\n totalPageCountText: this.i18n.getString('Grid_PageOf'),\r\n },\r\n },\r\n };\r\n\r\n const { gridConfig, gridConfigDisplay } = this.options;\r\n\r\n this.grid = pgrid.factory({ vnext: true })\r\n .use(paginationPlugin)\r\n .create(_.defaults(gridConfig, this.commonGridConfig));\r\n\r\n this.displayGrid = pgrid.factory({ vnext: true })\r\n .use(paginationPlugin)\r\n .create(_.defaults(gridConfigDisplay, this.commonGridConfig));\r\n\r\n // this.$('.target-grid').html(this.grid.gridView.render().el);\r\n this.$('.target-grid').html(this.displayGrid.gridView.render().el);\r\n\r\n // After initial creation, make the onCriterionChange to read from data\r\n this.onCriterionChange();\r\n }\r\n\r\n /**\r\n * Remove the targeted/excluded linked in target\r\n * @private\r\n * @param {object} e - event object\r\n *\r\n * @returns {Promise} - promise of destroying the linked in target\r\n */\r\n removeSearchBasedTarget(e) {\r\n e.stopPropagation();\r\n const targetId = _.result(this.grid.gridView.itemOfElement(e.target), 'Id');\r\n const selectedData = this.adUnitSelection.current;\r\n this.adUnitSelection.current = _.reject(selectedData, d => d.Id === targetId);\r\n this.onCriterionChange();\r\n }\r\n\r\n /**\r\n * Event handler for removing all linked in targets\r\n * @private\r\n *\r\n * @param {object} e - event object\r\n * @returns {Promise} - Promise of destroying target type\r\n */\r\n onRemoveAllTargets(e) {\r\n e.stopPropagation();\r\n\r\n this.adUnitSelection.current = [];\r\n this.onCriterionChange();\r\n }\r\n\r\n switchGrid() {\r\n this.$('.target-grid').empty().html(this.grid.gridView.render().el);\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport _ from 'underscore';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport { Treeview } from '@bingads-webui/treeview';\r\nimport { PlacementWithIds } from '../placement-setting';\r\nimport template from './search-view-template.pug';\r\n/**\r\n * Class for search view for linked in targets\r\n *\r\n * @class SearchView\r\n * @extends {Backbone.View}\r\n */\r\nexport class SearchView extends Backbone.View {\r\n /**\r\n * Initializes the class.\r\n * @param {Object} options - options object\r\n *\r\n * @returns {undefined}\r\n */\r\n initialize(options) {\r\n this.options = options;\r\n this.adUnitSelectionRef = options.adUnitSelectionRef;\r\n this.showExclusion = false;\r\n\r\n this.i18n = DependencyResolver.get('component/i18n/loader!campaignui/feature/audience-campaign');\r\n this.targetedPlacementsIds = [];\r\n this.initializeSearchTree();\r\n\r\n this.refreshTargetedStates();\r\n this.refreshGrid = options.refreshGrid;\r\n this.triggerSearchViewRefreshRef = options.triggerSearchViewRefreshRef;\r\n this.triggerSearchViewRefreshRef.current = this.onCriterionChange.bind(this);\r\n }\r\n\r\n /**\r\n * Renders the view\r\n *\r\n * @returns {View} returns the view itself\r\n */\r\n render() {\r\n this.$el.html(template(this));\r\n\r\n this.treeView.render();\r\n this.$('.search-result-view-container').append(this.treeView.$el);\r\n this.$('.search-result-view-container').addClass('hide');\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Event handler for target include action\r\n * @private\r\n *\r\n * @param {Object} data - criterion data\r\n * @returns {Promise} - Promise of handling onInclude event\r\n */\r\n onInclude(data) {\r\n // adunitSelectionRef is a reference to the adunit selection object\r\n const adUnitSelection = this.adUnitSelectionRef.current;\r\n adUnitSelection.push(data);\r\n this.adUnitSelectionRef.current = adUnitSelection;\r\n this.refreshTargetedStates();\r\n\r\n this.updateSearchResult();\r\n this.refreshGrid();\r\n }\r\n\r\n /**\r\n * Initializes the search tree by fetching the data\r\n *\r\n * @returns {Promise} - promise of creating a search tree instance\r\n */\r\n initializeSearchTree() {\r\n const treeData = this.processPlacementRowData(PlacementWithIds);\r\n const options = {\r\n i18n: this.i18n,\r\n actions: (() => {\r\n const actions = [];\r\n actions.push({\r\n title: this.i18n.getString('Audience_Campaign_Target_Setting_Include_Action'),\r\n callback: node => this.onInclude(node.data),\r\n });\r\n\r\n return actions;\r\n })(),\r\n setLeafState: (leafNodeData) => {\r\n const state = {\r\n shouldSetState: false,\r\n stateValue: '',\r\n };\r\n\r\n if (_.contains(this.targetedPlacementsIds, leafNodeData.Id)) {\r\n state.shouldSetState = true;\r\n state.stateValue = this.i18n.getString('Audience_Campaign_Target_Setting_Included_Status');\r\n }\r\n\r\n return state;\r\n },\r\n placeHolderText: this.i18n.getString('Audience_Campaign_Target_Setting_Placement_Search_Placeholder'),\r\n };\r\n\r\n this.treeView = new Treeview(treeData, options);\r\n }\r\n\r\n /**\r\n * Update the search result.\r\n *\r\n * @returns {undefined}\r\n */\r\n updateSearchResult() {\r\n if (this.treeView) {\r\n this.treeView.updateView();\r\n }\r\n }\r\n\r\n /**\r\n * Using the data from the MT, it populates the Criterion field to be saved\r\n *\r\n * @param {Array} data - array of data objects containing the information\r\n * @returns {Object} groupedTree - tree structured data\r\n */\r\n processPlacementRowData(data) {\r\n const groupedTree = {\r\n children: [],\r\n };\r\n\r\n _.each(data, (item) => {\r\n const node = {\r\n title: this.i18n.getString(item.Name),\r\n data: item,\r\n };\r\n\r\n if (!_.some(groupedTree.children, child => child.title === item.GroupName)) {\r\n groupedTree.children.push({\r\n title: item.GroupName,\r\n children: [],\r\n });\r\n }\r\n\r\n const groupToInsert = _.findWhere(groupedTree.children, { title: item.GroupName });\r\n\r\n groupToInsert.children.push(node);\r\n });\r\n\r\n return groupedTree;\r\n }\r\n\r\n /**\r\n * Event handler for criterion change\r\n * @private\r\n *\r\n * @returns {undefined}\r\n */\r\n onCriterionChange() {\r\n this.refreshTargetedStates();\r\n\r\n this.updateSearchResult();\r\n }\r\n\r\n /**\r\n * Refreses the trageted state in memory data by reading what is svaed in Intermediate\r\n *\r\n * @returns {undefined}\r\n */\r\n refreshTargetedStates() {\r\n const selectedData = this.adUnitSelectionRef.current;\r\n if (!selectedData) {\r\n this.targetedPlacementsIds = [];\r\n this.excludedPlacementsIds = [];\r\n return;\r\n }\r\n\r\n this.targetedPlacementsIds = _.map(selectedData, d => d.Id);\r\n }\r\n onEditTargetShowButtonClicked() {\r\n this.$('.search-result-view-container').removeClass('hide');\r\n }\r\n}\r\n","import React from 'react';\r\nimport _ from 'underscore';\r\nimport Backbone from 'backbone';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport searchBasedTargetGridRemoveColumnTemplate from '../search-based-target-grid-remove-column-template.pug';\r\nimport searchBasedTargetGridStateTemplate from '../search-based-target-grid-state-template.pug';\r\nimport { SearchBasedTargetGridViewPlacement } from '../search-based-target-grid-view-placement';\r\nimport template from '../search-based-target-setting-template.pug';\r\nimport { SearchView } from './search-view/search-view';\r\n\r\nexport class PlacementTargetSetting extends Backbone.View {\r\n initialize(options) {\r\n this.options = options;\r\n this.showExclusion = false;\r\n this.i18nKeys = {\r\n titleKey: 'Audience_Campaign_Target_Setting_Placement_Title',\r\n helpKey: 'pop_BA_AdPlacements',\r\n descriptionKey: 'Audience_Campaign_Target_Setting_Placement_Description',\r\n };\r\n\r\n this.adUnitSelection = options.adUnitSelectionRef;\r\n const i18n = DependencyResolver.get('component/i18n/loader!campaignui/feature/audience-campaign');\r\n const bingadsGridColumn = DependencyResolver.get('component/bingads-grid/shared/column');\r\n\r\n const industrySettingGridConfig = {\r\n columns: [\r\n bingadsGridColumn({\r\n name: 'isIncludedOrExcluded',\r\n title: '',\r\n template: () => searchBasedTargetGridStateTemplate({\r\n isIncluded: true,\r\n includedString: i18n.getString('Audience_Campaign_Target_Setting_Included_Status'),\r\n excludedString: i18n.getString('Audience_Campaign_Target_Setting_Excluded_Status'),\r\n }),\r\n property: _.identity,\r\n }),\r\n bingadsGridColumn(_.extend({}, {\r\n i18n,\r\n name: 'name',\r\n title: 'placement',\r\n template: local => i18n.getString(local.value.Name),\r\n property: _.identity,\r\n })),\r\n bingadsGridColumn({\r\n name: 'removeAll',\r\n template: () => searchBasedTargetGridRemoveColumnTemplate({ i18n }),\r\n headClasses: ['linked-in-target-grid__remove-body'],\r\n bodyClasses: ['text-right'],\r\n }),\r\n ],\r\n };\r\n\r\n const industrySettingGridConfigDisplay = {\r\n columns: [\r\n bingadsGridColumn({\r\n name: 'isIncludedOrExcluded',\r\n title: '',\r\n template: () => searchBasedTargetGridStateTemplate({\r\n isIncluded: true,\r\n includedString: i18n.getString('Audience_Campaign_Target_Setting_Included_Status'),\r\n excludedString: i18n.getString('Audience_Campaign_Target_Setting_Excluded_Status'),\r\n }),\r\n property: _.identity,\r\n }),\r\n bingadsGridColumn(_.extend({}, {\r\n i18n,\r\n name: 'name',\r\n title: 'placement',\r\n template: local => i18n.getString(local.value.Name),\r\n property: _.identity,\r\n })),\r\n ],\r\n };\r\n\r\n this.options.gridConfig = industrySettingGridConfig;\r\n this.options.gridConfigDisplay = industrySettingGridConfigDisplay;\r\n\r\n // This Ref is a ref to function that will later be assigned to by SearchView\r\n // so search View can be triggered to refresh when the grid is updated\r\n this.triggerSearchViewRefreshRef = React.createRef();\r\n this.options.triggerSearchViewRefreshRef = this.triggerSearchViewRefreshRef;\r\n // super.initialize(this.options);\r\n this.i18n = i18n;\r\n this.searchBasedTargetGridView = new SearchBasedTargetGridViewPlacement(this.options);\r\n this.options.refreshGrid = () => this.searchBasedTargetGridView.onCriterionChange();\r\n this.searchView = new SearchView(this.options);\r\n }\r\n\r\n onEditTargetShowButtonClicked() {\r\n if (this.searchView && this.searchView.onEditTargetShowButtonClicked) {\r\n this.searchView.onEditTargetShowButtonClicked();\r\n }\r\n this.switchGrid();\r\n }\r\n\r\n /**\r\n * Renders the view\r\n *\r\n * @returns {View} returns the view itself\r\n */\r\n render() {\r\n this.$el.html(template(this));\r\n\r\n this.searchView.render();\r\n this.$('.linked-in-target-search-container').append(this.searchView.$el);\r\n\r\n this.searchBasedTargetGridView.render();\r\n this.$('.linked-in-target-grid-container').append(this.searchBasedTargetGridView.$el);\r\n this.$('.target-intent-header').addClass('hide');\r\n\r\n return this;\r\n }\r\n\r\n switchGrid() {\r\n this.$('.target-intent-header').removeClass('hide');\r\n this.searchBasedTargetGridView.switchGrid();\r\n }\r\n\r\n setDefaultCashbackPercent(percent) {\r\n this.searchView.setDefaultCashbackPercent(percent);\r\n }\r\n}\r\n","import React from 'react';\r\nimport Backbone from 'backbone';\r\nimport _ from 'underscore';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport { PlacementDataMapping } from '@bingads-webui-campaign/audience-campaign-shared';\r\nimport { PlacementTargetSetting } from './placement-target-setting';\r\nimport template from './placement-setting-template.pug';\r\n\r\nexport const PlacementWithIds = [\r\n {\r\n Id: 1,\r\n GroupName: 'Placement',\r\n Name: 'Games',\r\n Status: 'Active',\r\n adUnitIds: PlacementDataMapping.Games.adUnitIds,\r\n },\r\n {\r\n Id: 2,\r\n GroupName: 'Placement',\r\n Name: 'Home Pages',\r\n Status: 'Active',\r\n adUnitIds: PlacementDataMapping.HomePages.adUnitIds,\r\n },\r\n {\r\n Id: 3,\r\n GroupName: 'Placement',\r\n Name: 'Productivity',\r\n Status: 'Active',\r\n adUnitIds: PlacementDataMapping.Productivity.adUnitIds,\r\n },\r\n];\r\n\r\nexport class PlacementSetting extends Backbone.View {\r\n initialize(options) {\r\n this.isEditing = false;\r\n this.showExclusion = false;\r\n this.defaultBidAdjustment = null;\r\n this.supportCashbackSettings = options.supportCashbackSettings;\r\n this.viewContext = options.viewContext || {};\r\n this.isFilterCriterionLevelAdGroup = options.isFilterCriterionLevelAdGroup;\r\n this.i18n = DependencyResolver.get('component/i18n/loader!campaignui/feature/audience-campaign');\r\n\r\n this.adUnitSelection = React.createRef();\r\n this.adUnitSelection.current = options.placementSelections || [];\r\n this.isEmpty = _.isEmpty(this.adUnitSelection.current);\r\n\r\n if (options.showTargetSelection) {\r\n this.initializeTargetSelectionView();\r\n }\r\n\r\n // super.initialize(options);\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click .edit-target-show-button': 'onEditTargetShowButtonClicked',\r\n };\r\n }\r\n\r\n onEditTargetShowButtonClicked() {\r\n this.$('.edit-target-show-button-container').addClass('hide');\r\n if (this.targetSelectionView && this.targetSelectionView.onEditTargetShowButtonClicked) {\r\n this.targetSelectionView.onEditTargetShowButtonClicked();\r\n }\r\n }\r\n\r\n initializeTargetSelectionView() {\r\n this.targetSelectionView = new PlacementTargetSetting({\r\n criterionType: this.criterionType,\r\n showBidOnlyNote: this.showBidOnlyNote,\r\n showExclusion: this.showExclusion,\r\n defaultBidAdjustment: this.defaultBidAdjustment,\r\n currentLevel: this.viewContext.level,\r\n supportCashbackSettings: this.supportCashbackSettings,\r\n viewContext: this.viewContext,\r\n isFilterCriterionLevelAdGroup: this.isFilterCriterionLevelAdGroup,\r\n adUnitSelectionRef: this.adUnitSelection,\r\n });\r\n }\r\n\r\n get titleKey() {\r\n return _TL_('Placements');\r\n }\r\n\r\n get helpKey() {\r\n return 'pop_BA_AdPlacements';\r\n }\r\n\r\n getSnapshot() {\r\n const selectedData = this.adUnitSelection.current;\r\n const adUnitIds = _.reduce(\r\n selectedData,\r\n (memo, val) => memo.concat(val.adUnitIds), []\r\n );\r\n\r\n if (_.isEmpty(adUnitIds)) {\r\n return null;\r\n }\r\n\r\n return adUnitIds.join(';');\r\n }\r\n\r\n getTargetedCriterion() {\r\n return this.adUnitSelection.current;\r\n }\r\n\r\n getExcludedCriterion() {\r\n return [];\r\n }\r\n\r\n getTargetedValues() {\r\n const criterions = this.getTargetedCriterion();\r\n const selected = [];\r\n const len = criterions.length;\r\n let i = 0;\r\n for (i = 0; i < len; i += 1) {\r\n selected.push(criterions[i].Name);\r\n }\r\n return selected;\r\n }\r\n getExcludedValues() {\r\n return [];\r\n }\r\n\r\n getSelectedString() {\r\n return '';\r\n }\r\n\r\n getTargetedSummary() {\r\n return '';\r\n }\r\n\r\n getExcludedSummary() {\r\n return '';\r\n }\r\n\r\n render() {\r\n this.$el.html(template(this));\r\n this.$('.criterion-setting-container').addClass('criterion-setting-Industry');\r\n\r\n if (this.targetSelectionView) {\r\n this.targetSelectionView.render();\r\n this.$('.target-selection-container').empty().append(this.targetSelectionView.$el);\r\n }\r\n return this;\r\n }\r\n}\r\n","/* eslint-disable no-param-reassign */\r\n/* eslint-disable max-len */\r\n\r\nimport _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport Backbone from 'backbone';\r\nimport $ from 'jquery';\r\nimport { cloneDeep } from '@bingads-webui-universal/primitive-utilities';\r\nimport {\r\n AudienceCampaignErrorsView,\r\n createCriterion,\r\n ageSettingOptionsFactory,\r\n genderSettingOptionsFactory,\r\n deviceSettingOptions\r\n} from '@bingads-webui-campaign/audience-campaign-shared';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport template from './template.pug';\r\n\r\n/**\r\n * CheckboxSelectionBase class that implements functionalities of selection controls,\r\n * where selected items are predefined and limited\r\n *\r\n * @class CheckboxSelectionBase\r\n * @extends {Backbone.View}\r\n */\r\nexport class CheckboxSelectionBase extends Backbone.View {\r\n /**\r\n * Initializes the class.\r\n *\r\n * @param {Object} options - options containing initializing information\r\n * @param {string} options.campaignId - current campaign ID\r\n * @param {string} options.adgroupId - current adGroup ID\r\n * @param {string} options.level - level of where where the control is used.\r\n * @param {Object} options.i18n - i18n loader used for this control.\r\n * @param {string} options.titleKey - i18n key used to get the title of the selection control\r\n * @param {string} options.descriptionKey\r\n * - i18n key used to get the description of the selection control\r\n * @param {Object} options.selections - selections used for the the selection control\r\n * @param {bool} options.isLiveUpdatedEnabled - changing selection updates the intermediate.\r\n * @returns {undefined}\r\n */\r\n initialize(options) {\r\n this.options = _.defaults(options, {\r\n campaignId: '',\r\n adgroupId: '',\r\n level: 'adGroup',\r\n });\r\n\r\n this.currentLevelTargetInfo = this.options.currentLevelTargetInfo;\r\n\r\n this.i18n = DependencyResolver.get('component/i18n/loader!campaignui/feature/audience-campaign');\r\n this.titleKey = options.titleKey;\r\n this.helpKey = options.helpKey;\r\n this.descriptionKey = options.descriptionKey;\r\n this.errorsView = new AudienceCampaignErrorsView();\r\n this.selections = options.selections;\r\n\r\n this.hasSavedSelections = false;\r\n this.hasSavedNegSelections = options.savedNegSelections && options.savedNegSelections.length > 0;\r\n this.activityLogger = options.activityLogger;\r\n\r\n _.each(this.selections, (selection) => {\r\n selection.isSelected = false;\r\n\r\n // If there are existing selections, update the selection state\r\n if (options.savedSelections && options.savedSelections.length > 0) {\r\n this.hasSavedSelections = true;\r\n\r\n if (_.contains(options.savedSelections, selection.id)) {\r\n selection.isSelected = true; //eslint-disable-line\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Since checkbox can frequently change, we want to take the snapshot before\r\n * the user starts editing. So that we can compare the diff and update accordingly\r\n *\r\n * @returns {undefined}\r\n */\r\n saveSnapshot() {\r\n this.selectionsSnapshot = cloneDeep(this.selections);\r\n this.criterionsSnapshot\r\n = cloneDeep(this.currentLevelTargetInfo.getAllByType(this.options.criterionType));\r\n\r\n if (!this.hasSavedSelections) {\r\n this.onSelectAll();\r\n this.hasSavedSelections = true;\r\n }\r\n }\r\n\r\n /**\r\n * This function is called to update and save the criterion to the\r\n * audienceTargetInfo after the change is done.\r\n * The function compares the snapshot with the current state and either\r\n * delete or create criterions\r\n *\r\n * @returns {Promise} - Promise of updating the criterions.\r\n */\r\n updateCriterionDataAsync() {\r\n // go through the current selections, compare and return\r\n if (_.isEqual(this.selectionsSnapshot, this.selections)) {\r\n return Promise.resolve();\r\n }\r\n\r\n const updateTasks = [];\r\n _.each(this.selectionsSnapshot, (originalSelection, key) => {\r\n if (!originalSelection.isSelected && this.selections[key].isSelected) {\r\n // newly targeted, create a criterion\r\n const criterionToCreate = createCriterion(this.options.criterionType, key);\r\n\r\n const deleteAndCreateTask =\r\n this.deleteSameCriterionIfExistsAsync(criterionToCreate).then(() => this.currentLevelTargetInfo.createAsync(criterionToCreate));\r\n\r\n updateTasks.push(deleteAndCreateTask);\r\n } else if (originalSelection.isSelected && !this.selections[key].isSelected) {\r\n // criterion removed, delete a criterion\r\n const criterionToRemove = this.getSavedCriterionByKey(key);\r\n\r\n // After removing the Criterion, we need to create a NegativeTarget\r\n const deleteAndCreateTask =\r\n this.currentLevelTargetInfo.destroyAsync(criterionToRemove.Id).then(() => {\r\n const criterionToCreate = createCriterion(this.options.criterionType, key);\r\n criterionToCreate.CriterionType = `Negative${criterionToCreate.CriterionType}`;\r\n\r\n return this.currentLevelTargetInfo.createAsync(criterionToCreate);\r\n });\r\n\r\n updateTasks.push(deleteAndCreateTask);\r\n }\r\n });\r\n\r\n return Promise.resolve(updateTasks);\r\n }\r\n\r\n getConfigs() {\r\n return {\r\n Age: ageSettingOptionsFactory(true),\r\n Gender: genderSettingOptionsFactory(true),\r\n Device: deviceSettingOptions,\r\n };\r\n }\r\n\r\n /**\r\n * Age, Gender, and Device can have both Negative and Positive\r\n * When creating Positive when there is Negative, delete the negative and vise versa.\r\n *\r\n * @param {Object} criterion - criterion to compare\r\n * @returns {Promise} - promise of deleting the criterion\r\n */\r\n deleteSameCriterionIfExistsAsync(criterion) {\r\n const criterionsByType = this.currentLevelTargetInfo.getAllByType(criterion.Criterion.Type);\r\n const config = this.getConfigs();\r\n\r\n _.each(\r\n criterionsByType,\r\n (existingCriterion) => {\r\n const existingSelection =\r\n existingCriterion.Criterion[`${existingCriterion.Criterion.Type}Criterion`][config[existingCriterion.Criterion.Type].criterionTypeTarget];\r\n\r\n const currentSelection =\r\n criterion.Criterion[`${criterion.Criterion.Type}Criterion`][config[criterion.Criterion.Type].criterionTypeTarget];\r\n\r\n if (existingSelection === currentSelection) {\r\n return this.currentLevelTargetInfo.destroyAsync(existingCriterion.Id);\r\n }\r\n\r\n return Promise.resolve(true);\r\n }\r\n );\r\n\r\n return Promise.resolve();\r\n }\r\n\r\n /**\r\n * This is a helper function that returns the criterion from the targetKey\r\n * @private\r\n *\r\n * @param {string} targetKey - used to identify the criterion.\r\n * @returns {object} - criterion object.\r\n */\r\n getSavedCriterionByKey(targetKey) {\r\n const criterionsSnapshotShallow\r\n = this.currentLevelTargetInfo.getAllByType(this.options.criterionType);\r\n\r\n return _.find(\r\n criterionsSnapshotShallow,\r\n criterion => criterion.Criterion[`${this.options.criterionType}Criterion`][`${this.options.criterionTypeTarget}`] === targetKey\r\n );\r\n }\r\n\r\n /**\r\n * Renders the view\r\n *\r\n * @returns {View} returns the view itself\r\n */\r\n render() {\r\n this.$el.html(template(this));\r\n\r\n this.$('.errors-container').append(this.errorsView.render().$el);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Define events and event handlers for them.\r\n *\r\n * @readonly\r\n * @returns {Object} returns object defining events\r\n */\r\n get events() {\r\n return {\r\n 'click .select-all-button': 'onSelectAll',\r\n 'click :checkbox': 'onCheckboxClicked',\r\n };\r\n }\r\n\r\n // private funciton for handling select all event handler\r\n onSelectAll() {\r\n const shouldSelect = !this.isAllSelected();\r\n\r\n this.$(':checkbox').prop('checked', shouldSelect);\r\n _.each(this.selections, (selection) => {\r\n const targetSelection = selection;\r\n\r\n targetSelection.isSelected = shouldSelect;\r\n });\r\n\r\n this.onTargetUpdated();\r\n }\r\n\r\n setKeys(keys) {\r\n _.each(this.selections, (selection) => {\r\n if (_.contains(keys, selection.id)) {\r\n selection.isSelected = true;\r\n this.$(`#${selection.id}:checkbox`).prop('checked', true);\r\n } else {\r\n selection.isSelected = false;\r\n this.$(`#${selection.id}:checkbox`).prop('checked', false);\r\n }\r\n });\r\n this.onTargetUpdated();\r\n }\r\n\r\n // private function for checkbox clicked event handler.\r\n onCheckboxClicked(e) {\r\n const $target = $(e.target);\r\n const selected = $target.is(':checked');\r\n\r\n this.selections[$target[0].id].isSelected = selected;\r\n this.onTargetUpdated();\r\n }\r\n\r\n // private function returning boolean value indicating if all targets are selected.\r\n isAllSelected() {\r\n const states = _.pluck(this.selections, 'isSelected');\r\n const isAllSelected = _.every(states, state => state);\r\n\r\n return isAllSelected;\r\n }\r\n\r\n isNoneSelected() {\r\n const states = _.pluck(this.selections, 'isSelected');\r\n const isNoneSelected = _.every(states, state => !state);\r\n\r\n return isNoneSelected;\r\n }\r\n\r\n // private function for handling onTargetUpdated.\r\n onTargetUpdated() {\r\n if (this.activityLogger) {\r\n this.activityLogger.signal(`audienceCriterionSettingChanged: ${this.options.criterionType}`);\r\n }\r\n this.errorsView.removeErrors();\r\n\r\n if (this.isAllSelected()) {\r\n this.$('.select-all-button')\r\n .text(this.i18n.getString('Audience_Campaign_Target_Setting_Deselect_All_Label'));\r\n } else {\r\n this.$('.select-all-button')\r\n .text(this.i18n.getString('Audience_Campaign_Target_Setting_Select_All_Label'));\r\n if (this.isNoneSelected()) {\r\n this.errorsView.setErrorMessage(this.i18n.getString('Audience_Campaign_Target_Setting_No_Selection_Error'));\r\n }\r\n }\r\n\r\n if (this.options.isLiveUpdateEnabled) {\r\n this.updateCriterionDataAsync().then(() => {\r\n this.saveSnapshot();\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Check if the control is in a valid state\r\n *\r\n * @returns {bool} - true if valid, false otherwise\r\n */\r\n validate() {\r\n return !this.isNoneSelected();\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { ageSettingOptionsFactory } from '@bingads-webui-campaign/audience-campaign-shared';\r\nimport { CheckboxSelectionBase } from '../checkbox-selection-base/view';\r\n\r\n/**\r\n * Class for setting age targets\r\n *\r\n * @class AgeTargetSetting\r\n * @extends {CheckboxSelectionBase}\r\n */\r\nexport class AgeTargetSetting extends CheckboxSelectionBase {\r\n /**\r\n * Initilizes the control with the pre-defined parameters.\r\n * @param {object} options - options containing viewContext\r\n *\r\n * @return {undefined}\r\n */\r\n initialize(options) {\r\n const isAudienceCampaign = _.result(options, 'isAudienceCampaign', true);\r\n const isSearchDSAShoppingAdgroupLevel = _.result(options, 'isSearchDSAShoppingAdgroupLevel', false);\r\n\r\n this.options = ageSettingOptionsFactory(isAudienceCampaign || isSearchDSAShoppingAdgroupLevel);\r\n _.extend(this.options, options);\r\n\r\n const selectedCriterions =\r\n this.options.currentLevelTargetInfo.getAllByType(this.options.criterionType);\r\n\r\n // Get only the positive targets\r\n const selectedPositiveCriterions = _.filter(\r\n selectedCriterions,\r\n criterion => criterion.CriterionType === 'Age'\r\n );\r\n\r\n let savedSelections = [];\r\n if (selectedPositiveCriterions.length > 0) {\r\n savedSelections = _.map(\r\n selectedPositiveCriterions,\r\n criterion => criterion.Criterion.AgeCriterion.Target\r\n );\r\n }\r\n\r\n const savedNegSelections = _.reduce(selectedCriterions, (memo, criterion) => {\r\n if (criterion.CriterionType === 'NegativeAge') {\r\n memo.push(criterion.Criterion.AgeCriterion.Target);\r\n }\r\n return memo;\r\n }, []);\r\n\r\n this.options.savedSelections = savedSelections;\r\n this.options.savedNegSelections = savedNegSelections;\r\n\r\n super.initialize(this.options);\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport { AgeTargetSetting } from './view';\r\nimport { AudienceCriterionSettingBase } from '../../audience-criterion-setting-base';\r\n\r\nexport class AgeCriterionSetting extends AudienceCriterionSettingBase {\r\n initialize(options) {\r\n this.criterionType = 'Age';\r\n this.type = 'Age';\r\n this.isLiveUpdateEnabled = options.isLiveUpdateEnabled ? options.isLiveUpdateEnabled : false;\r\n this.currentLevelTargetInfo = options.currentLevelTargetInfo;\r\n this.isAudienceCampaign = _.result(options, 'isAudienceCampaign', true);\r\n this.isSearchDSAShoppingAdgroupLevel = _.result(options, 'isSearchDSAShoppingAdgroupLevel', false);\r\n this.shouldValidate = this.isAudienceCampaign || this.isSearchDSAShoppingAdgroupLevel;\r\n this.isEditDisabled = !(this.isAudienceCampaign || this.isSearchDSAShoppingAdgroupLevel);\r\n this.i18n = DependencyResolver.get('component/i18n/loader!campaignui/feature/audience-campaign');\r\n this.activityLogger = options.activityLogger;\r\n\r\n if (options.showTargetSelection) {\r\n this.initializeTargetSelectionView();\r\n }\r\n\r\n super.initialize(options);\r\n }\r\n\r\n initializeTargetSelectionView() {\r\n this.targetSelectionView = new AgeTargetSetting({\r\n isAudienceCampaign: this.isAudienceCampaign,\r\n isSearchDSAShoppingAdgroupLevel: this.isSearchDSAShoppingAdgroupLevel,\r\n currentLevelTargetInfo: this.currentLevelTargetInfo,\r\n isLiveUpdateEnabled: this.isLiveUpdateEnabled,\r\n activityLogger: this.activityLogger,\r\n });\r\n }\r\n\r\n get titleKey() {\r\n return 'Audience_Campaign_Target_Setting_Age_Title';\r\n }\r\n\r\n get helpKey() {\r\n return 'pop_BA_CampaignCreate_AudTargets_Age';\r\n }\r\n\r\n saveSnapshot() {\r\n this.targetSelectionView.saveSnapshot();\r\n }\r\n\r\n getSnapshot() {\r\n return this.targetSelectionView.options.selections;\r\n }\r\n\r\n get allSelections() {\r\n const snapshot = this.getSnapshot();\r\n\r\n const allSelections = [{\r\n id: snapshot.EighteenToTwentyFive.id,\r\n labelKey: snapshot.EighteenToTwentyFive.labelKey,\r\n isSelected: snapshot.EighteenToTwentyFive.isSelected,\r\n },\r\n {\r\n id: snapshot.TwentyFiveToThirtyFive.id,\r\n labelKey: snapshot.TwentyFiveToThirtyFive.labelKey,\r\n isSelected: snapshot.TwentyFiveToThirtyFive.isSelected,\r\n },\r\n {\r\n id: snapshot.ThirtyFiveToFifty.id,\r\n labelKey: snapshot.ThirtyFiveToFifty.id,\r\n isSelected: snapshot.ThirtyFiveToFifty.id,\r\n },\r\n {\r\n id: snapshot.FiftyToSixtyFive.id,\r\n labelKey: snapshot.FiftyToSixtyFive.labelKey,\r\n isSelected: snapshot.FiftyToSixtyFive.isSelected,\r\n },\r\n {\r\n id: snapshot.SixtyFiveAndAbove.id,\r\n labelKey: snapshot.SixtyFiveAndAbove.labelKey,\r\n isSelected: snapshot.SixtyFiveAndAbove.isSelected,\r\n },\r\n {\r\n id: snapshot.Unknown.id,\r\n labelKey: snapshot.Unknown.labelKey,\r\n isSelected: snapshot.Unknown.isSelected,\r\n }];\r\n return allSelections;\r\n }\r\n\r\n getSelectedCriterion() {\r\n const savedSelections = _.filter(\r\n this.getSnapshot(),\r\n criterion => criterion.isSelected\r\n );\r\n return savedSelections;\r\n }\r\n\r\n getSummary() {\r\n const selections = this.allSelections;\r\n const savedSelections = this.getSelectedCriterion();\r\n const total = selections.length;\r\n const totalSelected = savedSelections.length;\r\n let summary = '';\r\n let i = 0;\r\n if (total === totalSelected) {\r\n summary = this.i18n.getString('AgeRange_AllAges');\r\n } else if (totalSelected === 0) {\r\n summary = '';\r\n } else if (totalSelected > 0 && totalSelected < 4) {\r\n for (i = 0; i < totalSelected - 1; i += 1) {\r\n summary = `${summary + this.i18n.getString(savedSelections[i].labelKey)}, `;\r\n }\r\n summary = `${summary + this.i18n.getString(savedSelections[i].labelKey)}`;\r\n } else if (totalSelected > 3 && totalSelected < total) {\r\n for (i = 0; i < 2; i += 1) {\r\n summary = `${summary} ${this.i18n.getString(savedSelections[i].labelKey)}, `;\r\n }\r\n summary = `${summary} ${this.i18n.getString('CampaignImport_And')}\r\n ${totalSelected - i} ${this.i18n.getString('Page_More')}`;\r\n }\r\n\r\n return summary;\r\n }\r\n\r\n updateCriterionDataAsync() {\r\n return this.targetSelectionView.updateCriterionDataAsync();\r\n }\r\n\r\n validate() {\r\n const useCampaignSettings = this.levelToggle && this.levelToggle.viewModel && this.levelToggle.viewModel.state === 'on';\r\n return (this.shouldValidate && !(this.isSearchDSAShoppingAdgroupLevel && useCampaignSettings) && this.targetSelectionView ?\r\n this.targetSelectionView.validate() :\r\n true) &&\r\n super.validate();\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { CheckboxSelectionBase } from '../checkbox-selection-base/view';\r\nimport { deviceSettingOptions } from './options';\r\n\r\n/**\r\n * Class for setting device targets.\r\n *\r\n * @class DeviceTargetSetting\r\n * @extends {CheckboxSelectionBase}\r\n */\r\nexport class DeviceTargetSetting extends CheckboxSelectionBase {\r\n /**\r\n * Initilizes the control with the pre-defined parameters.\r\n * @param {object} options - options containing viewContext\r\n *\r\n * @return {undefined}\r\n */\r\n initialize(options) {\r\n this.options = deviceSettingOptions;\r\n _.extend(this.options, options);\r\n\r\n const selectedCriterions =\r\n this.options.currentLevelTargetInfo.getAllByType(this.options.criterionType);\r\n\r\n let savedSelections = [];\r\n\r\n if (selectedCriterions.length > 0) {\r\n savedSelections = _.map(\r\n selectedCriterions,\r\n criterion => criterion.Criterion.DeviceCriterion.DeviceName\r\n );\r\n }\r\n\r\n this.options.savedSelections = savedSelections;\r\n\r\n // Since device setting is always targeted, and all types are targeted\r\n // We always save all the criterion for the first time.\r\n this.hasSavedBefore = false;\r\n\r\n super.initialize(this.options);\r\n }\r\n\r\n /**\r\n * Check if the selection control has any targetting setting.\r\n * DeviceTargetSetting should always be targeted all\r\n *\r\n * @returns {boolean} boolean value indicating if the control has target or not.\r\n */\r\n isTargeted() {\r\n return true;\r\n }\r\n}\r\n","import { DeviceTargetSetting } from './view';\r\nimport { AudienceCriterionSettingBase } from '../../audience-criterion-setting-base';\r\n\r\nexport class DeviceCriterionSetting extends AudienceCriterionSettingBase {\r\n initialize(options) {\r\n this.criterionType = 'Device';\r\n this.type = 'Device';\r\n this.currentLevelTargetInfo = options.currentLevelTargetInfo;\r\n this.isLiveUpdateEnabled = options.isLiveUpdateEnabled ? options.isLiveUpdateEnabled : false;\r\n this.isEditDisabled = true;\r\n this.activityLogger = options.activityLogger;\r\n\r\n if (options.showTargetSelection) {\r\n this.initializeTargetSelectionView();\r\n }\r\n\r\n super.initialize(options);\r\n }\r\n\r\n initializeTargetSelectionView() {\r\n this.targetSelectionView = new DeviceTargetSetting({\r\n viewContext: this.viewContext,\r\n currentLevelTargetInfo: this.currentLevelTargetInfo,\r\n isLiveUpdateEnabled: this.isLiveUpdateEnabled,\r\n activityLogger: this.activityLogger,\r\n });\r\n }\r\n\r\n get titleKey() {\r\n return 'Audience_Campaign_Target_Setting_Device_Title';\r\n }\r\n\r\n get helpKey() {\r\n return 'pop_BA_CampaignCreate_AudTargets_Device';\r\n }\r\n\r\n saveSnapshot() {\r\n this.targetSelectionView.saveSnapshot();\r\n }\r\n\r\n updateCriterionDataAsync() {\r\n return this.targetSelectionView.updateCriterionDataAsync();\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { genderSettingOptionsFactory } from '@bingads-webui-campaign/audience-campaign-shared';\r\nimport { CheckboxSelectionBase } from '../checkbox-selection-base/view';\r\n\r\n/**\r\n * Class for setting gender targets.\r\n *\r\n * @class GenderTargetSetting\r\n * @extends {CheckboxSelectionBase}\r\n */\r\nexport class GenderTargetSetting extends CheckboxSelectionBase {\r\n /**\r\n * Initilizes the control with the pre-defined parameters.\r\n * @param {object} options - options containing viewContext\r\n *\r\n * @return {undefined}\r\n */\r\n initialize(options) {\r\n const isAudienceCampaign = _.has(options, 'isAudienceCampaign') ? options.isAudienceCampaign : true;\r\n\r\n this.options = genderSettingOptionsFactory(isAudienceCampaign);\r\n _.extend(this.options, options);\r\n\r\n const selectedCriterions =\r\n this.options.currentLevelTargetInfo.getAllByType(this.options.criterionType);\r\n\r\n // Get only the positive targets\r\n const selectedPositiveCriterions = _.filter(\r\n selectedCriterions,\r\n criterion => criterion.CriterionType === 'Gender'\r\n );\r\n\r\n let savedSelections = [];\r\n if (selectedPositiveCriterions.length > 0) {\r\n savedSelections = _.map(\r\n selectedPositiveCriterions,\r\n criterion => criterion.Criterion.GenderCriterion.Target\r\n );\r\n }\r\n\r\n this.options.savedSelections = savedSelections;\r\n\r\n super.initialize(this.options);\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport { GenderTargetSetting } from './view';\r\nimport { AudienceCriterionSettingBase } from '../../audience-criterion-setting-base';\r\n\r\nexport class GenderCriterionSetting extends AudienceCriterionSettingBase {\r\n initialize(options) {\r\n this.criterionType = 'Gender';\r\n this.type = 'Gender';\r\n this.currentLevelTargetInfo = options.currentLevelTargetInfo;\r\n this.isLiveUpdateEnabled = options.isLiveUpdateEnabled ? options.isLiveUpdateEnabled : false;\r\n this.isAudienceCampaign = _.has(options, 'isAudienceCampaign') ? options.isAudienceCampaign : true;\r\n this.shouldValidate = this.isAudienceCampaign;\r\n this.isEditDisabled = !this.isAudienceCampaign;\r\n this.i18n = DependencyResolver.get('component/i18n/loader!campaignui/feature/audience-campaign');\r\n this.activityLogger = options.activityLogger;\r\n\r\n if (options.showTargetSelection) {\r\n this.initializeTargetSelectionView();\r\n }\r\n\r\n super.initialize(options);\r\n }\r\n\r\n initializeTargetSelectionView() {\r\n this.targetSelectionView = new GenderTargetSetting({\r\n isAudienceCampaign: this.isAudienceCampaign,\r\n currentLevelTargetInfo: this.currentLevelTargetInfo,\r\n isLiveUpdateEnabled: this.isLiveUpdateEnabled,\r\n activityLogger: this.activityLogger,\r\n });\r\n }\r\n\r\n get titleKey() {\r\n return 'Audience_Campaign_Target_Setting_Gender_Title';\r\n }\r\n\r\n get helpKey() {\r\n return 'pop_BA_CampaignCreate_AudTargets_Gender';\r\n }\r\n\r\n saveSnapshot() {\r\n this.targetSelectionView.saveSnapshot();\r\n }\r\n\r\n getSnapshot() {\r\n return this.targetSelectionView.selections;\r\n }\r\n\r\n get allSelections() {\r\n const snapshot = this.getSnapshot();\r\n\r\n const allSelections = [{\r\n id: snapshot.Female.id,\r\n labelKey: snapshot.Female.labelKey,\r\n isSelected: snapshot.Female.isSelected,\r\n },\r\n {\r\n id: snapshot.Male.id,\r\n labelKey: snapshot.Male.labelKey,\r\n isSelected: snapshot.Male.isSelected,\r\n },\r\n {\r\n id: snapshot.Unknown.id,\r\n labelKey: snapshot.Unknown.labelKey,\r\n isSelected: snapshot.Unknown.isSelected,\r\n }];\r\n return allSelections;\r\n }\r\n\r\n getSelectedCriterion() {\r\n const savedSelections = _.filter(\r\n this.allSelections,\r\n criterion => criterion.isSelected\r\n );\r\n return savedSelections;\r\n }\r\n\r\n getSummary() {\r\n const selections = this.allSelections;\r\n const savedSelections = this.getSelectedCriterion();\r\n const total = selections.length;\r\n const totalSelected = savedSelections.length;\r\n let summary = '';\r\n let i = 0;\r\n if (total === totalSelected) {\r\n summary = this.i18n.getString('Gender_AllGenders');\r\n } else if (totalSelected > 0) {\r\n for (i = 0; i < totalSelected - 1; i += 1) {\r\n summary = `${summary + this.i18n.getString(savedSelections[i].labelKey)}, `;\r\n }\r\n summary = `${summary + this.i18n.getString(savedSelections[i].labelKey)}`;\r\n }\r\n // Keep this commented for to archive for future cases.\r\n // else if (totalSelected > 3 && totalSelected < total) {\r\n // for (i = 0; i < 2; i += 1) {\r\n // summary = `${summary + this.i18n.getString(savedSelections[i].labelKey)}, `;\r\n // }\r\n // summary = `${summary} ${this.i18n.getString('CampaignImport_And')} $\r\n // {totalSelected - i} ${this.i18n.getString('Page_More')}`;\r\n // }\r\n\r\n return summary;\r\n }\r\n\r\n updateCriterionDataAsync() {\r\n return this.targetSelectionView.updateCriterionDataAsync();\r\n }\r\n\r\n validate() {\r\n return (this.shouldValidate && this.targetSelectionView ?\r\n this.targetSelectionView.validate() :\r\n true) &&\r\n super.validate();\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport template from './template.pug';\r\n\r\n/**\r\n * Class for setting audience targets\r\n *\r\n * @class AudienceTargetSetting\r\n * @extends {Backbone.View}\r\n */\r\nexport class AudienceTargetSetting extends Backbone.View {\r\n /**\r\n * Initializes the class.\r\n *\r\n * @param {object} options - options for initializing the control\r\n * @returns {undefined}\r\n */\r\n initialize(options) {\r\n this.i18n = DependencyResolver.get('component/i18n/loader!campaignui/feature/audience-campaign');\r\n this.isTitleLabelHidden = options.isTitleLabelHidden;\r\n this.audienceTargetInfo = options.currentLevelTargetInfo;\r\n\r\n this.audienceAssociationView = this.audienceTargetInfo.aimAudienceAssociationView;\r\n }\r\n\r\n /**\r\n * Renders the view\r\n *\r\n * @returns {View} returns the view itself\r\n */\r\n render() {\r\n this.$el.html(template(this));\r\n\r\n this.$('.audience-association-view-container').html(this.audienceAssociationView.$el);\r\n\r\n return this;\r\n }\r\n\r\n reloadAudienceData(locationCriterionsData) {\r\n return this.audienceTargetInfo.reloadAudienceData(locationCriterionsData);\r\n }\r\n\r\n setOnAudiencesTargetChangeCallback(onAudiencesTargetChange) {\r\n this.audienceTargetInfo.setOnAudiencesTargetChangeCallback(onAudiencesTargetChange);\r\n }\r\n}\r\n","import Promise from 'bluebird';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport { AudienceTargetSetting } from './view';\r\nimport { AudienceCriterionSettingBase } from '../../audience-criterion-setting-base';\r\n\r\nexport class AudienceCriterionSetting extends AudienceCriterionSettingBase {\r\n initialize(options) {\r\n this.currentLevelTargetInfo = options.currentLevelTargetInfo;\r\n this.criterionType = 'Audience';\r\n this.i18n = DependencyResolver.get('component/i18n/loader!campaignui/feature/audience-campaign');\r\n\r\n if (options.showTargetSelection) {\r\n this.initializeTargetSelectionView();\r\n }\r\n\r\n super.initialize(options);\r\n }\r\n\r\n initializeTargetSelectionView() {\r\n this.targetSelectionView = new AudienceTargetSetting({\r\n currentLevelTargetInfo: this.currentLevelTargetInfo,\r\n });\r\n }\r\n\r\n get titleKey() {\r\n return 'Audience_Campaign_Target_Setting_Audience_Title';\r\n }\r\n\r\n get helpKey() {\r\n return 'pop_BA_CampaignCreate_AudTargets_Audience';\r\n }\r\n\r\n getTargetedAudiences() {\r\n const data = this.getSnapshot();\r\n const selections = [];\r\n for (let i = 0; i < data.length; i += 1) {\r\n const targeted = data[i].Status;\r\n if (targeted === 'Active') {\r\n selections.push(data[i].Criterion.AudienceName);\r\n }\r\n }\r\n return selections;\r\n }\r\n\r\n getExcludedAudiences() {\r\n const data = this.getSnapshot();\r\n const selections = [];\r\n for (let i = 0; i < data.length; i += 1) {\r\n const excluded = data[i].Status;\r\n if (excluded === 'Excluded') {\r\n selections.push(data[i].Criterion.AudienceName);\r\n }\r\n }\r\n return selections;\r\n }\r\n\r\n getTargetedSummary() {\r\n const selected = this.getTargetedAudiences();\r\n const data = this.getSnapshot();\r\n let summary = '';\r\n if (data.length === 0) {\r\n summary = `${this.i18n.getString('Audience_Campaign_Target_Setting_Company_Grid_Column_Target')}\r\n ${this.i18n.getString('Control_TabControl_AudiencesAssociation')}`;\r\n } else if (selected.length !== 0) {\r\n summary = `${this.i18n.getString('AudienceDashboard_Targeted')}: `;\r\n summary += this.getSelectedString(selected);\r\n }\r\n return summary;\r\n }\r\n\r\n getExcludedSummary() {\r\n const selected = this.getExcludedAudiences();\r\n let summary = '';\r\n if (selected.length !== 0) {\r\n summary = `${this.i18n.getString('AudienceDashboard_Excluded')}: `;\r\n summary += this.getSelectedString(selected);\r\n }\r\n return summary;\r\n }\r\n\r\n getSelectedString(arr) {\r\n const summary = `${arr.length} ${this.i18n.getString('Control_TabControl_AudiencesAssociation')}`;\r\n return summary;\r\n }\r\n\r\n getSnapshot() {\r\n return this.currentLevelTargetInfo.criterionsByType.Audience;\r\n }\r\n\r\n reloadAudienceData(locationCriterionsData) {\r\n if (this.targetSelectionView) {\r\n return this.targetSelectionView.reloadAudienceData(locationCriterionsData);\r\n }\r\n\r\n return Promise.resolve(false);\r\n }\r\n\r\n setOnAudiencesTargetChangeCallback(onAudiencesTargetChange) {\r\n if (this.targetSelectionView) {\r\n this.targetSelectionView.setOnAudiencesTargetChangeCallback(onAudiencesTargetChange);\r\n }\r\n }\r\n\r\n convertAudienceMTCriterion(criterion, configSettings) {\r\n let tgt = null;\r\n const id = criterion.Criterion.AudienceId;\r\n const isExcluded = (criterion.Status === 'Excluded');\r\n\r\n let searchObj;\r\n\r\n if (id) {\r\n for (let i = 0; i < configSettings.length; i += 1) {\r\n searchObj = configSettings[i];\r\n const searchTgt = !isExcluded ?\r\n searchObj.associationAllItems : searchObj.exclusionAllItems;\r\n tgt = searchTgt.find(a => a.Id === id);\r\n if (tgt != null) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (!searchObj || tgt == null) {\r\n return;\r\n }\r\n\r\n const existingItems = isExcluded ?\r\n searchObj.exclusion.selectedLists() : searchObj.targeting.selectedLists();\r\n if (existingItems && tgt) {\r\n const ifContains = existingItems.find(a => a.Id === tgt.Id);\r\n if (!ifContains) {\r\n existingItems.push(tgt);\r\n if (!isExcluded) {\r\n searchObj.targeting.selectedLists(existingItems);\r\n } else {\r\n searchObj.exclusion.selectedLists(existingItems);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport Promise from 'bluebird';\r\n\r\nconst isMapLoaded = () => !(_.isUndefined(window.Microsoft)\r\n || _.isUndefined(window.Microsoft.Maps)\r\n || _.isUndefined(window.Microsoft.Maps.Color)\r\n || _.isUndefined(window.Microsoft.Maps.loadModule));\r\n\r\nconst injectScript = (src, resolve) => {\r\n const checkMapLoaded = () => {\r\n if (isMapLoaded()) {\r\n resolve();\r\n } else {\r\n _.delay(checkMapLoaded, 100);\r\n }\r\n };\r\n\r\n const script = document.createElement('script');\r\n\r\n script.type = 'text/javascript';\r\n script.async = true;\r\n script.src = src;\r\n script.onload = checkMapLoaded;\r\n script.onerror = (e) => {\r\n /* eslint-disable no-console */\r\n console.error('Failed to load map', e);\r\n resolve(e);\r\n };\r\n\r\n const node = document.getElementsByTagName('script')[0];\r\n\r\n node.parentNode.insertBefore(script, node);\r\n};\r\n\r\n\r\nexport const loadMap = _.memoize(() => new Promise((resolve, reject) => {\r\n if (isMapLoaded()) {\r\n resolve();\r\n } else {\r\n injectScript('https://www.bing.com/api/maps/mapcontrol', resolve, reject);\r\n }\r\n}));\r\n","import _ from 'underscore';\r\nimport Backbone from 'backbone';\r\nimport Promise from 'bluebird';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport { getCampaignType } from '@bingads-webui-campaign/audience-campaign-shared';\r\nimport { loadMap } from './load-location-map';\r\nimport template from './template.pug';\r\n\r\n/**\r\n * Class for Location target setting\r\n *\r\n * @class LocationTargetSetting\r\n * @extends {Backbone.View}\r\n */\r\nexport class LocationTargetSetting extends Backbone.View {\r\n initialize(options) {\r\n this.options = options;\r\n this.viewContext = this.options.viewContext;\r\n\r\n this.supportCashbackSettings = options.supportCashbackSettings;\r\n this.defaultCashbackPercent = options.defaultCashbackPercent;\r\n this.currentLevelTargetInfo = this.options.currentLevelTargetInfo;\r\n }\r\n\r\n get isAudienceCampaign() {\r\n return getCampaignType(this.viewContext.currentCampaign) === 'audience';\r\n }\r\n\r\n /**\r\n * Renders the view\r\n *\r\n * @returns {View} returns the view itself\r\n */\r\n render() {\r\n this.$el.html(template());\r\n\r\n if (!this.isAudienceCampaign) {\r\n return this;\r\n }\r\n\r\n const jsdata = DependencyResolver.get('component/js-data-campaign/index');\r\n\r\n // refresh the intermediate data when rendering a new location target instance\r\n this.locationTargetsViewPromise =\r\n jsdata.Intermediate.refresh(this.currentLevelTargetInfo.resourceName, [])\r\n .then(() => loadMap())\r\n .then(() => {\r\n this.initializeLocationTargetsView();\r\n\r\n this.$('.location-setting-controller')\r\n .empty()\r\n .append(this.locationTargetsView.render().$el);\r\n });\r\n\r\n return this;\r\n }\r\n\r\n // private funciton used for initialziing location targets view.\r\n initializeLocationTargetsView() {\r\n if (!this.isAudienceCampaign) {\r\n return;\r\n }\r\n\r\n const LocationTargetsView = DependencyResolver.get('campaignui/feature/location-targets/view/locationTargets');\r\n\r\n const isSettingsScenario = _.contains(['adgroup-settings', 'campaign-settings'], this.options.scenario);\r\n\r\n const options = {\r\n level: this.viewContext.level,\r\n showPhysicalIntentView: false,\r\n targetOption: 'everywhere',\r\n campaignId: this.viewContext.currentCampaign ? this.viewContext.currentCampaign.Id : '',\r\n adgroupId: this.viewContext.currentAdGroup ? this.viewContext.currentAdGroup.Id : '',\r\n deps: this.options.deps || {},\r\n supportCashbackSettings: this.supportCashbackSettings,\r\n defaultCashbackPercent: this.defaultCashbackPercent,\r\n isForVNext: this.options.deps ? this.options.deps.isNewUI : false,\r\n };\r\n\r\n if (isSettingsScenario) {\r\n // when campaign/adgroup-settings, pass scenario so that it can take of saving targets\r\n options.scenario = this.options.scenario;\r\n }\r\n\r\n if (this.options.scenario === 'adgroup-creation') {\r\n // Location control accepts adgroup-create as the scenario.\r\n options.scenario = 'adgroup-settings';\r\n }\r\n\r\n this.locationTargetsView = new LocationTargetsView(options);\r\n\r\n const eventDispatcher = DependencyResolver.get('component/event-dispatcher/index');\r\n\r\n eventDispatcher.on('level:changed', (level) => {\r\n const isCampaignLevel = level === 'campaign';\r\n\r\n this.currentLevelTargetInfo.setParentLevelToggle('Radius', isCampaignLevel);\r\n this.currentLevelTargetInfo.setParentLevelToggle('Location', isCampaignLevel);\r\n this.currentLevelTargetInfo.setParentLevelToggle('NegativeLocation', isCampaignLevel);\r\n }, this.locationTargetsView);\r\n\r\n // initialize with the default locations for setup\r\n if (!isSettingsScenario) {\r\n this.onLocationTargetOptionChanged(this.locationTargetsView.getValues().locations);\r\n\r\n this.locationTargetsView.on(\r\n 'locationTargetOptionChanged',\r\n locations => this.onLocationTargetOptionChanged(locations)\r\n );\r\n }\r\n }\r\n\r\n getCampaignLocationCriterions() {\r\n if (!this.isAudienceCampaign) {\r\n return [];\r\n }\r\n\r\n return this.locationTargetsView.campaignCriterions;\r\n }\r\n\r\n getAllLocations() {\r\n if (!this.isAudienceCampaign) {\r\n return {};\r\n }\r\n\r\n return this.locationTargetsView.getValues({\r\n level: this.viewContext.level,\r\n }, {\r\n keepAllLocations: true,\r\n });\r\n }\r\n\r\n /**\r\n * Get the data that is used for target setting.\r\n *\r\n * @returns {Object} - object containing target data.\r\n */\r\n getData() {\r\n if (!this.isAudienceCampaign) {\r\n return {};\r\n }\r\n\r\n return this.locationTargetsView.getValues({\r\n level: this.viewContext.level,\r\n });\r\n }\r\n\r\n /**\r\n * Event handler for location target option changed\r\n *\r\n * @private\r\n * @param {array} locations - array of locations\r\n * @returns {Promise} - Promise of handling target option change\r\n */\r\n onLocationTargetOptionChanged(locations) {\r\n const destoryTasks = [];\r\n destoryTasks.push(this.currentLevelTargetInfo.destroyTargetTypeAsync('Radius'));\r\n destoryTasks.push(this.currentLevelTargetInfo.destroyTargetTypeAsync('Location'));\r\n destoryTasks.push(this.currentLevelTargetInfo.destroyTargetTypeAsync('NegativeLocation'));\r\n\r\n return Promise.all(destoryTasks).then(() => {\r\n _.each(\r\n locations,\r\n location => this.currentLevelTargetInfo.createAsync(location)\r\n );\r\n });\r\n }\r\n\r\n reloadLocationView(audienceTargets) {\r\n if (this.locationTargetsView) {\r\n this.locationTargetsView.reloadLocationView(audienceTargets);\r\n }\r\n }\r\n}\r\n","import { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport { LocationTargetSetting } from './view';\r\nimport { AudienceCriterionSettingBase } from '../../audience-criterion-setting-base';\r\n\r\nexport class LocationCriterionSetting extends AudienceCriterionSettingBase {\r\n initialize(options) {\r\n this.currentLevelTargetInfo = options.currentLevelTargetInfo;\r\n this.criterionTypes = ['Location', 'Radius'];\r\n this.viewContext = options.viewContext;\r\n this.scenario = options.scenario;\r\n this.deps = options.deps || {};\r\n this.supportCashbackSettings = options.supportCashbackSettings;\r\n this.i18n = DependencyResolver.get('component/i18n/loader!campaignui/feature/audience-campaign');\r\n\r\n if (options.showTargetSelection) {\r\n this.initializeTargetSelectionView();\r\n }\r\n\r\n super.initialize(options);\r\n }\r\n\r\n initializeTargetSelectionView() {\r\n this.targetSelectionView = new LocationTargetSetting({\r\n currentLevelTargetInfo: this.currentLevelTargetInfo,\r\n viewContext: this.viewContext,\r\n scenario: this.scenario,\r\n deps: this.deps,\r\n supportCashbackSettings: this.supportCashbackSettings,\r\n });\r\n }\r\n\r\n validate() {\r\n if (!super.validate()) {\r\n return false;\r\n }\r\n if (this.targetSelectionView && this.targetSelectionView.locationTargetsView) {\r\n return this.targetSelectionView.locationTargetsView.viewmodel.validate('AdGroupCriterion');\r\n }\r\n return true;\r\n }\r\n\r\n getCampaignLocationCriterions() {\r\n return this.targetSelectionView ? this.targetSelectionView.getCampaignLocationCriterions() : [];\r\n }\r\n\r\n getAllLocations() {\r\n return this.targetSelectionView ? this.targetSelectionView.getAllLocations() : {};\r\n }\r\n\r\n getData() {\r\n return this.targetSelectionView ? this.targetSelectionView.getData() : {};\r\n }\r\n\r\n reloadLocationView(audienceTargets) {\r\n if (this.targetSelectionView) {\r\n this.targetSelectionView.reloadLocationView(audienceTargets);\r\n }\r\n }\r\n\r\n get titleKey() {\r\n return 'Audience_Campaign_Target_Setting_Location_Title';\r\n }\r\n\r\n get helpKey() {\r\n return 'pop_BA_CampaignCreate_AudTargets_Location';\r\n }\r\n\r\n getSnapshot() {\r\n return this.targetSelectionView.currentLevelTargetInfo.criterionsByType.Location;\r\n }\r\n\r\n getRadiusLocations() {\r\n return this.targetSelectionView.currentLevelTargetInfo.criterionsByType.Radius;\r\n }\r\n\r\n getTargetedLocations() {\r\n const data = this.getSnapshot();\r\n const radiusData = this.getRadiusLocations();\r\n const selections = [];\r\n\r\n for (let i = 0; i < data.length; i += 1) {\r\n const targeted = data[i].CriterionType;\r\n const isSelected = data[i].SelectionStatus;\r\n if (isSelected === 'Included' && targeted === 'Location') {\r\n selections.push(data[i].Criterion.LocationCriterion.Name);\r\n }\r\n }\r\n\r\n for (let i = 0; i < radiusData.length; i += 1) {\r\n const targeted = radiusData[i].CriterionType;\r\n if (targeted === 'Radius') {\r\n selections.push(radiusData[i].Criterion.RadiusCriterion.Name);\r\n }\r\n }\r\n\r\n return selections;\r\n }\r\n\r\n getExcludedLocations() {\r\n const data = this.getSnapshot();\r\n const selections = [];\r\n\r\n for (let i = 0; i < data.length; i += 1) {\r\n const excluded = data[i].CriterionType;\r\n if (excluded === 'NegativeLocation') {\r\n selections.push(data[i].Criterion.LocationCriterion.Name);\r\n }\r\n }\r\n\r\n return selections;\r\n }\r\n\r\n getSummary() {\r\n const data = this.getSnapshot();\r\n let summary = '';\r\n if (data.length === 0) {\r\n summary = this.i18n.getString('Location_Target_Options_Everywhere');\r\n }\r\n return summary;\r\n }\r\n\r\n getTargetedSummary() {\r\n const selected = this.getTargetedLocations();\r\n const data = this.getSnapshot();\r\n\r\n let summary = '';\r\n if (selected.length !== 0) {\r\n summary = `${this.i18n.getString('AudienceDashboard_Targeted')}: `;\r\n summary += this.getSelectedString(selected);\r\n } else if (data.length === 0) {\r\n summary = this.i18n.getString('Location_Target_Options_Everywhere');\r\n }\r\n\r\n return summary;\r\n }\r\n\r\n getExcludedSummary() {\r\n const selected = this.getExcludedLocations();\r\n let summary = '';\r\n if (selected.length !== 0) {\r\n summary = `${this.i18n.getString('AudienceDashboard_Excluded')}: `;\r\n summary += this.getSelectedString(selected);\r\n }\r\n\r\n return summary;\r\n }\r\n\r\n getSelectedString(arr) {\r\n let summary = '';\r\n if (arr.length > 1) {\r\n summary = `${arr[0]}, ${this.i18n.getString('CampaignImport_And')} ` +\r\n `${arr.length - 1} ${this.i18n.getString('Page_More')}`;\r\n } else {\r\n summary = `${arr[0]}`;\r\n }\r\n return summary;\r\n }\r\n\r\n resetSupportCashbackSettings(supportCashbackSettings, inheritInfo) {\r\n if (this.targetSelectionView) {\r\n this.targetSelectionView.supportCashbackSettings = supportCashbackSettings;\r\n const { locationTargetsView } = this.targetSelectionView;\r\n if (locationTargetsView) {\r\n locationTargetsView.toggleCashbackPercentColumns(supportCashbackSettings, inheritInfo);\r\n }\r\n } else {\r\n super.resetSupportCashbackSettings(supportCashbackSettings, inheritInfo);\r\n }\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport Backbone from 'backbone';\r\nimport Promise from 'bluebird';\r\nimport { cloneDeep } from '@bingads-webui-universal/primitive-utilities';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport { criterionHelper, typeMapping } from '@bingads-webui-campaign/audience-campaign-shared';\r\n\r\n/**\r\n * AudienceTargetInfo class which acts as a cache and data layer\r\n * for the targeting information\r\n * This class never is an intermediate layer that only maintains its cache\r\n *\r\n * @extends {Backbone.View}\r\n */\r\nexport class AudienceTargetInfo extends Backbone.View {\r\n /**\r\n * Initializes the audience target info class\r\n *\r\n * @param {string} resourceName - resource name, which can be either\r\n * AdGroupCriterion or CampaignCriterion\r\n * @param {bool} isShoppingCampaign - if it is shopping campaign or not.\r\n * @param {bool} listenToLocationCriterion - if listen to location criterion or not.\r\n * @param {function} customizedTemplates - association view templates.\r\n * @param {bool} useLocationControl - if location control needs to be used or not.\r\n * @param {bool} initAudienceAssociationView - if init audience association view or not.\r\n * @returns {undefined}\r\n */\r\n initialize({\r\n resourceName,\r\n isShoppingCampaign = false,\r\n listenToLocationCriterion = true,\r\n customizedTemplates = {},\r\n useLocationControl = true,\r\n initAudienceAssociationView = true,\r\n deps = {},\r\n isForVNext = false,\r\n perfMarker = null,\r\n isAudienceCreationWorkflow = false,\r\n isFromAudienceDashboard = false,\r\n permissions,\r\n }) {\r\n this.jsdata = DependencyResolver.get('component/js-data-campaign/index');\r\n this.resourceName = resourceName;\r\n this.listenToLocationCriterion = listenToLocationCriterion;\r\n this.useLocationControl = useLocationControl;\r\n this.deps = deps;\r\n this.isForVNext = isForVNext;\r\n this.perfMarker = perfMarker;\r\n // To avoid the conflict with negative ID from jsdata.Intermediate\r\n this.currentVirtualId = -1000000;\r\n this.Enable1PPlacementTargeting = permissions && permissions.dynamic && permissions.Enable1PPlacementTargeting;\r\n\r\n if (initAudienceAssociationView) {\r\n let audiencePerfMarker = null;\r\n if (this.perfMarker) {\r\n audiencePerfMarker = this.perfMarker.createChild('AudienceAssociationView', { autoEnd: true });\r\n audiencePerfMarker.willFetchFile();\r\n }\r\n const AimAudienceAssociationView\r\n = DependencyResolver.get('campaignui/feature/audience/association/view/aim-component-view');\r\n\r\n this.audienceAssociationView = new AimAudienceAssociationView({\r\n isShoppingCampaign,\r\n customizedTemplates,\r\n deps,\r\n isForVNext,\r\n perfMarker: audiencePerfMarker,\r\n isAudienceCreationWorkflow,\r\n isFromAudienceDashboard,\r\n });\r\n this.audienceAssociationView.render();\r\n this.listenTo(\r\n this.audienceAssociationView,\r\n 'selectionChanged', () => this.onAudienceSelectionChangedAsync()\r\n );\r\n }\r\n\r\n this.criterionsByType =\r\n _.reduce(typeMapping, (memo, value) => _.extend(memo, { [value]: [] }), {});\r\n this.parentLevelTogglesByType =\r\n _.reduce(typeMapping, (memo, value) => _.extend(memo, { [value]: false }), {});\r\n\r\n if (listenToLocationCriterion) {\r\n this.onLocationCriterionChange();\r\n\r\n this.jsdata.Intermediate.subscribe(resourceName, () => this.onLocationCriterionChange());\r\n\r\n // Clear any un cleared Location Criterions\r\n this.jsdata.Intermediate.destroyAll(resourceName);\r\n }\r\n }\r\n\r\n reloadAudienceData(locationCriterionsData) {\r\n if (this.audienceAssociationView) {\r\n return this.audienceAssociationView.reloadAudienceData(locationCriterionsData);\r\n }\r\n return Promise.resolve(false);\r\n }\r\n\r\n setOnAudiencesTargetChangeCallback(onAudiencesTargetChange) {\r\n if (this.audienceAssociationView) {\r\n this.audienceAssociationView.onAudiencesTargetChange = onAudiencesTargetChange;\r\n }\r\n }\r\n\r\n /**\r\n * Set parent level toggle for a specific criterion type\r\n *\r\n * @public\r\n * @param {string} type - type of criterion\r\n * @param {bool} value - whether to use parent level setting\r\n * @returns {undefined}\r\n * @memberof AudienceTargetInfo\r\n */\r\n setParentLevelToggle(type, value) {\r\n if (!_.has(this.parentLevelTogglesByType, type)) {\r\n return;\r\n }\r\n\r\n this.parentLevelTogglesByType[type] = !!value;\r\n }\r\n\r\n getParentLevelToggle(type) {\r\n return this.parentLevelTogglesByType[type];\r\n }\r\n\r\n /**\r\n * Initialize with adgroup function\r\n *\r\n * @private\r\n * @param {string} campaignId - Id of campaign\r\n * @param {string} adGroupId - Id of adgroup\r\n * @returns {Promise} - promise of setting adgroup targets\r\n * @memberof AudienceTargetInfo\r\n */\r\n initializeWithAdGroupAsync(campaignId, adGroupId) {\r\n const audienceFetchCreationTask = this.fetchCriterions(campaignId, adGroupId);\r\n const audienceCriterionFetchCreationTask =\r\n this.initializeWithhAdGroupAudience(campaignId, adGroupId);\r\n\r\n return Promise.all([audienceCriterionFetchCreationTask, audienceFetchCreationTask]);\r\n }\r\n\r\n initializeWithhAdGroupAudience(campaignId, adGroupId) {\r\n const AimAudienceAssociationView\r\n = DependencyResolver.get('campaignui/feature/audience/association/view/aim-component-view');\r\n\r\n this.audienceAssociationView = new AimAudienceAssociationView({\r\n campaignId,\r\n adGroupId,\r\n deps: this.deps,\r\n isForVNext: this.isForVNext,\r\n });\r\n this.listenTo(\r\n this.audienceAssociationView,\r\n 'selectionChanged', () => this.onAudienceSelectionChangedAsync()\r\n );\r\n // audienceAssociationView needs to render in order to generate its list of associations\r\n this.audienceAssociationView.render();\r\n\r\n // const audienceCriterionFetchCreationTask =\r\n return this.fetchAdGroupAudienceCriterions(campaignId, adGroupId);\r\n }\r\n /**\r\n * Initialize with adgroup function\r\n *\r\n * @private\r\n * @param {string} campaignId - Id of campaign\r\n * @returns {Promise} - promise of setting targets\r\n * @memberof AudienceTargetInfo\r\n */\r\n initializeWithCampaignAsync(campaignId) {\r\n // Empty string for the adgroup.\r\n return this.fetchCriterions(campaignId, '');\r\n }\r\n\r\n get aimAudienceAssociationView() {\r\n return this.audienceAssociationView;\r\n }\r\n\r\n /**\r\n * Get the new virtual ID\r\n *\r\n * @returns {Number} - number of the ID\r\n */\r\n getNewVirtualId() {\r\n this.currentVirtualId -= 1;\r\n\r\n return this.currentVirtualId;\r\n }\r\n\r\n getSnapshot(supportCashbackSettings) {\r\n const criterions = _.values(typeMapping);\r\n const snapShot = cloneDeep(this.getAllComputedByTypes(criterions));\r\n\r\n // for linked-in targets, if there is nothing modified in bid step\r\n // the Criterion object will look like this { BidAdj: undefined, CashbackPercent: undefined }\r\n // this is not allowed for MT BulkUpsert API, so we need to set a default value manually\r\n if (supportCashbackSettings) {\r\n snapShot.forEach((target) => {\r\n const { Criterion } = target;\r\n\r\n if (Criterion && Criterion.CashbackPercent == null) {\r\n Criterion.CashbackPercent = -1;\r\n }\r\n });\r\n }\r\n\r\n return snapShot;\r\n }\r\n\r\n /**\r\n * Fetch Criterions and create them in intermediate cache\r\n * When 2nd parameter is empty, fetch Campaign Criterions\r\n * When 2nd parameter is not empty, fetch AdGroup Criterions\r\n *\r\n * @param {string} campaignId - campaign ID to load\r\n * @param {string} adGroupId - adGroup ID to load\r\n * @param {array|undefined} criterionsOverride - override the criterions to load\r\n * @param {bool} shouldFetchContextualTargets - should fetch ContextualTargets or not\r\n * @returns {Promise} - Promise to be completed\r\n */\r\n fetchCriterions(campaignId, adGroupId, criterionsOverride, shouldFetchContextualTargets) {\r\n const criterionLoader = DependencyResolver.get('campaignui/feature/base-targets/util/criterionLoader');\r\n const criterionsToLoad = criterionsOverride || _.compact([\r\n 'AgeCriterion',\r\n 'GenderCriterion',\r\n 'DeviceCriterion',\r\n 'CompanyNameCriterion',\r\n 'IndustryCriterion',\r\n 'JobFunctionCriterion',\r\n this.listenToLocationCriterion && 'LocationCriterion',\r\n shouldFetchContextualTargets && 'ContextualTarget',\r\n ]);\r\n\r\n return criterionLoader.load(campaignId, adGroupId, criterionsToLoad).then((criterions) => {\r\n const formattedCriterions = [];\r\n\r\n _.each(criterions, (loadedCriterionData) => {\r\n const formattedCriterion = criterionHelper.reformatFetchedCriterion(\r\n loadedCriterionData,\r\n campaignId,\r\n adGroupId\r\n );\r\n\r\n formattedCriterions.push(formattedCriterion);\r\n });\r\n\r\n return this.createMultipleAsync(formattedCriterions);\r\n });\r\n }\r\n\r\n /**\r\n * Fetch Audience AdGroup Criterions and create them in intermediate cache\r\n *\r\n * @returns {Promise} - Promise to be completed\r\n */\r\n fetchAdGroupAudienceCriterions() {\r\n return this.audienceAssociationView.ensureLoadedAsync()\r\n .then(() => this.onAudienceSelectionChangedAsync());\r\n }\r\n\r\n /**\r\n * Create criterion on jsdata\r\n *\r\n * @param {Object} criterion - criterion object\r\n * @returns {Promise} - promise of creating criterion\r\n */\r\n createAsync(criterion) {\r\n let createTask = Promise.resolve(true);\r\n\r\n if (_.has(this.criterionsByType, criterion.Criterion.Type)) {\r\n if (!criterion.Id) {\r\n /* eslint-disable no-param-reassign */\r\n criterion.Id = this.getNewVirtualId();\r\n }\r\n\r\n if (!(criterion.Criterion.Type === 'Audience' && _.contains(_.pluck(_.pluck(this.criterionsByType.Audience, 'Criterion'), 'AudienceName'), criterion.Criterion.AudienceName))) {\r\n this.criterionsByType[criterion.Criterion.Type].push(criterion);\r\n }\r\n\r\n if (this.useLocationControl &&\r\n this.isLocationTypeCriterionType(criterion.Criterion.Type)) {\r\n createTask = this.jsdata.Intermediate.create(this.resourceName, criterion);\r\n }\r\n\r\n return createTask.then(() => {\r\n this.trigger(`${this.resourceName}${criterion.Criterion.Type}Changed`);\r\n this.trigger(`${this.resourceName}Changed`);\r\n });\r\n }\r\n\r\n return Promise.resolve(true);\r\n }\r\n\r\n /**\r\n * Create criterions on jsdata\r\n *\r\n * @param {Array} criterions - array of criterion object\r\n * @returns {Promise} - promise of creating criterion\r\n */\r\n createMultipleAsync(criterions) {\r\n const locationCriterions = [];\r\n const updatedCriterionTypes =\r\n _.reduce(typeMapping, (memo, value) => _.extend(memo, { [value]: false }), {});\r\n\r\n _.each(criterions, (criterion) => {\r\n if (_.has(this.criterionsByType, criterion.Criterion.Type)) {\r\n if (!criterion.Id) {\r\n /* eslint-disable no-param-reassign */\r\n criterion.Id = this.getNewVirtualId();\r\n }\r\n\r\n this.criterionsByType[criterion.Criterion.Type].push(criterion);\r\n updatedCriterionTypes[criterion.Criterion.Type] = true;\r\n\r\n if (this.useLocationControl &&\r\n this.isLocationTypeCriterionType(criterion.Criterion.Type)) {\r\n locationCriterions.push(criterion);\r\n }\r\n }\r\n });\r\n\r\n let updateIntermediateTask = Promise.resolve(true);\r\n\r\n if (locationCriterions.length > 0) {\r\n updateIntermediateTask =\r\n this.jsdata.Intermediate.createMany(this.resourceName, locationCriterions);\r\n }\r\n\r\n return updateIntermediateTask.then(() => {\r\n _.each(updatedCriterionTypes, (isUpdated, criterionType) => {\r\n this.trigger(`${this.resourceName}${criterionType}Changed`);\r\n });\r\n\r\n this.trigger(`${this.resourceName}Changed`);\r\n });\r\n }\r\n\r\n /**\r\n * Update criterion on jsdata\r\n *\r\n * @param {Object} updatedCriterion - criterion object\r\n * @param {Boolean} noEvent - do not trigger change event\r\n * @returns {Promise} - promise of updating criterion\r\n */\r\n updateAsync(updatedCriterion, noEvent = false) {\r\n if (_.has(this.criterionsByType, updatedCriterion.Criterion.Type)) {\r\n const criterionGroupToUpdate = this.criterionsByType[updatedCriterion.Criterion.Type];\r\n\r\n _.extend(_.findWhere(\r\n criterionGroupToUpdate,\r\n {\r\n Id: updatedCriterion.Id,\r\n }\r\n ), updatedCriterion);\r\n\r\n return Promise.resolve().then(() => {\r\n if (!noEvent) {\r\n this.trigger(`${this.resourceName}${updatedCriterion.Criterion.Type}Changed`);\r\n this.trigger(`${this.resourceName}Changed`);\r\n }\r\n\r\n return true;\r\n });\r\n }\r\n\r\n return Promise.resolve(false);\r\n }\r\n\r\n fillCriterionsWithId(savedCriterions) {\r\n _.each(savedCriterions, (savedCriterion) => {\r\n if (!_.has(this.criterionsByType, savedCriterion.Criterion.Type) || !savedCriterion.Id) {\r\n return;\r\n }\r\n\r\n const criterionGroupToUpdate = this.criterionsByType[savedCriterion.Criterion.Type];\r\n const criterionToUpdate = _.find(criterionGroupToUpdate, c =>\r\n _.isEqual(c.Criterion, savedCriterion.Criterion));\r\n\r\n _.extend(criterionToUpdate, { Id: savedCriterion.Id });\r\n });\r\n }\r\n\r\n /**\r\n * Get all the target criterion\r\n *\r\n * @returns {array} - array of types\r\n */\r\n getAll() {\r\n return _.flatten(_.values(this.criterionsByType));\r\n }\r\n\r\n /**\r\n * Get all the target criterion with the matching type\r\n *\r\n * @param {string} type - string representation of the type\r\n * @returns {array} - array of types\r\n */\r\n getAllByType(type) {\r\n return this.criterionsByType[type];\r\n }\r\n\r\n /**\r\n * Get all the target criterion with the matching type\r\n *\r\n * @param {array} types - array of string representation of the type\r\n * @returns {array} - array of types\r\n */\r\n getAllByTypes(types) {\r\n let returnCriterions = [];\r\n\r\n _.each(\r\n types,\r\n // eslint-disable-next-line no-return-assign\r\n type => returnCriterions = returnCriterions.concat(this.criterionsByType[type])\r\n );\r\n\r\n return returnCriterions;\r\n }\r\n\r\n /**\r\n * Get all the computed target criterions with the matching types\r\n * If parentLevelToggle[aType] is set to true,\r\n * then all the criterions of aType would be set to deleted\r\n *\r\n * @param {array} types - array of string representation of the type\r\n * @returns {array} - array of types\r\n */\r\n getAllComputedByTypes(types) {\r\n let returnCriterions = [];\r\n\r\n _.each(\r\n types,\r\n (type) => {\r\n if (this.parentLevelTogglesByType[type]) {\r\n return;\r\n }\r\n returnCriterions = returnCriterions.concat(this.criterionsByType[type]);\r\n }\r\n );\r\n\r\n return returnCriterions;\r\n }\r\n\r\n getById(id) {\r\n const allCriterions = this.getAll();\r\n const criterionWithGivenId = _.find(allCriterions, criterion => criterion.Id === id);\r\n\r\n return criterionWithGivenId;\r\n }\r\n\r\n getAllNoneEmptyTypeKeys() {\r\n const noneEmptyTypeKeys = [];\r\n const criterionTypeKeys = _.keys(this.criterionsByType);\r\n\r\n _.each(criterionTypeKeys, (typeKey) => {\r\n if (this.criterionsByType[typeKey].length > 0) {\r\n noneEmptyTypeKeys.push(typeKey);\r\n }\r\n });\r\n\r\n return noneEmptyTypeKeys;\r\n }\r\n\r\n /**\r\n * Destroy the criterion target with the given id.\r\n *\r\n * @param {string} criterionId - Id of the target criterion\r\n * @returns {undefined}\r\n */\r\n destroyAsync(criterionId) {\r\n let destroyTask = Promise.resolve(true);\r\n let criterionTypeToChange;\r\n\r\n _.each(this.criterionsByType, (criterions) => {\r\n if (_.some(criterions, criterion => criterion.Id === criterionId)) {\r\n criterionTypeToChange = _.first(criterions).Criterion.Type;\r\n }\r\n });\r\n\r\n if (criterionTypeToChange) {\r\n this.criterionsByType[criterionTypeToChange] =\r\n _.reject(\r\n this.criterionsByType[criterionTypeToChange],\r\n criterion => criterion.Id === criterionId\r\n );\r\n }\r\n\r\n if (this.isLocationTypeCriterionType(criterionTypeToChange)) {\r\n destroyTask = this.jsdata.Intermediate.destroy(this.resourceName, criterionId);\r\n }\r\n\r\n return destroyTask.then(() => {\r\n this.trigger(\r\n `${this.resourceName}${criterionTypeToChange}Changed`,\r\n this.criterionsByType[criterionTypeToChange]\r\n );\r\n this.trigger(`${this.resourceName}Changed`);\r\n });\r\n }\r\n\r\n /**\r\n * Destroys all the saved criterion on Intermediate\r\n *\r\n * @returns {undefined}\r\n */\r\n destroyAllAsync() {\r\n const noneEmptyTypeKeys = this.getAllNoneEmptyTypeKeys();\r\n\r\n this.criterionsByType =\r\n _.reduce(typeMapping, (memo, value) => _.extend(memo, { [value]: [] }), {});\r\n\r\n return this.jsdata.Intermediate.destroyAll(this.resourceName).then(() => {\r\n _.each(noneEmptyTypeKeys, (typeKey) => {\r\n this.trigger(`${this.resourceName}${typeKey}Changed`, this.criterionsByType[typeKey]);\r\n this.trigger(`${this.resourceName}Changed`);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Destroys all the saved criterion on Intermediate with matching type\r\n *\r\n * @param {string} targetType - target type of the criterion\r\n * @returns {undefined}\r\n */\r\n destroyTargetTypeAsync(targetType) {\r\n const targetCriterions = this.criterionsByType[targetType];\r\n const destroyTasks = [];\r\n\r\n if (targetCriterions) {\r\n _.each(targetCriterions, (targetCriterion) => {\r\n destroyTasks.push(this.destroyAsync(targetCriterion.Id));\r\n });\r\n }\r\n\r\n return Promise.all(destroyTasks);\r\n }\r\n\r\n /**\r\n * Check if there is an audience remarketing list\r\n *\r\n * @returns {boolean} - true if it has remarketing list.\r\n */\r\n hasAudienceRemarketingList() {\r\n const audienceCriterions = this.getAllByType('Audience');\r\n const hasAudienceRemarketingList = _.any(audienceCriterions, audienceCriterion =>\r\n audienceCriterion.Criterion.AudienceType === 'Remessaging'\r\n || audienceCriterion.Criterion.AudienceType === 'Product'\r\n || audienceCriterion.Criterion.AudienceType === 'Custom'\r\n || audienceCriterion.Criterion.AudienceType === 'RemarketingSimilar');\r\n\r\n return hasAudienceRemarketingList;\r\n }\r\n\r\n /**\r\n * Check if it has Campaign Level Targets.\r\n * @param {string} criterionType - type of criterion\r\n * @returns {boolean} - true if it has Campaign Level Targets.\r\n */\r\n hasCampaignLevelTargets(criterionType) {\r\n return (\r\n this.getAllByType(criterionType).length <= 0 ||\r\n this.getAllByType(criterionType)[0].LevelOfDetails === 'Campaign' ||\r\n criterionType === 'Age' || criterionType === 'Gender' // Even if we have not set targets for age and gender\r\n // It has these 2 targets by default(view as campaign level targets)\r\n );\r\n }\r\n\r\n onAudienceSelectionChangedAsync() {\r\n const audiences = this.audienceAssociationView.getAudienceCriterion();\r\n\r\n // check if there are IMA audience inside\r\n if (this.audienceAssociationView && this.audienceAssociationView.onAudiencesTargetChange) {\r\n const IMAudience = _.chain(audiences)\r\n .filter(audience => audience &&\r\n audience.Criterion && audience.Criterion.AudienceType === 'InMarket')\r\n .map(audience => ({\r\n Level: 'AdGroup',\r\n AudienceCriterion: {\r\n AudienceId: audience.Criterion.AudienceId,\r\n },\r\n }))\r\n .value();\r\n\r\n this.audienceAssociationView.onAudiencesTargetChange({ value: IMAudience });\r\n }\r\n\r\n return this.destroyTargetTypeAsync('Audience').then(() => {\r\n const critionCreationTasks = [];\r\n\r\n _.each(audiences, (association) => {\r\n // Add CriterionType property\r\n const typePrefix = association.Status === 'Excluded' ? 'Negative' : '';\r\n\r\n association.CriterionType = `${typePrefix}${association.Criterion.AudienceType}`; //eslint-disable-line\r\n\r\n critionCreationTasks.push(this.createAsync(association));\r\n });\r\n\r\n return Promise.all(critionCreationTasks);\r\n });\r\n }\r\n\r\n /**\r\n * Event handler for criterion change\r\n * Criterion change only cares about the location critertions.\r\n * @private\r\n * @returns {undefined}\r\n */\r\n onLocationCriterionChange() {\r\n let criterions = _.clone(this.jsdata.Intermediate.getAll(this.resourceName));\r\n\r\n // Remove empty properties returned from jsdata.Intermediate\r\n criterions = _.map(criterions, criterion => _.pick(criterion, _.identity));\r\n\r\n const newCriterionsByType = {\r\n Location: [],\r\n Radius: [],\r\n NegativeLocation: [],\r\n };\r\n\r\n _.each(criterions, (criterion) => {\r\n newCriterionsByType[criterion.Criterion.Type].push(criterion);\r\n });\r\n\r\n const criterionTypeKeys = _.keys(newCriterionsByType);\r\n\r\n _.each(criterionTypeKeys, (typeKey) => {\r\n if (!_.isEqual(this.criterionsByType[typeKey], newCriterionsByType[typeKey])) {\r\n this.criterionsByType[typeKey] = newCriterionsByType[typeKey];\r\n\r\n this.trigger(`${this.resourceName}${typeKey}Changed`, this.criterionsByType[typeKey]);\r\n }\r\n });\r\n\r\n this.trigger(`${this.resourceName}Changed`);\r\n }\r\n\r\n getCampaignLocationCriterions() {\r\n const criterions = _.clone(this.jsdata.Intermediate.getAll('CampaignCriterion'));\r\n\r\n return _.filter(criterions, target => (\r\n target.CriterionType === 'Location' ||\r\n target.CriterionType === 'Radius' ||\r\n target.CriterionType === 'NegativeLocation'));\r\n }\r\n\r\n isLocationTypeCriterionType(criterionType) {\r\n return (\r\n criterionType === 'Location' ||\r\n criterionType === 'NegativeLocation' ||\r\n criterionType === 'Radius'\r\n );\r\n }\r\n\r\n /**\r\n * Get Effective Criterions, which will exclude age and gender criterions if they've all checked.\r\n * @returns {array} - Effective criterions\r\n */\r\n getEffectiveCriterions() {\r\n let criterions = this.getAll();\r\n if (!criterions || !criterions.length) {\r\n return [];\r\n }\r\n\r\n criterions = _.filter(criterions, target => (\r\n target.CriterionType !== 'Location' &&\r\n target.CriterionType !== 'Radius' &&\r\n target.CriterionType !== 'NegativeLocation'));\r\n if (!criterions || !criterions.length) {\r\n return [];\r\n }\r\n const AgeTargets = _.filter(criterions, target => (\r\n target.CriterionType === 'Age'));\r\n const GenderTargets = _.filter(criterions, target => (\r\n target.CriterionType === 'Gender'));\r\n const otherTargets = _.filter(criterions, target => (\r\n target.CriterionType !== 'Age' &&\r\n target.CriterionType !== 'Gender'));\r\n return ((AgeTargets.length === 6 && GenderTargets.length === 3) ||\r\n (AgeTargets.length === 0 && GenderTargets.length === 0)) ?\r\n otherTargets : criterions;\r\n }\r\n}\r\n","export const dataDateRanges = {\r\n Today: 'Today',\r\n Yesterday: 'Yesterday',\r\n ThisWeekFromSun: 'ThisWeekFromSun',\r\n ThisWeekFromMon: 'ThisWeekFromMon',\r\n Last7Days: 'LastSevenDays',\r\n LastWeekStartingSun: 'LastWeekStartingSun',\r\n LastWeekStartingMon: 'LastWeekStartingMon',\r\n LastBusinessWeek: 'LastBusinessWeek',\r\n Last14Days: 'LastFourteenDays',\r\n ThisMonth: 'ThisMonth',\r\n Last30Days: 'LastThirtyDays',\r\n LastMonth: 'LastMonth',\r\n Last3Month: 'LastThreeMonths',\r\n Last6Month: 'LastSixMonths',\r\n ThisYear: 'ThisYear',\r\n LastYear: 'LastYear',\r\n AllTime: 'AllTime',\r\n};\r\n\r\nexport const frequencyGrains = {\r\n Hourly: 4,\r\n Daily: 0,\r\n Weekly: 1,\r\n Monthly: 2,\r\n Once: 3,\r\n};\r\n\r\nexport const weeklyOptions = {\r\n Monday: 1,\r\n Tuesday: 2,\r\n Wednesday: 3,\r\n Thursday: 4,\r\n Friday: 5,\r\n Saturday: 6,\r\n Sunday: 0,\r\n};\r\n","import _ from 'underscore';\r\nimport ko from 'knockout';\r\nimport { CronFormatter } from '@bingads-webui/cron-formatter';\r\nimport { fromLegacyTimeZone, toIANATimeZone } from '@bingads-webui-universal/time-zone-converter';\r\nimport { dataDateRanges, frequencyGrains, weeklyOptions } from './options';\r\n\r\nconst setupOptions = (locKey, key, value, i18n) => ({\r\n Value: key,\r\n Text: i18n.getString(locKey + value),\r\n});\r\n\r\nconst getDefaultTimeZone = accountTimeZone => (accountTimeZone > 0 ? accountTimeZone : 71);\r\n\r\nconst isHourlyNotifyMeRuleAllowed = (entity, permissions) => permissions.IsHourlyNotifyMeRuleAllowed === true && entity === 'Campaign';\r\n\r\nclass CustomDateSerializer {\r\n constructor({ date, hour, timeZone }) {\r\n this.year = date.getFullYear();\r\n this.month = date.getMonth() + 1;\r\n this.date = date.getDate();\r\n this.hour = hour;\r\n this.timeZone = timeZone;\r\n }\r\n\r\n toString() {\r\n return `${this.year}-${this.month}-${this.date} ${this.hour}`;\r\n }\r\n\r\n get format() {\r\n return 'yyyy-MM-dd H';\r\n }\r\n}\r\n\r\nfunction getUTCNowCustomDateSerializer() {\r\n const currentTime = new Date();\r\n const utcYear = currentTime.getUTCFullYear();\r\n const utcMonth = currentTime.getUTCMonth();\r\n const utcDate = currentTime.getUTCDate();\r\n const utcHours = currentTime.getUTCHours();\r\n\r\n currentTime.setFullYear(utcYear);\r\n currentTime.setMonth(utcMonth);\r\n currentTime.setDate(utcDate);\r\n\r\n return new CustomDateSerializer({\r\n date: currentTime,\r\n hour: utcHours,\r\n timeZone: 'UTC',\r\n });\r\n}\r\n\r\nexport class RuleCronSelectionviewModel {\r\n constructor({\r\n i18n,\r\n permissions,\r\n accountTimeZone,\r\n selectedRule,\r\n stateMgr,\r\n preferenceSvc,\r\n appCfg,\r\n entity,\r\n isEmailOption,\r\n instrumentation,\r\n }) {\r\n const {\r\n frequencyGrain,\r\n dateRangePreset,\r\n monthlyOption,\r\n weeklyOption,\r\n dailyOption,\r\n timeZoneOption,\r\n runOnceDate,\r\n } = selectedRule || {};\r\n\r\n const scenario = instrumentation[`authorRule${entity}`].create();\r\n this.activity = scenario.createRule.create();\r\n\r\n this.cronFormatter = new CronFormatter({ i18n });\r\n this.i18n = i18n;\r\n this.frequencyGrains = _.map(\r\n frequencyGrains,\r\n (key, value) => setupOptions('FrequencyGrain_', key, value, i18n)\r\n );\r\n this.dataDateRangeOptions = _.map(\r\n dataDateRanges,\r\n (key, value) => setupOptions('DataDateRangeOptions_', key, value, i18n)\r\n );\r\n this.monthlyOptions = _.map(_.range(1, 29), i => ({ Value: i, Text: i }));\r\n this.weeklyOptions = _.map(\r\n weeklyOptions,\r\n (key, value) => setupOptions('WeeklyOptions_', key, value, i18n)\r\n );\r\n this.dailyOptions = _.map(_.range(0, 24), hour => ({\r\n Value: hour,\r\n twelveHourDisplay: this.cronFormatter.formatHourOfDay(hour),\r\n twentyFourHourDisplay: `0${hour}`.slice(-2),\r\n }));\r\n\r\n this.isTwelveHourDisplay = ko.observable('true');\r\n if (permissions.IsUsePreferencesServiceEnabled === true) {\r\n preferenceSvc.initialize().then(() => {\r\n const prefix = appCfg.get('StateManagerKeyPrefix');\r\n const isTwelveHourDisplayPreference = preferenceSvc.findByName(`${prefix}isTwelveHourDisplay`);\r\n\r\n if (isTwelveHourDisplayPreference) {\r\n // unless it is set to 'false', by default it's 'true'\r\n const result = isTwelveHourDisplayPreference.Data === 'false' ? 'false' : 'true';\r\n this.isTwelveHourDisplay(result);\r\n }\r\n });\r\n } else {\r\n stateMgr.getItem('isTwelveHourDisplay', (err, state) => {\r\n if (!err && state) {\r\n this.isTwelveHourDisplay(_.isUndefined(state.permanent) ? 'true' : state.permanent);\r\n }\r\n });\r\n }\r\n this.timeZoneOptions = _.map(_.range(75, 0, -1), zone => ({ Value: zone, Text: i18n.getString(`TimeZoneId_${zone}`) }));\r\n this.selectedDataDateRangeOption = ko.observable(dateRangePreset);\r\n this.selectedMonthOption = ko.observable(monthlyOption);\r\n this.selectedWeekOption = ko.observable(weeklyOption);\r\n this.selectedDailyOption = ko.observable(dailyOption);\r\n this.selectedTimeZoneOption = ko.observable(timeZoneOption > 0 ?\r\n timeZoneOption :\r\n getDefaultTimeZone(accountTimeZone));\r\n this.selectedFrequencyGrain = ko.observable(frequencyGrain);\r\n this.selectedFrequencyGrain.subscribe((newValue) => {\r\n switch (newValue) {\r\n case frequencyGrains.Monthly:\r\n this.selectedDataDateRangeOption(dataDateRanges.Last30Days);\r\n break;\r\n case frequencyGrains.Weekly:\r\n this.selectedDataDateRangeOption(dataDateRanges.Last7Days);\r\n break;\r\n case frequencyGrains.Once:\r\n this.selectedDataDateRangeOption(dataDateRanges.Today);\r\n break;\r\n default:\r\n this.selectedDataDateRangeOption(dataDateRanges.Yesterday);\r\n }\r\n });\r\n\r\n this.isTwelveHourDisplayFormat = ko.computed({\r\n read() {\r\n return this.isTwelveHourDisplay();\r\n },\r\n write(v) {\r\n this.isTwelveHourDisplay(v);\r\n if (permissions.IsUsePreferencesServiceEnabled === true) {\r\n const prefix = appCfg.get('StateManagerKeyPrefix');\r\n const data = { Name: `${prefix}isTwelveHourDisplay`, Data: v };\r\n preferenceSvc.setAtUserLevel(data);\r\n } else {\r\n stateMgr.setItem('permanent', 'isTwelveHourDisplay', v);\r\n }\r\n },\r\n }, this);\r\n\r\n this.runOnceDate = ko.observable(runOnceDate);\r\n this.isMonthOption = ko.computed(() =>\r\n this.selectedFrequencyGrain() === frequencyGrains.Monthly, this, {\r\n pure: true,\r\n });\r\n this.isWeekOption = ko.computed(() =>\r\n this.selectedFrequencyGrain() === frequencyGrains.Weekly, this, {\r\n pure: true,\r\n });\r\n this.isOnceOption = ko.computed(() =>\r\n this.selectedFrequencyGrain() === frequencyGrains.Once, this, {\r\n pure: true,\r\n });\r\n this.isHourlyOption = ko.computed(() =>\r\n this.selectedFrequencyGrain() === frequencyGrains.Hourly, this, {\r\n pure: true,\r\n });\r\n this.frequencyErrorMessage = ko.observable('');\r\n this.selectedFrequencyGrain.subscribe(() => {\r\n this.frequencyErrorMessage('');\r\n });\r\n this.frequencyErrorRole = ko.computed(() => (this.frequencyErrorMessage() === '' ? 'none' : 'alert'), this);\r\n this.startInput = ko.computed({\r\n read: () => (this.runOnceDate() ? i18n.formatDate(this.runOnceDate(), { timeZone: null }) : ''),\r\n write: (value) => {\r\n this.frequencyErrorMessage('');\r\n\r\n if (!_.isNull(value) &&\r\n !_.isEmpty(value.trim()) &&\r\n !_.isNull(i18n.parseDate(value.trim(), { timeZone: null }))) {\r\n this.runOnceDate(i18n.parseDate(value.trim(), { timeZone: null }));\r\n } else {\r\n this.frequencyErrorMessage(i18n.getString('Validate_ScheduleTimeInvalid'));\r\n }\r\n },\r\n }, this, {\r\n pure: true,\r\n });\r\n\r\n // add Hourly notify-me rule for users under pilot\r\n if (!isHourlyNotifyMeRuleAllowed(entity, permissions) || isEmailOption) {\r\n this.frequencyGrains = _.reject(\r\n this.frequencyGrains,\r\n item => item.Value === frequencyGrains.Hourly\r\n );\r\n }\r\n }\r\n\r\n validate() {\r\n const date = this.runOnceDate();\r\n\r\n if (date && this.isOnceOption()) {\r\n const selectedTimeZone = toIANATimeZone(fromLegacyTimeZone(this.selectedTimeZoneOption()));\r\n const selectedTime = new CustomDateSerializer({\r\n date,\r\n hour: this.selectedDailyOption(),\r\n timeZone: selectedTimeZone,\r\n });\r\n const convertedSelectedTime = this.i18n.parseDate(\r\n selectedTime.toString(),\r\n {\r\n timeZone: selectedTime.timeZone,\r\n raw: selectedTime.format,\r\n }\r\n ); // convert to account timezone\r\n\r\n const currentTime = getUTCNowCustomDateSerializer();\r\n const convertedCurrentTime = this.i18n.parseDate(\r\n currentTime.toString(),\r\n {\r\n raw: currentTime.format,\r\n timeZone: currentTime.timeZone,\r\n }\r\n ); // convert now to account timezone\r\n\r\n this.activity.trace(`[TestingClientSideValidation] Validating selected run once time. Selected time zone: ${selectedTimeZone}. Selected time: ${selectedTime.toString()}. Converted rule run time: ${convertedSelectedTime.toString()}. Converted current time: ${convertedCurrentTime.toString()}. Is run time in future? ${convertedCurrentTime < convertedSelectedTime}`);\r\n }\r\n return true;\r\n }\r\n\r\n getCron() {\r\n let cron = '* 23 * * *'; // some default value until we integrate run once.\r\n switch (this.selectedFrequencyGrain()) {\r\n case frequencyGrains.Hourly:\r\n cron = this.cronFormatter.toCronString({\r\n min: 0,\r\n });\r\n break;\r\n case frequencyGrains.Weekly:\r\n cron = this.cronFormatter.toCronString({\r\n hour: this.selectedDailyOption(),\r\n dayOfWeek: this.selectedWeekOption(),\r\n });\r\n break;\r\n case frequencyGrains.Monthly:\r\n cron = this.cronFormatter.toCronString({\r\n hour: this.selectedDailyOption(),\r\n dayOfMonth: this.selectedMonthOption(),\r\n });\r\n break;\r\n case frequencyGrains.Once:\r\n cron = this.cronFormatter.toCronString({\r\n hour: this.selectedDailyOption(),\r\n dayOfMonth: this.runOnceDate().getDate(),\r\n month: this.runOnceDate().getMonth() + 1,\r\n year: this.runOnceDate().getFullYear(),\r\n });\r\n break;\r\n case frequencyGrains.Daily:\r\n default:\r\n cron = this.cronFormatter.toCronString({\r\n hour: this.selectedDailyOption(),\r\n });\r\n break;\r\n }\r\n\r\n return cron;\r\n }\r\n}\r\n","import { todayNYearsAgo, lastNDate } from '@bingads-webui-universal/primitive-utilities';\r\nimport { DatePicker } from '@bingads-webui/date-picker';\r\nimport { PureKnockoutView } from '@bingads-webui/knockout-view';\r\nimport template from './template.pug';\r\nimport { RuleCronSelectionviewModel } from './viewmodel';\r\n\r\nexport class RuleCronSelectionview extends PureKnockoutView {\r\n initialize({\r\n i18n,\r\n permissions,\r\n accountTimeZone,\r\n selectedRule,\r\n stateMgr,\r\n preferenceSvc,\r\n appCfg,\r\n entity,\r\n isEmailOption,\r\n instrumentation,\r\n isForVNext = false,\r\n }) {\r\n this.options = {\r\n i18n,\r\n permissions,\r\n accountTimeZone,\r\n selectedRule,\r\n stateMgr,\r\n preferenceSvc,\r\n appCfg,\r\n entity,\r\n isEmailOption,\r\n instrumentation,\r\n };\r\n super.initialize(this.options);\r\n this.i18n = i18n;\r\n this.isForVNext = isForVNext;\r\n this.renderRunOnceDatePicker();\r\n }\r\n\r\n get template() {\r\n return template;\r\n }\r\n\r\n get ViewModel() {\r\n return RuleCronSelectionviewModel;\r\n }\r\n\r\n renderRunOnceDatePicker() {\r\n const today = lastNDate(new Date());\r\n const end = todayNYearsAgo(today, -10);\r\n const needToUpdateDate = this.options.selectedRule.runOnceDate < today;\r\n const selectedDate = needToUpdateDate ?\r\n today :\r\n this.options.selectedRule.runOnceDate;\r\n\r\n this.runOnceDatePicker = new DatePicker({\r\n selectedDate,\r\n minDate: today,\r\n maxDate: end,\r\n });\r\n\r\n this.runOnceDatePicker.on('dateChanged', (newDate) => {\r\n if (newDate) {\r\n this.viewModel.startInput(this.i18n.formatDate(newDate, { timeZone: null }));\r\n }\r\n });\r\n\r\n if (needToUpdateDate) {\r\n this.runOnceDatePicker.trigger('dateChanged');\r\n }\r\n\r\n this.setChild('date-picker', this.runOnceDatePicker);\r\n }\r\n\r\n getCron() {\r\n return this.viewModel.getCron();\r\n }\r\n\r\n getSelectedDataDateRangeOption() {\r\n return this.viewModel.selectedDataDateRangeOption();\r\n }\r\n\r\n validate() {\r\n return this.viewModel.validate();\r\n }\r\n}\r\n","export const emailOptions = {\r\n Always: 'Always',\r\n OnChangeOrError: 'OnChange, OnError',\r\n OnError: 'OnError',\r\n None: 'None',\r\n};\r\n\r\nexport const scopeOptions = {\r\n Selected: 0,\r\n AllEnabled: 1,\r\n AllButRemoved: 2,\r\n};\r\n\r\nexport const entityRelatedOptions = {\r\n EnabledStatusFilterValue: {\r\n Campaign: ['121', '126'],\r\n Ad: ['1'],\r\n AdGroup: ['141', '126'],\r\n Keyword: ['161'],\r\n AssetGroup: ['141'],\r\n },\r\n EnabledStatusFilterQueryOdata: {\r\n AdGroup: \"Status eq Enum.AdGroupStatus'Active' or Status eq Enum.AdGroupStatus'CampaignBudgetPaused'\",\r\n Ad: \"Status eq Enum.AdStatus'Active'\",\r\n Campaign: \"Status eq Enum.CampaignStatus'Active' or Status eq Enum.CampaignStatus'BudgetPaused'\",\r\n Keyword: \"Status eq Enum.OrderItemStatus'Active'\",\r\n AssetGroup: \"Status eq Enum.AssetGroupStatus'Active'\",\r\n },\r\n EnabledStatusFilterColumn: {\r\n Campaign: 'CampaignStatus',\r\n Ad: 'AdUiDisplayStatus',\r\n AdGroup: 'AdGroupStatus',\r\n Keyword: 'KeywordStatus',\r\n AssetGroup: 'AssetGroupStatus',\r\n },\r\n};\r\n","import _ from 'underscore';\r\nimport ko from 'knockout';\r\nimport { scopeOptions, emailOptions } from './options';\r\n\r\nexport class RuleAuthoringViewModel {\r\n constructor({\r\n selectedRule,\r\n i18n,\r\n isActionText,\r\n currentUserId,\r\n }) {\r\n this.i18n = i18n;\r\n this.maxRuleNameLength = 255;\r\n this.inPreviewMode = ko.observable(false);\r\n this.emailOptions = _.map(emailOptions, (key, value) => ({\r\n Value: key,\r\n Text: i18n.getString(`NotificationType_${value}`),\r\n }));\r\n this.selectedRule = selectedRule;\r\n this.entity = this.selectedRule.entity;\r\n this.menuAction = this.selectedRule.action;\r\n this.isEditRule = this.selectedRule.id != null;\r\n this.isEditRuleWithDifferentUser = this.selectedRule.id != null &&\r\n this.selectedRule.modifiedBy.id !== currentUserId;\r\n this.editRuleId = this.selectedRule.id != null ? this.selectedRule.id : null;\r\n this.editRuleWarningMessage = this.selectedRule.id != null ?\r\n i18n.getString('RulesManagement_EditRuleWarningMessage')\r\n .replace(/\\{0\\}/g, this.selectedRule.modifiedBy.name) :\r\n '';\r\n const actionName = i18n.getString(`RuleAction_${this.entity}_${this.menuAction}`);\r\n const ruleName = this.selectedRule.id == null ? actionName : this.selectedRule.name;\r\n let titleName = this.selectedRule.id == null ?\r\n i18n.getString('RuleAuthoring_Title') :\r\n i18n.getString('RuleAuthoring_Title_EditRule');\r\n titleName += ruleName;\r\n this.titleName = ko.observable(titleName);\r\n this.ruleName = ko.observable(ruleName);\r\n this.isActionText = ko.observable(isActionText);\r\n this.actionText = ko.observable(actionName);\r\n this.titleDescription = ko.observable((i18n.getString('RuleAuthoring_Description') || '').replace('LearnHowAriaLabel', i18n.getString('RuleAuthoring_Description_LearnHowAriaLabel')).replace('ExamplesAriaLabel', i18n.getString('RuleAuthoring_Description_ExamplesAriaLabel')));\r\n this.showCampaigns = this.entity === 'Campaign';\r\n this.showAdGroups = this.entity === 'AdGroup';\r\n this.showCampaignAdGroupSelector = ko.observable(false);\r\n this.isSelectorOpen = ko.observable(false);\r\n this.setupScopeOption();\r\n\r\n // Common setting shared accross all entities.\r\n this.selectedScopeInfo = this.selectedRule.scopeInfo;\r\n this.selectedEmailOption = ko.observable(this.selectedRule.emailOption);\r\n this.isEmailOption = ko.computed(() => this.menuAction !== 'SendEmail', this, {\r\n pure: true,\r\n });\r\n\r\n // validate related properties.\r\n this.scopeErrorMessage = ko.observable('');\r\n this.ruleNameErrorMessage = ko.observable('');\r\n this.selectedScopeOption.subscribe(() => {\r\n this.scopeErrorMessage('');\r\n }, this);\r\n this.ruleName.subscribe(() => {\r\n this.ruleNameErrorMessage('');\r\n }, this);\r\n\r\n this.ruleNameErrorRole = ko.computed(() => (this.ruleNameErrorMessage() === '' ? 'none' : 'alert'), this);\r\n this.scopeErrorRole = ko.computed(() => (this.scopeErrorMessage() === '' ? 'none' : 'alert'), this);\r\n\r\n this.validate = () => {\r\n this.scopeErrorMessage('');\r\n this.ruleNameErrorMessage('');\r\n let isResultValid = true;\r\n const scopeInfo = this.selectedScopeInfo;\r\n if (this.selectedScopeOption() === scopeOptions.Selected &&\r\n (_.isNull(scopeInfo) ||\r\n _.isNull(scopeInfo.selectedRowIds) ||\r\n _.isNull(scopeInfo.selectedRowIds.length) ||\r\n scopeInfo.selectedRowIds.length <= 0)) {\r\n this.scopeErrorMessage(i18n.getString('Validate_RowSelectionRequire'));\r\n isResultValid = false;\r\n }\r\n\r\n if (this.ruleName() == null || this.ruleName().length === 0 ||\r\n this.ruleName().length > this.maxRuleNameLength) {\r\n this.ruleNameErrorMessage(i18n.getString('Validate_InvalidRuleName'));\r\n isResultValid = false;\r\n }\r\n return isResultValid;\r\n };\r\n }\r\n\r\n setupScopeOption() {\r\n const { scopeInfo } = this.selectedRule;\r\n let level = 'Account';\r\n\r\n if (_.isNumber(this.selectedRule.scopeInfo.adGroupId)) {\r\n level = 'AdGroup';\r\n } else if (_.isNumber(this.selectedRule.scopeInfo.campaignId)) {\r\n level = 'Campaign';\r\n }\r\n\r\n const options = [];\r\n\r\n _.each(scopeOptions, (key, value) => {\r\n if (this.menuAction === 'Enable' && key === scopeOptions.AllEnabled) {\r\n return;\r\n }\r\n\r\n if (!(this.isEditRule && (this.showCampaigns || this.showAdGroups))\r\n && scopeInfo.allPages && key === scopeOptions.Selected) {\r\n return;\r\n }\r\n\r\n options.push({\r\n Value: key,\r\n Text: this.i18n.getString(`RuleScope_${this.entity}_${value}_${level}`),\r\n });\r\n });\r\n\r\n this.defaultSelectedScopeOptionText = options[0].Text;\r\n this.selectedScopeOption = ko.observable(this.selectedRule.scopeOption);\r\n\r\n options[0].Text = this.defaultSelectedScopeOptionText;\r\n const len = scopeInfo.selectedRowCount;\r\n if (scopeInfo.allPages === false && !_.isNull(len) && len > 0) {\r\n this.selectedScopeOption = ko.observable(scopeOptions.Selected);\r\n }\r\n\r\n this.scopeOptions = ko.observable(options);\r\n }\r\n\r\n updateSelectedEntityCount(info) {\r\n this.selectedScopeInfo = info;\r\n let selectedScopeOption = this.selectedScopeOption();\r\n\r\n const { allPages, selectedRowCount } = info || {};\r\n const updatedScopeOptions = _.clone(this.scopeOptions());\r\n\r\n // currently for selected, we only show 'selected' without numbers\r\n updatedScopeOptions[0].Text = this.defaultSelectedScopeOptionText;\r\n if (allPages) {\r\n selectedScopeOption = scopeOptions.AllButRemoved;\r\n } else if (selectedRowCount > 0) {\r\n selectedScopeOption = scopeOptions.Selected;\r\n }\r\n\r\n // trigger the ko binding update\r\n this.scopeOptions([]);\r\n this.scopeOptions(updatedScopeOptions);\r\n if (selectedScopeOption !== this.selectedScopeOption()) {\r\n this.selectedScopeOption(selectedScopeOption);\r\n }\r\n }\r\n}\r\n","export function refresh(grid) {\r\n grid.gridView.refresh(true);\r\n}\r\n\r\nexport function getSortInfo(grid) {\r\n const { name, directionIndex } = grid.gridView.get('sortableHeader') || {};\r\n\r\n if (name) {\r\n const column = grid.gridView.columnWithName(name);\r\n\r\n // The sortable column in preference might not be selected in the current grid view.\r\n if (column) {\r\n const sortedKey = column.sortable.key;\r\n\r\n return directionIndex < 0 ? `${sortedKey} desc` : sortedKey;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nexport function isCrossPageAllSelected(grid) {\r\n return grid.pgridPlugins.crossPageSelectAll.isAllSelected;\r\n}\r\n\r\nexport function getSelectedRowIds(grid) {\r\n if (grid) {\r\n return grid.gridView.selectedKeys();\r\n }\r\n return [];\r\n}\r\n\r\nexport function getSelectedRowsCount(grid) {\r\n return isCrossPageAllSelected(grid) ?\r\n grid.gridView.totalCountRows :\r\n getSelectedRowIds(grid).length;\r\n}\r\n","import { formatStatus, formatBidBudget, formatEmail } from '@bingads-webui-campaign/bulk-operation-base';\r\n\r\nconst PauseActionValue = {\r\n Campaign: 'UserPaused',\r\n Ad: 'Paused',\r\n AdGroup: 'Paused',\r\n Keyword: 'Paused',\r\n AssetGroup: 'Paused',\r\n};\r\n\r\nexport class EntitySettingBase {\r\n constructor({\r\n entity,\r\n i18n,\r\n selectedRule,\r\n accountCurrencyCode,\r\n bidBudgetRange,\r\n }) {\r\n this.i18n = i18n;\r\n this.menuAction = selectedRule.action;\r\n this.selectedRule = selectedRule;\r\n this.bidBudgetRange = bidBudgetRange;\r\n this.accountCurrencyCode = accountCurrencyCode;\r\n this.entity = entity;\r\n\r\n if (this.isActionNoneText()) {\r\n this.actionView = this.createActionView();\r\n } else {\r\n this.actionView = null;\r\n }\r\n\r\n if (this.isActionNoneText()) {\r\n this.setPreviewErrorHeaders();\r\n } else {\r\n this.previewOldHeader = i18n.getString('BulkEdit_OldStatusHeader');\r\n this.previewNewHeader = i18n.getString('BulkEdit_NewStatusHeader');\r\n this.previewAttempedHeader = i18n.getString('BulkEdit_AttemptedStatusHeader');\r\n }\r\n\r\n this.setUpPreviewEntityNameAndEntityKey();\r\n }\r\n\r\n getActionView() {\r\n return this.actionView;\r\n }\r\n\r\n isActionText() {\r\n return !this.isActionNoneText();\r\n }\r\n\r\n isActionNoneText() {\r\n return false;\r\n }\r\n\r\n setUpPreviewEntityNameAndEntityKey() {\r\n this.previewEntityName = this.i18n.getString('BulkEdit_Ad_EntityNameHeader');\r\n this.previewEntityKeys = ['AdTitle', 'AdHeadline'];\r\n this.defaultEntityValue = `{${this.i18n.getString('Ad_DSA_Title')}}`;\r\n }\r\n\r\n formatPreviewResults(results) {\r\n if (this.isActionNoneText()) {\r\n return formatBidBudget(results, this.previewEntityKeys, this.i18n);\r\n } else if (this.menuAction === 'Enable' || this.menuAction === 'Pause') {\r\n return formatStatus(\r\n results,\r\n this.previewEntityKeys,\r\n this.i18n,\r\n this.defaultEntityValue,\r\n this.entity\r\n );\r\n }\r\n return formatEmail(results, this.previewEntityKeys, this.defaultEntityValue);\r\n }\r\n\r\n setPreviewErrorHeaders() {\r\n }\r\n\r\n getPreviewHeaders() {\r\n return this.menuAction === 'SendEmail' ?\r\n [this.previewEntityName] :\r\n [this.previewEntityName, this.previewOldHeader, this.previewNewHeader];\r\n }\r\n\r\n isActionValidate() {\r\n return !this.isActionNoneText() || this.actionView.validate();\r\n }\r\n\r\n getAction() {\r\n if (this.isActionNoneText()) {\r\n return this.actionView.getUserAction();\r\n }\r\n\r\n switch (this.menuAction) {\r\n case 'Enable':\r\n return {\r\n Actions: [{\r\n '@odata.type': '#Model.TextAction',\r\n Property: 'Status',\r\n ActionType: 'Set',\r\n Value: 'Active',\r\n }],\r\n };\r\n case 'Pause':\r\n return {\r\n Actions: [{\r\n '@odata.type': '#Model.TextAction',\r\n Property: 'Status',\r\n ActionType: 'Set',\r\n Value: PauseActionValue[this.entity],\r\n }],\r\n };\r\n case 'SendEmail':\r\n return {\r\n Actions: [{\r\n '@odata.type': '#Model.QueryOnlyAction',\r\n }],\r\n };\r\n default:\r\n return null;\r\n }\r\n }\r\n}\r\n","export const changeBudgetActions = {\r\n Set: 'SetAmount',\r\n Increase: 'IncreaseBudget',\r\n Decrease: 'DecreaseBudget',\r\n};\r\n\r\nexport const changeBidActions = {\r\n SetAmount: 'SetAmount',\r\n IncreaseBid: 'IncreaseBid',\r\n DecreaseBid: 'DecreaseBid',\r\n BestBid: 'BestBid',\r\n FirstPageBid: 'FirstPageBid',\r\n};\r\n\r\nexport const PauseActionValue = {\r\n Campaign: 'UserPaused',\r\n Ad: 'Paused',\r\n AdGroup: 'Paused',\r\n Keyword: 'Paused',\r\n AssetGroup: 'Paused',\r\n};\r\n\r\nexport const nonTextActionsForKeyword = {\r\n RaiseToTopOfPage: 'RaiseToTopOfPage',\r\n RaiseToFirstPage: 'RaiseToFirstPage',\r\n ChangeBid: 'ChangeBid',\r\n};\r\n","import _ from 'underscore';\r\n\r\nfunction validateBidBudgetInput(i18n, usePercentValidation, value, valueRange, localizedErrors) {\r\n const decimalValue = i18n.parseDecimal(value);\r\n if (_.isNaN(decimalValue)) {\r\n if (usePercentValidation) {\r\n return localizedErrors.invalidPercentageError;\r\n }\r\n return localizedErrors.invalidValueError;\r\n }\r\n\r\n const minValue = usePercentValidation ? 0 : valueRange.FloorValue;\r\n const maxValue = usePercentValidation ? Number.MAX_VALUE : valueRange.CeilingValue;\r\n\r\n if ((decimalValue < minValue && !usePercentValidation) ||\r\n (decimalValue <= minValue && usePercentValidation) ||\r\n decimalValue > maxValue) {\r\n return localizedErrors.outOfRangError;\r\n }\r\n\r\n return '';\r\n}\r\n\r\nexport function validateBidInput(value, i18n, usePercentValidation, keywordBidRange) {\r\n return validateBidBudgetInput(\r\n i18n,\r\n usePercentValidation,\r\n value,\r\n keywordBidRange,\r\n {\r\n invalidPercentageError: i18n.getString('BulkEdit_Keyword_InvalidPercentageError'),\r\n invalidValueError: i18n.getString('BulkEdit_Keyword_InvalidBidError'),\r\n outOfRangError: i18n.getString('BulkEdit_Keyword_BidOutOfRangeError'),\r\n }\r\n );\r\n}\r\n\r\nexport function validateBudgetInput(value, i18n, usePercentValidation, budgetRange) {\r\n return validateBidBudgetInput(\r\n i18n,\r\n usePercentValidation,\r\n value,\r\n budgetRange,\r\n {\r\n invalidPercentageError: i18n.getString('BulkEdit_Keyword_InvalidPercentageError'),\r\n invalidValueError: i18n.getString('BulkEdit_Campaign_InvalidBudgetError'),\r\n outOfRangError: i18n.getString('BulkEdit_Campaign_BudgetOutOfRangeError'),\r\n }\r\n );\r\n}\r\n","import ko from 'knockout';\r\nimport { numericActionTypes } from '@bingads-webui-campaign/bulk-operation-base';\r\nimport { changeBudgetActions } from '../constants';\r\nimport { validateBudgetInput } from '../util';\r\n\r\nconst defaultAction = {\r\n action: changeBudgetActions.Increase,\r\n budgetValue: null,\r\n unit: 'percentage',\r\n useLimitValue: true,\r\n limitValue: null,\r\n isDailyBudget: true,\r\n};\r\n\r\nexport class ChangeBudgetActionViewModel {\r\n constructor({\r\n i18n,\r\n accountCurrencyCode,\r\n budgetRange,\r\n selectedRule,\r\n }) {\r\n let nonTextActionInfo = defaultAction;\r\n if (selectedRule && selectedRule.id > 0) {\r\n nonTextActionInfo = selectedRule.nonTextAction;\r\n }\r\n this.accountCurrencyCode = accountCurrencyCode;\r\n this.actions = [{\r\n Value: changeBudgetActions.Increase,\r\n Text: i18n.getString('BulkEdit_Campaign_IncreaseBudgetOption'),\r\n }, {\r\n Value: changeBudgetActions.Decrease,\r\n Text: i18n.getString('BulkEdit_Campaign_DecreaseBudgetOption'),\r\n }];\r\n this.selectedAction = ko.observable(nonTextActionInfo.action);\r\n this.budgetErrorMessage = ko.observable('');\r\n this.budgetLimitErrorMessage = ko.observable('');\r\n\r\n this.selectedAction.subscribe(() => {\r\n this.budgetErrorMessage('');\r\n }, this);\r\n\r\n this.isIncreaseBudgetHelp = ko.computed(() =>\r\n this.selectedAction() === changeBudgetActions.Increase, this);\r\n this.units = [{\r\n Value: 'percentage',\r\n Text: '%',\r\n }, {\r\n Value: 'absolute',\r\n Text: accountCurrencyCode,\r\n }];\r\n this.selectedUnit = ko.observable(nonTextActionInfo.unit);\r\n\r\n this.budgetValue = ko.observable(nonTextActionInfo.budgetValue);\r\n this.budgetValue.subscribe(() => {\r\n this.budgetErrorMessage('');\r\n }, this);\r\n\r\n this.limitValue = ko.observable(nonTextActionInfo.limitValue);\r\n this.limitValue.subscribe(() => {\r\n this.budgetLimitErrorMessage('');\r\n }, this);\r\n\r\n this.useLimitValue = ko.observable(nonTextActionInfo.useLimitValue);\r\n this.useLimitValue.subscribe(() => {\r\n this.budgetLimitErrorMessage('');\r\n }, this);\r\n\r\n this.limitBudgetLabelText = ko.computed(() => {\r\n if (this.selectedAction() === changeBudgetActions.Increase) {\r\n return i18n.getString('BulkEdit_Campaign_UpperBudgetLimit');\r\n }\r\n\r\n return i18n.getString('BulKEdit_Campaign_LowerBudgetLimit');\r\n }, this);\r\n\r\n this.validate = () => {\r\n this.budgetErrorMessage('');\r\n this.budgetLimitErrorMessage('');\r\n\r\n const usePercentValidation = this.selectedUnit() === 'percentage';\r\n if (!this.budgetValue()) {\r\n this.budgetErrorMessage(usePercentValidation ?\r\n i18n.getString('BulkEdit_Keyword_MissingPercentageError') :\r\n i18n.getString('BulkEdit_Campaign_MissingBudgetError'));\r\n return false;\r\n }\r\n\r\n this.budgetErrorMessage(validateBudgetInput(\r\n this.budgetValue(),\r\n i18n, usePercentValidation, budgetRange\r\n ));\r\n if (this.budgetErrorMessage() !== '') {\r\n return false;\r\n }\r\n\r\n if (this.useLimitValue()) {\r\n if (!this.limitValue()) {\r\n this.budgetLimitErrorMessage(this.selectedAction() === changeBudgetActions.Increase ?\r\n i18n.getString('BulkEdit_Campaign_MissingUpperBudgetLimitError') :\r\n i18n.getString('BulkEdit_Campaign_MissingLowerBudgetLimitError'));\r\n return false;\r\n }\r\n\r\n this.budgetLimitErrorMessage(validateBudgetInput(\r\n this.limitValue(),\r\n i18n,\r\n false,\r\n budgetRange\r\n ));\r\n return this.budgetLimitErrorMessage() === '';\r\n }\r\n\r\n return true;\r\n };\r\n\r\n this.getUserAction = () => {\r\n const limitValue = this.useLimitValue() && this.limitValue() ?\r\n i18n.parseDecimal(this.limitValue()) :\r\n null;\r\n let budgetAmount = this.budgetValue() ? i18n.parseDecimal(this.budgetValue()) : null;\r\n if (this.selectedAction() === changeBudgetActions.Decrease) {\r\n budgetAmount *= -1;\r\n }\r\n const actionType = this.selectedUnit() === 'percentage' ?\r\n numericActionTypes.changeByPercent :\r\n numericActionTypes.changeByAmount;\r\n\r\n return {\r\n Actions: [{\r\n '@odata.type': '#Model.NumericAction',\r\n Property: 'Budget/Amount',\r\n ActionType: actionType,\r\n Value: budgetAmount,\r\n Limit: limitValue,\r\n }],\r\n };\r\n };\r\n }\r\n}\r\n","import { PureKnockoutView } from '@bingads-webui/knockout-view';\r\nimport template from './changebudget.pug';\r\nimport { ChangeBudgetActionViewModel } from './viewmodel';\r\n\r\n\r\nexport class ChangeBudgetActionView extends PureKnockoutView {\r\n initialize({\r\n i18n,\r\n accountCurrencyCode,\r\n budgetRange,\r\n selectedRule,\r\n }) {\r\n this.options = {\r\n i18n,\r\n accountCurrencyCode,\r\n budgetRange,\r\n selectedRule,\r\n };\r\n super.initialize(this.options);\r\n this.i18n = i18n;\r\n }\r\n\r\n get template() {\r\n return template;\r\n }\r\n\r\n get ViewModel() {\r\n return ChangeBudgetActionViewModel;\r\n }\r\n\r\n validate() {\r\n return this.viewModel.validate();\r\n }\r\n\r\n getUserAction() {\r\n return this.viewModel.getUserAction();\r\n }\r\n}\r\n","import { ChangeBudgetActionView } from '../action-view/campaign/view';\r\nimport { EntitySettingBase } from './base';\r\n\r\nexport class CampaignSetting extends EntitySettingBase {\r\n isActionNoneText() {\r\n return this.menuAction === 'ChangeBudget';\r\n }\r\n\r\n createActionView() {\r\n return new ChangeBudgetActionView({\r\n i18n: this.i18n,\r\n accountCurrencyCode: this.accountCurrencyCode,\r\n selectedRule: this.selectedRule,\r\n budgetRange: this.bidBudgetRange,\r\n });\r\n }\r\n\r\n setUpPreviewEntityNameAndEntityKey() {\r\n this.previewEntityName = this.i18n.getString('BulkEdit_Campaign_EntityNameHeader');\r\n this.previewEntityKeys = ['CampaignName'];\r\n this.defaultEntityValue = '';\r\n }\r\n\r\n setPreviewErrorHeaders() {\r\n this.previewOldHeader = this.i18n.getString('BulkEdit_Campaign_OldBudgetHeader');\r\n this.previewNewHeader = this.i18n.getString('BulkEdit_Campaign_NewBudgetHeader');\r\n this.previewAttempedHeader = this.i18n.getString('BulkEdit_Campaign_AttemptedBudgetHeader');\r\n }\r\n}\r\n","import ko from 'knockout';\r\nimport { numericActionTypes } from '@bingads-webui-campaign/bulk-operation-base';\r\nimport { changeBidActions } from '../constants';\r\nimport { validateBidInput } from '../util';\r\n\r\nconst bidType = {\r\n search: 'Search',\r\n content: 'Content',\r\n};\r\n\r\nconst defaultAction = {\r\n action: changeBidActions.IncreaseBid,\r\n bidValue: null,\r\n bidType: bidType.search,\r\n unit: 'percentage',\r\n useLimitValue: true,\r\n limitValue: null,\r\n};\r\n\r\nexport class ChangeAdgroupBidActionViewModel {\r\n constructor({\r\n i18n,\r\n accountCurrencyCode,\r\n keywordBidRange,\r\n selectedRule,\r\n }) {\r\n this.i18n = i18n;\r\n this.keywordBidRange = keywordBidRange;\r\n let nonTextActionInfo = defaultAction;\r\n if (selectedRule && selectedRule.id > 0) {\r\n nonTextActionInfo = selectedRule.nonTextAction;\r\n }\r\n\r\n this.actions = [{\r\n Value: changeBidActions.IncreaseBid,\r\n Text: i18n.getString('BulkEdit_AdGroup_IncreaseBidOption'),\r\n }, {\r\n Value: changeBidActions.DecreaseBid,\r\n Text: i18n.getString('BulkEdit_AdGroup_DecreaseBidOption'),\r\n }];\r\n this.accountCurrencyCode = accountCurrencyCode;\r\n this.selectedAction = ko.observable(nonTextActionInfo.action);\r\n this.bidErrorMessage = ko.observable('');\r\n this.bidLimitErrorMessage = ko.observable('');\r\n\r\n this.selectedAction.subscribe(() => {\r\n this.bidErrorMessage('');\r\n }, this);\r\n\r\n this.bidTypes = [{\r\n Value: bidType.search,\r\n Text: i18n.getString('BulkEdit_AdGroup_SearchBid'),\r\n }];\r\n this.selectedBidType = ko.observable(nonTextActionInfo.bidType);\r\n\r\n this.selectedBidType.subscribe(() => {\r\n this.bidErrorMessage('');\r\n }, this);\r\n\r\n this.units = [{\r\n Value: 'percentage',\r\n Text: '%',\r\n }, {\r\n Value: 'absolute',\r\n Text: accountCurrencyCode,\r\n }];\r\n this.selectedUnit = ko.observable(nonTextActionInfo.unit);\r\n\r\n this.bidValue = ko.observable(nonTextActionInfo.bidValue);\r\n this.bidValue.subscribe(() => {\r\n this.bidErrorMessage('');\r\n }, this);\r\n\r\n this.limitValue = ko.observable(nonTextActionInfo.limitValue);\r\n this.limitValue.subscribe(() => {\r\n this.bidLimitErrorMessage('');\r\n }, this);\r\n\r\n this.useLimitValue = ko.observable(nonTextActionInfo.useLimitValue);\r\n\r\n this.useLimitValue.subscribe(() => {\r\n this.bidLimitErrorMessage('');\r\n }, this);\r\n\r\n this.limitBidLabelText = ko.computed(() => {\r\n if (this.selectedAction() === changeBidActions.IncreaseBid) {\r\n return i18n.getString('BulkEdit_AdGroup_UpperBidLimit');\r\n }\r\n return i18n.getString('BulkEdit_AdGroup_LowerBidLimit');\r\n }, this);\r\n\r\n this.validate = () => {\r\n this.bidErrorMessage('');\r\n this.bidLimitErrorMessage('');\r\n\r\n const usePercentValidation = this.selectedUnit() === 'percentage';\r\n if (!this.bidValue()) {\r\n this.bidErrorMessage(usePercentValidation ?\r\n i18n.getString('BulkEdit_Keyword_MissingPercentageError') :\r\n i18n.getString('BulkEdit_Keyword_MissingBidError'));\r\n return false;\r\n }\r\n\r\n this.bidErrorMessage(validateBidInput(\r\n this.bidValue(),\r\n i18n, usePercentValidation, keywordBidRange\r\n ));\r\n if (this.bidErrorMessage() !== '') {\r\n return false;\r\n }\r\n\r\n if (this.useLimitValue()) {\r\n if (!this.limitValue()) {\r\n if (this.selectedAction() === changeBidActions.IncreaseBid) {\r\n this.bidLimitErrorMessage(i18n.getString('BulkEdit_MissingUpperBidLimitError'));\r\n } else if (this.selectedAction() === changeBidActions.DecreaseBid) {\r\n this.bidLimitErrorMessage(i18n.getString('BulkEdit_MissingLowerBidLimitError'));\r\n }\r\n return false;\r\n }\r\n this.bidLimitErrorMessage(validateBidInput(\r\n this.limitValue(),\r\n i18n,\r\n false,\r\n keywordBidRange\r\n ));\r\n return this.bidLimitErrorMessage() === '';\r\n }\r\n\r\n return true;\r\n };\r\n\r\n this.getUserAction = () => {\r\n const selectedAction = this.selectedAction();\r\n const limitValue = this.useLimitValue() && this.limitValue() ?\r\n i18n.parseDecimal(this.limitValue()) :\r\n null;\r\n let bidAmount = this.bidValue() ? i18n.parseDecimal(this.bidValue()) : null;\r\n if (selectedAction === changeBidActions.DecreaseBid) {\r\n bidAmount *= -1;\r\n }\r\n const actionType = this.selectedUnit() === 'percentage' ?\r\n numericActionTypes.changeByPercent :\r\n numericActionTypes.changeByAmount;\r\n\r\n return {\r\n Actions: [{\r\n '@odata.type': '#Model.NumericAction',\r\n Property: 'SearchBid',\r\n ActionType: actionType,\r\n Value: bidAmount,\r\n Limit: limitValue,\r\n }],\r\n };\r\n };\r\n }\r\n}\r\n","import { PureKnockoutView } from '@bingads-webui/knockout-view';\r\nimport template from './changebid.pug';\r\nimport { ChangeAdgroupBidActionViewModel } from './viewmodel';\r\n\r\nexport class ChangeAdgroupBidActionView extends PureKnockoutView {\r\n initialize({\r\n i18n,\r\n accountCurrencyCode,\r\n keywordBidRange,\r\n selectedRule,\r\n }) {\r\n this.options = {\r\n i18n,\r\n accountCurrencyCode,\r\n keywordBidRange,\r\n selectedRule,\r\n };\r\n super.initialize(this.options);\r\n this.i18n = i18n;\r\n }\r\n\r\n get template() {\r\n return template;\r\n }\r\n\r\n get ViewModel() {\r\n return ChangeAdgroupBidActionViewModel;\r\n }\r\n\r\n validate() {\r\n return this.viewModel.validate();\r\n }\r\n\r\n getUserAction() {\r\n return this.viewModel.getUserAction();\r\n }\r\n}\r\n","import { EntitySettingBase } from './base';\r\nimport { ChangeAdgroupBidActionView } from '../action-view/adgroup/view';\r\n\r\nexport class AdGroupSetting extends EntitySettingBase {\r\n isActionNoneText() {\r\n return this.menuAction === 'ChangeBid';\r\n }\r\n\r\n createActionView() {\r\n return new ChangeAdgroupBidActionView({\r\n i18n: this.i18n,\r\n accountCurrencyCode: this.accountCurrencyCode,\r\n selectedRule: this.selectedRule,\r\n keywordBidRange: this.bidBudgetRange,\r\n });\r\n }\r\n\r\n setUpPreviewEntityNameAndEntityKey() {\r\n this.previewEntityName = this.i18n.getString('BulkEdit_AdGroup_EntityNameHeader');\r\n this.previewEntityKeys = ['AdgroupName'];\r\n this.defaultEntityValue = '';\r\n }\r\n\r\n setPreviewErrorHeaders() {\r\n this.previewOldHeader = this.i18n.getString('BulkEdit_AdGroup_OldBidHeader');\r\n this.previewNewHeader = this.i18n.getString('BulkEdit_AdGroup_NewBidHeader');\r\n this.previewAttempedHeader = this.i18n.getString('BulkEdit_AdGroup_AttemptedBidHeader');\r\n }\r\n}\r\n","import ko from 'knockout';\r\nimport { numericActionTypes } from '@bingads-webui-campaign/bulk-operation-base';\r\nimport { changeBidActions, nonTextActionsForKeyword } from '../constants';\r\nimport { validateBidInput } from '../util';\r\n\r\nconst defaultAction = {\r\n action: changeBidActions.IncreaseBid,\r\n bidValue: null,\r\n unit: 'percentage',\r\n useLimitValue: true,\r\n limitValue: null,\r\n};\r\n\r\nexport class ChangeKeywordBidActionViewModel {\r\n constructor({\r\n i18n,\r\n accountCurrencyCode,\r\n keywordBidRange,\r\n selectedRule,\r\n }) {\r\n let nonTextActionInfo = defaultAction;\r\n\r\n this.isChangeByBid = true;\r\n if (selectedRule && selectedRule.id > 0) {\r\n nonTextActionInfo = selectedRule.nonTextAction;\r\n }\r\n\r\n if (selectedRule.action === nonTextActionsForKeyword.RaiseToTopOfPage) {\r\n nonTextActionInfo.action = changeBidActions.BestBid;\r\n this.isChangeByBid = false;\r\n } else if (selectedRule.action === nonTextActionsForKeyword.RaiseToFirstPage) {\r\n nonTextActionInfo.action = changeBidActions.FirstPageBid;\r\n this.isChangeByBid = false;\r\n }\r\n\r\n this.actions = [{\r\n Value: changeBidActions.IncreaseBid,\r\n Text: i18n.getString('BulkEdit_Keyword_IncreaseBidOption'),\r\n },\r\n {\r\n Value: changeBidActions.DecreaseBid,\r\n Text: i18n.getString('BulkEdit_Keyword_DecreaseBidOption'),\r\n }];\r\n this.selectedAction = ko.observable(this.isChangeByBid ? nonTextActionInfo.action : '');\r\n this.bidErrorMessage = ko.observable('');\r\n this.bidLimitErrorMessage = ko.observable('');\r\n const actionName = i18n.getString(`RuleAction_Keyword_${selectedRule.action}`);\r\n this.actionText = ko.observable(actionName);\r\n\r\n this.selectedAction.subscribe(() => {\r\n this.bidErrorMessage('');\r\n }, this);\r\n\r\n this.units = [{\r\n Value: 'percentage',\r\n Text: '%',\r\n },\r\n {\r\n Value: 'absolute',\r\n Text: accountCurrencyCode,\r\n }];\r\n this.selectedUnit = ko.observable(nonTextActionInfo.unit);\r\n\r\n this.bidValue = ko.observable(nonTextActionInfo.bidValue);\r\n this.bidValue.subscribe(() => {\r\n this.bidErrorMessage('');\r\n }, this);\r\n\r\n this.limitValue = ko.observable(nonTextActionInfo.limitValue);\r\n this.limitValue.subscribe(() => {\r\n this.bidLimitErrorMessage('');\r\n }, this);\r\n\r\n this.useLimitValue = ko.observable(nonTextActionInfo.useLimitValue);\r\n\r\n this.useLimitValue.subscribe(() => {\r\n this.bidLimitErrorMessage('');\r\n }, this);\r\n\r\n this.limitBidLabelText = ko.computed(() => {\r\n if (this.selectedAction() === changeBidActions.DecreaseBid) {\r\n return i18n.getString('BulKEdit_Keyword_LowerBidLimit');\r\n }\r\n return i18n.getString('BulkEdit_Keyword_UpperBidLimit');\r\n }, this);\r\n this.accountCurrencyCode = accountCurrencyCode;\r\n\r\n this.validate = () => {\r\n this.bidErrorMessage('');\r\n this.bidLimitErrorMessage('');\r\n\r\n const usePercentValidation = this.selectedUnit() === 'percentage';\r\n if (this.isChangeByBid && !this.bidValue()) {\r\n if (this.selectedUnit() === 'percentage') {\r\n this.bidErrorMessage(i18n.getString('BulkEdit_Keyword_MissingPercentageError'));\r\n } else {\r\n this.bidErrorMessage(i18n.getString('BulkEdit_Keyword_MissingBidError'));\r\n }\r\n return false;\r\n }\r\n\r\n if (this.isChangeByBid) {\r\n if (this.bidValue()) {\r\n this.bidErrorMessage(validateBidInput(\r\n this.bidValue(),\r\n i18n, usePercentValidation, keywordBidRange\r\n ));\r\n if (this.bidErrorMessage() !== '') {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n if (this.useLimitValue()) {\r\n if (!this.limitValue()) {\r\n if (this.selectedAction() === changeBidActions.IncreaseBid) {\r\n this.bidLimitErrorMessage(i18n.getString('BulkEdit_MissingUpperBidLimitError'));\r\n } else if (this.selectedAction() === changeBidActions.DecreaseBid) {\r\n this.bidLimitErrorMessage(i18n.getString('BulkEdit_MissingLowerBidLimitError'));\r\n }\r\n return false;\r\n }\r\n this.bidLimitErrorMessage(validateBidInput(\r\n this.limitValue(),\r\n i18n, false, keywordBidRange\r\n ));\r\n\r\n return this.bidLimitErrorMessage() === '';\r\n }\r\n\r\n return true;\r\n };\r\n\r\n this.getUserAction = () => {\r\n const limitValue = this.useLimitValue() && this.limitValue() ?\r\n i18n.parseDecimal(this.limitValue()) : null;\r\n\r\n const menuAction = selectedRule.action;\r\n if (menuAction === 'ChangeBid') {\r\n const selectedAction = this.selectedAction();\r\n let bidAmount = this.bidValue() ? i18n.parseDecimal(this.bidValue()) : null;\r\n if (selectedAction === changeBidActions.DecreaseBid) {\r\n bidAmount *= -1;\r\n }\r\n const actionType = this.selectedUnit() === 'percentage' ?\r\n numericActionTypes.changeByPercent :\r\n numericActionTypes.changeByAmount;\r\n return {\r\n Actions: [{\r\n '@odata.type': '#Model.NumericAction',\r\n Property: 'Bid/Amount',\r\n ActionType: actionType,\r\n Value: bidAmount,\r\n Limit: limitValue,\r\n }],\r\n };\r\n } return {\r\n Actions: [{\r\n '@odata.type': '#Model.BidEstimateAction',\r\n Property: 'Bid/Amount',\r\n ActionType: menuAction,\r\n Limit: limitValue,\r\n }],\r\n };\r\n };\r\n }\r\n}\r\n","import { PureKnockoutView } from '@bingads-webui/knockout-view';\r\nimport template from './changebid.pug';\r\nimport { ChangeKeywordBidActionViewModel } from './viewmodel';\r\n\r\nexport class ChangKeywordBidActionView extends PureKnockoutView {\r\n initialize({\r\n i18n,\r\n accountCurrencyCode,\r\n keywordBidRange,\r\n selectedRule,\r\n }) {\r\n this.options = {\r\n i18n,\r\n accountCurrencyCode,\r\n keywordBidRange,\r\n selectedRule,\r\n };\r\n super.initialize(this.options);\r\n this.i18n = i18n;\r\n }\r\n\r\n get template() {\r\n return template;\r\n }\r\n\r\n get ViewModel() {\r\n return ChangeKeywordBidActionViewModel;\r\n }\r\n\r\n validate() {\r\n return this.viewModel.validate();\r\n }\r\n\r\n getUserAction() {\r\n return this.viewModel.getUserAction();\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { EntitySettingBase } from './base';\r\nimport { ChangKeywordBidActionView } from '../action-view/keyword/view';\r\nimport { nonTextActionsForKeyword } from '../action-view/constants';\r\n\r\nexport class KeywordSetting extends EntitySettingBase {\r\n isActionNoneText() {\r\n return !_.isUndefined(nonTextActionsForKeyword[this.menuAction]);\r\n }\r\n\r\n setUpPreviewEntityNameAndEntityKey() {\r\n this.previewEntityName = this.i18n.getString('BulkEdit_Keyword_EntityNameHeader');\r\n this.previewEntityKeys = ['Keyword'];\r\n this.defaultEntityValue = '';\r\n }\r\n\r\n createActionView() {\r\n return new ChangKeywordBidActionView({\r\n i18n: this.i18n,\r\n accountCurrencyCode: this.accountCurrencyCode,\r\n selectedRule: this.selectedRule,\r\n keywordBidRange: this.bidBudgetRange,\r\n });\r\n }\r\n\r\n setPreviewErrorHeaders() {\r\n this.previewOldHeader = this.i18n.getString('BulkEdit_Keyword_OldBidHeader');\r\n this.previewNewHeader = this.i18n.getString('BulkEdit_Keyword_NewBidHeader');\r\n this.previewAttempedHeader = this.i18n.getString('BulkEdit_Keyword_AttemptedBidHeader');\r\n }\r\n}\r\n","import { EntitySettingBase } from './base';\r\n\r\nexport class AssetGroupSetting extends EntitySettingBase {\r\n setUpPreviewEntityNameAndEntityKey() {\r\n this.previewEntityName = this.i18n.getString(_TL_('Asset group'));\r\n this.previewEntityKeys = ['AssetGroupName'];\r\n this.defaultEntityValue = '';\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { toRuleDescription } from '@bingads-webui-campaign/bulk-operation-base';\r\nimport { legacyDeliveryStatus } from '@bingads-webui/filter-entity';\r\nimport { fromFilterEntityToLegacyFilter } from '@bingads-webui-campaign/filter-converter';\r\nimport { scopeOptions, entityRelatedOptions } from './options';\r\nimport * as gridHelper from './grid-helper';\r\n\r\nfunction replaceAtom(atom, oldKey, newKey) {\r\n if (oldKey in atom) {\r\n const newAtom = {\r\n ...atom,\r\n [newKey]: atom[oldKey],\r\n };\r\n delete newAtom[oldKey];\r\n return newAtom;\r\n }\r\n return atom;\r\n}\r\n\r\nfunction replaceKeyOfQuery(query, oldKey, newKey) {\r\n if (!query) return query;\r\n let finalQuery = { ...query };\r\n if (oldKey in finalQuery) {\r\n finalQuery = replaceAtom(finalQuery, oldKey, newKey);\r\n } else if ('$and' in finalQuery) {\r\n finalQuery.$and.forEach((value, index, array) => {\r\n // eslint-disable-next-line no-param-reassign\r\n array[index] = replaceAtom(value, oldKey, newKey);\r\n });\r\n }\r\n return finalQuery;\r\n}\r\n\r\nexport class RuleAuthoringHelper {\r\n constructor({\r\n i18n,\r\n permissions,\r\n }) {\r\n this.i18n = i18n;\r\n this.permissions = permissions;\r\n }\r\n\r\n setSelectionAndDescription(view, model, grid, isSimulation) {\r\n const filter = this.getCurrentFilter(view, model);\r\n let selectAll = false;\r\n let selectedCounts = 0;\r\n\r\n // only need to know selectall & selectedCounts in idbased senario\r\n // when filter[0].values is empty\r\n if (filter.idBased &&\r\n filter.FilterExpressions &&\r\n filter.FilterExpressions[0] &&\r\n _.isEmpty(filter.FilterExpressions[0].Values)) {\r\n selectAll = gridHelper.isCrossPageAllSelected(grid);\r\n selectedCounts = gridHelper.getSelectedRowsCount(grid);\r\n }\r\n\r\n model.set('Selection', this.getCurrentSelection(view, model, grid, isSimulation, filter));\r\n model.set('Description', toRuleDescription(filter, selectAll, selectedCounts));\r\n }\r\n\r\n getCurrentSelection(view, model, grid, isSimulation, currentFilter) {\r\n let query = '';\r\n const { filterEntity, selectionRangeFilterQuery } = currentFilter;\r\n\r\n const selection = {\r\n CampaignId: view.viewModel.selectedScopeInfo.campaignId,\r\n AdGroupId: view.viewModel.selectedScopeInfo.adGroupId,\r\n };\r\n\r\n if (isSimulation) {\r\n const { pageSize, pageNumber } = grid.pgridPlugins.pagination;\r\n const sortInfo = gridHelper.getSortInfo(grid);\r\n let sortStr = '';\r\n\r\n if (sortInfo && !view.viewModel.isEditRule) {\r\n sortStr = `&$orderby=${sortInfo}`;\r\n }\r\n query = `$top=${pageSize}&$skip=${pageNumber * pageSize}${sortStr}`;\r\n query += `&daterangepreset=${view.cronselectionView.getSelectedDataDateRangeOption()}`;\r\n } else {\r\n selection.DateRange = {\r\n DateRangePreset:\r\n view.cronselectionView.getSelectedDataDateRangeOption(),\r\n };\r\n }\r\n\r\n let filterQueryUrl = filterEntity ? filterEntity.odataV4() : null;\r\n // merge filter url from user filter selection with range selection\r\n if (filterQueryUrl && selectionRangeFilterQuery) {\r\n filterQueryUrl += ` and (${selectionRangeFilterQuery})`;\r\n } else if (selectionRangeFilterQuery) {\r\n filterQueryUrl = selectionRangeFilterQuery;\r\n }\r\n const filterEncodedUrl = filterQueryUrl ? encodeURIComponent(filterQueryUrl) : null;\r\n const filterURLParam = filterEncodedUrl ? `$filter=(${filterEncodedUrl})` : '';\r\n\r\n if (filterURLParam) {\r\n query = query === '' ? filterURLParam : `${query}&${filterURLParam}`;\r\n }\r\n\r\n selection.QueryString = query;\r\n\r\n return selection;\r\n }\r\n\r\n getCurrentFilter(view, model) {\r\n const entity = model.get('Entity');\r\n const { viewModel, predicateListView } = view;\r\n let filters = null;\r\n let idBased = false;\r\n let selectionRangeFilterQuery = null;\r\n\r\n if (viewModel.selectedScopeOption() === scopeOptions.Selected) {\r\n idBased = true;\r\n const ids = viewModel.selectedScopeInfo.selectedRowIds;\r\n filters = {\r\n FilterExpressions: [{\r\n SelectedColumn: `${entity}Id`, // 'CampaignId', 'AdgroupId'.\r\n SelectedOperator: 'Equal',\r\n Values: ids,\r\n }],\r\n };\r\n\r\n if (ids && ids.length > 0) {\r\n selectionRangeFilterQuery = _.map(ids, id => `Id eq ${id}`).join(' or ');\r\n }\r\n } else if (viewModel.selectedScopeOption() === scopeOptions.AllEnabled) {\r\n filters = {\r\n FilterExpressions: [{\r\n SelectedColumn: entityRelatedOptions.EnabledStatusFilterColumn[entity],\r\n SelectedOperator: 'EnumSelection',\r\n Values: entityRelatedOptions.EnabledStatusFilterValue[entity],\r\n }],\r\n };\r\n selectionRangeFilterQuery = entityRelatedOptions.EnabledStatusFilterQueryOdata[entity];\r\n }\r\n\r\n const selectedFilter = {};\r\n const predicateListFilter = view.isForVNext ?\r\n predicateListView.editableFilter : predicateListView.getFilterEntity();\r\n\r\n // ToDO: apjia,remove this after the automated rules tab support new filter\r\n // (currently we need use same format for that tab)\r\n selectedFilter.FilterExpressions =\r\n fromFilterEntityToLegacyFilter(predicateListFilter, this.i18n);\r\n\r\n let expr = null;\r\n if (selectedFilter && selectedFilter.FilterExpressions) {\r\n expr = _.map(selectedFilter.FilterExpressions, (item) => {\r\n const mappedResult = {\r\n SelectedColumn: item.SelectedColumn,\r\n SelectedOperator: item.SelectedOperator,\r\n Values: item.Values,\r\n };\r\n\r\n if (!_.isEmpty(item.SelectedNames)) {\r\n mappedResult.SelectedNames = item.SelectedNames;\r\n }\r\n return mappedResult;\r\n });\r\n\r\n // LSR[1392134]: if user set filter \"DeliveryStasus contains Eligible\" in campaign grid\r\n // actually it's mapped to eligible and inlineOpportunity, we need pass it to MT\r\n if (entity === 'Campaign') {\r\n _.each(expr, (filter) => {\r\n if (filter.SelectedColumn === 'DeliveryStatus' &&\r\n _.contains(filter.Values, legacyDeliveryStatus.Eligible.toString()) &&\r\n !_.contains(filter.Values, legacyDeliveryStatus.InlineOpportunity.toString())) {\r\n filter.Values.push(legacyDeliveryStatus.InlineOpportunity.toString());\r\n }\r\n });\r\n }\r\n }\r\n if (filters && filters.FilterExpressions) {\r\n filters.FilterExpressions = _.union(filters.FilterExpressions, expr);\r\n } else {\r\n filters = {\r\n FilterExpressions: expr,\r\n };\r\n }\r\n\r\n // 'DataExclusionId' is an alias of 'SeasonalityAdjustmentId'\r\n // Convert it before sending request to make back-end happy.\r\n if (predicateListFilter && predicateListFilter.query) {\r\n const finalQuery = replaceKeyOfQuery(predicateListFilter.query, 'DataExclusionId', 'SeasonalityAdjustmentId');\r\n predicateListFilter.query = finalQuery;\r\n }\r\n\r\n return {\r\n FilterExpressions: (filters && filters.FilterExpressions) || [],\r\n filterEntity: predicateListFilter,\r\n idBased,\r\n selectionRangeFilterQuery,\r\n };\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport PropTypes from 'prop-types';\r\nimport { MaximumPredicateLimit } from '@bingads-webui/filter-commons';\r\nimport { seasonalityPredicateValueNameGetter } from '@bingads-webui-campaign/seasonality-id-name-utils';\r\n\r\nclass PredicateListContainer extends React.PureComponent {\r\n render() {\r\n const { PredicateList, getPredicateIconClassName } = this.props;\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nPredicateListContainer.propTypes = {\r\n PredicateList: PropTypes.element.isRequired,\r\n entitySchema: PropTypes.shape({\r\n name: PropTypes.string,\r\n type: PropTypes.string,\r\n }).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n onEditableFilterUpdate: PropTypes.func.isRequired,\r\n classes: PropTypes.shape({\r\n predicateList: PropTypes.string.isRequired,\r\n }).isRequired,\r\n editableFilter: PropTypes.shape({\r\n query: PropTypes.object,// eslint-disable-line\r\n }),\r\n readOnlyProperties: PropTypes.arrayOf(PropTypes.string),\r\n getPredicateIconClassName: PropTypes.func,\r\n};\r\n\r\nPredicateListContainer.defaultProps = {\r\n editableFilter: null,\r\n readOnlyProperties: [],\r\n getPredicateIconClassName: undefined,\r\n};\r\n\r\n\r\nexport class PredicateListBackboneView extends Backbone.View {\r\n initialize({\r\n PredicateList,\r\n entitySchema,\r\n i18n,\r\n popoverContainer,\r\n onEditableFilterUpdate,\r\n selectableFilter = null,\r\n editableFilter = null,\r\n isPoPEnabled = false,\r\n savedFilters = [],\r\n recentFilters = [],\r\n openedPredicateIndex = null,\r\n selector = [],\r\n updateWaterfallFilter = null,\r\n onApplySavedFilter = null,\r\n onApplyRecentFilter = null,\r\n maximumPredicateLimit = MaximumPredicateLimit,\r\n readOnlyProperties = [],\r\n instrumentation = null,\r\n hideAddFilterButton = false,\r\n getPredicateIconClassName = undefined,\r\n }) {\r\n this.entitySchema = entitySchema;\r\n this.i18n = i18n;\r\n this.onEditableFilterUpdate = onEditableFilterUpdate;\r\n this.popoverContainer = popoverContainer;\r\n this.selectableFilter = selectableFilter;\r\n this.editableFilter = editableFilter;\r\n this.isPoPEnabled = isPoPEnabled;\r\n this.savedFilters = savedFilters;\r\n this.recentFilters = recentFilters;\r\n this.openedPredicateIndex = openedPredicateIndex;\r\n this.selector = selector;\r\n this.updateWaterfallFilter = updateWaterfallFilter;\r\n this.onApplySavedFilter = onApplySavedFilter;\r\n this.onApplyRecentFilter = onApplyRecentFilter;\r\n this.maximumPredicateLimit = maximumPredicateLimit;\r\n this.readOnlyProperties = readOnlyProperties;\r\n this.instrumentation = instrumentation;\r\n this.hideAddFilterButton = hideAddFilterButton;\r\n this.PredicateList = PredicateList;\r\n this.getPredicateIconClassName = getPredicateIconClassName;\r\n }\r\n\r\n render() {\r\n ReactDOM.render(\r\n (\r\n \r\n ), this.el\r\n );\r\n return this;\r\n }\r\n\r\n remove() {\r\n ReactDOM.unmountComponentAtNode(this.el);\r\n return super.remove();\r\n }\r\n}\r\n","import ko from 'knockout';\r\nimport _ from 'underscore';\r\nimport { DeterministicViewForBackBoneView } from '@bingads-webui/deterministic-wrapper-view';\r\nimport { PureKnockoutView } from '@bingads-webui/knockout-view';\r\nimport { PredicateList } from '@bingads-webui/predicate-list';\r\nimport { parseSync } from '@bingads-webui/safe-json';\r\nimport { withUiBlock } from '@bingads-webui/uiblocker';\r\nimport { Router } from '@bingads-webui/router';\r\nimport { AlertHelper } from '@bingads-webui-campaign/alert-helper';\r\nimport { PreviewResultView } from '@bingads-webui-campaign/bulk-operation-base';\r\nimport { localize, convertFilterEntityToPredicates } from '@bingads-webui/filter-commons';\r\nimport { SchemaI18n } from '@bingads-webui-universal/schema-i18n';\r\n\r\nimport { RuleCronSelectionview } from './cron-selection/view';\r\nimport { RuleAuthoringViewModel } from './viewmodel';\r\nimport template from './template.pug';\r\nimport { refresh } from './grid-helper';\r\nimport { getEntitySetting } from './entity-settings/get-entity-setting';\r\nimport { RuleAuthoringHelper } from './helper';\r\nimport { scopeOptions } from './options';\r\nimport { PredicateListBackboneView } from './predicate-list-backbone-view';\r\n\r\nexport class RuleAuthoringView extends PureKnockoutView {\r\n /**\r\n * Initialize automated rules settings\r\n * @param {Object} param - An object containing these default options for model\r\n * @param {Object} param.grid - the new grid object\r\n * @param {Object} param.i18n - localization object\r\n * @param {Object} param.instrumentation - instrumentation object\r\n * @param {Object} param.permissions - permissions for the user\r\n * @param {String} param.accountTimeZone - accountTimeZone\r\n * @param {String} param.accountCurrencyCode - accountCurrencyCode\r\n * @param {Object} param.stateMgr - the state manager which contains {getItem, setItem}\r\n * @param {Object} param.preferenceSvc - preference service to store user preferences\r\n * @param {Object} param.appCfg - global app config\r\n * @param {Object} param.bidBudgetRange - {FloorValue, CeilingValue} for selected rule\r\n * @param {String} param.currentUserId - currentUserId\r\n *\r\n * @returns {void} void\r\n */\r\n initialize({\r\n koModel,\r\n grid,\r\n i18n,\r\n instrumentation,\r\n permissions,\r\n accountTimeZone,\r\n accountCurrencyCode,\r\n stateMgr,\r\n preferenceSvc,\r\n appCfg,\r\n bidBudgetRange,\r\n currentUserId,\r\n isForVNext = false,\r\n scope,\r\n newI18n,\r\n CampaignAdgroupSelectorEdmView,\r\n currentEntity,\r\n PredicateListReact,\r\n getPredicateIconClassName,\r\n }) {\r\n this.model = koModel;\r\n this.isForVNext = isForVNext;\r\n this.currentEntity = currentEntity;\r\n this.CampaignAdgroupSelectorEdmView = CampaignAdgroupSelectorEdmView;\r\n this.appCfg = appCfg;\r\n const selectedRule = koModel.get('SelectedRule');\r\n const { entity, action } = selectedRule;\r\n\r\n if (selectedRule.id != null && (entity === 'Campaign' || entity === 'AdGroup')) {\r\n scopeOptions.SelectCampaignOrAdGroup = 3;\r\n } else {\r\n delete scopeOptions.SelectCampaignOrAdGroup;\r\n }\r\n\r\n this.entitySetting = getEntitySetting(\r\n entity,\r\n i18n,\r\n selectedRule,\r\n accountCurrencyCode,\r\n bidBudgetRange\r\n );\r\n this.options = {\r\n i18n,\r\n grid,\r\n instrumentation,\r\n entity,\r\n menuAction: action,\r\n selectedRule,\r\n currentUserId,\r\n isActionText: this.entitySetting.isActionText(),\r\n };\r\n\r\n super.initialize(this.options);\r\n\r\n this.koModel = koModel;\r\n this.i18n = i18n;\r\n this.newI18n = newI18n;\r\n this.scope = scope;\r\n this.helper = new RuleAuthoringHelper({ i18n, permissions });\r\n this.alertHelper = new AlertHelper({ i18n });\r\n this.initializeInstrumentation();\r\n this.viewModel.selectedScopeOption.subscribe(() => {\r\n this.onScopeSelectionChange();\r\n }, this);\r\n\r\n this.once('rendered', () => {\r\n // set cron selection view\r\n this.cronselectionView = new RuleCronSelectionview({\r\n i18n,\r\n entity,\r\n selectedRule,\r\n permissions,\r\n accountTimeZone,\r\n stateMgr,\r\n preferenceSvc,\r\n appCfg,\r\n isEmailOption: this.viewModel.isEmailOption(),\r\n instrumentation,\r\n isForVNext,\r\n });\r\n this.setChild('cron-selection', this.cronselectionView);\r\n\r\n // set action selected view (for specific rule types)\r\n const actionView = this.entitySetting.getActionView();\r\n if (actionView) {\r\n this.setChild('action', actionView);\r\n }\r\n\r\n if (isForVNext) {\r\n this.options.grid.pgridPlugins.filterService.entitySchema = localize(\r\n this.options.grid.pgridPlugins.filterService.entitySchema,\r\n new SchemaI18n({ i18n }),\r\n i18n\r\n );\r\n\r\n // update schema for editorial reasons for ads/keywords\r\n const { entitySchema } = this.options.grid.pgridPlugins.filterService;\r\n this.predicateListView = new PredicateListBackboneView({\r\n PredicateList: PredicateListReact,\r\n entitySchema,\r\n i18n: newI18n,\r\n readOnlyProperties: ['EditorialRejectionFlagId', 'EditorialRejectionDate', 'IsAppealPending', 'EditorialStatus', 'HeadlinesAssetId', 'DescriptionsAssetId', 'SeasonalityAdjustmentId', 'DataExclusionId'],\r\n editableFilter: this.options.grid.pgridPlugins.filterService.getEditableFilter(),\r\n getPredicateIconClassName,\r\n onEditableFilterUpdate: _.bind((query) => {\r\n this.predicateListView.editableFilter =\r\n this.options.grid.pgridPlugins.filterService.createFilterEntity(query);\r\n this.predicateListView.render();\r\n }, this),\r\n });\r\n } else {\r\n this.predicateListView = new PredicateList(_.extend({\r\n entitySchema: this.options.grid.pgridPlugins.filterService.entitySchema,\r\n selected: this.options.grid.pgridPlugins.filterService.getEditableFilter(),\r\n isComparingEnabled: false,\r\n i18n,\r\n }, this.options.grid.pgridPlugins.filterService.filterEntityOptions));\r\n }\r\n\r\n const predicateListViewWrapper = new DeterministicViewForBackBoneView({\r\n view:\r\n this.predicateListView,\r\n });\r\n this.setChild('filter', predicateListViewWrapper);\r\n\r\n const view = new PreviewResultView({\r\n columns: this.entitySetting.getPreviewHeaders(),\r\n i18n,\r\n results: [],\r\n totalCount: 0,\r\n });\r\n this.setChild('preview-result', view);\r\n });\r\n }\r\n\r\n initializeInstrumentation() {\r\n const scenario = this.options.instrumentation[`authorRule${this.viewModel.entity}`].create();\r\n\r\n scenario.createRule.create().monitor('saveRule', this);\r\n scenario.previewRuleResults.create().monitor('previewRule', this);\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click .btn-ruleAuth-save': 'saveRule',\r\n 'click .btn-ruleAuth-preview': 'previewRule',\r\n 'click .btn-ruleAuth-cancel': 'hideView',\r\n };\r\n }\r\n\r\n get template() {\r\n return template;\r\n }\r\n\r\n get ViewModel() {\r\n return RuleAuthoringViewModel;\r\n }\r\n\r\n setupCampaignAdGroupSelector(value) {\r\n this.selectorView = new this.CampaignAdgroupSelectorEdmView({\r\n el: this.$('.campaignAdgroupSelector'),\r\n i18n: this.newI18n,\r\n scope: this.scope,\r\n isCampaignMode: this.viewModel.showCampaigns,\r\n value,\r\n });\r\n this.selectorView.render();\r\n this.selectorView.on('on-apply', (selectedItems) => {\r\n const info = this.viewModel.selectedScopeInfo;\r\n\r\n info.selectedRowCount = selectedItems.length;\r\n info.selectedRowIds = _.map(selectedItems, item => JSON.parse(item).Id);\r\n\r\n this.updateSelectedEntityCount(info);\r\n this.viewModel.selectedScopeOption(scopeOptions.Selected);\r\n });\r\n }\r\n\r\n onScopeSelectionChange() {\r\n if (this.viewModel.isEditRule\r\n && (this.viewModel.showCampaigns || this.viewModel.showAdGroups)\r\n && this.viewModel.selectedScopeOption() === scopeOptions.SelectCampaignOrAdGroup) {\r\n this.viewModel.showCampaignAdGroupSelector(true);\r\n\r\n if (!_.isEmpty(this.viewModel.selectedScopeInfo.selectedRowIds)\r\n && this.viewModel.selectedScopeInfo.selectedRowIds.length < 100) {\r\n const filterString = _.reduce(\r\n this.viewModel.selectedScopeInfo.selectedRowIds,\r\n (filter, id, index, list) => filter.concat(`Id eq ${id}${(index === list.length - 1) ? '' : ' or '}`), ''\r\n );\r\n const uiblocker = withUiBlock();\r\n if (this.viewModel.showCampaigns) {\r\n this.currentEntity.Campaigns.get({\r\n select: ['Id', 'Name', 'Status'],\r\n filter: {\r\n where: filterString,\r\n },\r\n limit: 1000,\r\n }).fetch().then((data) => {\r\n const entitySelection = _.map(data.value, item => ({\r\n Id: item.Id,\r\n name: item.Name,\r\n status: item.Status,\r\n }));\r\n this.setupCampaignAdGroupSelector(entitySelection);\r\n uiblocker();\r\n });\r\n } else {\r\n this.currentEntity.AdGroups.get({\r\n filter: {\r\n where: filterString,\r\n },\r\n limit: 1000,\r\n select: ['Id', 'Name', 'Status', 'Campaign'],\r\n }).fetch().then((data) => {\r\n const entitySelection = _.map(data.value, item => ({\r\n Id: item.Id,\r\n name: item.Name,\r\n status: item.Status,\r\n campaignName: item.Campaign ? item.Campaign.Name : null,\r\n CampaignId: item.Campaign ? item.Campaign.Id : null,\r\n }));\r\n this.setupCampaignAdGroupSelector(entitySelection);\r\n uiblocker();\r\n });\r\n }\r\n } else {\r\n this.setupCampaignAdGroupSelector();\r\n }\r\n } else {\r\n this.viewModel.showCampaignAdGroupSelector(false);\r\n }\r\n }\r\n\r\n // set actions based on the view model value\r\n setAction() {\r\n return this.koModel.set('BatchAction', this.entitySetting.getAction(this.viewModel));\r\n }\r\n\r\n onSaveOrPreviewRuleError(xhr, response, uiblocker) {\r\n uiblocker();\r\n const errors = _.isArray(response) ? response : _.result(parseSync(response.responseText), 'value');\r\n const isUnauthorized = _.find(errors, item => item.Code === 'TokenExpired');\r\n\r\n if (isUnauthorized) {\r\n return Router.navigate('/default.aspx?reason=1&msg=sessionexpired');\r\n }\r\n\r\n const isScheduleInvalid = _.find(errors, item => item.Code === 'TaskSchedulingInvalid');\r\n const { i18n } = this.options;\r\n if (isScheduleInvalid) {\r\n const scheduleInvalidMsg = i18n.getString('Validate_ScheduleTimeInvalid');\r\n this.cronselectionView.viewModel.frequencyErrorMessage(scheduleInvalidMsg);\r\n return; // eslint-disable-line consistent-return\r\n }\r\n\r\n const isThrottlingError = _.find(errors, item => item.Code === 'ThrottlingLimitReached');\r\n\r\n if (isThrottlingError) {\r\n const throttLimitMsg = i18n.getString('Error_Campaign_API_ThrottlingLimitReached');\r\n return this.alertHelper.showError(throttLimitMsg);\r\n }\r\n\r\n const isCustomerMigrationError = _.find(errors, item => item.Code === 'CustomerUnderMigration');\r\n\r\n if (isCustomerMigrationError) {\r\n const migrationMsg = i18n.getString('Error_Campaign_API_CustomerUnderMigration');\r\n return this.alertHelper.showError(migrationMsg);\r\n }\r\n\r\n return this.alertHelper.showError(i18n.getString('GenericErrorMessage'));\r\n }\r\n\r\n saveRule() {\r\n if (!this.validate() || !this.cronselectionView.validate()) {\r\n return;\r\n }\r\n\r\n if (this.viewModel.isEditRule) {\r\n const ruleUrlTmpl = _.template('Advertiser/Customers()/Accounts()/TaskItems({{ruleId}})?');\r\n this.koModel.url = ruleUrlTmpl({\r\n ruleId: this.viewModel.editRuleId,\r\n });\r\n } else {\r\n this.koModel.url = 'Advertiser/Customers()/Accounts()/TaskItems?';\r\n }\r\n this.koModel.isEditRule = this.viewModel.isEditRule;\r\n this.koModel.isSimulation = false;\r\n this.koModel.set({\r\n Entity: this.viewModel.entity,\r\n Name: this.viewModel.ruleName(),\r\n NotificationType: this.viewModel.selectedEmailOption(),\r\n TimeZoneId: this.cronselectionView.viewModel.selectedTimeZoneOption(),\r\n });\r\n this.setAction();\r\n this.koModel.set('Cron', this.cronselectionView.getCron());\r\n const currentCustomerId = this.appCfg && this.appCfg.get && this.appCfg.get('CurrentCustomer') ? this.appCfg.get('CurrentCustomer').Id : undefined;\r\n if (currentCustomerId) {\r\n this.koModel.set('CurrentCustomerId', currentCustomerId);\r\n }\r\n this.helper.setSelectionAndDescription(\r\n this,\r\n this.model,\r\n this.options.grid,\r\n false,\r\n this.options.i18n\r\n );\r\n\r\n const uiblocker = withUiBlock();\r\n this.koModel.save({}, {\r\n success: () => {\r\n this.hideView();\r\n\r\n if (this.viewModel.isEditRule) {\r\n refresh(this.options.grid);\r\n }\r\n\r\n this.alertHelper.showSuccess(this.options.i18n.getString('RuleAuthoring_StatusMessage'));\r\n uiblocker();\r\n },\r\n error: (xhr, errors) => {\r\n this.onSaveOrPreviewRuleError(xhr, errors, uiblocker);\r\n },\r\n });\r\n }\r\n\r\n previewRule() {\r\n if (!this.validate()) {\r\n return;\r\n }\r\n\r\n this.koModel.url = 'Advertiser/Customers()/Accounts()/BulkEditSessions?$expand=BulkEditResults&preview=true';\r\n this.koModel.isSimulation = true;\r\n this.koModel.set('Entity', this.viewModel.entity);\r\n this.koModel.unset('PreviewEntityIds');\r\n\r\n if (this.options.grid.pgridPlugins.crossPageSelectAll.isAllSelected) {\r\n this.koModel.set('PreviewEntityIds', _.map(this.options.grid.gridView.selectedKeys(), Number));\r\n }\r\n\r\n const currentCustomerId = this.appCfg && this.appCfg.get && this.appCfg.get('CurrentCustomer') ? this.appCfg.get('CurrentCustomer').Id : undefined;\r\n if (currentCustomerId) {\r\n this.koModel.set('CurrentCustomerId', currentCustomerId);\r\n }\r\n\r\n this.setAction();\r\n this.helper.setSelectionAndDescription(\r\n this,\r\n this.model,\r\n this.options.grid,\r\n true,\r\n this.options.i18n\r\n );\r\n\r\n const uiblocker = withUiBlock();\r\n this.koModel.save({}, {\r\n success: (model) => {\r\n uiblocker();\r\n const results = model.get('BulkEditResults');\r\n\r\n // create or update preview view\r\n this.getChild('preview-result').update(\r\n this.entitySetting.formatPreviewResults(results),\r\n model.get('TotalRowCount')\r\n );\r\n this.viewModel.inPreviewMode(true);\r\n },\r\n error: (xhr, errors) => {\r\n this.onSaveOrPreviewRuleError(xhr, errors, uiblocker);\r\n },\r\n });\r\n }\r\n\r\n hideView() {\r\n this.trigger('hide');\r\n ko.cleanNode(this.el);\r\n if (this.selectorView) {\r\n this.selectorView.remove();\r\n }\r\n this.remove();\r\n return this;\r\n }\r\n\r\n validate() {\r\n let isResultValid = true;\r\n\r\n if (_.isFunction(this.viewModel.validate)) {\r\n isResultValid = this.viewModel.validate();\r\n }\r\n\r\n isResultValid = isResultValid && this.entitySetting.isActionValidate();\r\n\r\n if (!this.isForVNext) {\r\n // user can create automated rules without any when condition\r\n if (this.predicateListView.ko_model.items().length > 0) {\r\n _.each(this.predicateListView.ko_model.items(), (filterItem) => {\r\n filterItem.onValueChange(); // trigger value checking so that error message can be shown\r\n });\r\n isResultValid = isResultValid && this.predicateListView.ko_model.canApply();\r\n }\r\n } else {\r\n const editablePredicates = convertFilterEntityToPredicates(this.predicateListView.editableFilter); // eslint-disable-line max-len\r\n const hasInvalidProperties = editablePredicates.some(editablePredicate =>\r\n editablePredicate.isDeletedProperty || editablePredicate.isInvalidProperty);\r\n isResultValid = isResultValid && !hasInvalidProperties;\r\n }\r\n\r\n if (!isResultValid) {\r\n this.$el.find('input.error:visible').first().focus();\r\n }\r\n\r\n return isResultValid;\r\n }\r\n\r\n /**\r\n * update selected entity count\r\n * @param {Object} info - An object containing the new selection info\r\n *\r\n * @returns {void} void\r\n */\r\n updateSelectedEntityCount(info) {\r\n return this.viewModel.updateSelectedEntityCount(info);\r\n }\r\n\r\n addWalkme({\r\n directive,\r\n walkMe,\r\n walkMeLink,\r\n walkThrus,\r\n }) {\r\n const selectedRule = this.model.get('SelectedRule');\r\n\r\n // right now we only want to show this for change bid rule\r\n if (selectedRule && selectedRule.action === 'ChangeBid') {\r\n const Walkme = walkMe.default;\r\n const WalkmeLink = walkMeLink.default;\r\n\r\n directive.whenLoaded().then(() => {\r\n const walkme = new Walkme();\r\n\r\n walkme.setType(WalkmeLink)\r\n .setWalkthrus(walkThrus.keyword.link.changeBid)\r\n .render();\r\n\r\n walkme.$el.addClass('walkme__link--panel-title');\r\n this.$el.find('.panel-heading').append(walkme.$el);\r\n });\r\n }\r\n }\r\n}\r\n","import { EntitySettingBase } from './base';\r\nimport { CampaignSetting } from './campaign';\r\nimport { AdGroupSetting } from './adgroup';\r\nimport { KeywordSetting } from './keyword';\r\nimport { AssetGroupSetting } from './assetgroup';\r\n\r\nexport function getEntitySetting(entity, i18n, selectedRule, accountCurrencyCode, bidBudgetRange) {\r\n const entitySettingMapping = {\r\n campaign: CampaignSetting,\r\n keyword: KeywordSetting,\r\n adgroup: AdGroupSetting,\r\n assetgroup: AssetGroupSetting,\r\n };\r\n\r\n const keyToUse = entity.toLowerCase();\r\n const ClassToUse = entitySettingMapping[keyToUse] ?\r\n entitySettingMapping[keyToUse] :\r\n EntitySettingBase;\r\n\r\n return new ClassToUse({\r\n entity,\r\n selectedRule,\r\n i18n,\r\n accountCurrencyCode,\r\n bidBudgetRange,\r\n });\r\n}\r\n","import backbone from 'backbone';\r\nimport { lastNDate } from '@bingads-webui-universal/primitive-utilities';\r\nimport { scopeOptions, emailOptions } from './options';\r\nimport { dataDateRanges, frequencyGrains } from './cron-selection/options';\r\n\r\nexport class RuleAuthoringModel extends backbone.Model {\r\n /**\r\n * Initialize model settings\r\n * @param {Object} param - An object containing these default options for model\r\n * @param {Object} param.odata - odata module\r\n * @param {string} param.odata.jq_ajax_adapter - the function for ajax action\r\n *\r\n * @returns {void} void\r\n */\r\n initialize({ odata }) {\r\n this.options = { odata };\r\n\r\n super.initialize(this.options);\r\n this.idAttribute = 'id';\r\n }\r\n\r\n\r\n /**\r\n * Default settings for the model\r\n *\r\n * @returns {void} void\r\n */\r\n defaults() {\r\n return {\r\n Id: null,\r\n Selection: '',\r\n Description: '',\r\n PreviewEntityIds: [],\r\n selectedEntityCount: 0,\r\n TotalRowCount: 0,\r\n BulkEditResults: [],\r\n SelectedRule: {\r\n id: null,\r\n entity: null,\r\n action: null,\r\n name: null,\r\n modifiedBy: {\r\n id: 0,\r\n name: '',\r\n },\r\n frequencyGrain: frequencyGrains.Daily,\r\n monthlyOption: '1',\r\n weeklyOption: '1',\r\n dailyOption: new Date().getHours(),\r\n runOnceDate: lastNDate(new Date(), -1),\r\n timeZoneOption: 0,\r\n dateRangePreset: dataDateRanges.Yesterday,\r\n emailOption: emailOptions.EveryTimeThisRuleRuns,\r\n scopeInfo: {\r\n allPages: false,\r\n selectedRowCount: 0,\r\n selectedRowIds: null,\r\n campaignId: null,\r\n adGroupId: null,\r\n },\r\n scopeOption: scopeOptions.AllButRemoved,\r\n filter: {\r\n Name: '',\r\n Id: '',\r\n FilterExpressions: [],\r\n },\r\n nonTextAction: {},\r\n },\r\n };\r\n }\r\n\r\n parse(response) {\r\n if (response) {\r\n return {\r\n Id: response.value,\r\n TotalRowCount: response.TotalRowCount,\r\n BulkEditResults: response.BulkEditResults,\r\n };\r\n }\r\n\r\n return null;\r\n }\r\n\r\n sync(method, model, options) {\r\n if (model.isSimulation) {\r\n options.type = 'Post'; // eslint-disable-line no-param-reassign\r\n options.data = JSON.stringify({ // eslint-disable-line no-param-reassign\r\n Entity: model.get('Entity'),\r\n BatchAction: model.get('BatchAction'),\r\n Selection: model.get('Selection'),\r\n Description: model.get('Description'),\r\n PreviewEntityIds: model.get('PreviewEntityIds'),\r\n CurrentCustomerId: model.get('CurrentCustomerId'),\r\n });\r\n } else if (method === 'create') {\r\n if (model.isEditRule === true) {\r\n options.type = 'Patch'; // eslint-disable-line no-param-reassign\r\n } else {\r\n options.type = 'Post'; // eslint-disable-line no-param-reassign\r\n }\r\n options.data = JSON.stringify({ // eslint-disable-line no-param-reassign\r\n '@odata.type': '#Model.AdvertiserRule',\r\n Type: 'AdvertiserSearch',\r\n NotificationMedium: 'Email',\r\n Entity: model.get('Entity'),\r\n BatchAction: model.get('BatchAction'),\r\n Selection: model.get('Selection'),\r\n Description: model.get('Description'),\r\n Name: model.get('Name'),\r\n NotificationType: model.get('NotificationType'),\r\n TimeZoneId: model.get('TimeZoneId'),\r\n Cron: model.get('Cron'),\r\n CurrentCustomerId: model.get('CurrentCustomerId'),\r\n });\r\n } else {\r\n options.type = 'Get'; // eslint-disable-line no-param-reassign\r\n }\r\n return this.options.odata.jq_ajax_adapter.call(this, this.url, options);\r\n }\r\n}\r\n","export const getBidLandscapeStyle = (palette = {}) => ({\r\n '.popup-dialog': {\r\n left: '0',\r\n right: '0',\r\n top: '0',\r\n bottom: '0',\r\n margin: 'auto',\r\n position: 'absolute',\r\n width: 1100,\r\n height: '600px !important',\r\n backgroundColor: 'transparent',\r\n },\r\n '.popup-container': {\r\n backgroundColor: 'rgba(255,255,255,0.5) !important',\r\n '& .bid-landscape.panel-form': {\r\n backgroundColor: 'white',\r\n border: '1px solid #BBB',\r\n boxShadow: '0px 4.8px 14.4px rgba(0, 0, 0, 0.18), 0px 25.6px 57.6px rgba(0, 0, 0, 0.22)',\r\n },\r\n },\r\n\r\n '.bidlandscape-title': {\r\n fontSize: 20,\r\n marginTop: 6,\r\n marginLeft: -15,\r\n marginBottom: 15,\r\n display: 'block',\r\n fontWeight: 600,\r\n },\r\n '.bidlandscape-subTitle': {\r\n marginBottom: '15px',\r\n },\r\n '.bidlandscape-subTitle .fwLink': {\r\n marginLeft: '5px',\r\n },\r\n '.bid-landscape': {\r\n padding: 16,\r\n fontSize: 14,\r\n color: '#323130',\r\n },\r\n '.bidlandscape-detail-table': {\r\n width: '100%',\r\n },\r\n '.bid-landscape__radio': {\r\n position: 'relative',\r\n },\r\n 'tr.bidlandscape-table-row.cursor-pointer': {\r\n float: 'inherit',\r\n },\r\n 'col.bid-landscape__col.bid-landscape__col--bid': {\r\n width: 130,\r\n },\r\n 'col.bid-landscape__col.bid-landscape__col--radio': {\r\n width: 46,\r\n },\r\n 'col.bid-landscape__col.bid-landscape__col--bi': {\r\n width: 130,\r\n },\r\n '.bidlandscape-table-row td:nth-child(1)': {\r\n textAlign: 'center',\r\n },\r\n '.clear': {\r\n clear: 'both',\r\n },\r\n '.radio-inline.adgroup-bid-update-clear-custom-bid-mode': {\r\n marginLeft: '0',\r\n },\r\n '.bidlandscape-data-panel .bidlandscape-left-div': {\r\n padding: '0',\r\n width: '62.666667%',\r\n marginLeft: 6,\r\n },\r\n '.bidlandscape-action input.btn.btn-primary': {\r\n marginRight: 8,\r\n },\r\n '.bidlandscape-chart': {\r\n width: 330,\r\n height: 210,\r\n padding: '0',\r\n marginTop: 43,\r\n overflow: 'visible !important',\r\n '& .highcharts-series-group': {\r\n '& .highcharts-line-series': {\r\n '& > path.highcharts-point': {\r\n opacity: '1 !important',\r\n },\r\n },\r\n },\r\n },\r\n '.bidlandscape-data-panel .error': {\r\n color: '#D90026',\r\n marginLeft: 42,\r\n },\r\n '.bidlandscape-right-div': {\r\n padding: '0',\r\n marginLeft: 20,\r\n },\r\n '.bidlandscape-table-row td': {\r\n paddingRight: 5,\r\n fontWeight: 'normal',\r\n lineHeight: '24px',\r\n },\r\n '.bidlandscape-table-row th': {\r\n verticalAlign: 'text-top',\r\n fontWeight: 600,\r\n },\r\n '.bidlandscape-table-row .bidlandscape-label': {\r\n whiteSpace: 'nowrap',\r\n overflowWrap: 'normal',\r\n },\r\n '.bidlandscape-footer-warning': {\r\n fontSize: 12,\r\n paddingTop: 10,\r\n },\r\n '.bidlandscape-footer.type-normal': {\r\n paddingTop: 46,\r\n fontSize: 12,\r\n },\r\n '.bidlandscape-action': {\r\n marginTop: 17,\r\n marginBottom: 8,\r\n },\r\n '.bid-current-row': {\r\n backgroundColor: '#F3F2F1',\r\n },\r\n '.bidlandscape-footer b': {\r\n fontWeight: 'normal',\r\n },\r\n '.bidlandscape-column .bidlandscape_icon': {\r\n position: 'static',\r\n },\r\n '.fix-dialog-position .modal-dialog': {\r\n width: 1100,\r\n maxWidth: 'unset',\r\n },\r\n '.campaign-bid-landscape': {\r\n padding: 0,\r\n },\r\n '.bidlandscape_icon.disabled': {\r\n color: 'rgba(50, 49, 48, 0.5)',\r\n },\r\n '.campaign-bid-landscape .bidlandscape-title': {\r\n marginLeft: 0,\r\n },\r\n '.campaign-bid-landscape .radio-inline': {\r\n display: 'block',\r\n },\r\n '.campaign-bid-landscape .radio-inline+.radio-inline': {\r\n marginLeft: 0,\r\n },\r\n '.fix-dialog-position .modal-body': {\r\n padding: '14px 24px 24px',\r\n },\r\n '.fix-dialog-position .modal-empty-header': {\r\n padding: 0,\r\n },\r\n '.bidlandscape-campaign-type': {\r\n lineHeight: '19px',\r\n },\r\n '.bidlandscape-campaign-type .title': {\r\n display: 'none',\r\n },\r\n '.campaign-bid-landscape .bidlandscape-data-panel': {\r\n marginTop: '15px',\r\n marginBottom: '15px',\r\n },\r\n '.campaign-bid-landscape col.bid-landscape__col.bid-landscape__col--bi': {\r\n width: 100,\r\n },\r\n '.campaign-bid-landscape .bid-landscape-input-group .bid-landscape__input': {\r\n outline: 'none',\r\n border: 'none',\r\n marginRight: 5,\r\n },\r\n '.campaign-bid-landscape .bid-landscape-input-group .bid-landscape__select': {\r\n outline: 'none',\r\n border: 'none',\r\n },\r\n '.campaign-bid-landscape .bid-landscape-input-group': {\r\n border: '1px solid #ccc',\r\n display: 'inline-block',\r\n backgroundColor: '#fff',\r\n lineHeight: '26px',\r\n padding: '0 5px',\r\n },\r\n '.campaign-bid-landscape .bidlandscape-campaign-additionalbudget': {\r\n margin: '15px 6px',\r\n padding: 10,\r\n border: `1px solid ${palette.neutralSecondary}`,\r\n },\r\n '.campaign-bid-landscape .bidlandscape-campaign-additionalbudget .title': {\r\n fontWeight: 600,\r\n },\r\n '.campaign-bid-landscape .bidlandscape-footer': {\r\n marginTop: 10,\r\n padding: 0,\r\n },\r\n '.campaign-bid-landscape .bidlandscape-chart': {\r\n marginTop: 0,\r\n },\r\n '.campaign-bid-landscape .highcharts-root,.campaign-bid-landscape .highcharts-container ': {\r\n overflow: 'visible!important',\r\n },\r\n '.type-normal': {\r\n fontWeight: 'normal!important',\r\n },\r\n '.campaign-bid-landscape td.selected,.campaign-bid-landscape th.selected': {\r\n backgroundColor: palette.neutralLighter,\r\n },\r\n '.campaign-bid-landscape tr.bid-current-row td': {\r\n backgroundColor: palette.themeLighter,\r\n },\r\n '.campaign-bid-landscape .bid-current-row td.selected': {\r\n backgroundColor: palette.themeLight,\r\n },\r\n '.campaign-bid-landscape .bidlandscape-table-row:hover td': {\r\n backgroundColor: palette.neutralLighter,\r\n },\r\n});\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useEffect, useRef, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport { clone } from 'underscore';\r\nimport Backbone from 'backbone';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport BiddingStrategyView from '@bingads-webui-campaign-legacy/bidding-strategy/view/setting';\r\nimport '@bingads-webui-campaign/ko-stop-binding';\r\nimport { mergeStyles } from '@bingads-webui-campaign-react/common-styles';\r\n\r\nconst getStyles = (theme, palette = {}) => ({\r\n bidStrategyContainer: {\r\n ...mergeStyles(\r\n { theme },\r\n {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n\r\n '& .bid-strategy-container': {\r\n marginTop: 12,\r\n\r\n '& select': {\r\n margin: '5px 0',\r\n width: 460,\r\n },\r\n '& div[data-bind=\"visible: checkCPC\"]': {\r\n paddingTop: 8,\r\n },\r\n '& input[type=\"checkbox\"]': {\r\n float: 'left',\r\n },\r\n '& .custom-param__key-field': {\r\n display: 'inline-block',\r\n width: 85,\r\n marginLeft: 5,\r\n marginRight: 5,\r\n },\r\n '& #currencyLabelTargetCpa': {\r\n display: 'inline-block',\r\n 'vertical-align': 'initial',\r\n marginTop: 0,\r\n width: '200px',\r\n },\r\n '& #currencyLabelTargetRoas': {\r\n display: 'inline-block',\r\n 'vertical-align': 'initial',\r\n marginTop: 0,\r\n width: '200px',\r\n },\r\n '& .alert.alert-info': {\r\n marginTop: 8,\r\n },\r\n '& .alert-image': {\r\n paddingTop: 3,\r\n },\r\n '& a.helpbutton': {\r\n 'margin-left': '5px',\r\n },\r\n },\r\n 'bid-strategy-details-container form-group': {\r\n width: '460px',\r\n },\r\n '& .target-cpc-container': {\r\n whiteSpace: 'nowrap',\r\n },\r\n '& .helpbutton': {\r\n display: 'inline-block',\r\n marginLeft: 5,\r\n },\r\n\r\n '& label': {\r\n display: 'inline-block',\r\n },\r\n\r\n '& span': {\r\n verticalAlign: 'middle',\r\n },\r\n\r\n '& .display-inline-block': {\r\n display: 'inline-block !important',\r\n },\r\n\r\n '& .help-block, .remaining-chars-hint-container': {\r\n textAlign: 'right',\r\n fontSize: 14,\r\n margin: 0,\r\n color: palette.neutralPrimary,\r\n lineHeight: '24px',\r\n },\r\n\r\n '& .help-block.error': {\r\n textAlign: 'left',\r\n },\r\n\r\n '& ol, ul': {\r\n listStyle: 'none',\r\n paddingLeft: 0,\r\n },\r\n\r\n '& .validation-error': {\r\n border: '1px solid #A80000 !important',\r\n backgroundColor: palette.white,\r\n margin: 0,\r\n },\r\n\r\n '& .error': {\r\n color: '#A80000',\r\n },\r\n\r\n '& div.error': {\r\n fontSize: 12,\r\n },\r\n\r\n '& input.error, select.error, textarea.error, input.campaign-error-row, select.campaign-error-row, textarea.campaign-error-row': {\r\n border: '1px solid #A80000 !important',\r\n },\r\n\r\n '& .form-group': {\r\n padding: 0,\r\n marginBottom: 0,\r\n },\r\n\r\n '& .form-control': {\r\n height: 32,\r\n border: `1px solid ${palette.neutralSecondary}`,\r\n boxSizing: 'border-box',\r\n borderRadius: 2,\r\n },\r\n\r\n '& .form-control:focus': {\r\n border: `1px solid ${palette.neutralSecondary}`,\r\n },\r\n\r\n '& .form-control-static': {\r\n paddingTop: 0,\r\n paddingBottom: 0,\r\n margin: 0,\r\n height: 'auto',\r\n color: palette.neutralSecondary,\r\n\r\n '&.copy-settings': {\r\n marginTop: 4,\r\n },\r\n '& .max-cpc-input-row': {\r\n marginLeft: 0,\r\n },\r\n },\r\n\r\n '& .control-label, .form-label-container': {\r\n textAlign: 'left',\r\n width: '760px',\r\n marginTop: 33,\r\n fontSize: 14,\r\n color: palette.neutralPrimary,\r\n padding: 0,\r\n display: 'block',\r\n },\r\n\r\n '& .form-label-container': {\r\n '&>label>span': {\r\n padding: '5px 0px',\r\n display: 'inline-block',\r\n },\r\n },\r\n\r\n '& .control-label .col-sm-4': {\r\n width: 'auto',\r\n },\r\n\r\n '& .col-sm-6': {\r\n paddingLeft: 0,\r\n },\r\n\r\n '& .displayNone': {\r\n display: 'none',\r\n },\r\n\r\n '& select': {\r\n appearance: 'none',\r\n '-webkit-appearance': 'none',\r\n },\r\n\r\n '& textarea': {\r\n resize: 'none',\r\n },\r\n\r\n '& .input-group-addon': {\r\n backgroundColor: palette.white,\r\n border: 0,\r\n },\r\n }\r\n ),\r\n },\r\n});\r\n\r\nexport const LegacyBidStrategy = React.memo(({\r\n id, className, BiddingScheme, CampaignSettings, campaignType, campaignLanguage, campaignSubType,\r\n onChange, entityType, hideHeader, popupIds, budgetAmount, validateWithBudget,\r\n ...restProps\r\n}) => {\r\n const view = useRef();\r\n const viewListener = useMemo(() => clone(Backbone.Events), []);\r\n\r\n let container;\r\n\r\n useEffect(() => {\r\n view.current = new BiddingStrategyView({\r\n biddingStrategyType: BiddingScheme && BiddingScheme.Type,\r\n biddingStrategyId: BiddingScheme && BiddingScheme.BidStrategyId,\r\n targetCpa: BiddingScheme && BiddingScheme.TargetCpa,\r\n targetRoas: BiddingScheme && BiddingScheme.TargetRoas,\r\n costPerSale: BiddingScheme && (BiddingScheme.CostPerSale || BiddingScheme.TargetCostPerSale),\r\n maxCpc: BiddingScheme && BiddingScheme.MaxCpc && BiddingScheme.MaxCpc.Amount,\r\n targetAdPosition: BiddingScheme && BiddingScheme.TargetAdPosition,\r\n targetImpressionShare: BiddingScheme && BiddingScheme.TargetImpressionShare,\r\n entityType,\r\n campaignSettings: CampaignSettings,\r\n campaignType,\r\n campaignLanguage,\r\n campaignSubType,\r\n withRealTimeUpdates: true,\r\n isAfterSave: false,\r\n hideHeader,\r\n popupIds,\r\n budgetAmount,\r\n validateWithBudget,\r\n isRenderedInReact: true,\r\n ...restProps,\r\n });\r\n\r\n viewListener.listenTo(view.current, 'change', onChange);\r\n view.current.render();\r\n view.current.$el.appendTo(container);\r\n\r\n return () => {\r\n view.current.remove();\r\n };\r\n }, [budgetAmount]);\r\n\r\n useEffect(() => {\r\n viewListener.stopListening(view.current);\r\n viewListener.listenTo(view.current, 'change', onChange);\r\n\r\n return () => viewListener.stopListening(view.current);\r\n }, [onChange, viewListener]);\r\n\r\n const classes = useDefaultStyles(getStyles);\r\n\r\n return (\r\n \r\n
{ container = ref; }} />\r\n
\r\n );\r\n});\r\n\r\nLegacyBidStrategy.propTypes = {\r\n id: PropTypes.string,\r\n className: PropTypes.string,\r\n BiddingScheme: PropTypes.shape({\r\n BidStrategyId: PropTypes.number,\r\n Type: PropTypes.string,\r\n TargetCpa: PropTypes.string,\r\n TargetRoas: PropTypes.string,\r\n TargetCostPerSale: PropTypes.string,\r\n CostPerSale: PropTypes.string,\r\n MaxCpc: PropTypes.shape({\r\n Amount: PropTypes.number,\r\n }),\r\n TargetAdPosition: PropTypes.string,\r\n TargetImpressionShare: PropTypes.number,\r\n }),\r\n CampaignSettings: PropTypes.arrayOf(PropTypes.shape({})),\r\n entityType: PropTypes.string,\r\n campaignType: PropTypes.string,\r\n campaignLanguage: PropTypes.string,\r\n campaignSubType: PropTypes.string,\r\n onChange: PropTypes.func.isRequired,\r\n hideHeader: PropTypes.bool,\r\n popupIds: PropTypes.shape({\r\n BidStrategy: PropTypes.string,\r\n }),\r\n budgetAmount: PropTypes.number,\r\n validateWithBudget: PropTypes.bool,\r\n};\r\n\r\nLegacyBidStrategy.defaultProps = {\r\n id: undefined,\r\n className: undefined,\r\n CampaignSettings: [],\r\n budgetAmount: undefined,\r\n validateWithBudget: false,\r\n BiddingScheme: undefined,\r\n campaignType: undefined,\r\n campaignLanguage: 'English',\r\n campaignSubType: undefined,\r\n entityType: undefined,\r\n hideHeader: false,\r\n popupIds: {\r\n BidStrategy: 'pop_BA_CampaignGrids_BidStrategy',\r\n },\r\n};\r\n","import { isEqual } from 'underscore';\r\nimport React, { useCallback, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { LegacyBidStrategy } from './legacy-bid-strategy';\r\n\r\nconst LegacyBidStrategyWithCustomValidation = ({\r\n validationProps, updateValidation, ...restProps\r\n}) => {\r\n const { data } = validationProps;\r\n const i18n = useContext(I18nContext);\r\n const popupIds = {\r\n BidStrategy: 'pop_BA_PMAX_BidStrategy',\r\n };\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const onChange = useCallback((newData, newIsValid, isFromInitialization) => {\r\n const newBiddingScheme = { BiddingScheme: newData };\r\n updateValidation(\r\n newIsValid ? [] : [i18n.getString(_TL_('Bid Strategy has validation errors'))],\r\n isEqual(newBiddingScheme, data) ? data : newBiddingScheme,\r\n !isFromInitialization\r\n );\r\n\r\n if (activity) {\r\n activity.signal(`onLegacyBidStrategyChange - ${JSON.stringify(newBiddingScheme)} - isValid: ${newIsValid}}`);\r\n }\r\n }, [i18n, updateValidation, data, activity]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nLegacyBidStrategyWithCustomValidation.propTypes = {\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n BiddingScheme: PropTypes.shape({\r\n Type: PropTypes.string,\r\n }),\r\n CampaignSettings: PropTypes.arrayOf(PropTypes.shape({})),\r\n }),\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n};\r\n\r\nexport const ValidatedLegacyBidStrategy = withCustomValidation(LegacyBidStrategyWithCustomValidation);\r\n\r\n","import { btnStyle } from '@bingads-webui-campaign-react/common-styles';\r\n\r\nexport const getBudgetSuggestionPopupStyle = (palette = {}) => ({\r\n '.budget-landscape-container-outer': {\r\n width: '1200px',\r\n border: '0 solid',\r\n borderRadius: '2px',\r\n backgroundColor: '#fff',\r\n boxShadow: '0 25.6px 57.6px 0 rgba(0,0,0,.22), 0 4.8px 14.4px 0 rgba(0,0,0,.18)',\r\n\r\n '& .budget-landscape-dismiss-popup': {\r\n right: 10,\r\n bottom: 70,\r\n zIndex: '2000',\r\n\r\n '& .single-choice-feedback-form': {\r\n width: 408,\r\n padding: 20,\r\n boxShadow: '0 0 5px #ccc',\r\n backgroundColor: '#fff',\r\n position: 'absolute',\r\n right: -150,\r\n bottom: -100,\r\n '& .close': {\r\n right: 25,\r\n },\r\n '& .single-choice-feedback-form-head': {\r\n paddingLeft: 8,\r\n '& .single-choice-feedback-form-title': {\r\n width: 392,\r\n fontWeight: 'bold',\r\n fontSize: '20px',\r\n },\r\n '& .single-choice-feedback-form-description': {\r\n color: '#797775',\r\n },\r\n },\r\n '& .reason-input': {\r\n marginLeft: 8,\r\n '& .input-wrapper': {\r\n position: 'relative',\r\n },\r\n '& .percent-suffix': {\r\n position: 'absolute',\r\n top: '5px',\r\n left: '80px',\r\n },\r\n '& .percent-input': {\r\n width: 98,\r\n paddingRight: '20px',\r\n },\r\n '& .number-input': {\r\n width: 98,\r\n },\r\n '& .input-comment': {\r\n paddingTop: 6,\r\n paddingBottom: 6,\r\n },\r\n },\r\n '& p, & .radio': {\r\n paddingLeft: 10,\r\n fontFamily: '\\'Segoe UI\\', Arial, sans-serif',\r\n '&[data-checked=true]': {\r\n backgroundColor: '#DEECF9',\r\n },\r\n '& button:disabled': {\r\n color: '#a2a2a2',\r\n backgroundColor: palette.themePrimary,\r\n border: '1px solid #0078d4',\r\n },\r\n },\r\n '& .form-group': {\r\n marginBottom: '0px !important',\r\n marginTop: 10,\r\n },\r\n '& div.comments': {\r\n '& textarea': {\r\n height: 72,\r\n width: 296,\r\n border: '1px #bbb solid',\r\n background: '#fff',\r\n marginBottom: 5,\r\n },\r\n },\r\n '& .actions': {\r\n paddingTop: 8,\r\n '& .submit': {\r\n marginLeft: 5,\r\n marginRight: 10,\r\n },\r\n '& .checkbox.preference': {\r\n paddingTop: 12,\r\n color: '#bbb',\r\n paddingLeft: 10,\r\n '& .not-show-again-text': {\r\n paddingLeft: 8,\r\n width: 312,\r\n display: 'inline-block',\r\n verticalAlign: 'top',\r\n },\r\n },\r\n },\r\n '& .error': {\r\n color: '#A80000', // error-icon color in color.less file\r\n fontSize: '12px',\r\n },\r\n },\r\n },\r\n\r\n '& .budgetlandscape-seasonal-title': {\r\n backgroundColor: 'lightgray',\r\n width: 1200,\r\n height: 30,\r\n marginTop: -24,\r\n '& .budgetlandscape-seasonal-title-text': {\r\n lineHeight: '30px',\r\n marginTop: 0,\r\n marginLeft: 10,\r\n fontSize: 14,\r\n },\r\n '& .closeimage': {\r\n marginRight: 10,\r\n marginTop: 2,\r\n },\r\n },\r\n\r\n '& .budget-landscape.panel': {\r\n marginBottom: '0px',\r\n '& .panel-outer-body': {\r\n padding: '25px 15px 10px 15px',\r\n },\r\n '& .budget-landscape-actions': {\r\n '& .btn-hero': {\r\n marginRight: '7px',\r\n },\r\n },\r\n '& .budget-landscape-actions .btn-hero': btnStyle({ palette })['.btn-hero'],\r\n '& .budget-landscape-actions .btn-default': btnStyle({ palette })['.btn-default'],\r\n\r\n '& .with-feedback-footer': {\r\n borderTop: '1px solid #EDEBE9',\r\n padding: 16,\r\n height: 64,\r\n '& .budget-landscape-actions': {\r\n float: 'left',\r\n },\r\n '& .budget-landscape-feedback-actions': {\r\n float: 'right',\r\n paddingRight: '20px',\r\n '& .iconba': {\r\n verticalAlign: 'middle',\r\n fontSize: 20,\r\n marginRight: 20,\r\n },\r\n '& .iconba-LikeSolid': {\r\n color: '#106EBE',\r\n },\r\n '& .navigate-to-recommended-page-link': {\r\n verticalAlign: 'middle',\r\n },\r\n '& .feedback-comment': {\r\n verticalAlign: 'middle',\r\n },\r\n '& .budget-landscape-like': {\r\n marginLeft: 30,\r\n },\r\n '& .budget-landscape-dislike': {\r\n transform: 'rotate(180deg)',\r\n marginLeft: 10,\r\n },\r\n },\r\n },\r\n\r\n '& .budgetlandscape-title': {\r\n marginTop: '0px',\r\n marginBottom: '5px',\r\n paddingLeft: '10px',\r\n fontSize: '15px',\r\n fontWeight: 'bold',\r\n },\r\n\r\n '& .close.closeimage': {\r\n\r\n },\r\n\r\n '& .panel-body': {\r\n padding: '15px 10px',\r\n\r\n '& .budgetlandscape-helptext': {\r\n fontSize: '14px',\r\n fontWeight: 'normal',\r\n margin: '0px',\r\n },\r\n\r\n '& .budget-landscape-div': {\r\n marginTop: '25px',\r\n\r\n '& .budget-landscape-container': {\r\n display: 'grid',\r\n gridTemplateColumns: '68% auto',\r\n\r\n '& .landscape-table': {\r\n marginRight: '20px',\r\n\r\n '& > div': {\r\n position: 'relative',\r\n },\r\n\r\n '& .tip-message': {\r\n marginTop: '15px',\r\n\r\n '& .iconba.iconba-Warning': {\r\n color: '#D83B01 !important',\r\n },\r\n },\r\n\r\n '& span.status': {\r\n marginRight: '5px',\r\n },\r\n\r\n '& tr': {\r\n height: '30px',\r\n\r\n '&.selected': {\r\n backgroundColor: '#DEECF9',\r\n\r\n '&::after': {\r\n borderBottom: '15px solid transparent',\r\n borderLeft: '25px solid #e5f7f4',\r\n borderTop: '15px solid transparent',\r\n height: '0',\r\n width: '0',\r\n content: '\" \"',\r\n position: 'absolute',\r\n },\r\n },\r\n },\r\n\r\n '& th': {\r\n fontWeight: 'normal',\r\n padding: '0px 10px',\r\n\r\n '&.selected': {\r\n fontWeight: 'bold',\r\n backgroundColor: 'rgba(237, 237, 237, 0.5)',\r\n },\r\n },\r\n\r\n '& td': {\r\n padding: '0px 10px',\r\n\r\n '&.selected': {\r\n backgroundColor: 'rgba(237, 237, 237, 0.5)',\r\n },\r\n\r\n '& input[type=radio]': {\r\n '&::before': {\r\n left: '10px !important',\r\n },\r\n '&::after': {\r\n left: '12px !important',\r\n },\r\n },\r\n },\r\n '& td.user-input-cell': {\r\n padding: 0,\r\n '& .user-input': {\r\n position: 'relative',\r\n '& .currency-symbol': {\r\n position: 'absolute',\r\n left: 10,\r\n top: 3,\r\n },\r\n '& input': {\r\n width: 135,\r\n paddingLeft: 16,\r\n },\r\n '& .symbol-size-2 + input': {\r\n paddingLeft: 25,\r\n },\r\n '& .symbol-size-3 + input': {\r\n paddingLeft: 35,\r\n },\r\n },\r\n },\r\n '& .error-message': {\r\n color: '#a80000',\r\n },\r\n },\r\n\r\n '& .landscape-chart': {\r\n marginLeft: '15px',\r\n marginRight: '15px',\r\n display: 'grid',\r\n\r\n '& .column-chart-title': {\r\n paddingTop: '4px',\r\n paddingBottom: '4px',\r\n display: 'grid',\r\n },\r\n },\r\n },\r\n },\r\n\r\n '& .more-suggestion': {\r\n marginBottom: '10px',\r\n },\r\n },\r\n },\r\n },\r\n '#delivery-status-popup-callout .popover-content': {\r\n padding: '15px',\r\n lineHeight: '16px',\r\n color: '#333333',\r\n '& .description-text.bold.margin-zero': {\r\n fontWeight: 'bold',\r\n lineHeight: '14px',\r\n marginBottom: '8px',\r\n },\r\n '& .description-text.margin-bottom-8': {\r\n marginBottom: '8px',\r\n },\r\n '& a.budget-center-view-link': {\r\n lineHeight: '20px',\r\n textDecoration: 'none',\r\n },\r\n },\r\n});\r\n","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n, itemViewModel) {pug_mixins[\"dynamicSearchAdPreviewTemplate\"] = pug_interp = function(item, i18n){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Cdiv class=\\\"dynamic-search-ad-preview-shared-template\\\"\\u003E\\u003Cdiv\\u003E\\u003Cspan class=\\\"previewTitleAdNoLink\\\"\\u003E\" + (pug.escape(null == (pug_interp = item.convertedTitle) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\\u003E\\u003Ca class=\\\"previewUrlAd\\\"\\u003E\" + (pug.escape(null == (pug_interp = item.convertedDisplayUrl) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"dynamic-search-ad-preview-text\\\"\\u003E\" + (pug.escape(null == (pug_interp = item.Text) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n};\npug_html = pug_html + \"\\u003Cdiv class=\\\"previewAd\\\"\\u003E\";\npug_mixins[\"dynamicSearchAdPreviewTemplate\"](itemViewModel, i18n);\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"itemViewModel\" in locals_for_with?locals_for_with.itemViewModel:typeof itemViewModel!==\"undefined\"?itemViewModel: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, itemViewModel, withContainer) {pug_mixins[\"responsiveAdPreviewTemplate\"] = pug_interp = function(item, i18n){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Cdiv class=\\\"responsive-ad-preview-shared-template\\\" style=\\\"display: flex;\\\"\\u003E\";\nif (!item.isVideo && !item.LandscapeImageMediaUrl && !item.isMultimediaAd && (!item.isMultimediaAdinMSANEnabled || !item.LandscapeImageMediaUrl)) {\npug_html = pug_html + \"\\u003Cp\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('AdType_ResponsiveAd')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fp\\u003E\";\n}\nelse {\nif (item.isVideo) {\nif (item.LandscapeImageMediaUrl) {\npug_html = pug_html + \"\\u003Cdiv style=\\\"display: inline-block;float: left;\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\nif (item.isVerticalVideo) {\npug_html = pug_html + \"\\u003Cimg\" + (\" class=\\\"verticalVideoThumbnail\\\"\"+pug.attr(\"src\", item.LandscapeImageMediaUrl, true, true)+\" align=\\\"left\\\" alt=\\\"\\\" width=\\\"34\\\" height=\\\"60\\\"\"+pug.attr(\"data-video-id\", item.IdString, true, true)) + \"\\u003E\\u003Cspan class=\\\"glyphicon glyphicon-play\\\" style=\\\"position: relative; left: -34px; top: 20px;width: 0px; font-size: 18px;display: inline-block;color: white\\\"\\u003E\\u003C\\u002Fspan\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cimg\" + (pug.attr(\"src\", item.LandscapeImageMediaUrl, true, true)+\" align=\\\"left\\\" alt=\\\"\\\" width=\\\"114\\\" height=\\\"60\\\"\"+pug.attr(\"data-video-id\", item.IdString, true, true)) + \"\\u003E\\u003Cspan class=\\\"glyphicon glyphicon-play\\\" style=\\\"position: relative; left: -70px; top: 20px;width: 0px; font-size: 24px;display: inline-block;color: white\\\"\\u003E\\u003C\\u002Fspan\\u003E\";\n}\n}\nelse\nif ((item.campaignSubType === 'BrandAwarenessVideoAds' && !item.shouldShowActionNeededForGoogleImprotVideoAd)) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"video-preview-div\\\" style=\\\"float: left;width: 114px;height: 60px;margin-right: 10px;display: flex;align-items: center; border-radius: 6px; justify-content: center; background: #F3F2F1; border: 1px solid;\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Video_Preview_Processing')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cdiv class=\\\"video-preview-div\\\" style=\\\"float: left;width: 114px;height: 60px;margin-right: 10px;display: flex;align-items: center;\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Video_Preview_Unavailable')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\n}\n}\nelse\nif (!item.isPlaceholderMMA) {\npug_html = pug_html + \"\\u003Cdiv style=\\\"display: flex; flex-direction: column;\\\"\\u003E\\u003Cimg\" + (pug.attr(\"src\", item.LandscapeImageMediaUrl, true, true)+\" align=\\\"left\\\" alt=\\\"\\\"\") + \"\\u003E\";\nif ((item.imageCount && item.imageCount > 1)) {\npug_html = pug_html + \"\\u003Cspan class=\\\"moreHint\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('RSA_Count_More').replace('{{count}}', item.imageCount - 1)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003Cdiv style=\\\"flex: 1; display: flex;flex-direction: column;\\\"\\u003E\";\nif (!item.isPlaceholderMMA) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"previewTitle\\\"\\u003E\\u003Ca\" + (\" class=\\\"previewTitleAd\\\"\"+\" target=\\\"_blank\\\"\"+pug.attr(\"href\", item.convertedFinalUrl, true, true)+\" onclick=\\\"event.stopPropagation();\\\"\") + \"\\u003E\" + (pug.escape(null == (pug_interp = item.Headline) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\";\nif ((item.HeadlineCount && item.HeadlineCount > 1)) {\npug_html = pug_html + \"\\u003Cspan class=\\\"moreHint\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('RSA_Count_More').replace('{{count}}', item.HeadlineCount - 1)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv\\u003E\\u003Ca class=\\\"previewUrlAd\\\"\\u003E\" + (pug.escape(null == (pug_interp = item.convertedDisplayUrl) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"previewText\\\"\\u003E\\u003Cspan class=\\\"previewTextAd\\\"\\u003E\" + (pug.escape(null == (pug_interp = item.Text) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\nif ((item.TextCount && item.TextCount > 1)) {\npug_html = pug_html + \"\\u003Cspan class=\\\"moreHint\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('RSA_Count_More').replace('{{count}}', item.TextCount - 1)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cspan class=\\\"previewTextAd\\\"\\u003E\" + (pug.escape(null == (pug_interp = item.Headline) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\n};\nif (withContainer) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"previewAd\\\"\\u003E\";\npug_mixins[\"responsiveAdPreviewTemplate\"](itemViewModel, i18n);\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_mixins[\"responsiveAdPreviewTemplate\"](itemViewModel, i18n);\n}}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"itemViewModel\" in locals_for_with?locals_for_with.itemViewModel:typeof itemViewModel!==\"undefined\"?itemViewModel:undefined,\"withContainer\" in locals_for_with?locals_for_with.withContainer:typeof withContainer!==\"undefined\"?withContainer:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n) {pug_mixins[\"popupHelp\"] = pug_interp = function(popupId, ariaLabelContext, arialLabelText){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Ca\" + (\" class=\\\"helpbutton\\\"\"+\" type=\\\"helppopup\\\"\"+pug.attr(\"topic\", popupId, true, true)+pug.attr(\"data-help\", true, true, true)+\" onclick=\\\"PopupController.PopupJsClick(this)\\\" href=\\\"javascript:void(0);\\\"\"+pug.attr(\"aria-label\", (arialLabelText || 'Learn more') + ' ' + (ariaLabelContext || ''), true, true)) + \"\\u003E\\u003C\\u002Fa\\u003E\";\n};\npug_html = pug_html + \"\\u003Cdiv class=\\\"keyword-editor\\\" role=\\\"dialog\\\"\\u003E\\u003Cspan class=\\\"keywordEditor-syntax\\\" data-property=\\\"syntax\\\" data-bind=\\\"text: syntax.label\\\"\\u003E\\u003C\\u002Fspan\\u003E\";\npug_mixins[\"popupHelp\"]('pop_BA_NewAdCreate_KWInsert_Syntax', '', i18n.getString('KeywordEditor_Syntax_Tooltip'));\npug_html = pug_html + \"\\u003Chr\\u003E\\u003Cform class=\\\"form-horizontal form-grid\\\"\\u003E\\u003Cdiv class=\\\"flexible-grid-row-1 control-label\\\"\\u003E\\u003Clabel data-property=\\\"defaultText\\\" data-bind=\\\"text: defaultText.label\\\"\\u003E\\u003C\\u002Flabel\\u003E\";\npug_mixins[\"popupHelp\"]('pop_BA_NewAdCreate_KWInsert_DefaultText', '', i18n.getString('KeywordEditor_DefaultText_Tooltip'));\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-input-container flexible-grid-row-1 form-default-text\\\" data-property=\\\"defaultText\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-validation-container flexible-grid-row-2 form-validation\\\" data-property=\\\"defaultText\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"flexible-grid-row-3 control-label\\\"\\u003E\\u003Clabel data-property=\\\"keywordCase\\\" data-bind=\\\"text: keywordCase.label\\\"\\u003E\\u003C\\u002Flabel\\u003E\";\npug_mixins[\"popupHelp\"]('pop_BA_NewAdCreate_KWInsert_Case', '', i18n.getString('KeywordEditor_Case_Tooltip'));\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-input-container flexible-grid-row-3 form-keyword-case\\\" data-property=\\\"keywordCase\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-input-container flexible-grid-row-4 form-buttons\\\" data-property=\\\"$buttons\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fform\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n) {pug_html = pug_html + \"\\u003Cdiv class=\\\"audience-adgroup-creation-wizard-container\\\"\\u003E\\u003Ch1\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Adgroup_Wizard_Description')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fh1\\u003E\\u003Cdiv class=\\\"audience-adgroup-creation-wizard\\\"\\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 (_TL_, collapseId, i18n, itemClassSelect, optTgtTgBtn) {pug_mixins[\"popupHelp\"] = pug_interp = function(popupId, ariaLabelContext, arialLabelText){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Ca\" + (\" class=\\\"helpbutton\\\"\"+\" type=\\\"helppopup\\\" style=\\\"z-index: 1\\\"\"+pug.attr(\"topic\", popupId, true, true)+pug.attr(\"data-help\", true, true, true)+\" onclick=\\\"PopupController.PopupJsClick(this)\\\" href=\\\"javascript:void(0);\\\"\"+pug.attr(\"aria-label\", (arialLabelText || 'Learn more') + ' ' + (ariaLabelContext || ''), true, true)) + \"\\u003E\\u003C\\u002Fa\\u003E\";\n};\npug_html = pug_html + \"\\u003Cdiv class=\\\"optimized-toggle-container\\\"\\u003E\\u003Cbutton\" + (\" class=\\\"btn btn-primary expand-btn\\\"\"+\" type=\\\"button\\\"\"+pug.attr(\"id\", optTgtTgBtn, true, true)+\" role=\\\"button\\\" data-toggle=\\\"collapse\\\"\"+pug.attr(\"data-target\", '#'+collapseId+'-toggle', true, true)+\" aria-expanded=\\\"true\\\"\"+pug.attr(\"aria-controls\", collapseId+'-toggle', true, true)) + \"\\u003E\\u003Cdiv class=\\\"target-header selection-item-button\\\"\\u003E\\u003Cp class=\\\"target-selection-title\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('OptimizedTargeting_Expand_SettingTitle')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fp\\u003E\";\npug_mixins[\"popupHelp\"]('pop_BA_PredictiveTargeting_OptimizedDisabled', i18n.getString(_TL_('Predictive targeting')), i18n);\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fbutton\\u003E\\u003Cdiv\" + (\" class=\\\"collapse in collapse-container\\\"\"+pug.attr(\"id\", collapseId+'-toggle', true, true)+\" aria-expanded=\\\"true\\\"\") + \"\\u003E\\u003Cdiv\" + (\" class=\\\"item-container\\\"\"+pug.attr(\"id\", itemClassSelect+'-toggle', true, true)) + \"\\u003E\\u003Cdiv class=\\\"optimized-toggle\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"_TL_\" in locals_for_with?locals_for_with._TL_:typeof _TL_!==\"undefined\"?_TL_:undefined,\"collapseId\" in locals_for_with?locals_for_with.collapseId:typeof collapseId!==\"undefined\"?collapseId:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"itemClassSelect\" in locals_for_with?locals_for_with.itemClassSelect:typeof itemClassSelect!==\"undefined\"?itemClassSelect:undefined,\"optTgtTgBtn\" in locals_for_with?locals_for_with.optTgtTgBtn:typeof optTgtTgBtn!==\"undefined\"?optTgtTgBtn:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n, isNewUI, isShowDisclaimerBannerEnabled) {pug_html = pug_html + \"\\u003Cdiv class=\\\"audience-adgroup-settings-wizard-container\\\"\\u003E\";\nif (!isNewUI) {\npug_html = pug_html + \"\\u003Ch3\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Ad_Group_Settings_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fh3\\u003E\\u003Chr\\u003E\";\n}\npug_html = pug_html + \"\\u003Cdiv class=\\\"audience-adgroup-settings-container row\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Ch3\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Ad_Group_Targets_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fh3\\u003E\\u003Chr\\u003E\\u003Cdiv class=\\\"target-setting-and-estimate-container\\\"\\u003E\\u003Cdiv class=\\\"audience-adgroup-targets-container col-sm-8\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"audience-reach-estimate-container col-sm-3\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"errors-container row\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\nif (isShowDisclaimerBannerEnabled) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"alert alert-info form-group page-alert\\\"\\u003E\\u003Cdiv class=\\\"alert-image\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"alert-info-inline\\\"\\u003E\" + (null == (pug_interp = i18n.getString('Targeting_Disclaimer')) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003Cdiv class=\\\"action-buttons-container row\\\"\\u003E\\u003Cbutton class=\\\"btn btn-primary save-button\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Save_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fbutton\\u003E\\u003Cbutton class=\\\"btn btn-default cancel-button\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Cancel_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fbutton\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"isNewUI\" in locals_for_with?locals_for_with.isNewUI:typeof isNewUI!==\"undefined\"?isNewUI:undefined,\"isShowDisclaimerBannerEnabled\" in locals_for_with?locals_for_with.isShowDisclaimerBannerEnabled:typeof isShowDisclaimerBannerEnabled!==\"undefined\"?isShowDisclaimerBannerEnabled:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n) {pug_html = pug_html + \"\\u003Cdiv class=\\\"audience-advanced-target-settings\\\"\\u003E\\u003Ca class=\\\"toggle-edit-target-category\\\" href=\\\"javascript:void(0)\\\" role=\\\"button\\\" data-bind=\\\"attr: {"aria-expanded": isEditTargetCategoriesExpanded() ? "true" : "false"}\\\"\\u003E\\u003Cspan class=\\\"glyphicon glyphicon-pencil\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cspan\\u003E\\u003Cu\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Edit_Target_Categories')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fu\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"audience-target-selector-container\\\" style=\\\"display: none\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"audience-target-settings-container\\\"\\u003E\\u003Cdiv class=\\\"location-target-setting-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"age-target-setting-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"gender-target-setting-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"device-target-setting-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"audience-target-setting-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"companyName-target-setting-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"industry-target-setting-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"jobFunction-target-setting-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"placement-target-setting-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n, options) {pug_html = pug_html + \"\\u003Cdiv class=\\\"bmc_redirect_page\\\"\\u003E\\u003Ch1 class=\\\"bmc_redirect_header\\\"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('ShoppingCampaign_Header_Title')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fh1\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('ShoppingCampaign_NoBMCAccount_Message')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = ' ') ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Ca class=\\\"bmc_url_link\\\"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('ShoppingCampaign_BmcURL_Text')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fa\\u003E\";\nif (options.isEnabledForDynamicFeedCampaign) {\npug_html = pug_html + \"\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = ' or ') ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Ca class=\\\"feed_url_link\\\"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('AudienceShoppingCampaign_UploadFeed_Text')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fa\\u003E\";\n}\npug_html = pug_html + \"\\u003Cdiv class=\\\"bmc_save_bar\\\"\\u003E\\u003Cinput\" + (\" class=\\\"btn-cancel btn btn-default\\\"\"+\" type=\\\"button\\\"\"+pug.attr(\"value\", i18n.getString('Audience_Campaign_Cancel_Label'), true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"options\" in locals_for_with?locals_for_with.options:typeof options!==\"undefined\"?options: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=\\\"audience-campaign-creation-wizard-container\\\"\\u003E\\u003Cdiv class=\\\"audience-campaign-creation-wizard\\\"\\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 (Object, descriptionKey, i18n, selections) {\n\n\n\npug_html = pug_html + \"\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Cdiv class=\\\"target-intent-header\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString(descriptionKey)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Ca class=\\\"select-all-button\\\" href=\\\"javascript:void(0);\\\" type=\\\"button\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Target_Setting_Deselect_All_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\";\nvar n=0\nvar keys=Object.keys(selections)\nwhile (n < keys.length) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"row\\\"\\u003E\\u003Cdiv class=\\\"col-sm-3\\\"\\u003E\";\nvar item = selections[keys[n]]\npug_html = pug_html + \"\\u003Clabel class=\\\"checkbox-inline\\\"\\u003E\\u003Cinput\" + (\" type=\\\"checkbox\\\"\"+pug.attr(\"id\", item.id, true, true)+pug.attr(\"checked\", item.isSelected, true, true)) + \"\\u003E\\u003Cdiv\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString(item.labelKey)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\";\nif (++n < keys.length) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"col-sm-6\\\"\\u003E\";\nitem = selections[keys[n++]]\npug_html = pug_html + \"\\u003Clabel class=\\\"checkbox-inline\\\"\\u003E\\u003Cinput\" + (\" type=\\\"checkbox\\\"\"+pug.attr(\"id\", item.id, true, true)+pug.attr(\"checked\", item.isSelected, true, true)) + \"\\u003E\\u003Cdiv\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString(item.labelKey)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003Cdiv class=\\\"row errors-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"Object\" in locals_for_with?locals_for_with.Object:typeof Object!==\"undefined\"?Object:undefined,\"descriptionKey\" in locals_for_with?locals_for_with.descriptionKey:typeof descriptionKey!==\"undefined\"?descriptionKey:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"selections\" in locals_for_with?locals_for_with.selections:typeof selections!==\"undefined\"?selections: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 (helpKey, hideTitleLabel, i18n, isAudienceCampaign, isEditDisabled, showBidAdjustment, showBidOnlyNote, showLevelToggle, showTargetOrBid, showTargetSelection, target, titleKey, viewContext) {pug_mixins[\"popupHelp\"] = pug_interp = function(popupId, ariaLabelContext, arialLabelText){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Ca\" + (\" class=\\\"helpbutton\\\"\"+\" type=\\\"helppopup\\\" style=\\\"z-index: 1\\\"\"+pug.attr(\"topic\", popupId, true, true)+pug.attr(\"data-help\", true, true, true)+\" onclick=\\\"PopupController.PopupJsClick(this)\\\" href=\\\"javascript:void(0);\\\"\"+pug.attr(\"aria-label\", (arialLabelText || 'Learn more') + ' ' + (ariaLabelContext || ''), true, true)) + \"\\u003E\\u003C\\u002Fa\\u003E\";\n};\npug_mixins[\"adGroupOverrideInformation\"] = pug_interp = function(target){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Cdiv class=\\\"alert alert-info form-group adgroup-override-info\\\" role=\\\"alert\\\"\\u003E\\u003Cdiv class=\\\"alert-image\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"alert-info-inline\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Demographic_Targets_Override_Information_Line1', { target })) ? \"\" : pug_interp)) + \"\\u003Cbr\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Demographic_Targets_Override_Information_Line2', { target })) ? \"\" : pug_interp)) + \" \\u003Ca class=\\\"HelpTopic\\\" query=\\\"help:app54638\\\" href=\\\"javascript:void(0);\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Learn_more_link_text')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n};\npug_html = pug_html + \"\\u003Cdiv class=\\\"form-horizontal criterion-setting-container\\\"\\u003E\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Ch5\" + (pug.attr(\"class\", pug.classes([\"col-sm-2\",\"control-label\",hideTitleLabel ? 'hide' : 'show'], [false,false,true]), false, true)) + \"\\u003E\\u003Clabel\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString(titleKey)) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\";\npug_mixins[\"popupHelp\"](helpKey, i18n.getString(titleKey), i18n.getString('LearnMoreLinkText'));\npug_html = pug_html + \"\\u003C\\u002Fh5\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([hideTitleLabel ? 'col-sm-12' : 'col-sm-10'], [true]), false, true)) + \"\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"level-toggle-container\",showLevelToggle ? '' : 'hide'], [false,true]), false, true)) + \"\\u003E\\u003Cspan id=\\\"criterion-use-campaign-settings\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('LevelToggleLabel')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"level-toggle\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\";\nif (showBidOnlyNote && showBidAdjustment) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"bid-only-note-container\\\"\\u003E\" + (null == (pug_interp = i18n.getString('Audience_Campaign_Target_Setting_Bid_Only_Note')) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\";\n}\nif (!isAudienceCampaign && isAudienceCampaign !== undefined && viewContext.level === 'adgroup') {\npug_mixins[\"adGroupOverrideInformation\"](target);\n}\npug_html = pug_html + \"\\u003Cdiv class=\\\"target-edit-container\\\"\\u003E\";\nif (!isEditDisabled) {\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"edit-target-show-button-container\",showTargetSelection && showBidAdjustment ? '' : 'hide'], [false,true]), false, true)) + \"\\u003E\\u003Cspan class=\\\"no-target-exist-edit-label\\\"\\u003E\\u003Cu\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_No_Target_Selected_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fu\\u003E\\u003C\\u002Fspan\\u003E\\u003Ca class=\\\"edit-target-show-button\\\" href=\\\"javascript:void(0);\\\"\\u003E\\u003Cu\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Edit_Target_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fu\\u003E\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"target-selection-container\",showTargetSelection && !showBidAdjustment? '' : 'hide'], [false,true]), false, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cbutton class=\\\"btn done-editing-target-button hide\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Done_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fbutton\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"bid-adjustment-grids-container\",showBidAdjustment ? '' : 'hide'], [false,true]), false, true)) + \"\\u003E\\u003Cdiv class=\\\"current-level-bid-adjustment-grid\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"parent-level-bid-adjustment-grid hide\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"bid-or-target-and-bid-selector\",showTargetOrBid ? '' : 'hide'], [false,true]), false, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"helpKey\" in locals_for_with?locals_for_with.helpKey:typeof helpKey!==\"undefined\"?helpKey:undefined,\"hideTitleLabel\" in locals_for_with?locals_for_with.hideTitleLabel:typeof hideTitleLabel!==\"undefined\"?hideTitleLabel:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"isAudienceCampaign\" in locals_for_with?locals_for_with.isAudienceCampaign:typeof isAudienceCampaign!==\"undefined\"?isAudienceCampaign:undefined,\"isEditDisabled\" in locals_for_with?locals_for_with.isEditDisabled:typeof isEditDisabled!==\"undefined\"?isEditDisabled:undefined,\"showBidAdjustment\" in locals_for_with?locals_for_with.showBidAdjustment:typeof showBidAdjustment!==\"undefined\"?showBidAdjustment:undefined,\"showBidOnlyNote\" in locals_for_with?locals_for_with.showBidOnlyNote:typeof showBidOnlyNote!==\"undefined\"?showBidOnlyNote:undefined,\"showLevelToggle\" in locals_for_with?locals_for_with.showLevelToggle:typeof showLevelToggle!==\"undefined\"?showLevelToggle:undefined,\"showTargetOrBid\" in locals_for_with?locals_for_with.showTargetOrBid:typeof showTargetOrBid!==\"undefined\"?showTargetOrBid:undefined,\"showTargetSelection\" in locals_for_with?locals_for_with.showTargetSelection:typeof showTargetSelection!==\"undefined\"?showTargetSelection:undefined,\"target\" in locals_for_with?locals_for_with.target:typeof target!==\"undefined\"?target:undefined,\"titleKey\" in locals_for_with?locals_for_with.titleKey:typeof titleKey!==\"undefined\"?titleKey:undefined,\"viewContext\" in locals_for_with?locals_for_with.viewContext:typeof viewContext!==\"undefined\"?viewContext:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Cdiv class=\\\"audience-association-view-container\\\"\\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;pug_html = pug_html + \"\\u003Cdiv class=\\\"location-setting-controller\\\"\\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, isVisible, items, showExclusion) {pug_mixins[\"companyItemTemplate\"] = pug_interp = function(item){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Cdiv class=\\\"pull-left\\\"\\u003E\\u003Cimg\" + (pug.attr(\"src\", item.logoUrl || 'https://static.licdn.com/sc/h/2274wx7bapao7ytcvp1wdxxvu', true, true)+pug.attr(\"alt\", item.name, true, true)+\" width=\\\"50px\\\" height=\\\"50px\\\"\") + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"company-name\\\"\\u003E\\u003Cdiv class=\\\"company-item-name\\\"\\u003E\" + (pug.escape(null == (pug_interp = item.name) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\nvar text = '';\nif(item.industry)\ntext = item.industry + '; ';\nif(item.size)\ntext += item.size + ' ' + i18n.getString('Audience_Campaign_Target_Setting_Company_Employee_Count');\npug_html = pug_html + \"\\u003Cdiv class=\\\"company-item-industry\\\"\\u003E\" + (pug.escape(null == (pug_interp = text) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n};\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"company-search-container\",isVisible ? 'show' : 'hide'], [false,true]), false, true)) + \"\\u003E\\u003Cdiv class=\\\"company-search-table\\\"\\u003E\";\n// iterate items\n;(function(){\n var $$obj = items;\n if ('number' == typeof $$obj.length) {\n for (var pug_index0 = 0, $$l = $$obj.length; pug_index0 < $$l; pug_index0++) {\n var item = $$obj[pug_index0];\npug_html = pug_html + \"\\u003Cdiv class=\\\"company-item-template\\\"\\u003E\";\nif (item.isIncluded) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"pull-right action-container\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Target_Setting_Included_Status')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\n}\nelse\nif (item.isExcluded) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"pull-right action-container\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Target_Setting_Excluded_Status')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cdiv class=\\\"pull-right action-container\\\"\\u003E\\u003Ca\" + (\" class=\\\"company-search-include-link\\\"\"+\" href=\\\"javascript:void(0)\\\"\"+pug.attr(\"data-id\", item.id, true, true)+pug.attr(\"data-name\", item.name, true, true)+\" role=\\\"button\\\"\") + \"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Target_Setting_Include_Action')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\";\nif (showExclusion) {\npug_html = pug_html + \"\\u003Cspan class=\\\"company-search-separator\\\"\\u003E|\\u003C\\u002Fspan\\u003E\\u003Ca\" + (\" class=\\\"company-search-exclude-link\\\"\"+\" href=\\\"javascript:void(0)\\\"\"+pug.attr(\"data-id\", item.id, true, true)+pug.attr(\"data-name\", item.name, true, true)+\" role=\\\"button\\\"\") + \"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Target_Setting_Exclude_Action')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\n}\npug_mixins[\"companyItemTemplate\"](item);\npug_html = pug_html + \"\\u003Cdiv class=\\\"clearfix\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n }\n } else {\n var $$l = 0;\n for (var pug_index0 in $$obj) {\n $$l++;\n var item = $$obj[pug_index0];\npug_html = pug_html + \"\\u003Cdiv class=\\\"company-item-template\\\"\\u003E\";\nif (item.isIncluded) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"pull-right action-container\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Target_Setting_Included_Status')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\n}\nelse\nif (item.isExcluded) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"pull-right action-container\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Target_Setting_Excluded_Status')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cdiv class=\\\"pull-right action-container\\\"\\u003E\\u003Ca\" + (\" class=\\\"company-search-include-link\\\"\"+\" href=\\\"javascript:void(0)\\\"\"+pug.attr(\"data-id\", item.id, true, true)+pug.attr(\"data-name\", item.name, true, true)+\" role=\\\"button\\\"\") + \"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Target_Setting_Include_Action')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\";\nif (showExclusion) {\npug_html = pug_html + \"\\u003Cspan class=\\\"company-search-separator\\\"\\u003E|\\u003C\\u002Fspan\\u003E\\u003Ca\" + (\" class=\\\"company-search-exclude-link\\\"\"+\" href=\\\"javascript:void(0)\\\"\"+pug.attr(\"data-id\", item.id, true, true)+pug.attr(\"data-name\", item.name, true, true)+\" role=\\\"button\\\"\") + \"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Target_Setting_Exclude_Action')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\n}\npug_mixins[\"companyItemTemplate\"](item);\npug_html = pug_html + \"\\u003Cdiv class=\\\"clearfix\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n }\n }\n}).call(this);\n\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\nif (items.length < 1) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"empty-result-message\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Target_Setting_Company_Search_No_Result')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"isVisible\" in locals_for_with?locals_for_with.isVisible:typeof isVisible!==\"undefined\"?isVisible:undefined,\"items\" in locals_for_with?locals_for_with.items:typeof items!==\"undefined\"?items:undefined,\"showExclusion\" in locals_for_with?locals_for_with.showExclusion:typeof showExclusion!==\"undefined\"?showExclusion: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=\\\"search-result-view-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"clearfix\\\"\\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, isVisible, items, showExclusion) {pug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"job-function-search-container\",isVisible ? 'show' : 'hide'], [false,true]), false, true)) + \"\\u003E\\u003Cdiv class=\\\"job-function-search-table\\\" role=\\\"listbox\\\"\\u003E\";\n// iterate items\n;(function(){\n var $$obj = items;\n if ('number' == typeof $$obj.length) {\n for (var index = 0, $$l = $$obj.length; index < $$l; index++) {\n var item = $$obj[index];\npug_html = pug_html + \"\\u003Cdiv\" + (\" class=\\\"job-function-item-template\\\"\"+\" role=\\\"option\\\"\"+pug.attr(\"tabindex\", index === 0 ? '0' : '-1', true, true)) + \"\\u003E\\u003Cdiv class=\\\"pull-left job-function-item-name\\\"\\u003E\" + (null == (pug_interp = item.name.replace(item.caseMatchedSearchTerm, '' + item.caseMatchedSearchTerm + '')) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\";\nif (item.isIncluded) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"pull-right\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Target_Setting_Included_Status')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\n}\nelse\nif (item.isExcluded) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"pull-right\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Target_Setting_Excluded_Status')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cdiv class=\\\"pull-right\\\"\\u003E\\u003Ca\" + (\" class=\\\"job-function-search-include-link\\\"\"+\" href=\\\"javascript:void(0)\\\"\"+pug.attr(\"data-id\", item.id, true, true)+pug.attr(\"data-name\", item.name, true, true)+\" role=\\\"button\\\" tabindex=\\\"-1\\\"\") + \"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Target_Setting_Include_Action')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\";\nif (showExclusion) {\npug_html = pug_html + \"\\u003Cspan class=\\\"job-function-search-separator\\\"\\u003E|\\u003C\\u002Fspan\\u003E\\u003Ca\" + (\" class=\\\"job-function-search-exclude-link\\\"\"+\" href=\\\"javascript:void(0)\\\"\"+pug.attr(\"data-id\", item.id, true, true)+pug.attr(\"data-name\", item.name, true, true)+\" role=\\\"button\\\" tabindex=\\\"-1\\\"\") + \"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Target_Setting_Exclude_Action')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003Cdiv class=\\\"clearfix\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n }\n } else {\n var $$l = 0;\n for (var index in $$obj) {\n $$l++;\n var item = $$obj[index];\npug_html = pug_html + \"\\u003Cdiv\" + (\" class=\\\"job-function-item-template\\\"\"+\" role=\\\"option\\\"\"+pug.attr(\"tabindex\", index === 0 ? '0' : '-1', true, true)) + \"\\u003E\\u003Cdiv class=\\\"pull-left job-function-item-name\\\"\\u003E\" + (null == (pug_interp = item.name.replace(item.caseMatchedSearchTerm, '' + item.caseMatchedSearchTerm + '')) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\";\nif (item.isIncluded) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"pull-right\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Target_Setting_Included_Status')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\n}\nelse\nif (item.isExcluded) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"pull-right\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Target_Setting_Excluded_Status')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cdiv class=\\\"pull-right\\\"\\u003E\\u003Ca\" + (\" class=\\\"job-function-search-include-link\\\"\"+\" href=\\\"javascript:void(0)\\\"\"+pug.attr(\"data-id\", item.id, true, true)+pug.attr(\"data-name\", item.name, true, true)+\" role=\\\"button\\\" tabindex=\\\"-1\\\"\") + \"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Target_Setting_Include_Action')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\";\nif (showExclusion) {\npug_html = pug_html + \"\\u003Cspan class=\\\"job-function-search-separator\\\"\\u003E|\\u003C\\u002Fspan\\u003E\\u003Ca\" + (\" class=\\\"job-function-search-exclude-link\\\"\"+\" href=\\\"javascript:void(0)\\\"\"+pug.attr(\"data-id\", item.id, true, true)+pug.attr(\"data-name\", item.name, true, true)+\" role=\\\"button\\\" tabindex=\\\"-1\\\"\") + \"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Target_Setting_Exclude_Action')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003Cdiv class=\\\"clearfix\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n }\n }\n}).call(this);\n\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\nif (items.length < 1) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"empty-result-message\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Target_Setting_Job_Function_Search_No_Result')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"isVisible\" in locals_for_with?locals_for_with.isVisible:typeof isVisible!==\"undefined\"?isVisible:undefined,\"items\" in locals_for_with?locals_for_with.items:typeof items!==\"undefined\"?items:undefined,\"showExclusion\" in locals_for_with?locals_for_with.showExclusion:typeof showExclusion!==\"undefined\"?showExclusion: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 (nextPageText, pageNumberLabelText, previousPageText, totalPageCountText) {pug_html = pug_html + \"\\u003Cform class=\\\"form-inline pagination-control\\\"\\u003E\\u003Cdiv class=\\\"pager\\\" data-bind=\\\"visible: pageCount() > 1\\\"\\u003E\\u003Cbutton\" + (\" class=\\\"btn btn-default btn-flat nav-button prev\\\"\"+\" data-bind=\\\"click: decPageNumber, enable: pageNumber() > 0\\\" type=\\\"button\\\"\"+pug.attr(\"aria-label\", previousPageText, true, true)) + \"\\u003E\\u003Cdiv class=\\\"glyphicon glyphicon-triangle-left\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fbutton\\u003E\\u003Cdiv class=\\\"text\\\"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = pageNumberLabelText) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cinput\" + (\" class=\\\"form-control page-number-input\\\"\"+\" data-bind=\\\"value: pageNumberText, attr: { size: pageNumberSize, maxlength: pageNumberSize, disabled: !enableRandomPage() }\\\" type=\\\"text\\\"\"+pug.attr(\"aria-label\", pageNumberLabelText, true, true)) + \"\\u003E\\u003Cdiv class=\\\"text\\\"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = totalPageCountText) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan\\u003E \\u003C\\u002Fspan\\u003E\\u003Cspan data-bind=\\\"text: pageCount\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cbutton\" + (\" class=\\\"btn btn-default btn-flat nav-button next\\\"\"+\" data-bind=\\\"click: incPageNumber, enable: pageNumber() < pageCount() - 1\\\" type=\\\"button\\\"\"+pug.attr(\"aria-label\", nextPageText, true, true)) + \"\\u003E\\u003Cdiv class=\\\"glyphicon glyphicon-triangle-right\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fbutton\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fform\\u003E\";}.call(this,\"nextPageText\" in locals_for_with?locals_for_with.nextPageText:typeof nextPageText!==\"undefined\"?nextPageText:undefined,\"pageNumberLabelText\" in locals_for_with?locals_for_with.pageNumberLabelText:typeof pageNumberLabelText!==\"undefined\"?pageNumberLabelText:undefined,\"previousPageText\" in locals_for_with?locals_for_with.previousPageText:typeof previousPageText!==\"undefined\"?previousPageText:undefined,\"totalPageCountText\" in locals_for_with?locals_for_with.totalPageCountText:typeof totalPageCountText!==\"undefined\"?totalPageCountText: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 (helpKey, i18n, isEditing, isEmpty, titleKey) {pug_mixins[\"popupHelp\"] = pug_interp = function(popupId, ariaLabelContext, arialLabelText){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Ca\" + (\" class=\\\"helpbutton\\\"\"+\" type=\\\"helppopup\\\" style=\\\"z-index: 1\\\"\"+pug.attr(\"topic\", popupId, true, true)+pug.attr(\"data-help\", true, true, true)+\" onclick=\\\"PopupController.PopupJsClick(this)\\\" href=\\\"javascript:void(0);\\\"\"+pug.attr(\"aria-label\", (arialLabelText || 'Learn more') + ' ' + (ariaLabelContext || ''), true, true)) + \"\\u003E\\u003C\\u002Fa\\u003E\";\n};\npug_html = pug_html + \"\\u003Cdiv class=\\\"form-horizontal criterion-setting-container\\\"\\u003E\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Ch5 class=\\\"col-sm-2 control-label show\\\"\\u003E\\u003Clabel\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString(titleKey)) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\";\npug_mixins[\"popupHelp\"](helpKey, i18n.getString(titleKey), i18n.getString('LearnMoreLinkText'));\npug_html = pug_html + \"\\u003C\\u002Fh5\\u003E\\u003Cdiv class=\\\"col-sm-10\\\"\\u003E\\u003Cdiv class=\\\"target-edit-container\\\"\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"edit-target-show-button-container\",isEditing ? 'hide' : ''], [false,true]), false, true)) + \"\\u003E\\u003Cspan\" + (pug.attr(\"class\", pug.classes([\"no-target-exist-edit-label\",isEmpty ? '' : 'hide'], [false,true]), false, true)) + \"\\u003E\\u003Cu\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Microsoft_Advertising_Network')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fu\\u003E\\u003C\\u002Fspan\\u003E\\u003Ca class=\\\"edit-target-show-button\\\" href=\\\"javascript:void(0);\\\"\\u003E\\u003Cu\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Edit_Target_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fu\\u003E\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"target-selection-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"helpKey\" in locals_for_with?locals_for_with.helpKey:typeof helpKey!==\"undefined\"?helpKey:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"isEditing\" in locals_for_with?locals_for_with.isEditing:typeof isEditing!==\"undefined\"?isEditing:undefined,\"isEmpty\" in locals_for_with?locals_for_with.isEmpty:typeof isEmpty!==\"undefined\"?isEmpty:undefined,\"titleKey\" in locals_for_with?locals_for_with.titleKey:typeof titleKey!==\"undefined\"?titleKey: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=\\\"search-result-view-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"clearfix\\\"\\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) {pug_html = pug_html + \"\\u003Cspan\" + (\" class=\\\"closeimage linked-in-target-grid__remove-col clickable\\\"\"+\" tabindex=\\\"0\\\" role=\\\"button\\\"\"+pug.attr(\"aria-label\", i18n.getString('Remove'), true, true)) + \"\\u003E\\u003C\\u002Fspan\\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 (excludedString, includedString, isExcluded, isIncluded) {if ((isExcluded)) {\npug_html = pug_html + \"\\u003Cspan class=\\\"statusExcluded_icon\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"targeting-status\\\"\\u003E\" + (pug.escape(null == (pug_interp = excludedString) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\n}\nelse\nif ((isIncluded)) {\npug_html = pug_html + \"\\u003Cspan class=\\\"statusEnabled_icon\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"targeting-status\\\"\\u003E\" + (pug.escape(null == (pug_interp = includedString) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\n}}.call(this,\"excludedString\" in locals_for_with?locals_for_with.excludedString:typeof excludedString!==\"undefined\"?excludedString:undefined,\"includedString\" in locals_for_with?locals_for_with.includedString:typeof includedString!==\"undefined\"?includedString:undefined,\"isExcluded\" in locals_for_with?locals_for_with.isExcluded:typeof isExcluded!==\"undefined\"?isExcluded:undefined,\"isIncluded\" in locals_for_with?locals_for_with.isIncluded:typeof isIncluded!==\"undefined\"?isIncluded:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n, removeAllVisibleClass, targetType) {pug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"linked-in-target-grid-view\",\"hide\",targetType], [false,false,true]), false, true)) + \"\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"target-grid-remove-all-container\",removeAllVisibleClass], [false,true]), false, true)) + \"\\u003E\\u003Ca href=\\\"javascript:void(0)\\\" role=\\\"button\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Target_Setting_Company_Grid_Column_Remove_All')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"target-grid\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"removeAllVisibleClass\" in locals_for_with?locals_for_with.removeAllVisibleClass:typeof removeAllVisibleClass!==\"undefined\"?removeAllVisibleClass:undefined,\"targetType\" in locals_for_with?locals_for_with.targetType:typeof targetType!==\"undefined\"?targetType: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, i18nKeys, showBidOnlyNote) {pug_html = pug_html + \"\\u003Cdiv class=\\\"target-intent-header\\\"\\u003E\\u003Cdiv\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString(i18nKeys.descriptionKey + (showBidOnlyNote ? '_Bid_Only' : ''))) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\nif (showBidOnlyNote) {\npug_html = pug_html + \"\\u003Cdiv\\u003E\" + (null == (pug_interp = i18n.getString('Audience_Campaign_Target_Setting_Bid_Only_Note')) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"linked-in-target-search-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"linked-in-target-grid-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"linked-in-excluded-grid-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"i18nKeys\" in locals_for_with?locals_for_with.i18nKeys:typeof i18nKeys!==\"undefined\"?i18nKeys:undefined,\"showBidOnlyNote\" in locals_for_with?locals_for_with.showBidOnlyNote:typeof showBidOnlyNote!==\"undefined\"?showBidOnlyNote: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=\\\"searchbox-container\\\"\\u003E\\u003Cdiv class=\\\"search-result-view-container\\\"\\u003E\\u003Cdiv class=\\\"search-result live-region sr-only\\\" role=\\\"status\\\" aria-live=\\\"polite\\\" aria-atomic\\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 (Name, availableOptions, i18n, percentage, readonly, selectedOption, size) {pug_html = pug_html + \"\\u003Cdiv class=\\\"form-inline\\\"\\u003E\\u003Cselect\" + (\" class=\\\"form-control\\\"\"+pug.attr(\"disabled\", readonly, true, true)+pug.attr(\"aria-label\", i18n.getString('BidAdjustment_Options'), true, true)) + \"\\u003E\";\n// iterate availableOptions\n;(function(){\n var $$obj = availableOptions;\n if ('number' == typeof $$obj.length) {\n for (var pug_index0 = 0, $$l = $$obj.length; pug_index0 < $$l; pug_index0++) {\n var item = $$obj[pug_index0];\npug_html = pug_html + \"\\u003Coption\" + (pug.attr(\"value\", item.text, true, true)+pug.attr(\"selected\", item.key === selectedOption, true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = item.text) ? \"\" : pug_interp)) + \"\\u003C\\u002Foption\\u003E\";\n }\n } else {\n var $$l = 0;\n for (var pug_index0 in $$obj) {\n $$l++;\n var item = $$obj[pug_index0];\npug_html = pug_html + \"\\u003Coption\" + (pug.attr(\"value\", item.text, true, true)+pug.attr(\"selected\", item.key === selectedOption, true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = item.text) ? \"\" : pug_interp)) + \"\\u003C\\u002Foption\\u003E\";\n }\n }\n}).call(this);\n\npug_html = pug_html + \"\\u003C\\u002Fselect\\u003E\\u003Cinput\" + (\" class=\\\"inline-input form-control bid-adj-col\\\"\"+pug.attr(\"id\", Name, true, true)+\" type=\\\"text\\\"\"+pug.attr(\"aria-label\", i18n.getString('BidAdjustment_BidMultiplier'), true, true)+pug.attr(\"size\", size, true, true)+pug.attr(\"maxlength\", size, true, true)+pug.attr(\"value\", percentage, true, true)+pug.attr(\"disabled\", readonly, true, true)) + \"\\u003E\\u003Cspan\\u003E%\\u003C\\u002Fspan\\u003E\\u003Cdiv class=\\\"error\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"Name\" in locals_for_with?locals_for_with.Name:typeof Name!==\"undefined\"?Name:undefined,\"availableOptions\" in locals_for_with?locals_for_with.availableOptions:typeof availableOptions!==\"undefined\"?availableOptions:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"percentage\" in locals_for_with?locals_for_with.percentage:typeof percentage!==\"undefined\"?percentage:undefined,\"readonly\" in locals_for_with?locals_for_with.readonly:typeof readonly!==\"undefined\"?readonly:undefined,\"selectedOption\" in locals_for_with?locals_for_with.selectedOption:typeof selectedOption!==\"undefined\"?selectedOption:undefined,\"size\" in locals_for_with?locals_for_with.size:typeof size!==\"undefined\"?size:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n, isLabelHidden) {pug_html = pug_html + \"\\u003Cdiv class=\\\"target-or-bid-selector-content\\\"\\u003E\\u003Clabel\" + (pug.attr(\"class\", pug.classes([\"control-label\",isLabelHidden ? 'hide' : ''], [false,true]), false, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Targeting_Setting')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003Cform\\u003E\\u003Clabel class=\\\"radio-inline\\\"\\u003E\\u003Cinput class=\\\"bid-only-radio-check\\\" type=\\\"radio\\\" name=\\\"bid-only-or-target\\\"\\u003E\\u003Cdiv\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Bid_Only')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Flabel\\u003E\\u003Cp\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Bid_Only_Description')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fp\\u003E\\u003Clabel class=\\\"radio-inline\\\"\\u003E\\u003Cinput class=\\\"target-and-bid-radio-check\\\" type=\\\"radio\\\" name=\\\"bid-only-or-target\\\"\\u003E\\u003Cdiv\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Target_And_Bid')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Flabel\\u003E\\u003Cp\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Audience_Campaign_Target_And_Bid_Description')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fp\\u003E\\u003C\\u002Fform\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"isLabelHidden\" in locals_for_with?locals_for_with.isLabelHidden:typeof isLabelHidden!==\"undefined\"?isLabelHidden:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (view) {pug_html = pug_html + \"\\u003Cselect\" + (\" class=\\\"form-control\\\"\"+\" data-bind=\\\"options: actions, optionsText: "Text", optionsValue: "Value", value: selectedAction\\\"\"+pug.attr(\"aria-label\", view.i18n.getString('RuleLabel_Action'), true, true)) + \"\\u003E\\u003C\\u002Fselect\\u003E\\u003Cselect\" + (\" class=\\\"form-control\\\"\"+\" data-bind=\\\"options: bidTypes, optionsText: "Text", optionsValue: "Value", value: selectedBidType\\\"\"+pug.attr(\"aria-label\", view.i18n.getString('RuleLabel_BidType'), true, true)) + \"\\u003E\\u003C\\u002Fselect\\u003E\\u003Cinput\" + (\" class=\\\"bulkEdit-bid form-control\\\"\"+\" type=\\\"text\\\" data-bind=\\\"value: bidValue, valueUpdate: "input", css: {"error": bidErrorMessage().length > 0}, attr: {"aria-invalid": bidErrorMessage().length > 0, "aria-describedby": bidErrorMessage().length > 0 ? "AutomationRulesBidErrorMessage" : ""}\\\" aria-required=\\\"true\\\"\"+pug.attr(\"aria-label\", view.i18n.getString('RuleLabel_BidValue'), true, true)) + \"\\u003E\\u003Cselect\" + (\" class=\\\"bulkEdit-units form-control\\\"\"+\" data-bind=\\\"options: units, optionsText: "Text", optionsValue: "Value", value: selectedUnit\\\"\"+pug.attr(\"aria-label\", view.i18n.getString('RuleLabel_Unit'), true, true)) + \"\\u003E\\u003C\\u002Fselect\\u003E\\u003Clabel class=\\\"checkbox-inline bulkEdit-limit-label\\\"\\u003E\\u003Cinput class=\\\"bulkEdit-limit\\\" type=\\\"checkbox\\\" data-bind=\\\"checked: useLimitValue\\\"\\u003E\\u003Cspan id=\\\"AdGroupLimitBidLabel\\\" data-bind=\\\"html: limitBidLabelText\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Flabel\\u003E\\u003Cinput class=\\\"bulkEdit-bid form-control\\\" type=\\\"text\\\" data-bind=\\\"value: limitValue, enable: useLimitValue, valueUpdate: "input", css: {"error": bidLimitErrorMessage().length > 0}, attr: {"aria-invalid": bidLimitErrorMessage().length > 0, "aria-describedby": bidLimitErrorMessage().length > 0 ? "AutomationRulesBidErrorMessage" : ""}\\\" aria-required=\\\"true\\\" aria-labelledby=\\\"AdGroupLimitBidLabel AdGroupLimitBidCurrencyLabel\\\"\\u003E\\u003Clabel class=\\\"bulk-edit-currency\\\" id=\\\"AdGroupLimitBidCurrencyLabel\\\" data-bind=\\\"text: accountCurrencyCode\\\"\\u003E\\u003C\\u002Flabel\\u003E\\u003Cdiv id=\\\"AutomationRulesBidErrorMessage\\\" role=\\\"alert\\\"\\u003E\\u003Cdiv class=\\\"error\\\" data-bind=\\\"html: bidErrorMessage() || bidLimitErrorMessage()\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"view\" in locals_for_with?locals_for_with.view:typeof view!==\"undefined\"?view:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (view) {pug_html = pug_html + \"\\u003Cselect\" + (\" class=\\\"form-control\\\"\"+\" data-bind=\\\"options: actions, optionsText: "Text", optionsValue: "Value", value: selectedAction\\\"\"+pug.attr(\"aria-label\", view.i18n.getString('RuleLabel_Action'), true, true)) + \"\\u003E\\u003C\\u002Fselect\\u003E\\u003Cspan class=\\\"form-text\\\"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('BulkEdit_Campaign_DailyBudget')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cinput\" + (\" class=\\\"bulkEdit-bid form-control\\\"\"+\" type=\\\"text\\\" data-bind=\\\"value: budgetValue, valueUpdate: "input", css: {"error": budgetErrorMessage().length > 0}, attr: {"aria-invalid": budgetErrorMessage().length > 0, "aria-describedby": budgetErrorMessage().length > 0 ? "AutomationRulesBudgetErrorMessage" : ""}\\\" aria-required=\\\"true\\\"\"+pug.attr(\"aria-label\", view.i18n.getString('RuleLabel_BidValue'), true, true)) + \"\\u003E\\u003Cselect\" + (\" class=\\\"bulkEdit-units form-control\\\"\"+\" data-bind=\\\"options: units, optionsText: "Text", optionsValue: "Value", value: selectedUnit\\\"\"+pug.attr(\"aria-label\", view.i18n.getString('RuleLabel_Unit'), true, true)) + \"\\u003E\\u003C\\u002Fselect\\u003E\\u003Clabel class=\\\"checkbox-inline bulkEdit-limit-label\\\"\\u003E\\u003Cinput class=\\\"bulkEdit-limit\\\" type=\\\"checkbox\\\" data-bind=\\\"checked: useLimitValue\\\"\\u003E\\u003Cspan id=\\\"CampaignLimitBudgetLabel\\\" data-bind=\\\"html: limitBudgetLabelText\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Flabel\\u003E\\u003Cinput class=\\\"bulkEdit-bid form-control\\\" type=\\\"text\\\" data-bind=\\\"value: limitValue, enable: useLimitValue, valueUpdate: "input", css: {"error": budgetLimitErrorMessage().length > 0}, attr: {"aria-invalid": budgetLimitErrorMessage().length > 0, "aria-describedby": budgetLimitErrorMessage().length > 0 ? "AutomationRulesBudgetErrorMessage" : ""}\\\" aria-required=\\\"true\\\" aria-labelledby=\\\"CampaignLimitBudgetLabel\\\"\\u003E\\u003Clabel class=\\\"bulk-edit-currency\\\" data-bind=\\\"text: accountCurrencyCode\\\"\\u003E\\u003C\\u002Flabel\\u003E\\u003Cdiv class=\\\"changeBudgetHelp\\\"\\u003E\\u003Clabel data-bind=\\\"visible: isIncreaseBudgetHelp\\\"\\u003E\\u003Ca\" + (\" class=\\\"helpbutton\\\"\"+\" topic=\\\"pop_BA_BulkEditBudgetIncrease\\\" type=\\\"helppopup\\\" onclick=\\\"PopupController.PopupJsClick(this)\\\" href=\\\"javascript:void(0);\\\" role=\\\"button\\\"\"+pug.attr(\"aria-label\", view.i18n.getString('Click to learn more about {{item}}', { item: view.i18n.getString('AutomatedRules_RuleAuthoring_IncreaseBudget') }), true, true)) + \"\\u003E\\u003C\\u002Fa\\u003E\\u003C\\u002Flabel\\u003E\\u003Clabel data-bind=\\\"visible: !isIncreaseBudgetHelp()\\\"\\u003E\\u003Ca\" + (\" class=\\\"helpbutton\\\"\"+\" topic=\\\"pop_BA_BulkEditBudgetDecrease\\\" type=\\\"helppopup\\\" onclick=\\\"PopupController.PopupJsClick(this)\\\" href=\\\"javascript:void(0);\\\" role=\\\"button\\\"\"+pug.attr(\"aria-label\", view.i18n.getString('Click to learn more about {{item}}', { item: view.i18n.getString('AutomatedRules_RuleAuthoring_DecreaseBudget') }), true, true)) + \"\\u003E\\u003C\\u002Fa\\u003E\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv id=\\\"AutomationRulesBudgetErrorMessage\\\" role=\\\"alert\\\"\\u003E\\u003Cdiv class=\\\"error\\\" data-bind=\\\"html: budgetErrorMessage() || budgetLimitErrorMessage()\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"view\" in locals_for_with?locals_for_with.view:typeof view!==\"undefined\"?view:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (view) {pug_html = pug_html + \"\\u003Cselect\" + (\" class=\\\"form-control\\\"\"+\" data-bind=\\\"visible: isChangeByBid, options: actions, optionsText: "Text", optionsValue: "Value", value: selectedAction\\\"\"+pug.attr(\"aria-label\", view.i18n.getString('RuleLabel_Action'), true, true)) + \"\\u003E\\u003C\\u002Fselect\\u003E\\u003Cinput\" + (\" class=\\\"bulkEdit-bid form-control\\\"\"+\" type=\\\"text\\\" data-bind=\\\"visible: isChangeByBid, value: bidValue, valueUpdate: "input", css: {"error": bidErrorMessage().length > 0}, attr: {"aria-invalid": bidErrorMessage().length > 0, "aria-describedby": bidErrorMessage().length > 0 ? "AutomationRulesBidErrorMessage" : ""}\\\" aria-required=\\\"true\\\"\"+pug.attr(\"aria-label\", view.i18n.getString('RuleLabel_BidValue'), true, true)) + \"\\u003E\\u003Cselect\" + (\" class=\\\"bulkEdit-units form-control\\\"\"+\" data-bind=\\\"visible: isChangeByBid, options: units, optionsText: "Text", optionsValue: "Value", value: selectedUnit\\\"\"+pug.attr(\"aria-label\", view.i18n.getString('RuleLabel_Unit'), true, true)) + \"\\u003E\\u003C\\u002Fselect\\u003E\\u003Clabel class=\\\"control-label\\\" data-bind=\\\"visible: !isChangeByBid, text: actionText, css: {"pull-left" : !isChangeByBid}\\\"\\u003E\\u003C\\u002Flabel\\u003E\\u003Clabel class=\\\"bulkEdit-limit-label checkbox-inline\\\" data-bind=\\\"css: {"pull-left" : !isChangeByBid}\\\"\\u003E\\u003Cinput class=\\\"bulkEdit-limit\\\" type=\\\"checkbox\\\" data-bind=\\\"checked: useLimitValue\\\"\\u003E\\u003Cspan id=\\\"KeywordLimitBidLabel\\\" data-bind=\\\"html: limitBidLabelText\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Flabel\\u003E\\u003Cinput class=\\\"bulkEdit-bid form-control\\\" type=\\\"text\\\" data-bind=\\\"value: limitValue, enable: useLimitValue, valueUpdate: "input", css: {"error": bidLimitErrorMessage().length > 0}, attr: {"aria-invalid": bidLimitErrorMessage().length > 0, "aria-describedby": bidLimitErrorMessage().length > 0 ? "AutomationRulesBidErrorMessage" : ""}\\\" aria-required=\\\"true\\\" aria-labelledby=\\\"KeywordLimitBidLabel\\\"\\u003E\\u003Clabel class=\\\"bulk-edit-currency\\\" data-bind=\\\"text: accountCurrencyCode\\\"\\u003E\\u003C\\u002Flabel\\u003E\\u003Cdiv id=\\\"AutomationRulesBidErrorMessage\\\" role=\\\"alert\\\"\\u003E\\u003Cdiv class=\\\"error\\\" data-bind=\\\"html: bidErrorMessage() || bidLimitErrorMessage()\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"view\" in locals_for_with?locals_for_with.view:typeof view!==\"undefined\"?view:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (view) {pug_mixins[\"formgroupline\"] = pug_interp = function(){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\nif ((view.isForVNext)) {\npug_html = pug_html + \"\\u003Chr class=\\\"formgroupline\\\"\\u003E\";\n}\n};\nvar colSm2 = view.isForVNext ? '' : 'col-sm-2'\nvar colSm10 = view.isForVNext ? '' : 'col-sm-10'\npug_html = pug_html + \"\\u003Cdiv class=\\\"frequency-selection\\\"\\u003E\\u003Cdiv class=\\\"form-group form-inline\\\"\\u003E\";\npug_mixins[\"formgroupline\"]();\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"control-label\",colSm2], [false,true]), false, true)) + \"\\u003E\\u003Clabel id=\\\"RuleAuthoring_Frequence_Label\\\"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('RuleAuthoring_Frequence')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003Ca\" + (\" class=\\\"helpbutton\\\"\"+\" topic=\\\"pop_BA_AutoRule_Frequency\\\" role=\\\"button\\\"\"+pug.attr(\"aria-label\", view.i18n.getString('Click to learn more about {{item}}', { item: view.i18n.getString('RuleAuthoring_Frequence')}), true, true)+\" type=\\\"helppopup\\\" onclick=\\\"PopupController.PopupJsClick(this)\\\" href=\\\"javascript:void(0);\\\"\") + \"\\u003E\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"rule-options-selection\",colSm10], [false,true]), false, true)+\" role=\\\"group\\\" aria-labelledby=\\\"RuleAuthoring_Frequence_Label\\\"\") + \"\\u003E\\u003Cselect\" + (\" class=\\\"form-control\\\"\"+\" data-bind=\\\"options: frequencyGrains, optionsText: "Text", optionsValue: "Value", value: selectedFrequencyGrain\\\"\"+pug.attr(\"aria-label\", view.i18n.getString('RuleLabel_Frequency'), true, true)) + \"\\u003E\\u003C\\u002Fselect\\u003E\\u003Cselect\" + (\" class=\\\"form-control\\\"\"+\" data-bind=\\\"options: weeklyOptions, optionsText: "Text", optionsValue: "Value", value: selectedWeekOption, visible: isWeekOption\\\"\"+pug.attr(\"aria-label\", view.i18n.getString('RuleLabel_FrequencyValue'), true, true)) + \"\\u003E\\u003C\\u002Fselect\\u003E\\u003Cselect\" + (\" class=\\\"form-control\\\"\"+\" data-bind=\\\"options: monthlyOptions, optionsText: "Text", optionsValue: "Value", value: selectedMonthOption, visible: isMonthOption\\\"\"+pug.attr(\"aria-label\", view.i18n.getString('RuleLabel_FrequencyValue'), true, true)) + \"\\u003E\\u003C\\u002Fselect\\u003E\\u003Cdiv class=\\\"form-control k-datePicker-container\\\" data-bind=\\\"visible: isOnceOption\\\"\\u003E\\u003Cdiv\" + (\" class=\\\"runOnceDateFilter\\\"\"+pug.attr(\"aria-label\", view.i18n.getString('RuleLabel_DatePicker'), true, true)+\" data-ref=\\\"date-picker\\\"\") + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cselect\" + (\" class=\\\"form-control\\\"\"+\" data-bind=\\\"visible: !isHourlyOption(), options: dailyOptions, optionsValue: "Value", value: selectedDailyOption, optionsText: function (item) { if ($root.isTwelveHourDisplayFormat() === "true") return item.twelveHourDisplay; else return item.twentyFourHourDisplay }\\\"\"+pug.attr(\"aria-label\", view.i18n.getString('RuleLabel_FrequencyValue'), true, true)) + \"\\u003E\\u003C\\u002Fselect\\u003E\\u003Cspan class=\\\"form-text\\\"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('RuleAuthoring_DataDateRange')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cselect\" + (\" class=\\\"form-control\\\"\"+\" data-bind=\\\"options: dataDateRangeOptions, optionsText: "Text", optionsValue: "Value", value: selectedDataDateRangeOption\\\"\"+pug.attr(\"aria-label\", view.i18n.getString('RuleLabel_DateRange'), true, true)) + \"\\u003E\\u003C\\u002Fselect\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group form-inline\\\"\\u003E\";\npug_mixins[\"formgroupline\"]();\nif (!view.isForVNext) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"col-sm-2\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([colSm10], [true]), false, true)+\" role=\\\"radiogroup\\\" aria-labelledby=\\\"ImprovedAdScheduling_Display_Time_Label\\\"\") + \"\\u003E\\u003Cspan class=\\\"form-text control-label pull-left\\\" id=\\\"ImprovedAdScheduling_Display_Time_Label\\\"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('ImprovedAdScheduling_Display_Time')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Clabel class=\\\"radio-inline\\\"\\u003E\\u003Cinput class=\\\"twelveHourOptionRadioButton\\\" type=\\\"radio\\\" value=\\\"true\\\" data-bind=\\\"checked: isTwelveHourDisplayFormat\\\"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('ImprovedAdScheduling_12_Hour_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Flabel\\u003E\\u003Clabel class=\\\"radio-inline\\\"\\u003E\\u003Cinput class=\\\"twentyFourOptionRadioButton\\\" type=\\\"radio\\\" value=\\\"false\\\" data-bind=\\\"checked: isTwelveHourDisplayFormat\\\"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('ImprovedAdScheduling_24_Hour_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group form-inline\\\"\\u003E\";\npug_mixins[\"formgroupline\"]();\nif (!view.isForVNext) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"col-sm-2\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"rule-options-selection\",colSm10], [false,true]), false, true)+\" role=\\\"group\\\" aria-labelledby=\\\"RuleAuthoring_TimeZone_Label\\\"\") + \"\\u003E\\u003Cspan\" + (pug.attr(\"class\", pug.classes([\"form-text\",view.isForVNext ? 'control-label' : ''], [false,true]), false, true)+\" id=\\\"RuleAuthoring_TimeZone_Label\\\"\") + \"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('RuleAuthoring_TimeZone')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\nif (view.isForVNext) {\npug_html = pug_html + \"\\u003Cdiv\\u003E\\u003Cselect class=\\\"automated-rules-timezone-selection form-control\\\" data-bind=\\\"options: timeZoneOptions, optionsText: "Text", optionsValue: "Value", value: selectedTimeZoneOption, attr: {"aria-invalid": frequencyErrorMessage().length > 0}\\\" aria-labelledby=\\\"RuleAuthoring_TimeZone_Label\\\" aria-describedby=\\\"AutomationRulesFrequencyErrorMessage\\\"\\u003E\\u003C\\u002Fselect\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cselect class=\\\"form-control\\\" data-bind=\\\"options: timeZoneOptions, optionsText: "Text", optionsValue: "Value", value: selectedTimeZoneOption, attr: {"aria-invalid": frequencyErrorMessage().length > 0}\\\" aria-labelledby=\\\"RuleAuthoring_TimeZone_Label\\\" aria-describedby=\\\"AutomationRulesFrequencyErrorMessage\\\"\\u003E\\u003C\\u002Fselect\\u003E\";\n}\npug_html = pug_html + \"\\u003Cdiv id=\\\"AutomationRulesFrequencyErrorMessage\\\" data-bind=\\\"attr: { role: frequencyErrorRole }\\\"\\u003E\\u003Cdiv class=\\\"error\\\" data-bind=\\\"html: frequencyErrorMessage\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"view\" in locals_for_with?locals_for_with.view:typeof view!==\"undefined\"?view:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (selectorControlClass, view) {pug_mixins[\"formgroupline\"] = pug_interp = function(){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\nif ((view.isForVNext)) {\npug_html = pug_html + \"\\u003Chr class=\\\"formgroupline\\\"\\u003E\";\n}\n};\nvar colSm2 = view.isForVNext ? '' : 'col-sm-2'\npug_html = pug_html + \"\\u003Cdiv class=\\\"automated-rules-vnext\\\"\\u003E\\u003Cdiv class=\\\"panel\\\"\\u003E\\u003Ch2 class=\\\"panel-heading\\\" aria-level=\\\"2\\\"\\u003E\\u003Cdiv class=\\\"panel-title\\\" data-bind=\\\"text: titleName\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fh2\\u003E\\u003Cdiv class=\\\"panel-body form-horizontal\\\"\\u003E\\u003Cdiv class=\\\"title-desc margin-zero\\\" data-bind=\\\"visible: !isEditRule, html: titleDescription\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group\\\"\\u003E\";\npug_mixins[\"formgroupline\"]();\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"control-label\",colSm2], [false,true]), false, true)) + \"\\u003E\\u003Clabel id=\\\"RuleAuthoring_Scope_Label\\\"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('RuleAuthoring_Scope')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003Ca\" + (\" class=\\\"helpbutton\\\"\"+\" topic=\\\"pop_BA_AutoRule_ApplyTo\\\" role=\\\"button\\\"\"+pug.attr(\"aria-label\", view.i18n.getString('Click to learn more about {{item}}', { item: view.i18n.getString('RuleAuthoring_Scope')}), true, true)+\" type=\\\"helppopup\\\" onclick=\\\"PopupController.PopupJsClick(this)\\\" href=\\\"javascript:void(0);\\\"\") + \"\\u003E\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-3 rule-scope-options-selection\\\" role=\\\"group\\\" aria-labelledby=\\\"RuleAuthoring_Scope_Label\\\"\\u003E\";\nif (view.isForVNext && view.viewModel.isEditRule) {\npug_html = pug_html + \"\\u003C!--ko foreach: scopeOptions--\\u003E\\u003Cdiv class=\\\"radio\\\"\\u003E\\u003Clabel class=\\\"radio-inline\\\"\\u003E\\u003Cinput type=\\\"radio\\\" data-bind=\\\"checked: $root.selectedScopeOption, value: Value\\\"\\u003E\\u003Cspan data-bind=\\\"text: Text\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003C!--\\u002Fko--\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"campaignAdgroupSelector\",selectorControlClass], [false,true]), false, true)+\" data-bind=\\\"visible: showCampaignAdGroupSelector\\\"\") + \"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cselect class=\\\"form-control ruleScopeOptions\\\" data-bind=\\\"options: scopeOptions, optionsText: "Text", optionsValue: "Value", value: selectedScopeOption, attr: {"aria-invalid": scopeErrorMessage().length > 0}\\\" aria-labelledby=\\\"RuleAuthoring_Scope_Label\\\" aria-describedby=\\\"AutomationRulesScopeErrorMessage\\\"\\u003E\\u003C\\u002Fselect\\u003E\";\n}\npug_html = pug_html + \"\\u003Cdiv id=\\\"AutomationRulesScopeErrorMessage\\\" data-bind=\\\"attr: { role: scopeErrorRole }\\\"\\u003E\\u003Cdiv class=\\\"error\\\" data-bind=\\\"html: scopeErrorMessage\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group form-inline\\\"\\u003E\";\npug_mixins[\"formgroupline\"]();\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"control-label\",colSm2], [false,true]), false, true)) + \"\\u003E\\u003Clabel id=\\\"RuleAuthoring_Action_Label\\\"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('RuleAuthoring_Action')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-10 rule-options-selection\\\" role=\\\"group\\\" aria-labelledby=\\\"RuleAuthoring_Action_Label\\\"\\u003E\\u003Clabel class=\\\"control-label\\\"\\u003E\\u003Cspan class=\\\"action-text\\\" data-bind=\\\"text: actionText, visible: isActionText\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Flabel\\u003E\\u003Cdiv class=\\\"form-inline\\\" data-bind=\\\"visible: !isActionText()\\\" data-ref=\\\"action\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group\\\"\\u003E\";\npug_mixins[\"formgroupline\"]();\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"control-label\",colSm2], [false,true]), false, true)) + \"\\u003E\\u003Clabel id=\\\"RuleAuthoring_Filter_Label\\\"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('RuleAuthoring_Filter')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003Ca\" + (\" class=\\\"helpbutton\\\"\"+\" topic=\\\"pop_BA_AutoRule_When\\\" role=\\\"button\\\"\"+pug.attr(\"aria-label\", view.i18n.getString('Click to learn more about {{item}}', { item: view.i18n.getString('RuleAuthoring_Filter')}), true, true)+\" type=\\\"helppopup\\\" onclick=\\\"PopupController.PopupJsClick(this)\\\" href=\\\"javascript:void(0);\\\"\") + \"\\u003E\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-10 rule-filter-selection\\\" role=\\\"group\\\" aria-labelledby=\\\"RuleAuthoring_Filter_Label\\\"\\u003E\\u003Cform class=\\\"ruleAuthFilterForm\\\"\\u003E\\u003Cdiv class=\\\"ruleAuthFilter\\\" data-ref=\\\"filter\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fform\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv data-ref=\\\"cron-selection\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group rule-name-form-group\\\"\\u003E\";\npug_mixins[\"formgroupline\"]();\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"control-label\",colSm2], [false,true]), false, true)) + \"\\u003E\\u003Clabel id=\\\"RuleAuthoring_RuleName_Label\\\"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('RuleAuthoring_RuleName')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-3 rule-options-selection\\\" aria-labelledby=\\\"RuleAuthoring_RuleName_Label\\\"\\u003E\\u003Cinput class=\\\"form-control\\\" type=\\\"text\\\" data-bind=\\\"value: ruleName, valueUpdate: "input", attr: { maxLength: maxRuleNameLength, "aria-invalid": ruleNameErrorMessage().length > 0 }, css: {"error": ruleNameErrorMessage().length > 0}\\\" aria-required=\\\"true\\\" aria-labelledby=\\\"RuleAuthoring_RuleName_Label\\\" aria-describedby=\\\"AutomationRulesNameErrorMessage\\\"\\u003E\\u003Cdiv id=\\\"AutomationRulesNameErrorMessage\\\" data-bind=\\\"attr: { role: ruleNameErrorRole }\\\"\\u003E\\u003Cdiv class=\\\"error\\\" data-bind=\\\"html: ruleNameErrorMessage\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group\\\" data-bind=\\\"visible: isEmailOption\\\"\\u003E\";\npug_mixins[\"formgroupline\"]();\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"control-label\",colSm2], [false,true]), false, true)) + \"\\u003E\\u003Clabel id=\\\"RuleAuthoring_EmailResults_Label\\\"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('RuleAuthoring_EmailResults')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-3 rule-options-selection\\\" role=\\\"group\\\" aria-labelledby=\\\"RuleAuthoring_EmailResults_Label\\\"\\u003E\\u003Cselect class=\\\"form-control\\\" data-bind=\\\"options: emailOptions, optionsText: "Text", optionsValue: "Value", value: selectedEmailOption\\\" aria-labelledby=\\\"RuleAuthoring_EmailResults_Label\\\"\\u003E\\u003C\\u002Fselect\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-10 different-user-warning\\\"\\u003E\\u003Cspan class=\\\"form-text\\\" data-bind=\\\"visible: isEditRuleWithDifferentUser, html: editRuleWarningMessage\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\nif (view.isForVNext) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"preview-section\\\" data-bind=\\\"visible: inPreviewMode\\\"\\u003E\";\npug_mixins[\"formgroupline\"]();\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"control-label\",colSm2], [false,true]), false, true)) + \"\\u003E\\u003Clabel\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('RuleAuthoring_PreviewRule')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"rule-preview-body\\\"\\u003E\\u003Cdiv data-ref=\\\"preview-result\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"panel-footer\\\"\\u003E\\u003Cinput\" + (\" class=\\\"btn btn-primary btn-ruleAuth-save\\\"\"+\" type=\\\"button\\\"\"+pug.attr(\"value\", view.i18n.getString('RuleAuthoring_SaveRule'), true, true)+\" data-bind=\\\"disable: isSelectorOpen\\\"\") + \"\\u003E\\u003Cinput\" + (\" class=\\\"btn btn-default btn-ruleAuth-preview\\\"\"+\" type=\\\"button\\\"\"+pug.attr(\"value\", view.i18n.getString('RuleAuthoring_PreviewRule'), true, true)+\" data-bind=\\\"disable: isSelectorOpen\\\"\") + \"\\u003E\\u003Cinput\" + (\" class=\\\"btn btn-default btn-ruleAuth-cancel\\\"\"+\" type=\\\"button\\\"\"+pug.attr(\"value\", view.i18n.getString('RuleAuthoring_Cancel'), true, true)+\" data-bind=\\\"disable: isSelectorOpen\\\"\") + \"\\u003E\\u003C\\u002Fdiv\\u003E\";\nif (!view.isForVNext) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"rule-preview-body\\\" data-bind=\\\"visible: inPreviewMode\\\"\\u003E\\u003Cdiv data-ref=\\\"preview-result\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"selectorControlClass\" in locals_for_with?locals_for_with.selectorControlClass:typeof selectorControlClass!==\"undefined\"?selectorControlClass:undefined,\"view\" in locals_for_with?locals_for_with.view:typeof view!==\"undefined\"?view:undefined));;return pug_html;};\nmodule.exports = template;"],"names":["resizeQueryString","concat","responsiveAdPreviewTemplate","_ref","itemViewModel","i18n","withContainer","isMMAV2Enabled","isVideo","imageUrlToUse","OriginalImageMediaUrl","LandscapeImageMediaUrl","indexOfResizeInfo","indexOf","substr","template","dynamicSearchAdPreviewTemplate","domain","path1","path2","newVM","convertedTitle","getString","convertedDisplayUrl","DisplayUrl","Path1","Path2","path","getDisplayUrl","getCombinedPath","Text","getStyles","__","core","_objectSpread","datePickerStyle","adScheduleContainer","width","creationCommonStyle","advancedSettingsSectionStyle","display","borderTop","paddingTop","textDecoration","paddingRight","float","toggleButtonStyle","paddingLeft","backgroundColor","color","fontWeight","outline","top","LegacyAdSchedule","React","props","container","entity","data","campaignDayTimeRanges","onChange","setAdScheduleView","level","hideUseCampaignSetting","hideMinuteOptions","showDateSettings","showBidAdjustmentColumn","i18nKeys","campaignAdScheduleUseSearcherTimeZone","view","useRef","activity","useContext","ActivityContext","classes","useDefaultStyles","deletedDayTimeCb","useCallback","deletedDayTimeCriterions","each","criterion","Criterion","BidAdjustment","Status","Campaign","Id","adScheduleOption","useMemo","model","dayTimeRanges","timeZone","TimeZone","adScheduleUseSearcherTimeZone","AdScheduleUseSearcherTimeZone","hideAdScheduleBidAdjustments","activityLogger","newData","isValid","updatedData","adSchedulesBulkUpsert","current","getAdScheduleUseSearcherTimeZone","adScheduleDateSettings","getDateSettings","deleteCb","useEffect","AdScheduleView","render","$el","appendTo","getValues","remove","_jsx","className","classnames","children","ref","defaultProps","Warning","LegacyAdScheduleWithCustomValidation","validationProps","updateValidation","restProps","_objectWithoutProperties","_excluded","adSchedules","I18nContext","newIsValid","shouldDirty","arguments","length","undefined","_TL_","signal","JSON","stringify","ValidatedLegacyAdSchedule","withCustomValidation","minuteToSaveMap","ZERO","FIFTEEN","THIRTY","FORTY_FIVE","minuteMap","getMin","min","getTime","hour","is12","getAdScheduleDetails","adScheduleView","hideBidAdjustment","schedules","koModel","useCampaignSettings","details","dateSettings","_","EndDate","from","StartDate","to","timeDisplayType","len","forEach","schedule","index","dayTime","startHour","StartHour","endHour","EndHour","startMin","StartMinute","endMin","EndMinute","dateTimePart","day","getDay","Day","BidAdjustmentType","BidAdjustmentAmount","getDayTimeDetails","editor","Backbone","clickedAway","event","$","target","closest","hideKeywordEditor","keydown","key","code","off","window","AudienceAdgroupCreationWizard","_Backbone$View","_classCallCheck","_callSuper","_inherits","_createClass","value","options","_this","this","viewContext","DependencyResolver","get","audienceCampaignType","currentLevelTargetInfo","AudienceTargetInfo","resourceName","isForVNext","isAudienceCreationWorkflow","router","deps","result","navigateToRoute","eventDelegator","scenario","perfMarker","setupInstrumentation","lastStep","crudOptions","wizardElement","step1","CrudAudienceAdgroupBasic","createChild","workflow","step2","CrudAudienceAdgroup","crudAdOptions","isImpressionTrackingUrlsEnabled","handlePopState","campaignId","currentCampaign","campaign_id","addEventListener","loadCrudAudienceAdPromise","Promise","resolve","step3","ResponsiveAdEditor","listenTo","saveAndExit","onExit","instr","addScenario","schema","aimAdGroupCreationScenario","aimShoppingAdGroupCreationWizard","create","aimAdGroupCreationWizard","logScenario","inContextRepairRecScenario","inContextRepairRecommendation","applyActivity","applyDeliveryStatus","_this2","willRender","then","wizard","StepsWizard","config","getStepConfig","currentStep","html","callbackBeforeRender","append","done","steps","push","name","extendConfig","layout","isHorizontal","headerTemplate","callbackBeforeRemove","panel","document","querySelector","removeEventListener","_superPropGet","_this3","enableAdGroup","navigateToSummaryPage","catch","response","errors","errorsView","setErrors","i18nErrors","getBulkApiErrors","jsdata","campaign","adgroup","currentAdGroup","params","AdGroup","update","adapter","getContext","trigger","AudienceAdgroupSettingsWizard","willInit","decimal","reachControlOptions","permissionConfig","permissions","isShowDisclaimerBannerEnabled","isBoostConversionBasedSegmentEnabled","targetInfoPerf","isNewUI","initAudienceAssociationView","optTgtReactComponent","parentTargetInfoPerf","parentLevelTargetInfo","AudienceCampaignErrorsView","loadAdGroupDataTask","loadAdGroupDataAsync","supportCashbackSettings","shouldSupportCashbackSettings","saveSettingsActivityLogger","aimAdGroupSettingsWizardScenario","saveSettings","campaignSubType","isAudienceFeedBasedCampaign","isAudienceFeedBasedCampaignNew","isFeedBasedAudienceCampaign","aimAdGroupSettingsWizard","willFetchData","loadSettingsActivityLogger","loadSettings","start","edmCampaign","initializeAdgroupAudience","getAdGroupTask","asyncFunctionWithPerfMarker","find","Number","entitySet","AdGroups","bypassCache","getAdGroupCriterionsTask","fetchCriterions","IsAmplifyEnabled","IsContextualTargetEnabled","getCampaignCriterionsTask","initializeWithCampaignAsync","reachControl","ReachEstimateControl","isSticky","estimateRequestFactory","EstimateRequestFactory","onAdGroupInitialized","handleEstimateUpdates","disableOptToggle","handleAgeGenderExclusion","advancedTargetSetting","companyNameTargetSetting","targetOrBidSelector","industryTargetSetting","jobFunctionTargetSetting","audienceTargetSetting","stop","initializeWithhAdGroupAudience","finally","withUiBlock","targetSetting","empty","nonEmptyKeys","getAllNoneEmptyTypeKeys","targetSelector","audienceTargetSelector","turnOnAudienceTarget","updateUnmodifiedCriterions","el","style","disableByValidation","call","crudAudienceAdgroupBasic","AudienceAdvancedTargetSettings","renderSettingsControls","cashbackSettingsView","viewModel","validateCashbackPercent","formattedValue","fromLocalToFloat","toggleCashbackPercentColumns","validateAndSave","CampaignId","AdGroupId","adgroup_id","validate","locationTargetSetting","targetSelectionView","locationTargetsViewPromise","checkIMAReachAndSave","message","errorMessage","getData","allAdGroupCriterions","AdGroupCriterions","audienceCriterions","Type","otherCriterions","AdGroupAudienceCriterions","TargetSetting","getTargetSettings","join","dynamic","Enable1PPlacementTargeting","BoostAdunitIds","getAdUnitIds","UseOptimizedTargeting","useOptimizedTargeting","adGroupCriterions","getAllLocations","c","adGroupCriterionsWithoutIntent","CriterionType","campaignCriterions","getCampaignLocationCriterions","overrideInfo","getLocationsInfoFromCampaignCriterions","locations","intent","_this4","checkIMAReachPromise","locationCriterions","getAllAdGroupLocationCriterion","accountInfo","isIMAReachRepresentationPhase1Enabled","changedLocationCriterions","item","locationsInfo","getLocationsInfo","showIMAReachModal","onYes","saveAsync","deliveryChannel","adGroupId","aid","cid","AdvertiserCustomerID","isIMAReachModalShow","_this5","updateAdGroupTask","cacheResponse","removeErrors","saveSettingsActivity","logAdGroupPersonalizedOffers","bind","isSuccess","advancedSettings","saveExtensions","App","Name","handleErrors","bulkApiErrors","noMappedErrors","error","getBulkErrorsLogMessage","trace","getODataErrors","_this6","observeInDOM","onRenderedInDOM","_this7","collapseTemplate","renderOptTgtSwtich","CashbackPercent","subscribe","v","onCashbackPercentChange","parent","settingView","targetSettings","biddingSchemeType","BiddingScheme","subType","CampaignSubType","bidinfo","BidStrategy","campaignSetting","feedInfo","getFeedInfo","targets","createWithTargetSettings","hasAudienceRemarketingList","updateEstimate","shouldShowWarningMessage","showTargetExclusionActualDeliveryStatus","criterionsHaveNoDataInOriginalPayload","Age","Gender","genderTargetSelectionView","genderTargetSetting","ageTargetSelectionView","ageTargetSetting","setupVirtualTargets","selectedTypes","selectedType","targetSettingsSetByUser","ReactDOM","OptTgtToggle","checked","i18nNewDesign","labelTxt","offTxt","alwaysDisabled","locationTargetView","getConfigs","isAudienceCampaign","isSearchDSAShoppingAdgroupLevel","ageSettingOptionsFactory","genderSettingOptionsFactory","Device","deviceSettingOptions","populateCriterions","targetInfo","isTargetAndBidArr","criterionType","savedSelections","getAllByType","criterionTypeTarget","isTargetAllUnselectedOrSelected","unsavedSelections","selections","saveSnapshot","isSelected","updateCriterionDataAsync","shouldFillWithNegative","isTargetAndBid","selection","_defineProperty","createAsync","populateCheckboxBasedCriterions","_ref$isAudienceCampai","_ref$isSearchDSAShopp","_ref$isTargetAndBidAr","_ref$useOptimizedTarg","_ref$showTargetExclus","_ref$criterionsHaveNo","populator","criterionTypes","asyncTasks","isCashbackPercentEmpty","percent","compactPopulatedCriterions","criterions","hasNonZeroDeviceCriterion","getBlackListCriterions","_ref2","campaignType","_ref2$permissions","_ref2$selectedTypeKey","selectedTypeKeys","isMSStoreAdsGAWorkflow","isWindowsStoreAdsEnabled","isWindowsStoreAdsManualCPAEnabled","WindowsStoreAdsManualCPA","isDomesticSimplifiedChineseEnabled","IsDomesticSimplifiedChineseEnabled","blackListMap","audience","default","supportedTypes","type","unmodifiedCriterions","cloneDeep","getAllByTypes","populateInitialTargetOrBidSettings","parentLevelSelectedTypeKeys","currentLevelSelectedTypeKeys","initialSelectedTypeKeys","Settings","settingIndex","setting","originalAdUnitIds","AdUnitIds","placementSelections","PlacementWithIds","adUnitIds","initializeTargetSettings","viewmodel","isEditTargetCategoriesExpanded","ko","initialTargetSetting","getCampaignType","toLowerCase","NegativeAgeTargetForAdGroups","adGroupTargetSettings","Details","TargetAll","placementSetting","getSnapshot","blackListCriterions","filter","map","toLocaleLowerCase","lockedKeys","conflictingKeys","AudienceTargetSelector","blackListKeys","onSelectionChanged","checkBoxBasedOptions","showTargetSelection","showBidAdjustment","showTargetOrBid","isLiveUpdateEnabled","enableLevelToggle","searchBasedOptions","showBidOnlyNote","showExclusion","defaultBidAdjustment","isFilterCriterionLevelAdGroup","AgeCriterionSetting","GenderCriterionSetting","deviceTargetSetting","DeviceCriterionSetting","CompanyNameCriterionSetting","IndustryCriterionSetting","PlacementSetting","JobFunctionCriterionSetting","LocationCriterionSetting","hideTitleLabel","AudienceCriterionSetting","_toConsumableArray","getIsTargetAndBid","containerId","getContainerNameFromId","show","id","isCashbackPercentColumnVisible","inheritInfo","getSubViews","subView","resetSupportCashbackSettings","_ref$intent","_ref$locations","getAllComputedByTypes","modifiedCriterions","criterionHelper","compareAndGetCriterionsDelta","ageCriterions","genderCriterions","deviceCriterions","others","ageCriterion","genderCriterion","deviceCriterion","removeAllVirtuals","_ref2$intent","_ref2$locations","_ref2$deletedLocation","deletedLocations","bidAdjustmentGrid","deviceTargetsUpdateView","IsOriginalDeviceTargetingEnabled","originalDeviceCriterions","targetsView","removeCashbackPercent","fillCriterionsWithId","toggle","hide","BmcRedirectView","bmcRedirect","getFeedData","_ref$$top","$top","_ref$$skip","$skip","_ref$permissions","query","$filter","supportedFeedTypeForDynamicDataFeedCamapign","DynamicDataAutosListingFeed","DynamicDataEventsFeed","DynamicDataHotelsAndVacationRentalsFeed","DynamicDataToursAndActivitiesFeed","DynamicDataCruisesFeed","Feed","findAll","FeedType","AudienceCampaignCreationWizard","isSwapStepsEnabled","IsAudienceCampaignSwapAdsBudgetAndBidsEnabled","isCopyCampaignSettingsAudienceCampaignEnabled","IsCopyCampaignSettingsAudienceCampaignEnabled","isAudienceCampaignCollapseTargetSelectionEnabled","IsAudienceCampaignCollapseTargetSelectionEnabled","campaignCreationFlowImporvementEnabled","isOdataGetProductScopeEnabled","getProductWithDFM","withDFMCache","getProductData","getFeedWithDFM","localStorage","getLocalStorage","startToFinishMarker","isShoppingCampaign","isAdImpressions","wizardActivity","wizardRenderTime","aimCampaignCreationScenario","aimShoppingCampaignCreationWizard","aimCampaignCreationWizard","log","logContent","flow","guid","includes","status","currentTime","Date","stepDuration","preStep","stepIndex","previousStepName","msg","AlertHelper","showError","isEnabledForVerifiedImpressionTrackingAtCampaignLevel","shoppingCrudPerfMarker","isEnabledForDynamicFeedCampaign","productData","ProductCollectionAccounts","IsGlobalStore","IsCoOpStore","feedData","bmcRedirectOptions","bmcRedirectView","shoppingCampaignOptions","crudAudienceCampaign","CrudAudienceShoppingCampaign","campaignCrudPerfMarker","campaignOptions","CrudAudienceCampaign","crudAudienceAdgroupOptions","crudAudienceAdgroup","crudAudienceAdOptions","crudAudienceAdInstance","crudAudienceAd","crudBudgetBidOptions","crudAudienceBudgetBid","CrudAudienceBudgetBid","ApexPlatform","Refresh","on","stepName","logShoppingCampaignCreationEvent","step","postABTestingEventLog","UniqueId","EventName","ExperimentName","MSANCampaignCreationFlowImporvement","getAudienceCreationPath","EventValue","currentStepName","_ref3","postABTestingFlightLog","RandomizationIdType","RandomizationId","String","Flight","railviewId","serverContext","serverContextStore","GetProductScopeData","countryCode","getProductConditionOptions","getSalesCountryCollection","getDynamicDataFeedOptions","getCategoryFullData","getProductTypeFullData","dataName","pData","mergeData","productDataProcess","getProductScopeData","GetProductData","_ref4","_ref4$$top","_ref4$$skip","GetFeedData","mergedData","store","stateManager","preferencesService","showSuccessDialog","context","constants","CurrentAccount","AccountStatus","enums","accountStatus","isPendingPayment","pendingPaymentInstrument","isAccountOnHold","active","accountPausedReason","accountInactiveReason","notSet","InactiveReasons","accountPausedReasons","pausedDueToSystemIssue","pausedZeroBalance","pausedNoValidiO","reason","initialize","prefix","gridPreference","findByName","Data","doNotShowAgain","getItem","err","permanent","displaySuccessDialog","Included","All","SearchBasedTargetGridView","targetType","targetTypes","isolated","vm","gridData","removeAllVisibleClass","grid","onCriterionChange","initializeAndRenderGrid","allData","datas","d","refreshGridSource","addClass","removeClass","gridView","patch","dataSource","commonGridConfig","tableClasses","primaryKey","rows","bodyRows","events","e","removeSearchBasedTarget","removeSearchBasedTargets","plugins","pagination","pageSize","availablePageSizes","enableRandomPage","paginationTemplate","pageNumberLabelText","pageSizeText","totalPageCountText","gridConfig","pgrid","vnext","use","paginationPlugin","firstColumnHeaderSpan","text","replace","totalCountRows","stopPropagation","targetId","itemOfElement","destroyAsync","targetDatas","destroyTargetTypeAsync","removeAllColumnConfig","searchBasedTargetGridRemoveColumnTemplate","headClasses","bodyClasses","statusColumnConfig","searchBasedTargetGridStateTemplate","isIncluded","isExcluded","includedString","excludedString","property","nameColumnConfig","local","SearchBasedTargetSetting","targetOptions","isolatedGrid","searchBasedTargetGridView","excludedSearchBasedTargetGridView","searchView","setDefaultCashbackPercent","SearchResultView","defaultCashbackPercent","items","isVisible","_document$getElements","searchResult","_document$getElements2","evenHandler","clickHandling","getElementsByClassName","ariaLiveResultsText","totalCount","hasClass","updateState","companyTargetItem","parseInt","dataset","buildLinkedInCriterion","onClickSearchContainer","SearchViewBase","searchBox","SearchBox","placeholder","maxLength","iconClasses","prepend","searchResultView","CompanyNameSearchView","_SearchViewBase","searchTerm","onSearch","onSearchResultReseted","escapedSearchTerm","encodeURIComponent","odata","demogrphicsUrl","CurrentCustomerId","companySearchUrl","searchData","setSearchResult","makeSearchResultVisible","companies","targetedCompanyIds","company","CompanyNameCriterion","Target","excludedCompanyIds","results","logoUrl","LogoUrl","industry","Industry","size","companySizeEnumToString","Size","getBidAdjustmentOptions","percentage","availableOptions","selectedOption","isCriterionExcluded","SelectionStatus","onBidAdjChange","criterionName","bidAdjustmentControl","bidAdjPercentage","val","bidAdjOption","criterionsByType","bidAdj","rawBidPercentage","bidAdjOptionText","bidAdjustmentOptions","option","computeBidAdjustment","targetCrit","isUsingCampaignSettings","cashbackPercentColumnConfig","title","locals","that","cashbackPercentValue","CashbackAdjustment","readonly","cashbackPercentControlView","CashbackPercentControlView","isParentLevel","setTimeout","row","validated","companyColumnConfig","companyTargetItemTemplate","CompanyNameTargetSetting","_SearchBasedTargetSet","titleKey","helpKey","descriptionKey","bingadsGridColumn","pageContext","companySettingGridConfig","columns","currentLevel","targetAndBidClassName","bidOnlyClassName","TargetOrBidSelector","isLabelHidden","prop","onTargetSettingChanged","currentTarget","AudienceCriterionSettingBase","showLevelToggle","isTargetSelectionViewValid","CompanyName","JobFunction","targetI18nMap","getInitializePromise","initializeBidAdjustmentGrid","initializeTargetOrBidSelector","initializeLevelToggle","initializeParentLevelBidAdjustmentGrid","changeVisibility","ToggleView","levelToggle","toggleText","labelledbyId","setToggleState","setParentLevelToggle","showAdGroupOverrideInformation","onLevelToggleChange","targetCriterions","toggleState","setAdGroupInfoVisibility","closeTargetEditView","hasSavedSelections","hasSavedNegSelections","copyParentCriterionsAsync","Error","removeAttr","fromCriterionChanged","changeVisAction","hasData","parentLevelTogglesByType","LevelOfDetails","criterionsToCopy","createTasks","copiedCriterion","adgroupId","parentLevelBidAdjustmentGrid","cashbackPercentErrorSelector","$cashbackPercentErrors","i","eq","getState","isCashbackPercentValid","onCriterionChanged","originalAdGroupCashback","AdGroupCashback","Percent","originalCampaignCashback","CampaignCashback","renderGrids","getParentLevelToggle","_AudienceCriterionSet","initializeTargetSelectionView","getTargetedCriterion","selected","getExcludedCriterion","arr","getTargetedValues","summary","getSelectedString","getExcludedValues","resultItem","matchStartIndex","matchEndIndex","caseMatchedSearchTerm","substring","jobFunctionTargetItem","JobFunctionSearchView","initializeSearchDataTask","initializeSearchData","jobFunctions","targetedJobFunctionIds","jobFunction","JobFunctionCriterion","excludedJobFunctionIds","searchText","searchResults","setResults","JobFunctionTargetSetting","jobFunctionSettingGridConfig","SearchView","searchTreeInitializationPromise","initializeSearchTree","refreshTargetedStates","treeView","processIndustryRowData","treeData","actions","callback","node","onExclude","onInclude","setLeafState","leafNodeData","state","shouldSetState","stateValue","targetedIndustryIds","excludedIndustryIds","placeHolderText","Treeview","updateView","groupedTree","child","IndustryGroupName","updateSearchResult","industries","IndustryCriterion","IndustryTargetSetting","industrySettingGridConfig","SearchBasedTargetGridViewPlacement","adUnitSelection","adUnitSelectionRef","triggerSearchViewRefreshRef","selectedData","displayGrid","_this$options","gridConfigDisplay","targetedPlacementsIds","refreshGrid","processPlacementRowData","GroupName","excludedPlacementsIds","PlacementTargetSetting","industrySettingGridConfigDisplay","onEditTargetShowButtonClicked","switchGrid","PlacementDataMapping","Games","HomePages","Productivity","isEditing","isEmpty","memo","CheckboxSelectionBase","savedNegSelections","selectionsSnapshot","criterionsSnapshot","onSelectAll","updateTasks","originalSelection","criterionToCreate","createCriterion","deleteAndCreateTask","deleteSameCriterionIfExistsAsync","criterionToRemove","getSavedCriterionByKey","existingCriterion","targetKey","criterionsSnapshotShallow","shouldSelect","isAllSelected","onTargetUpdated","keys","$target","is","states","isNoneSelected","setErrorMessage","AgeTargetSetting","_CheckboxSelectionBas","selectedCriterions","selectedPositiveCriterions","AgeCriterion","shouldValidate","isEditDisabled","snapshot","EighteenToTwentyFive","labelKey","TwentyFiveToThirtyFive","ThirtyFiveToFifty","FiftyToSixtyFive","SixtyFiveAndAbove","Unknown","allSelections","getSelectedCriterion","total","totalSelected","DeviceTargetSetting","DeviceCriterion","DeviceName","hasSavedBefore","GenderTargetSetting","GenderCriterion","Female","Male","AudienceTargetSetting","isTitleLabelHidden","audienceTargetInfo","audienceAssociationView","aimAudienceAssociationView","locationCriterionsData","reloadAudienceData","onAudiencesTargetChange","setOnAudiencesTargetChangeCallback","AudienceName","getTargetedAudiences","getExcludedAudiences","Audience","configSettings","searchObj","tgt","AudienceId","searchTgt","exclusionAllItems","associationAllItems","a","existingItems","exclusion","selectedLists","targeting","isMapLoaded","Microsoft","Maps","Color","loadModule","loadMap","reject","src","checkMapLoaded","script","createElement","async","onload","onerror","console","getElementsByTagName","parentNode","insertBefore","injectScript","LocationTargetSetting","Intermediate","refresh","initializeLocationTargetsView","locationTargetsView","LocationTargetsView","isSettingsScenario","showPhysicalIntentView","targetOption","isCampaignLevel","onLocationTargetOptionChanged","keepAllLocations","destoryTasks","location","audienceTargets","reloadLocationView","Location","Radius","radiusData","getRadiusLocations","targeted","LocationCriterion","RadiusCriterion","getTargetedLocations","getExcludedLocations","_ref$isShoppingCampai","_ref$listenToLocation","listenToLocationCriterion","_ref$customizedTempla","customizedTemplates","_ref$useLocationContr","useLocationControl","_ref$initAudienceAsso","_ref$deps","_ref$isForVNext","_ref$perfMarker","_ref$isAudienceCreati","_ref$isFromAudienceDa","isFromAudienceDashboard","currentVirtualId","audiencePerfMarker","autoEnd","willFetchFile","AimAudienceAssociationView","onAudienceSelectionChangedAsync","typeMapping","onLocationCriterionChange","destroyAll","audienceFetchCreationTask","audienceCriterionFetchCreationTask","fetchAdGroupAudienceCriterions","snapShot","criterionsOverride","shouldFetchContextualTargets","criterionLoader","criterionsToLoad","load","formattedCriterions","loadedCriterionData","formattedCriterion","reformatFetchedCriterion","createMultipleAsync","ensureLoadedAsync","createTask","getNewVirtualId","isLocationTypeCriterionType","updatedCriterionTypes","updateIntermediateTask","createMany","isUpdated","updatedCriterion","noEvent","criterionGroupToUpdate","savedCriterions","_this8","savedCriterion","criterionToUpdate","types","_this9","returnCriterions","_this10","allCriterions","getAll","_this11","noneEmptyTypeKeys","criterionTypeKeys","typeKey","criterionId","criterionTypeToChange","_this12","destroyTask","destroy","_this13","_this14","destroyTasks","targetCriterion","audienceCriterion","AudienceType","_this15","audiences","getAudienceCriterion","IMAudience","Level","AudienceCriterion","critionCreationTasks","association","typePrefix","_this16","newCriterionsByType","NegativeLocation","AgeTargets","GenderTargets","otherTargets","dataDateRanges","Today","Yesterday","ThisWeekFromSun","ThisWeekFromMon","Last7Days","LastWeekStartingSun","LastWeekStartingMon","LastBusinessWeek","Last14Days","ThisMonth","Last30Days","LastMonth","Last3Month","Last6Month","ThisYear","LastYear","AllTime","frequencyGrains","Hourly","Daily","Weekly","Monthly","Once","weeklyOptions","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday","setupOptions","locKey","Value","CustomDateSerializer","date","year","getFullYear","month","getMonth","getDate","RuleCronSelectionviewModel","accountTimeZone","selectedRule","stateMgr","preferenceSvc","appCfg","isEmailOption","instrumentation","frequencyGrain","dateRangePreset","monthlyOption","weeklyOption","dailyOption","timeZoneOption","runOnceDate","createRule","cronFormatter","CronFormatter","dataDateRangeOptions","monthlyOptions","dailyOptions","twelveHourDisplay","formatHourOfDay","twentyFourHourDisplay","slice","isTwelveHourDisplay","IsUsePreferencesServiceEnabled","isTwelveHourDisplayPreference","timeZoneOptions","zone","selectedDataDateRangeOption","selectedMonthOption","selectedWeekOption","selectedDailyOption","selectedTimeZoneOption","getDefaultTimeZone","selectedFrequencyGrain","newValue","isTwelveHourDisplayFormat","read","write","setAtUserLevel","setItem","isMonthOption","pure","isWeekOption","isOnceOption","isHourlyOption","frequencyErrorMessage","frequencyErrorRole","startInput","formatDate","trim","parseDate","IsHourlyNotifyMeRuleAllowed","isHourlyNotifyMeRuleAllowed","selectedTimeZone","toIANATimeZone","fromLegacyTimeZone","selectedTime","convertedSelectedTime","toString","raw","format","utcYear","getUTCFullYear","utcMonth","getUTCMonth","utcDate","getUTCDate","utcHours","getUTCHours","setFullYear","setMonth","setDate","getUTCNowCustomDateSerializer","convertedCurrentTime","cron","toCronString","dayOfWeek","dayOfMonth","RuleCronSelectionview","_PureKnockoutView","renderRunOnceDatePicker","today","lastNDate","end","todayNYearsAgo","needToUpdateDate","selectedDate","runOnceDatePicker","DatePicker","minDate","maxDate","newDate","setChild","getCron","PureKnockoutView","emailOptions","Always","OnChangeOrError","OnError","None","scopeOptions","Selected","AllEnabled","AllButRemoved","entityRelatedOptions","EnabledStatusFilterValue","Ad","Keyword","AssetGroup","EnabledStatusFilterQueryOdata","EnabledStatusFilterColumn","RuleAuthoringViewModel","isActionText","currentUserId","maxRuleNameLength","inPreviewMode","menuAction","action","isEditRule","isEditRuleWithDifferentUser","modifiedBy","editRuleId","editRuleWarningMessage","actionName","ruleName","titleName","actionText","titleDescription","showCampaigns","showAdGroups","showCampaignAdGroupSelector","isSelectorOpen","setupScopeOption","selectedScopeInfo","scopeInfo","selectedEmailOption","emailOption","scopeErrorMessage","ruleNameErrorMessage","selectedScopeOption","ruleNameErrorRole","scopeErrorRole","isResultValid","selectedRowIds","allPages","defaultSelectedScopeOptionText","scopeOption","selectedRowCount","info","updatedScopeOptions","isCrossPageAllSelected","pgridPlugins","crossPageSelectAll","PauseActionValue","EntitySettingBase","accountCurrencyCode","bidBudgetRange","isActionNoneText","actionView","createActionView","setPreviewErrorHeaders","previewOldHeader","previewNewHeader","previewAttempedHeader","setUpPreviewEntityNameAndEntityKey","previewEntityName","previewEntityKeys","defaultEntityValue","formatBidBudget","formatStatus","formatEmail","getUserAction","Actions","Property","ActionType","changeBudgetActions","changeBidActions","nonTextActionsForKeyword","RaiseToTopOfPage","RaiseToFirstPage","ChangeBid","validateBidBudgetInput","usePercentValidation","valueRange","localizedErrors","decimalValue","parseDecimal","invalidPercentageError","invalidValueError","minValue","FloorValue","maxValue","MAX_VALUE","CeilingValue","outOfRangError","validateBidInput","keywordBidRange","validateBudgetInput","budgetRange","defaultAction","budgetValue","unit","useLimitValue","limitValue","isDailyBudget","ChangeBudgetActionViewModel","nonTextActionInfo","nonTextAction","selectedAction","budgetErrorMessage","budgetLimitErrorMessage","isIncreaseBudgetHelp","units","selectedUnit","limitBudgetLabelText","budgetAmount","numericActionTypes","changeByPercent","changeByAmount","Limit","ChangeBudgetActionView","CampaignSetting","_EntitySettingBase","bidType","bidValue","ChangeAdgroupBidActionViewModel","bidErrorMessage","bidLimitErrorMessage","bidTypes","selectedBidType","limitBidLabelText","bidAmount","ChangeAdgroupBidActionView","AdGroupSetting","ChangeKeywordBidActionViewModel","isChangeByBid","ChangKeywordBidActionView","KeywordSetting","AssetGroupSetting","replaceAtom","atom","oldKey","newKey","newAtom","RuleAuthoringHelper","isSimulation","getCurrentFilter","selectAll","selectedCounts","idBased","FilterExpressions","Values","gridHelper","selectedKeys","getSelectedRowIds","set","getCurrentSelection","toRuleDescription","currentFilter","filterEntity","selectionRangeFilterQuery","_grid$pgridPlugins$pa","pageNumber","sortInfo","directionIndex","column","columnWithName","sortedKey","sortable","sortStr","cronselectionView","getSelectedDataDateRangeOption","DateRange","DateRangePreset","filterQueryUrl","odataV4","filterEncodedUrl","filterURLParam","QueryString","predicateListView","filters","ids","SelectedColumn","SelectedOperator","selectedFilter","predicateListFilter","editableFilter","getFilterEntity","fromFilterEntityToLegacyFilter","expr","mappedResult","SelectedNames","legacyDeliveryStatus","Eligible","InlineOpportunity","finalQuery","$and","array","replaceKeyOfQuery","PredicateListContainer","_React$PureComponent","_this$props","PredicateList","getPredicateIconClassName","entitySchema","onEditableFilterUpdate","maximumPredicateLimit","MaximumPredicateLimit","popoverContainer","readOnlyProperties","predicateValueNameGetter","seasonalityPredicateValueNameGetter","PredicateListBackboneView","_ref$selectableFilter","selectableFilter","_ref$editableFilter","_ref$isPoPEnabled","isPoPEnabled","_ref$savedFilters","savedFilters","_ref$recentFilters","recentFilters","_ref$openedPredicateI","openedPredicateIndex","_ref$selector","selector","_ref$updateWaterfallF","updateWaterfallFilter","_ref$onApplySavedFilt","onApplySavedFilter","_ref$onApplyRecentFil","onApplyRecentFilter","_ref$maximumPredicate","_ref$readOnlyProperti","_ref$instrumentation","_ref$hideAddFilterBut","hideAddFilterButton","_ref$getPredicateIcon","RuleAuthoringView","scope","newI18n","CampaignAdgroupSelectorEdmView","currentEntity","PredicateListReact","SelectCampaignOrAdGroup","entitySetting","entitySettingMapping","keyword","assetgroup","keyToUse","getEntitySetting","helper","alertHelper","initializeInstrumentation","onScopeSelectionChange","once","getActionView","filterService","localize","SchemaI18n","getEditableFilter","createFilterEntity","isComparingEnabled","filterEntityOptions","predicateListViewWrapper","DeterministicViewForBackBoneView","PreviewResultView","getPreviewHeaders","monitor","previewRuleResults","selectorView","isCampaignMode","selectedItems","parse","updateSelectedEntityCount","filterString","list","uiblocker","Campaigns","select","where","limit","fetch","entitySelection","setupCampaignAdGroupSelector","campaignName","getAction","xhr","parseSync","responseText","Code","Router","navigate","isScheduleInvalid","throttLimitMsg","migrationMsg","scheduleInvalidMsg","ruleUrlTmpl","url","ruleId","Entity","NotificationType","TimeZoneId","setAction","currentCustomerId","setSelectionAndDescription","save","success","hideView","showSuccess","onSaveOrPreviewRuleError","unset","getChild","formatPreviewResults","isActionValidate","hasInvalidProperties","convertFilterEntityToPredicates","some","editablePredicate","isDeletedProperty","isInvalidProperty","ko_model","filterItem","onValueChange","canApply","first","focus","directive","walkMe","walkMeLink","walkThrus","Walkme","WalkmeLink","whenLoaded","walkme","setType","setWalkthrus","link","changeBid","RuleAuthoringModel","_backbone$Model","idAttribute","Selection","Description","PreviewEntityIds","selectedEntityCount","TotalRowCount","BulkEditResults","SelectedRule","getHours","EveryTimeThisRuleRuns","method","BatchAction","NotificationMedium","Cron","jq_ajax_adapter","backbone","getBidLandscapeStyle","palette","left","right","bottom","margin","position","height","border","boxShadow","fontSize","marginTop","marginLeft","marginBottom","padding","textAlign","clear","marginRight","overflow","opacity","lineHeight","verticalAlign","whiteSpace","overflowWrap","maxWidth","neutralSecondary","neutralLighter","themeLighter","themeLight","theme","bidStrategyContainer","mergeStyles","flexDirection","neutralPrimary","listStyle","white","boxSizing","borderRadius","paddingBottom","appearance","resize","LegacyBidStrategy","CampaignSettings","campaignLanguage","entityType","hideHeader","popupIds","validateWithBudget","viewListener","clone","BiddingStrategyView","biddingStrategyType","biddingStrategyId","BidStrategyId","targetCpa","TargetCpa","targetRoas","TargetRoas","costPerSale","CostPerSale","TargetCostPerSale","maxCpc","MaxCpc","Amount","targetAdPosition","TargetAdPosition","targetImpressionShare","TargetImpressionShare","campaignSettings","withRealTimeUpdates","isAfterSave","isRenderedInReact","stopListening","ValidatedLegacyBidStrategy","isFromInitialization","newBiddingScheme","isEqual","getBudgetSuggestionPopupStyle","zIndex","fontFamily","themePrimary","background","btnStyle","transform","gridTemplateColumns","borderBottom","borderLeft","content","pug","module","exports","pug_interp","pug_html","pug_mixins","locals_for_with","block","attributes","escape","isMultimediaAd","isMultimediaAdinMSANEnabled","isVerticalVideo","attr","IdString","shouldShowActionNeededForGoogleImprotVideoAd","isPlaceholderMMA","imageCount","Headline","convertedFinalUrl","HeadlineCount","TextCount","popupId","ariaLabelContext","arialLabelText","collapseId","itemClassSelect","optTgtTgBtn","Object","n","$$obj","pug_index0","$$l","nextPageText","previousPageText","colSm2","colSm10","selectorControlClass"],"sourceRoot":""}