{"version":3,"file":"static/js/application.async.landing~2944b42b.95fcf0f5.chunk.js","mappings":"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","sources":["../../../node_modules/@bingads-webui-campaign-react/website-list-selector/src/types/exclusion-lists.tsx","../../../node_modules/@bingads-webui-campaign-react/website-list-selector/src/custom-tag-item-renderer.tsx","../../../node_modules/@bingads-webui-campaign-react/website-list-selector/src/utils.ts","../../../node_modules/@bingads-webui-campaign-react/website-list-selector/src/types/api.ts","../../../node_modules/@bingads-webui-campaign-react/website-list-selector/src/repository.ts","../../../node_modules/@bingads-webui-campaign-react/website-list-selector/src/main.tsx","../../../node_modules/@bingads-webui-campaign-react/with-recommendation-services/src/with-services.js","../../../node_modules/@bingads-webui-campaign-react/with-store-details/src/style.js","../../../node_modules/@bingads-webui-campaign-react/with-store-details/src/with-store-from-provider-id.js","../../../node_modules/@bingads-webui-campaign-react/with-store-details/src/shared.js","../../../node_modules/@bingads-webui-campaign-react/with-store-details/src/with-store-url.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components-v2/src/shimmers/section-shimmer.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components-v2/src/panels/placement-target-panel.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components-v2/src/panels/panel-keys.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components/src/utils/shared.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components/src/components/name.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components/src/utils/location-target-shared.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components/src/components/specific-location-targets-editor.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components/src/components/shimmers/single-line-shimmer.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components/src/components/shimmers/section-shimmer.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components/src/components/shimmers/ad-schedule-shimmer.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components/src/components/shimmers/radius-shimmer.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components/src/components/shimmers/audience-signal-shimmer.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components/src/components/shimmers/with-shimmer.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components/src/constants/error_entity.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components/src/constants/default-data.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components/src/constants/campaign-language.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components/src/components/validated-campaign-name.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components/src/components/panels/campaign-name-panel.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components/src/components/panels/panel-keys.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components/src/components/validated-language-target.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components/src/components/panels/language-target-panel.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components/src/utils/ad-schedule-shared.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components/src/components/panels/ad-schedule-panel.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components/src/components/panels/single-language-target-panel.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components/src/utils/use-localize-budget.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components/src/components/panels/budget-panel.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components/src/components/panels/date-settings-panel.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components/src/components/shimmers/date-settings-shimmer.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components/src/components/panels/short-headlines-panel.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components/src/components/panels/descriptions-panel.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components/src/components/panels/images-panel.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components/src/components/conversion-based-bidding-banner.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components/src/components/panels/bid-strategy-panel.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components/src/components/panels/url-options-panel.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components/src/components/sections/bid-value.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components/src/components/panels/bid-value-panel.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components/src/components/panels/app-details-panel.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components/src/components/sections/audience-signal-section.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components/src/utils/data-converter.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components/src/utils/p$dadeRange.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components/src/utils/conversion-goal-shared.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components/src/utils/final-url-expansion-shared.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components/src/utils/bid-budget-shared.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components/src/utils/listing-group-shared.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components/src/utils/store-shared.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components/src/utils/search-themes-shared.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components/src/utils/disclaimer-shared.js","../../../node_modules/@bingads-webui-campaign-react/wizard-shared-components/src/constants/localization-keys.js","../../../node_modules/@bingads-webui-campaign-react/xandr-campaign/src/steps/ad-group/target/device.js","../../../node_modules/@bingads-webui-campaign-react/xandr-campaign/src/steps/ad-group/target/gender.js","../../../node_modules/@bingads-webui-campaign-react/xandr-campaign/src/steps/ad-group/target/age-range.js","../../../node_modules/@bingads-webui-campaign-react/xandr-campaign/src/common/constants.js","../../../node_modules/@bingads-webui-campaign-react/xandr-campaign/src/model/criterions.js","../../../node_modules/@bingads-webui-campaign-react/xandr-campaign/src/model/ad-group-criterions.js","../../../node_modules/@bingads-webui-campaign-react/xandr-campaign/src/common/shared-components.js","../../../node_modules/@bingads-webui-campaign-react/xandr-campaign/src/steps/ad-group/use-step-ad-group-state.js","../../../node_modules/@bingads-webui-campaign-react/xandr-campaign/src/steps/ad-group/target/audience-picker.js","../../../node_modules/@bingads-webui-campaign-react/xandr-campaign/src/steps/ad-group/target/styles/audience-picker.js","../../../node_modules/@bingads-webui-campaign-react/xandr-campaign/src/steps/ad-group/frequency-capping/index.js","../../../node_modules/@bingads-webui-campaign-react/xandr-campaign/src/steps/ad-group/genre-targeting/genre-selection-double-list-box.js","../../../node_modules/@bingads-webui-campaign-react/xandr-campaign/src/steps/ad-group/genre-targeting/get-styles.js","../../../node_modules/@bingads-webui-campaign-react/xandr-campaign/src/steps/ad-group/genre-targeting/index.js","../../../node_modules/@bingads-webui-campaign-react/xandr-campaign/src/steps/ad-group/genre-targeting/genre-options.js","../../../node_modules/@bingads-webui-campaign-react/xandr-campaign/src/steps/ad-group/step-ad-group-settings-styles.js","../../../node_modules/@bingads-webui-campaign-react/xandr-campaign/src/steps/ad-group/reach-estimate/reach-estimate-styles.js","../../../node_modules/@bingads-webui-campaign-react/xandr-campaign/src/steps/ad-group/reach-estimate/audience-meter.js","../../../node_modules/@bingads-webui-campaign-react/xandr-campaign/src/steps/ad-group/reach-estimate/utils.js","../../../node_modules/@bingads-webui-campaign-react/xandr-campaign/src/steps/ad-group/reach-estimate/index.js","../../../node_modules/@bingads-webui-campaign-react/xandr-campaign/src/common/deal-potential-impression/deal-potential-impression-styles.js","../../../node_modules/@bingads-webui-campaign-react/xandr-campaign/src/common/deal-potential-impression/deal-potential-impression.js","../../../node_modules/@bingads-webui-campaign-react/xandr-campaign/src/steps/ad-group/frequency-capping/netflixFrequencyCapping.js","../../../node_modules/@bingads-webui-campaign-react/xandr-campaign/src/steps/ad-group/netflix-tc/netflix-tc-agreement.js","../../../node_modules/@bingads-webui-campaign-react/xandr-campaign/src/steps/ad-group/step-ad-group-settings.js","../../../node_modules/@bingads-webui-campaign-react/xandr-campaign/src/common/date-settings.js","../../../node_modules/@bingads-webui-campaign-react/xandr-campaign/src/model/ad-group.js","../../../node_modules/@bingads-webui-campaign-react/xandr-campaign/src/model/ad-group-bulk.js","../../../node_modules/@bingads-webui-campaign-react/xandr-campaign/src/model/campaign-criterions.js","../../../node_modules/@bingads-webui-campaign-react/xandr-campaign/src/model/campaign.js","../../../node_modules/@bingads-webui-campaign-react/xandr-campaign/src/model/call-to-action-settings.js","../../../node_modules/@bingads-webui-campaign-react/xandr-campaign/src/steps/ad-group/step-wizard-config.js","../../../node_modules/@bingads-webui-campaign-react/xandr-campaign/src/model/campaign-bulk.js","../../../node_modules/@bingads-webui-campaign-react/xandr-campaign/src/steps/campaign-settings/audience-setting/audience-setting.js","../../../node_modules/@bingads-webui-campaign-react/xandr-campaign/src/steps/campaign-settings/use-step-campaign-settings-state.js","../../../node_modules/@bingads-webui-campaign-react/xandr-campaign/src/steps/campaign-settings/step-campaign-settings-styles.js","../../../node_modules/@bingads-webui-campaign-react/xandr-campaign/src/steps/campaign-settings/step-campaign-settings.js","../../../node_modules/@bingads-webui-campaign-react/xandr-campaign/src/steps/campaign-settings/step-wizard-config.js","../../../node_modules/@bingads-webui-campaign-react/xandr-campaign/src/common/dataLayer/MmpFetchProvider.js","../../../node_modules/@bingads-webui-campaign-react/xandr-campaign/src/common/dataLayer/config.js","../../../node_modules/@bingads-webui-campaign-react/xandr-display-ads-campaign-shared-components/src/ad-components/styles.js","../../../node_modules/@bingads-webui-campaign-react/xandr-display-ads-campaign-shared-components/src/ad-components/cropped-preview.js","../../../node_modules/@bingads-webui-campaign-react/xandr-display-ads-campaign-shared-components/src/ad-components/image-targets.js","../../../node_modules/@bingads-webui-campaign-react/xandr-display-ads-campaign-shared-components/src/ad-components/ad-preview.js","../../../node_modules/@bingads-webui-campaign-react/xandr-display-ads-campaign-shared-components/src/ad-components/pagination.js","../../../node_modules/@bingads-webui-campaign-react/xandr-display-ads-campaign-shared-components/src/model/utl.js","../../../node_modules/@bingads-webui-campaign-react/xandr-display-ads-campaign-shared-components/src/ad-components/add-image/add-image.js","../../../node_modules/@bingads-webui-campaign-react/xandr-display-ads-campaign-shared-components/src/ad-components/populate-images.js","../../../node_modules/@bingads-webui-campaign-react/xandr-display-ads-campaign-shared-components/src/model/constants.js","../../../node_modules/@bingads-webui-campaign-react/xandr-display-ads-campaign-shared-components/src/ad-components/validated-image-experience.js","../../../node_modules/@bingads-webui-campaign-react/xandr-display-ads-campaign-shared-components/src/ad-components/display-ad-panel.js","../../../node_modules/@bingads-webui-campaign-react/xandr-display-ads-campaign-shared-components/src/ad-components/display-ads-container.js","../../../node_modules/@bingads-webui-campaign-react/xandr-display-ads-campaign-shared-components/src/ad-components/validated-legacy-call-to-action.js","../../../node_modules/@bingads-webui-campaign-react/xandr-display-ads-campaign-shared-components/src/ad-components/use-display-ads-copilot.js","../../../node_modules/@bingads-webui-campaign-react/xandr-display-ads-campaign-shared-components/src/ad-components/display-ad-panel-with-copilot.js","../../../node_modules/@bingads-webui-campaign-react/xandr-display-ads-campaign-shared-components/src/ad-components/view-all-recommendations-panel.js","../../../node_modules/@bingads-webui-campaign-react/xandr-display-ads-campaign-shared-components/src/ad-components/carousel-style.js","../../../node_modules/@bingads-webui-campaign-react/xandr-display-ads-campaign-shared-components/src/ad-components/display-ads-suggestion-carousel.js","../../../node_modules/@bingads-webui-campaign-react/xandr-display-ads-campaign-shared-components/src/ad-components/creative-workbench.js","../../../node_modules/@bingads-webui-campaign-react/xandr-display-ads-campaign-shared-components/src/ad-components/ratio-picker.js","../../../node_modules/@bingads-webui-campaign-react/xandr-display-ads-campaign-shared-components/src/ad-components/create-another-ad-menu.js","../../../node_modules/@bingads-webui-campaign-react/xandr-display-ads-campaign-shared-components/src/ad-components/create-ad-with-ai-dialog.js","../../../node_modules/@bingads-webui-campaign-react/xandr-display-ads-campaign-shared-components/src/ad-components/use-create-ads.js","../../../node_modules/@bingads-webui-campaign-react/xandr-display-ads-campaign-shared-components/src/ad-components/display-ads-container-with-copilot.js","../../../node_modules/@bingads-webui-campaign-react/xandr-display-ads-campaign-shared-components/src/ad-components/ad-editor.js","../../../node_modules/@bingads-webui-campaign-react/xandr-display-ads-campaign-shared-components/src/ad-components/display-ads-with-copilot.js","../../../node_modules/@bingads-webui-campaign-react/xandr-display-ads-campaign-shared-components/src/model/verified-tracking-setting.js","../../../node_modules/@bingads-webui-campaign-react/xandr-display-ads-campaign-shared-components/src/wizards/use-display-ads-repository.js","../../../node_modules/@bingads-webui-campaign-react/xandr-display-ads-campaign-shared-components/src/wizards/edit-ad-footer.js","../../../node_modules/@bingads-webui-campaign-react/xandr-display-ads-campaign-shared-components/src/wizards/edit-display-ad-wizard.js","../../../node_modules/@bingads-webui-campaign-react/xandr-display-ads-campaign/src/steps/ad/use-step-ads-state.js","../../../node_modules/@bingads-webui-campaign-react/xandr-display-ads-campaign/src/steps/ad/step-ads-settings.js","../../../node_modules/@bingads-webui-campaign-react/xandr-display-ads-campaign/src/steps/ad/step-wizard-config.js","../../../node_modules/@bingads-webui-campaign-react/xandr-display-ads-campaign/src/xandr-display-ads-campaign-crud-scenarios.js","../../../node_modules/@bingads-webui-campaign-react/xandr-display-ads-campaign/src/pages/xandr-display-ads-campaign-creation-page.js","../../../node_modules/@bingads-webui-campaign-react/xandr-display-ads-campaign/src/pages/xandr-display-ads-campaign-settings-page.js","../../../node_modules/@bingads-webui-campaign-react/xandr-display-ads-campaign/src/pages/xandr-display-ads-ad-group-settings-page.js","../../../node_modules/@bingads-webui-campaign-react/xandr-display-ads-campaign/src/pages/xandr-display-ads-ad-group-creation-page.js","../../../node_modules/@bingads-webui-campaign-react/xandr-video-campaign-shared-components/src/common/shared-components.js","../../../node_modules/@bingads-webui-campaign-react/xandr-video-campaign-shared-components/src/ad-components/styles.js","../../../node_modules/@bingads-webui-campaign-react/xandr-video-campaign-shared-components/src/ad-components/ad-preview.js","../../../node_modules/@bingads-webui-campaign-react/xandr-video-campaign-shared-components/src/ad-components/add-video-button.js","../../../node_modules/@bingads-webui-campaign-react/xandr-video-campaign-shared-components/src/ad-components/carousel-style.js","../../../node_modules/@bingads-webui-campaign-react/xandr-video-campaign-shared-components/src/ad-components/video-suggestion-card.js","../../../node_modules/@bingads-webui-campaign-react/xandr-video-campaign-shared-components/src/ad-components/video-recommendations-panel.js","../../../node_modules/@bingads-webui-campaign-react/xandr-video-campaign-shared-components/src/ad-components/video-ads-suggestion-carousel.js","../../../node_modules/@bingads-webui-campaign-react/xandr-video-campaign-shared-components/src/ad-components/use-video-ads-copilot.js","../../../node_modules/@bingads-webui-campaign-react/xandr-video-campaign-shared-components/src/ad-components/video-metadata.js","../../../node_modules/@bingads-webui-campaign-react/xandr-video-campaign-shared-components/src/common/bulk.js","../../../node_modules/@bingads-webui-campaign-react/xandr-video-campaign-shared-components/src/common/bulk-upsert-errors.js","../../../node_modules/@bingads-webui-campaign-react/xandr-video-campaign-shared-components/src/common/map-bulk-upsert-errors.js","../../../node_modules/@bingads-webui-campaign-react/xandr-video-campaign-shared-components/src/common/deal-detils-style.js","../../../node_modules/@bingads-webui-campaign-react/xandr-video-campaign-shared-components/src/common/target-constants.js","../../../node_modules/@bingads-webui-campaign-react/xandr-video-campaign-shared-components/src/common/deal-constraints/targets-constraints.js","../../../node_modules/@bingads-webui-campaign-react/xandr-video-campaign-shared-components/src/common/account-currency-daily-exchange-rate.js","../../../node_modules/@bingads-webui-campaign-react/xandr-video-campaign-shared-components/src/common/deal-details.js","../../../node_modules/@bingads-webui-campaign-react/xandr-video-campaign-shared-components/src/common/format-numbers.js","../../../node_modules/@bingads-webui-campaign-react/xandr-video-campaign-shared-components/src/model/ad.js","../../../node_modules/@bingads-webui-campaign-react/xandr-video-campaign-shared-components/src/model/ad-bulk.js","../../../node_modules/@bingads-webui-campaign-react/xandr-video-campaign-shared-components/src/common/fetch-exchange-rate-mapping.js","../../../node_modules/@bingads-webui-campaign-react/xandr-video-campaign-shared-components/src/common/utils.js","../../../node_modules/@bingads-webui-campaign-react/xandr-video-campaign-shared-components/src/ad-components/validated-video-experience.js","../../../node_modules/@bingads-webui-campaign-react/xandr-video-campaign-shared-components/src/ad-components/final-url.js","../../../node_modules/@bingads-webui-campaign-react/xandr-video-campaign-shared-components/src/ad-components/video-panel.js","../../../node_modules/@bingads-webui-campaign-react/xandr-video-campaign-shared-components/src/ad-components/page-manager.js","../../../node_modules/@bingads-webui-campaign-react/xandr-video-campaign-shared-components/src/ad-components/video-ads-container.js","../../../node_modules/@bingads-webui-campaign-react/xandr-video-campaign-shared-components/src/model/deal.js","../../../node_modules/@bingads-webui-campaign-react/xandr-video-campaign-shared-components/src/ad-components/ad-editor-footer.js","../../../node_modules/@bingads-webui-campaign-react/xandr-video-campaign-shared-components/src/ad-components/ad-editor.js","../../../node_modules/@bingads-webui-campaign-react/xandr-video-campaign/src/steps/ad/use-step-ads-state.js","../../../node_modules/@bingads-webui-campaign-react/xandr-video-campaign/src/steps/ad/step-ads-settings.js","../../../node_modules/@bingads-webui-campaign-react/xandr-video-campaign/src/steps/ad/step-wizard-config.js","../../../node_modules/@bingads-webui-campaign-react/xandr-video-campaign/src/xandr-video-campaign-crud-scenarios.js","../../../node_modules/@bingads-webui-campaign-react/xandr-video-campaign/src/pages/xandr-video-campaign-creation-page.js","../../../node_modules/@bingads-webui-campaign-react/xandr-video-campaign/src/pages/xandr-video-campaign-settings-page.js","../../../node_modules/@bingads-webui-campaign-react/xandr-video-campaign/src/pages/xandr-video-ad-group-settings-page.js","../../../node_modules/@bingads-webui-campaign-react/xandr-video-campaign/src/pages/xandr-video-ad-group-creation-page.js","../../../node_modules/@bingads-webui-campaign/ad-creator-tools-instrumentation/src/instrumentation-schema.js","../../../node_modules/@bingads-webui-campaign/ad-creator-tools-instrumentation/src/instrumentation.js","../../../node_modules/@bingads-webui-campaign/ad-creator-tools-instrumentation/src/serialize-effect-settings.js","../../../node_modules/@bingads-webui-campaign/ad-distribution/src/ad-distribution.js","../../../node_modules/@bingads-webui-campaign/ad-distribution/src/use-backbone-view.js","../../../node_modules/@bingads-webui-campaign/ad-distribution/src/validated-ad-distribution.js","../../../node_modules/@bingads-webui-campaign/ad-extensions-shared/src/common-styles.js","../../../node_modules/@bingads-webui-campaign/ad-extensions-shared/src/components/custom-params-realtime-view.js","../../../node_modules/@bingads-webui-campaign/ad-extensions-shared/src/components/custom-parameters.js","../../../node_modules/@bingads-webui-campaign/ad-extensions-shared/src/components/error-context.js","../../../node_modules/@bingads-webui-campaign/ad-extensions-shared/src/rules/errors.js","../../../node_modules/@bingads-webui-campaign/ad-extensions-shared/src/components/errors.js","../../../node_modules/@bingads-webui-campaign/ad-extensions-shared/src/components/final-url-suffix.js","../../../node_modules/@bingads-webui-campaign/ad-extensions-shared/src/components/input-with-extra.js","../../../node_modules/@bingads-webui-campaign/ad-extensions-shared/src/components/language-select.js","../../../node_modules/@bingads-webui-campaign/ad-extensions-shared/src/components/scheduling-view-realtime-subscription.js","../../../node_modules/@bingads-webui-campaign/ad-extensions-shared/src/components/scheduling.js","../../../node_modules/@bingads-webui-campaign/ad-extensions-shared/src/components/tracking-template.js","../../../node_modules/@bingads-webui-campaign/ad-extensions-shared/src/rules/campaign-type-check.js","../../../node_modules/@bingads-webui-campaign/ad-extensions-shared/src/rules/odata-errors.js","../../../node_modules/@bingads-webui-campaign/ad-extensions-shared/src/rules/stringify-error.js"],"sourcesContent":["export interface AccountPlacementExclusionList {\r\n ItemCount: number;\r\n AssociationCount: number;\r\n Id: number;\r\n Name: string;\r\n}\r\n\r\nexport type ListType = 'block' | 'allow';\r\n\r\nexport type CampaignType = 'Audience' | 'BrandAwarenessVideoAds' | 'Search' | 'Display' | number | null;\r\n\r\nexport interface ListSelectorProps {\r\n listType: ListType\r\n selected?: AccountPlacementExclusionList[]\r\n onChange: (selected: any[]) => void\r\n}\r\n\r\nexport const TEXT_CONTENT = {\r\n description: {\r\n block: _TL_('Add website exclusion lists to your campaign to help prevent your ads from being shown on certain websites. Note: You can create, edit, and view account-level lists in your Website control lists.'),\r\n allow: _TL_('Adding allowed website lists to this campaign is optional. This option helps you specify sites where you want your ads to appear, giving you more control over ad placement while still maintaining broader distribution across other sites.'),\r\n },\r\n listLabel: {\r\n block: _TL_('Blocked Lists'),\r\n allow: _TL_('Allowed Lists'),\r\n },\r\n ariaLabel: {\r\n block: _TL_('Select blocked website lists'),\r\n allow: _TL_('Select allowed website lists'),\r\n },\r\n};\r\n","\r\nimport React from 'react';\r\nimport { makeStyles, tokens, Text, makeStaticStyles } from '@fluentui/react-components';\r\n\r\nexport const useTagContentStyles = makeStyles({\r\n Text: {\r\n fontWeight: tokens.fontWeightSemibold,\r\n },\r\n List: {\r\n fontWeight: tokens.fontWeightSemibold,\r\n alignItems: 'center',\r\n display: 'flex',\r\n columnGap: tokens.spacingHorizontalXS,\r\n marginBottom: tokens.spacingVerticalL,\r\n },\r\n ListItem: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n },\r\n Container: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n marginBottom: tokens.spacingVerticalL,\r\n },\r\n ButtonContainer: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'space-between',\r\n columnGap: tokens.spacingHorizontalL,\r\n width: 'fit-content',\r\n },\r\n MessageBar: {\r\n width: 'fit-content',\r\n },\r\n PopoverContentBefore: {\r\n fontWeight: tokens.fontWeightSemibold,\r\n paddingLeft: tokens.spacingHorizontalS,\r\n },\r\n EntitySelector: {\r\n maxWidth: '100%',\r\n marginTop: tokens.spacingVerticalS,\r\n },\r\n});\r\n\r\nconst useStaticStyles = makeStaticStyles({\r\n '.entities-collection-container': {\r\n maxWidth: '630px',\r\n },\r\n});\r\n\r\nexport const CustomWebsiteListTagItemRenderer: React.FC<{content: string}> = ({ content }) => {\r\n useStaticStyles();\r\n const classes = useTagContentStyles();\r\n return (\r\n \r\n {content}\r\n \r\n );\r\n};\r\n","import { RequestMethod, ServerContext } from './types/api';\r\n\r\nexport const callMT = async (\r\n url: string,\r\n method: RequestMethod,\r\n body: any,\r\n headers\r\n) => {\r\n const response = await fetch(url, {\r\n method,\r\n body: JSON.stringify(body),\r\n headers,\r\n });\r\n\r\n if (!response.ok) {\r\n throw new Error('Network response was not ok');\r\n }\r\n\r\n return response.json();\r\n};\r\n\r\nexport const getHeadersRequestByServerContext = (serverContext: ServerContext) => ({\r\n 'Content-Type': 'application/json',\r\n lcid: serverContext.CurrentUser.Locale,\r\n 'x-ms-clientapplication': 'bingadsweb',\r\n 'x-ms-applicationname': 'bingadsweb',\r\n 'x-ms-pagetrackingid': serverContext.PageTrackingId,\r\n Authorization: `CCMTSmallToken ${serverContext.Token}`,\r\n CustomerAccountId: serverContext.CurrentAccount.Id,\r\n CustomerId: serverContext.CurrentAccount.AdvertiserCustomerID,\r\n});\r\n","export interface ServerContext {\r\n CurrentAccount: {\r\n Id: number;\r\n AdvertiserCustomerID: number;\r\n };\r\n CurrentUser: {\r\n Locale: string;\r\n };\r\n PageTrackingId: string;\r\n ServicesEndpoints: {\r\n CmAPI: string;\r\n };\r\n Token: string;\r\n}\r\nexport interface SharedEntity {\r\n Id: number;\r\n Name: string;\r\n Description: string;\r\n Type: string;\r\n Scope: string;\r\n}\r\nexport interface BatchErrors {\r\n Index: number;\r\n Message: string;\r\n}\r\nexport interface SharedEntityAssociation {\r\n EntityId: number;\r\n EntityType: 'Campaign' | 'Account';\r\n SharedEntityId: number; // AccountPlacementExclusionListId\r\n SharedEntityType: 'AccountPlacementExclusionList';\r\n SharedEntityCustomerId?: number; // Ignore for account level\r\n}\r\nexport interface SetSharedEntityAssociationsRequest {\r\n Associations: SharedEntityAssociation[];\r\n SharedEntityScope: string;\r\n}\r\nexport interface GetSharedEntitiesRequest {\r\n SharedEntityScope: string;\r\n SharedEntityType: string;\r\n SharedEntityId: number;\r\n}\r\nexport interface GetSharedEntitiesResponse {\r\n SharedEntities: SharedEntity[];\r\n PartialErrors?: BatchErrors[];\r\n}\r\nexport interface SetSharedEntityAssociationsResponse {\r\n PartialErrors?: BatchErrors[];\r\n}\r\nexport interface DeleteSharedEntityAssociationsRequest {\r\n Associations: SharedEntityAssociation[];\r\n SharedEntityScope: string;\r\n}\r\nexport interface DeleteSharedEntityAssociationsResponse {\r\n PartialErrors?: BatchErrors[];\r\n}\r\nexport interface GetSharedEntityAssociationsByEntityIdsRequest {\r\n EntityIds: number[];\r\n EntityType: string;\r\n SharedEntityScope: string;\r\n SharedEntityType: string;\r\n}\r\nexport interface GetSharedEntityAssociationsByEntityIdsResponse {\r\n Associations: SharedEntityAssociation[];\r\n PartialErrors?: BatchErrors[];\r\n}\r\nexport enum RequestMethod {\r\n Post = 'POST',\r\n Delete = 'DELETE'\r\n}\r\n","import { getHeadersRequestByServerContext, callMT } from './utils';\r\nimport {\r\n RequestMethod,\r\n ServerContext,\r\n GetSharedEntitiesResponse,\r\n GetSharedEntitiesRequest,\r\n SetSharedEntityAssociationsResponse,\r\n SetSharedEntityAssociationsRequest,\r\n DeleteSharedEntityAssociationsResponse,\r\n DeleteSharedEntityAssociationsRequest,\r\n GetSharedEntityAssociationsByEntityIdsResponse,\r\n GetSharedEntityAssociationsByEntityIdsRequest,\r\n SharedEntity,\r\n} from './types/api';\r\n\r\nclass WebsiteListSelectorRepository {\r\n async getListsByAccountId(serverContext = {} as ServerContext): Promise {\r\n const headers = getHeadersRequestByServerContext(serverContext);\r\n const body: GetSharedEntitiesRequest = {\r\n SharedEntityScope: 'Account',\r\n SharedEntityType: 'AccountPlacementExclusionList',\r\n SharedEntityId: headers.CustomerAccountId,\r\n };\r\n\r\n return callMT(\r\n `${serverContext.ServicesEndpoints?.CmAPI}v13/SharedEntities/Query`,\r\n RequestMethod.Post,\r\n body,\r\n headers\r\n );\r\n }\r\n\r\n async associateListsToCampaign(\r\n serverContext = {} as ServerContext,\r\n lists: SharedEntity[],\r\n campaignId: number\r\n ): Promise {\r\n const headers = getHeadersRequestByServerContext(serverContext);\r\n\r\n const previousAssociations = await this.getListsByCampaignId(serverContext, campaignId);\r\n\r\n // Convert arrays to sets for easier comparison\r\n const previousSet = new Set(previousAssociations.map(({ Id }) => Id));\r\n const newSet = new Set(lists.map(({ Id }) => Id));\r\n\r\n // Find ids in previous associations but not in new associations\r\n const removedAssociations = Array.from(previousSet).filter(id => !newSet.has(id));\r\n\r\n // Find ids in new associations but not in previous associations\r\n const newAssociations = Array.from(newSet).filter(id => !previousSet.has(id));\r\n\r\n // Delete associations that are not in the new list\r\n await this.deleteListAssociationsByAccountId(serverContext, removedAssociations, campaignId);\r\n\r\n // if there are no new associations, return early\r\n if (newAssociations.length === 0) {\r\n return {};\r\n }\r\n\r\n const body: SetSharedEntityAssociationsRequest = {\r\n SharedEntityScope: 'Account',\r\n Associations: newAssociations.map(id => ({\r\n SharedEntityId: id,\r\n SharedEntityType: 'AccountPlacementExclusionList',\r\n SharedEntityScope: 'Account',\r\n EntityId: campaignId,\r\n EntityType: 'Campaign',\r\n })),\r\n };\r\n\r\n // Create new associations\r\n return callMT(\r\n `${serverContext.ServicesEndpoints?.CmAPI}v13/SharedEntityAssociations/Set`,\r\n RequestMethod.Post,\r\n body,\r\n headers\r\n );\r\n }\r\n\r\n async deleteListAssociationsByAccountId(\r\n serverContext = {} as ServerContext,\r\n lists: number[],\r\n campaignId: number\r\n ): Promise {\r\n const headers = getHeadersRequestByServerContext(serverContext);\r\n const body: DeleteSharedEntityAssociationsRequest = {\r\n SharedEntityScope: 'Account',\r\n Associations: lists.map(id => ({\r\n SharedEntityId: id,\r\n SharedEntityType: 'AccountPlacementExclusionList',\r\n EntityId: campaignId,\r\n EntityType: 'Campaign',\r\n })),\r\n };\r\n\r\n return callMT(\r\n `${serverContext.ServicesEndpoints?.CmAPI}v13/SharedEntityAssociations`,\r\n RequestMethod.Delete,\r\n body,\r\n headers\r\n );\r\n }\r\n\r\n async getListsByCampaignId(\r\n serverContext = {} as ServerContext,\r\n payload: number\r\n ): Promise {\r\n const headers = getHeadersRequestByServerContext(serverContext);\r\n const body: GetSharedEntityAssociationsByEntityIdsRequest = {\r\n EntityIds: [payload],\r\n EntityType: 'Campaign',\r\n SharedEntityScope: 'Account',\r\n SharedEntityType: 'AccountPlacementExclusionList',\r\n };\r\n\r\n const associated: GetSharedEntityAssociationsByEntityIdsResponse = await callMT(\r\n `${serverContext.ServicesEndpoints?.CmAPI}v13/SharedEntityAssociations/QueryByEntityIds`,\r\n RequestMethod.Post,\r\n body,\r\n headers\r\n );\r\n\r\n const queryBody: GetSharedEntitiesRequest = {\r\n SharedEntityScope: 'Account',\r\n SharedEntityType: 'AccountPlacementExclusionList',\r\n SharedEntityId: associated.Associations[0].EntityId,\r\n };\r\n\r\n const entities: GetSharedEntitiesResponse = await callMT(\r\n `${serverContext.ServicesEndpoints?.CmAPI}v13/SharedEntities/Query`,\r\n RequestMethod.Post,\r\n queryBody,\r\n headers\r\n );\r\n\r\n return associated.Associations.map(item =>\r\n entities.SharedEntities.find(entity => entity.Id === item.SharedEntityId) || { Id: item.SharedEntityId } as SharedEntity);\r\n }\r\n}\r\n\r\nexport const repository = new WebsiteListSelectorRepository();\r\n","import React, { useContext } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { LearnMoreLink } from '@bingads-webui-campaign-react/help';\r\nimport { ServerEntitySelectorInline } from '@bingads-webui-fluent-component/entity-selector';\r\nimport { Text, Label } from '@fluentui/react-components';\r\nimport { Info16Regular } from '@fluentui/react-icons';\r\nimport { ListSelectorProps, TEXT_CONTENT } from './types/exclusion-lists';\r\nimport { CustomWebsiteListTagItemRenderer, useTagContentStyles } from './custom-tag-item-renderer';\r\nimport { repository } from './repository';\r\n\r\nexport const WebsiteListSelector = ({ listType, selected, onChange }: ListSelectorProps) => {\r\n const i18n: any = useContext(I18nContext);\r\n const serverContext: any = useContext(ServerContext);\r\n const classes = useTagContentStyles();\r\n\r\n const fetchData = () => repository.getListsByAccountId(serverContext).then(response => ({\r\n count: response.SharedEntities?.length || 0,\r\n items: (response.SharedEntities || []).map(item => ({\r\n ...item,\r\n // selection tree requires those props\r\n value: item.Id,\r\n content: item.Name,\r\n })),\r\n }));\r\n\r\n const renderItemContent = flatItem => (\r\n
\r\n \r\n {flatItem.Name}\r\n \r\n \r\n {flatItem.ItemCount}{' '}{i18n.getString(_TL_('websites'))}\r\n \r\n
\r\n );\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n\r\n
\r\n \r\n {`${i18n.getString(_TL_('Lists'))} (${selected?.length})`}\r\n \r\n \r\n
\r\n\r\n item?.Name.toLowerCase().includes(search.toLowerCase())}\r\n selectionMode=\"multiselect\"\r\n onRenderTagContent={CustomWebsiteListTagItemRenderer}\r\n onRenderItemContent={renderItemContent}\r\n popOverContentBefore={{i18n.getString(TEXT_CONTENT.listLabel[listType])}}\r\n aria-label={i18n.getString(TEXT_CONTENT.ariaLabel[listType])}\r\n />\r\n
\r\n );\r\n};\r\n\r\nWebsiteListSelector.defaultProps = {\r\n listType: 'block',\r\n selected: [],\r\n onChange: () => { },\r\n};\r\n","/* eslint-disable jsx-a11y/anchor-is-valid, no-script-url */\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport * as urlUtil from '@bingads-webui/url-util';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\nimport { getDisplayName } from '@bingads-webui-react/hoc-utils';\r\nimport { ClientCenterCustomerService } from '@bingads-webui/clientcenter-customer-service';\r\nimport { oldAlertCenterAdapter } from '@bingads-webui-campaign/notification-center';\r\nimport asyncScheduler from '@bingads-webui-static-legacy/async-scheduler';\r\nimport * as errI18n from '@bingads-webui-component-legacy/api-errors-campaign/index';\r\n\r\nimport {\r\n RecommendationService,\r\n RecommendationDownloadService,\r\n setRecommendationCache,\r\n getRecommendationCache,\r\n MCC_ACCOUNTS_CAPPING,\r\n} from '@bingads-webui-campaign/recommendation-core';\r\n\r\nconst flatten = entities => _.chain(entities)\r\n .map((entity) => {\r\n if (entity.isCustomer) {\r\n if (entity.unAuthorized) {\r\n return [];\r\n }\r\n return flatten(entity.children);\r\n }\r\n return entity;\r\n })\r\n .flatten()\r\n .value();\r\n\r\nexport const withRecommendationServices = ({\r\n currentScenario,\r\n currentActivity,\r\n odataPath,\r\n}) => (WrappedComponent) => {\r\n const HoC = (props) => {\r\n const {\r\n appConfig,\r\n permissions,\r\n pageContext,\r\n i18n,\r\n odata,\r\n cacheManager,\r\n } = props.deps;\r\n\r\n const { getODataErrors } = errI18n;\r\n\r\n const customerService = new ClientCenterCustomerService({ ccBaseUrl: appConfig.get('CCBaseUrl') });\r\n let accountIdsPromise = null;\r\n if (props.isMCC) {\r\n const AccountIdListCache = getRecommendationCache('account-id-list');\r\n accountIdsPromise = _.isUndefined(AccountIdListCache) ? customerService.getCustomerHierarchy({\r\n cid: props.scope.customerId,\r\n uid: props.scope.userId,\r\n returnOnlyDirectlyLinkedEntities: false,\r\n limit: MCC_ACCOUNTS_CAPPING,\r\n }).then((data) => {\r\n const { customerHierarchyEntities } = data;\r\n const flattenedAccounts = flatten(_.first(customerHierarchyEntities).children);\r\n const result = _.chain(flattenedAccounts).map(account => account.id).value();\r\n setRecommendationCache('account-id-list', result);\r\n return result;\r\n }) : Promise.resolve(AccountIdListCache);\r\n } else {\r\n accountIdsPromise = Promise.resolve([]);\r\n }\r\n\r\n const source = urlUtil.getParameter('recsrc') || appConfig.get('recsrc');\r\n\r\n // don't initialize if scope is not set\r\n let dataService = null;\r\n let downloadService = null;\r\n if (props.scope != null) {\r\n dataService = new RecommendationService({\r\n scope: props.scope,\r\n showAlertHandler: oldAlertCenterAdapter.show.bind(oldAlertCenterAdapter),\r\n i18n,\r\n currentScenario,\r\n currentActivity,\r\n odataPath,\r\n permissions,\r\n lcid: pageContext.CultureLcid,\r\n pageContext,\r\n ccJsData: props.ccJsData,\r\n accountIdsPromise,\r\n isMCC: props.isMCC,\r\n asyncScheduler,\r\n alertCenter: oldAlertCenterAdapter,\r\n odata,\r\n newI18n: props.vnextDeps.newI18n || props.newI18n,\r\n cacheManager,\r\n channel: props.channel,\r\n });\r\n downloadService = new RecommendationDownloadService({\r\n scope: props.scope,\r\n alertCenter: oldAlertCenterAdapter,\r\n asyncScheduler,\r\n cacheManager,\r\n getODataErrors,\r\n i18n,\r\n odata,\r\n pageContext,\r\n permissions,\r\n isMCC: props.isMCC,\r\n recommendationService: dataService,\r\n });\r\n }\r\n\r\n return (\r\n \r\n );\r\n };\r\n\r\n HoC.displayName = `withService(${getDisplayName(WrappedComponent)})`;\r\n HoC.propTypes = {\r\n deps: PropTypes.shape({\r\n appConfig: PropTypes.objectOf(PropTypes.any).isRequired,\r\n instrumentation: PropTypes.object,\r\n permissions: PropTypes.object.isRequired,\r\n pageContext: PropTypes.object.isRequired,\r\n i18n: PropTypes.object.isRequired,\r\n }).isRequired,\r\n scope: PropTypes.shape({\r\n accountId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n adGroupId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n campaignId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n customerId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n userId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n token: PropTypes.string,\r\n }),\r\n ccJsData: PropTypes.objectOf(PropTypes.object),\r\n isMCC: PropTypes.bool,\r\n vnextDeps: PropTypes.shape({\r\n newI18n: PropTypes.object,\r\n }),\r\n channel: PropTypes.string,\r\n };\r\n HoC.defaultProps = {\r\n scope: null,\r\n isMCC: false,\r\n ccJsData: undefined,\r\n vnextDeps: {},\r\n channel: null,\r\n };\r\n\r\n hoistNonReactStatics(HoC, WrappedComponent);\r\n\r\n return HoC;\r\n};\r\n","export const getStyles = () => ({\r\n withStoreLoadingContainer: {\r\n minHeight: 84,\r\n '& .loading': {\r\n paddingTop: 30,\r\n },\r\n },\r\n withStoreErrorContainer: {\r\n paddingTop: 10,\r\n '& .alert': {\r\n alignItems: 'center',\r\n padding: [4, 16, 4, 12],\r\n\r\n '& .alert-image:before': {\r\n lineHeight: '32px',\r\n },\r\n\r\n '& .alert__content': {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n flexGrow: 1,\r\n alignItems: 'center',\r\n },\r\n\r\n '& .alert__action': {\r\n marginLeft: 'auto',\r\n marginTop: 'unset',\r\n },\r\n },\r\n UrlContainer: {\r\n width: '435px',\r\n '& .store-url-text-container': {\r\n marginBottom: '10px',\r\n },\r\n },\r\n MobileUrlContainer: {\r\n width: '435px',\r\n marginTop: '20px',\r\n },\r\n },\r\n});\r\n\r\n","import { noop, isArray, some } from 'underscore';\r\nimport React, { useState, useEffect, useMemo, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\nimport { getDisplayName } from '@bingads-webui-react/hoc-utils';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { getStoreQueriesWithLocalMock } from '@bingads-webui-campaign-react/merchant-shared';\r\nimport { Loading } from '@bingads-webui-campaign-react/loading';\r\nimport { Alert } from '@bingads-webui-react/alert';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { getStyles } from './style';\r\n\r\nconst storeFormattedText = (providerId, getStoreResponse) => (getStoreResponse ? `ID: ${getStoreResponse.Id}, Name: ${getStoreResponse.Name}` : `ID: ${providerId}`);\r\n\r\nconst isStoreNotFoundFetchError = storeFetchError =>\r\n storeFetchError && isArray(storeFetchError.raw) && some(storeFetchError.raw, ({ ErrorCode }) => ErrorCode === 'StoreNotFoundErr');\r\n\r\nconst createStoreDetails = (providerId, getStoreResponse) => ({\r\n id: providerId,\r\n name: getStoreResponse && getStoreResponse.Name,\r\n storeUrl: getStoreResponse && getStoreResponse.DestinationUrl,\r\n text: storeFormattedText(providerId, getStoreResponse),\r\n});\r\n\r\nexport function withStoreFromProviderId(WrappedComponent) {\r\n const HOC = (props) => {\r\n const {\r\n i18n,\r\n providerId,\r\n updateValidation,\r\n } = props;\r\n\r\n const [storeFetchState, setStoreFetchState] = useState({ fetchComplete: !providerId, storeDetails: null });\r\n const activity = useContext(ActivityContext);\r\n\r\n const storeQueries = useMemo(() => getStoreQueriesWithLocalMock(), []);\r\n\r\n useEffect(() => {\r\n if (providerId) {\r\n updateValidation(['store load in progress'], null, false /* shouldDirty */);\r\n storeQueries.getStore(providerId, true /* withCache */).then(\r\n (getStoreResponse) => {\r\n updateValidation([], null, false /* shouldDirty */);\r\n setStoreFetchState({ fetchComplete: true, storeDetails: createStoreDetails(providerId, getStoreResponse) });\r\n },\r\n (getStoreError) => {\r\n if (isStoreNotFoundFetchError(getStoreError)) {\r\n // deleted store and draft (placeholder) store scenarios will both return StoreNotFoundErr - we still return store details\r\n // with the information we have.\r\n if (activity) {\r\n activity.trace(`Store was not found for Store ID: ${providerId}`);\r\n }\r\n\r\n updateValidation([], null, false /* shouldDirty */);\r\n setStoreFetchState({ fetchComplete: true, storeDetails: createStoreDetails(providerId) });\r\n } else {\r\n if (activity) {\r\n activity.error(`Store load failed: ${getStoreError instanceof Error ? getStoreError : JSON.stringify(getStoreError)}`);\r\n }\r\n // TODO: This needs to be imporoved. Currently setting empty validation message to mar invalid but\r\n // to avoid showing message in withError HOC since this wrapper has it's own error message for load failure.\r\n updateValidation([''], null, false /* shouldDirty */);\r\n setStoreFetchState({ fetchComplete: true, getStoreError });\r\n }\r\n }\r\n );\r\n }\r\n }, [activity, providerId, storeQueries, updateValidation]);\r\n\r\n const classes = useDefaultStyles(getStyles);\r\n\r\n const loadingSpinner = useMemo(() => (\r\n
\r\n \r\n
\r\n ), [classes.withStoreLoadingContainer, i18n]);\r\n\r\n const loadingError = useMemo(() => (\r\n
\r\n )}\r\n dismissible={false}\r\n />\r\n
\r\n ), [classes.withStoreErrorContainer, i18n]);\r\n\r\n if (providerId && !storeFetchState.fetchComplete) {\r\n return loadingSpinner;\r\n }\r\n\r\n if (providerId && storeFetchState.fetchComplete && storeFetchState.getStoreError) {\r\n return loadingError;\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n };\r\n\r\n HOC.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n providerId: PropTypes.number,\r\n updateValidation: PropTypes.func,\r\n };\r\n\r\n HOC.defaultProps = {\r\n providerId: undefined,\r\n updateValidation: noop,\r\n };\r\n\r\n HOC.displayName = `withStoreFromProviderId(${getDisplayName(WrappedComponent)})`;\r\n hoistNonReactStatics(HOC, WrappedComponent);\r\n\r\n return HOC;\r\n}\r\n","\r\nexport const getTopLevelDomainFromUrl = (url) => {\r\n const hostNameParts = new URL(url).hostname.split('.');\r\n const partCount = hostNameParts.length;\r\n\r\n if (partCount >= 2) {\r\n const ccTldSpecified = partCount >= 3 && (hostNameParts[partCount - 2].length === 3 || hostNameParts[partCount - 2].length === 2) && hostNameParts[partCount - 1].length === 2;\r\n return ccTldSpecified ?\r\n `${hostNameParts[partCount - 3]}.${hostNameParts[partCount - 2]}.${hostNameParts[partCount - 1]}` :\r\n `${hostNameParts[partCount - 2]}.${hostNameParts[partCount - 1]}`;\r\n }\r\n\r\n return null;\r\n};\r\n\r\nexport const isFinalUrlAlignedWithStoreDomain = (finalUrl, storeDomain) => {\r\n const finalUrlDomain = getTopLevelDomainFromUrl(finalUrl);\r\n return finalUrlDomain && storeDomain && finalUrlDomain.toLowerCase() === storeDomain.toLowerCase();\r\n};\r\n\r\n","import React, { useRef, useMemo, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { noop, result } from 'underscore';\r\nimport classNames from 'classnames';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\nimport { getDisplayName } from '@bingads-webui-react/hoc-utils';\r\nimport { Text } from '@fluentui/react';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { isFinalUrlAlignedWithStoreDomain, getTopLevelDomainFromUrl } from './shared';\r\nimport { getStyles } from './style';\r\n\r\nexport function withStoreUrl(WrappedComponent) {\r\n const HOC = (props) => {\r\n const {\r\n i18n,\r\n validationProps,\r\n updateValidation,\r\n storeDetails,\r\n } = props;\r\n\r\n const classes = useDefaultStyles(getStyles);\r\n const storeDetailsInternal = useRef(null);\r\n\r\n useMemo(() => {\r\n const storeUrl = storeDetails && storeDetails.storeUrl;\r\n if (storeUrl) {\r\n const storeDomain = getTopLevelDomainFromUrl(storeUrl);\r\n storeDetailsInternal.current = { url: storeUrl, domain: storeDomain };\r\n }\r\n }, [storeDetails]);\r\n\r\n const validationOnUrlChange = useCallback((value) => {\r\n const storeDomain = result(storeDetailsInternal.current, 'domain', null);\r\n let finalUrlValidatorError;\r\n if (storeDomain) {\r\n finalUrlValidatorError = isFinalUrlAlignedWithStoreDomain(value, storeDomain) ?\r\n null :\r\n i18n.getString(_TL_('Final URL domain does not match merchant center store URL'));\r\n }\r\n return finalUrlValidatorError;\r\n }, [i18n]);\r\n\r\n const storeUrl = result(storeDetailsInternal.current, 'url', null);\r\n const storeUrlText = useMemo(() => (storeUrl &&\r\n
\r\n { i18n.getString(_TL_('Merchant center store URL: {{storeUrl}}'), { storeUrl }) }\r\n
\r\n ), [i18n, storeUrl]);\r\n\r\n return (\r\n \r\n
\r\n {storeUrlText}\r\n \r\n
\r\n
\r\n );\r\n };\r\n\r\n HOC.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n providerId: PropTypes.number,\r\n updateValidation: PropTypes.func,\r\n storeDetails: PropTypes.shape({\r\n storeUrl: PropTypes.string,\r\n }),\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n FinalUrls: PropTypes.arrayOf(PropTypes.string),\r\n }),\r\n updateOnMount: PropTypes.bool,\r\n }).isRequired,\r\n };\r\n\r\n HOC.defaultProps = {\r\n providerId: undefined,\r\n updateValidation: noop,\r\n storeDetails: undefined,\r\n };\r\n\r\n HOC.displayName = `withStoreUrl(${getDisplayName(WrappedComponent)})`;\r\n hoistNonReactStatics(HOC, WrappedComponent);\r\n\r\n return HOC;\r\n}\r\n","import React from 'react';\r\nimport { Shimmer, ShimmerElementType } from '@fluentui/react';\r\n\r\nexport const radiusShimmerElement = [\r\n { type: ShimmerElementType.line, width: 20, height: 20 },\r\n { type: ShimmerElementType.gap, width: 5 },\r\n { type: ShimmerElementType.line, height: 16, width: 300 },\r\n { type: ShimmerElementType.gap, height: 20, width: '100%' },\r\n];\r\n\r\nexport const SectionShimmer = () => (\r\n
\r\n \r\n \r\n \r\n
\r\n);\r\n","import React, { useContext, useMemo, useEffect, useCallback, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n TextTitle,\r\n ValidatedPanel,\r\n getPanelErrorProps\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { RadioGroup } from '@bingads-webui-react/radio';\r\nimport { Label } from '@bingads-webui-react/fabric-control';\r\nimport { advancedSettingsSectionStyle, toggleButtonStyle } from '@bingads-webui-campaign-react/common-styles';\r\nimport { creationCommonStyle } from '@bingads-webui-campaign-react/campaign-adgroup-settings-shared-styles';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\n\r\nimport classNames from 'classnames';\r\nimport _ from 'underscore';\r\n\r\nimport { PlacementImg } from '../media';\r\nimport { SectionShimmer } from '../shimmers';\r\n\r\nconst getStyles = (__, core) =>\r\n ({\r\n placementTargetSettingContainer: {\r\n ...creationCommonStyle(core),\r\n ...advancedSettingsSectionStyle(core),\r\n ...toggleButtonStyle(core),\r\n '& .title': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n marginBottom: '8px',\r\n },\r\n '& .intent-target-options': {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n '& ul': {\r\n listStyle: 'none',\r\n padding: 0,\r\n margin: 0,\r\n '& .radio': {\r\n marginBottom: '15px',\r\n },\r\n },\r\n },\r\n '& .radio-group-option': {\r\n position: 'absolute',\r\n top: '3px',\r\n '&-description-text': {\r\n fontSize: '12px',\r\n },\r\n },\r\n },\r\n });\r\n\r\nconst RadioGroupOption = ({ titleString, descriptionString, updateSelection }) => {\r\n const [isSelected, setIsSelected] = useState(false);\r\n const titleStyle = {\r\n color: isSelected ? '#242424' : '#616161',\r\n fontSize: '16px',\r\n };\r\n\r\n useEffect(() => {\r\n const result = updateSelection();\r\n setIsSelected(result);\r\n }, [updateSelection]);\r\n\r\n return (\r\n \r\n \r\n \r\n {titleString}\r\n \r\n
\r\n {descriptionString}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nRadioGroupOption.propTypes = {\r\n titleString: PropTypes.string.isRequired,\r\n descriptionString: PropTypes.string.isRequired,\r\n updateSelection: PropTypes.func.isRequired,\r\n};\r\n\r\nconst PlacementTargetingSettingsInternal = (props) => {\r\n const i18n = useContext(I18nContext);\r\n const mobilePlacementsTitleString = i18n.getString(_TL_('All Microsoft mobile placements'));\r\n const mobilePlacementsDescriptionString = i18n.getString(_TL_('This option includes mobile Microsoft sites and additional partner traffic for extended reach and lower cost per click.'));\r\n const gamingPlacementsTitleString = i18n.getString(_TL_('Microsoft owned and operated mobile placements'));\r\n const gamingPlacementsDescriptionString = i18n.getString(_TL_('This option includes all Microsoft sites and select partner traffic with performance and conversion rates similar to that of Microsoft Bing.'));\r\n const classes = useDefaultStyles(getStyles);\r\n\r\n const { validationProps, updateValidation, setActiveKey } = props;\r\n const intentOptions = {\r\n Gaming: 'Gaming',\r\n Mobile: 'Mobile',\r\n };\r\n const activeKey = validationProps.data.placementTarget || intentOptions.Mobile;\r\n\r\n if (!validationProps.data.placementTarget) {\r\n updateValidation([], { placementTarget: activeKey });\r\n }\r\n\r\n\r\n const intentOptionsKeys = useMemo(() => (_.compact([\r\n intentOptions.Mobile,\r\n intentOptions.Gaming,\r\n ])), [intentOptions.Gaming, intentOptions.Mobile]);\r\n\r\n const updateSelection = useCallback(option => activeKey === option, [activeKey]);\r\n\r\n const intentOptionsKeysMap = useMemo(() => ({\r\n [intentOptions.Mobile]: (\r\n updateSelection(intentOptions.Mobile)}\r\n />\r\n ),\r\n [intentOptions.Gaming]: (\r\n updateSelection(intentOptions.Gaming)}\r\n />\r\n ),\r\n }), [intentOptions.Mobile, intentOptions.Gaming, mobilePlacementsTitleString, mobilePlacementsDescriptionString, gamingPlacementsTitleString, gamingPlacementsDescriptionString, updateSelection]);\r\n\r\n const onIntentOptionChanged = useCallback((key) => {\r\n setActiveKey(key);\r\n updateValidation([], { placementTarget: key });\r\n }, [setActiveKey, updateValidation]);\r\n\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n
    \r\n intentOptionsKeysMap[key]}\r\n onChange={onIntentOptionChanged}\r\n checked={activeKey}\r\n getItemId={_.identity}\r\n />\r\n
\r\n
\r\n
);\r\n};\r\n\r\nPlacementTargetingSettingsInternal.propTypes = {\r\n setActiveKey: PropTypes.func.isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n placementTarget: PropTypes.string,\r\n }),\r\n }),\r\n};\r\n\r\nPlacementTargetingSettingsInternal.defaultProps = {\r\n validationProps: {\r\n data: {\r\n placementTarget: 'Mobile',\r\n },\r\n },\r\n};\r\n\r\nconst PlacementTargetSettings = withCustomValidation(PlacementTargetingSettingsInternal);\r\n\r\nexport const PlacementTargetPanel = (props) => {\r\n const classes = useDefaultStyles(getStyles);\r\n const [activeKey, setActiveKey] = useState('Mobile');\r\n\r\n const {\r\n isLoading,\r\n expand,\r\n ...rest\r\n } = props;\r\n return (\r\n
\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand,\r\n expandKey: 'placement-target',\r\n }}\r\n {...rest}\r\n >\r\n {\r\n isLoading ?\r\n :\r\n \r\n }\r\n \r\n
\r\n );\r\n};\r\n\r\nPlacementTargetPanel.propTypes = {\r\n isLoading: PropTypes.bool,\r\n expand: PropTypes.func.isRequired,\r\n data: PropTypes.string,\r\n};\r\n\r\nPlacementTargetPanel.defaultProps = {\r\n isLoading: false,\r\n data: 'Mobile',\r\n};\r\n","export const PANEL_KEYS = {\r\n PLACEMENT_TARGET: 'placement-target',\r\n};\r\n","import React, { Fragment } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Stack, Text } from '@bingads-webui-react/fabric-control';\r\n\r\nexport const ErrorString = ({\r\n error,\r\n}) => (\r\n \r\n {error}\r\n \r\n);\r\n\r\nErrorString.propTypes = {\r\n error: PropTypes.string,\r\n};\r\nErrorString.defaultProps = {\r\n error: '',\r\n};\r\n\r\nexport const Errors = ({\r\n errors,\r\n}) => (\r\n
\r\n {errors && errors.map(error => ErrorString({ error }))}\r\n
\r\n);\r\n\r\nErrors.propTypes = {\r\n errors: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n};\r\n\r\nexport const SpanWithComponent = ({\r\n SpanText,\r\n Component,\r\n}) => (\r\n \r\n {SpanText}\r\n \r\n \r\n);\r\n\r\nSpanWithComponent.propTypes = {\r\n Component: PropTypes.func.isRequired,\r\n SpanText: PropTypes.oneOfType([PropTypes.func, PropTypes.string]).isRequired,\r\n};\r\n\r\nexport const withVerticalAlignCenterSpan = Component => (\r\n props,\r\n defaultRender\r\n) => (\r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nconst nameErrorCode = {\r\n RequiredField: 'RequiredField',\r\n ExceedLength: 'ExceedLength',\r\n};\r\n\r\nexport const getNameErrorMsg = ({ code, i18n, maxLength }) => {\r\n switch (code) {\r\n case nameErrorCode.RequiredField:\r\n return i18n.getString(_TL_('Required field'));\r\n case nameErrorCode.ExceedLength:\r\n return i18n.getString(_TL_('Field should not exceed {{number}} characters'), { number: maxLength });\r\n default:\r\n return null;\r\n }\r\n};\r\n\r\nexport const validateName = ({ name, maxLength }) => {\r\n let error = null;\r\n if (name == null || name === '') {\r\n error = nameErrorCode.RequiredField;\r\n } else if (name && name.length > maxLength) {\r\n error = nameErrorCode.ExceedLength;\r\n }\r\n return error;\r\n};\r\n\r\nexport const checkShouldShowError = attribute => attribute.isInvalid || attribute.isDirty;\r\nexport const checkShouldShowErrors = attribute => (attribute.errors && attribute.errors.length > 0);\r\n","import React, { useContext } from 'react';\r\nimport classnames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\nimport { TextField } from '@bingads-webui-react/fabric-control';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { withVerticalAlignCenterSpan, ErrorString, getNameErrorMsg, validateName, checkShouldShowError, checkShouldShowErrors, Errors } from '../utils/shared';\r\n\r\nconst maxLength = 128;\r\n\r\nexport const isCampaignNameValid = name => validateName({ name, maxLength }) == null;\r\n\r\nexport const defaultName = undefined;\r\n\r\nexport const CampaignName = React.memo((props) => {\r\n const {\r\n name,\r\n setName,\r\n } = props;\r\n const i18n = useContext(I18nContext);\r\n const campaingNameText = i18n.getString(_TL_('Campaign name'));\r\n const error = name.error ? name.error : getNameErrorMsg({ code: validateName({ name: name.value, maxLength }), i18n, maxLength });\r\n const shouldShowError = checkShouldShowError(name);\r\n return (\r\n
\r\n ())}\r\n onChange={(e, value) => {\r\n setName({\r\n value,\r\n isDirty: true,\r\n isInvalid: isCampaignNameValid(value) !== true,\r\n });\r\n }}\r\n styles={{ fieldGroup: { width: 461, marginTop: '8px' } }}\r\n />\r\n {shouldShowError && error && }\r\n {checkShouldShowErrors(name) && x.message)} />}\r\n
\r\n );\r\n});\r\n\r\nCampaignName.propTypes = {\r\n name: PropTypes.shape({}),\r\n setName: PropTypes.func.isRequired,\r\n};\r\n\r\nCampaignName.defaultProps = {\r\n name: {\r\n value: undefined,\r\n isDirty: false,\r\n isInvalid: false,\r\n },\r\n};\r\n","import { LocalizationKeys } from '../constants/localization-keys';\r\n\r\nexport const locationTargetsOptionKeys = {\r\n everywhere: 'everywhere',\r\n specific: 'specific',\r\n bundleOrDefaultMarket: 'bundle',\r\n};\r\n\r\nexport const getLocationsString = (i18n, settings, isAdGroupLevel = false, bidStrategyType, hideBid = false) => {\r\n if (settings == null) {\r\n return i18n.getString(_TL_('Targeting everywhere.'));\r\n }\r\n\r\n const {\r\n targetOption,\r\n currentLocations = [],\r\n } = settings;\r\n\r\n let isTargetEverywhere = targetOption === locationTargetsOptionKeys.everywhere;\r\n if (isAdGroupLevel) {\r\n isTargetEverywhere = currentLocations.length === 0;\r\n }\r\n\r\n if (isTargetEverywhere) {\r\n return i18n.getString(_TL_('Targeting everywhere.'));\r\n }\r\n\r\n let details = '';\r\n let includedLocations = currentLocations.filter(x => x.SelectionStatus === 'Included');\r\n const excludedLocations = currentLocations.filter(x => x.SelectionStatus === 'Excluded');\r\n if (bidStrategyType === 'Commission') {\r\n includedLocations = [];\r\n }\r\n if (includedLocations.length) {\r\n details += `${i18n.getString(_TL_('Included locations: '))}`;\r\n includedLocations.forEach((target, index) => {\r\n details += target.location;\r\n if (!hideBid) {\r\n details += `: ${i18n.getString(LocalizationKeys[target.bidAdjustmentDropdown])}`;\r\n details += `: ${target.bidAdjustmentInput}%`;\r\n }\r\n if (index < includedLocations.length - 1) {\r\n details += ', ';\r\n }\r\n });\r\n }\r\n if (excludedLocations.length) {\r\n if (includedLocations.length) {\r\n details += ', ';\r\n }\r\n details += `${i18n.getString(_TL_('Excluded locations: '))}`;\r\n excludedLocations.forEach((target, index) => {\r\n details += target.location;\r\n if (index < excludedLocations.length - 1) {\r\n details += ', ';\r\n }\r\n });\r\n }\r\n return details;\r\n};\r\n\r\nexport const getLocationTargetTitleDetails = (i18n, location, isAdGroupLevel, bidStrategyType, hideBid = false) => {\r\n if (!location) return '';\r\n const {\r\n parentLevelSettings,\r\n currentLevelSettings,\r\n useParentLevel,\r\n } = location;\r\n\r\n if (useParentLevel) {\r\n if (isAdGroupLevel) {\r\n return getLocationsString(i18n, parentLevelSettings, isAdGroupLevel, bidStrategyType, hideBid);\r\n }\r\n return i18n.getString(_TL_('Targeting everywhere.'));\r\n }\r\n\r\n return getLocationsString(i18n, currentLevelSettings, isAdGroupLevel, bidStrategyType, hideBid);\r\n};\r\n\r\nexport const mergeLocations = (includedLocations, excludedLocations, targetedLocations) => {\r\n let conflictingCount = 0;\r\n let duplicateCount = 0;\r\n\r\n // Create Sets of existing location IDs for efficient lookup\r\n const includedLocationIds = new Set(includedLocations.map(loc => loc.location.Id));\r\n const excludedLocationIds = new Set(excludedLocations.map(loc => loc.location.Id));\r\n\r\n const newIncludedLocations = [];\r\n const newExcludedLocations = [];\r\n\r\n // Process targeted included locations\r\n targetedLocations.includedLocations.forEach((loc) => {\r\n const locId = loc.location.Id;\r\n if (excludedLocationIds.has(locId)) {\r\n conflictingCount += 1;\r\n } else if (includedLocationIds.has(locId)) {\r\n duplicateCount += 1;\r\n } else {\r\n newIncludedLocations.push(loc);\r\n }\r\n });\r\n\r\n // Process targeted excluded locations\r\n targetedLocations.excludedLocations.forEach((loc) => {\r\n const locId = loc.location.Id;\r\n if (includedLocationIds.has(locId)) {\r\n conflictingCount += 1;\r\n } else if (excludedLocationIds.has(locId)) {\r\n duplicateCount += 1;\r\n } else {\r\n newExcludedLocations.push(loc);\r\n }\r\n });\r\n\r\n return {\r\n includedLocations: [...includedLocations, ...newIncludedLocations],\r\n excludedLocations: [...excludedLocations, ...newExcludedLocations],\r\n conflictingCount,\r\n duplicateCount,\r\n };\r\n};\r\n","import React, { useContext, useCallback, useMemo, useRef, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport {\r\n LocationTargetsEditor as BingMapsLocationTargetsEditor,\r\n isLegacyLocationAndRadiusEqual,\r\n BingMapsContextProvider,\r\n getIsRadiusTarget as defaultGetIsRadiusTarget,\r\n TARGETING_TYPE,\r\n} from '@bingads-webui-react/bing-maps';\r\nimport { BulkLocationsSearchProvider, BulkLocationsSearchDrawer } from '@bingads-webui-react/bulk-locations-search';\r\nimport { Dismiss24Regular } from '@fluentui/react-icons';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n Toaster,\r\n useToastController,\r\n ToastTitle,\r\n Toast,\r\n ToastTrigger,\r\n ToastBody,\r\n} from '@fluentui/react-toast';\r\nimport { Button } from '@fluentui/react-components';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { mergeLocations } from '../utils/location-target-shared';\r\n\r\n\r\n// reference: private/new-expert-signup/packages/expert-location-target/src/with-bing-maps-context-provider.js\r\nconst BING_MAPS_API_KEY = 'AgRuCtepgsuuCYV9J6S6w1j8ay2JJwnu8f5EPgv4kkoJoIuka8yui-NzKrvlESTQ';\r\n\r\nconst toasterId = 'bulkLocationsSearchToasterID';\r\n\r\nexport const SpecificLocationTargetsEditor = (props) => {\r\n const {\r\n data,\r\n setData,\r\n edmCampaign,\r\n allowPositiveLocationTargeting,\r\n allowNegativeLocationTargeting,\r\n showSearchTypeOptions,\r\n strings,\r\n scope,\r\n defaultSelectedSearchType,\r\n isBrandAwarenessCampaignScenario,\r\n showBulkLocations,\r\n } = props;\r\n const i18n = useContext(I18nContext);\r\n const mapRef = useRef();\r\n const mapBulkLocationsRef = useRef();\r\n const [isDrawerOpen, setIsBulkLocationsSearchDrawerOpen] = useState(false);\r\n const { dispatchToast, dismissToast } = useToastController(toasterId);\r\n const serverContext = useContext(ServerContext);\r\n const {\r\n includedLocations,\r\n excludedLocations,\r\n } = data;\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n // TODO: useMemo\r\n\r\n // reference: private/multi-channel/packages/mca-data/src/use-campaign-api-call/use-campaign-api-call.js\r\n const {\r\n Token,\r\n } = serverContext;\r\n\r\n const makeLocationsCall = useCallback((search) => {\r\n const {\r\n cid,\r\n aid,\r\n } = scope.values;\r\n\r\n return edmCampaign.Customers.$withKey(cid).Accounts.$withKey(aid).Locations.get({\r\n select: ['ParentLocations'],\r\n search,\r\n ...(isBrandAwarenessCampaignScenario ? { IsBrandAwarenessCampaignScenario: true } : {}),\r\n IsBrandAwarenessCampaignScenario: isBrandAwarenessCampaignScenario,\r\n }).toPromise()\r\n .then(response => response)\r\n .catch(error => console.log(error));\r\n }, [scope, edmCampaign, isBrandAwarenessCampaignScenario]);\r\n\r\n // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars\r\n const makeBulkLocationsCall = useCallback((searchTerms, countryCode) => {\r\n const {\r\n cid,\r\n aid,\r\n } = scope.values;\r\n\r\n activity.signal('BulkSearchLocations called');\r\n\r\n return edmCampaign.Customers.$withKey(cid).Accounts.$withKey(aid).Locations['Default.BulkSearchLocations']\r\n .$makeCall({\r\n query: {\r\n select: ['Location'],\r\n ...(countryCode ? { filter: { where: `Location/CountryCode eq '${countryCode}'` } } : {}),\r\n ...(isBrandAwarenessCampaignScenario ? { servingChannel: 'Xandr' } : {}),\r\n },\r\n payload: {\r\n searchTerms,\r\n },\r\n }).toPromise()\r\n .then(response => response)\r\n .catch(error => console.log(error));\r\n }, [scope, edmCampaign, isBrandAwarenessCampaignScenario]);\r\n\r\n const renderToaster = useCallback((toastId, intent, toastTitle, toastMessage) =>\r\n dispatchToast(\r\n \r\n \r\n }\r\n onClick={() => dismissToast(toastId)}\r\n />\r\n \r\n }\r\n >\r\n {toastTitle}\r\n \r\n {toastMessage && {toastMessage}}\r\n ,\r\n {\r\n toastId, pauseOnHover: true, timeout: 8000, position: 'bottom-start', intent,\r\n }\r\n ), [dispatchToast, i18n]);\r\n\r\n const handleBulkLocationsSearchDrawerOpen = useCallback(() => {\r\n activity.signal('Add Bulk Locations panel opens');\r\n setIsBulkLocationsSearchDrawerOpen(true);\r\n }, [setIsBulkLocationsSearchDrawerOpen]);\r\n\r\n const searchOptions = useMemo(() => ({\r\n getLocations: makeLocationsCall,\r\n skipBingMapAPISearch: isBrandAwarenessCampaignScenario,\r\n }), [isBrandAwarenessCampaignScenario, makeLocationsCall]);\r\n\r\n const maxItems = 1000;\r\n const getIsRadiusTarget = useCallback((location, targetingType) => {\r\n if (targetingType) {\r\n return defaultGetIsRadiusTarget(location, targetingType) &&\r\n targetingType === TARGETING_TYPE.Included;\r\n }\r\n return defaultGetIsRadiusTarget(location, targetingType);\r\n }, []);\r\n\r\n // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars\r\n const setBulkLocationsData = useCallback((targetedLocations) => {\r\n const result = mergeLocations(includedLocations, excludedLocations, targetedLocations);\r\n activity.signal('Add Locations Button clicked')\r\n\r\n if (result.conflictingCount > 0) {\r\n renderToaster('bulkLocationConflict', 'warning', i18n.getString(_TL_('Unable to add locations')), i18n.getString(_TL_('{{count}} location(s) cannot be added due to targeting conflicts.'), { count: result.conflictingCount }));\r\n }\r\n if (result.duplicateCount > 0) {\r\n renderToaster('bulkLocationSuccess', 'success', i18n.getString(_TL_('Duplicate locations removed')), i18n.getString(_TL_('We automatically removed {{count}} duplicate location(s).'), { count: result.duplicateCount }));\r\n }\r\n\r\n setData({\r\n includedLocations: result.includedLocations,\r\n excludedLocations: result.excludedLocations,\r\n });\r\n }, [includedLocations, excludedLocations, setData, renderToaster, i18n]);\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n\r\n \r\n setData({ includedLocations: bingMapLocations })}\r\n onNegativeLocationTargetsChange={bingMapLocations => setData({ excludedLocations: bingMapLocations })}\r\n customizedLocationEqual={isLegacyLocationAndRadiusEqual}\r\n getIsRadiusTarget={getIsRadiusTarget}\r\n />\r\n \r\n
\r\n );\r\n};\r\n\r\nSpecificLocationTargetsEditor.propTypes = {\r\n setData: PropTypes.func.isRequired,\r\n data: PropTypes.shape({}),\r\n scope: PropTypes.shape({\r\n values: PropTypes.shape({\r\n cid: PropTypes.number.isRequired,\r\n aid: PropTypes.number.isRequired,\r\n }).isRequired,\r\n }).isRequired,\r\n edmCampaign: PropTypes.shape({}).isRequired,\r\n allowPositiveLocationTargeting: PropTypes.bool,\r\n allowNegativeLocationTargeting: PropTypes.bool,\r\n showSearchTypeOptions: PropTypes.bool,\r\n showBulkLocations: PropTypes.bool,\r\n strings: PropTypes.shape({}),\r\n defaultSelectedSearchType: PropTypes.string,\r\n isBrandAwarenessCampaignScenario: PropTypes.bool,\r\n};\r\n\r\nSpecificLocationTargetsEditor.defaultProps = {\r\n data: {},\r\n allowPositiveLocationTargeting: true,\r\n allowNegativeLocationTargeting: true,\r\n showSearchTypeOptions: true,\r\n showBulkLocations: false,\r\n strings: {},\r\n defaultSelectedSearchType: undefined,\r\n isBrandAwarenessCampaignScenario: false,\r\n};\r\n","import React from 'react';\r\nimport { Shimmer, ShimmerElementType } from '@fluentui/react';\r\n\r\nconst singleLineShimmer = [\r\n { type: ShimmerElementType.line, width: 200, height: 50 },\r\n];\r\n\r\nexport const SingleLineShimmer = () => (\r\n
\r\n \r\n
\r\n);\r\n","import React from 'react';\r\nimport { Shimmer, ShimmerElementType } from '@fluentui/react';\r\n\r\nexport const radiusShimmerElement = [\r\n { type: ShimmerElementType.line, width: 20, height: 20 },\r\n { type: ShimmerElementType.gap, width: 5 },\r\n { type: ShimmerElementType.line, height: 16, width: 300 },\r\n { type: ShimmerElementType.gap, height: 20, width: '100%' },\r\n];\r\n\r\nexport const SectionShimmer = () => (\r\n
\r\n \r\n \r\n \r\n
\r\n);\r\n","import React from 'react';\r\nimport { Shimmer, ShimmerElementType, mergeStyles } from '@fluentui/react';\r\n\r\nconst wrapperClass = mergeStyles({\r\n padding: 2,\r\n selectors: {\r\n '& > .ms-Shimmer-container': {\r\n margin: '10px 0',\r\n border: 'none',\r\n },\r\n },\r\n});\r\n\r\nconst shimmerWithElementFirstRow = [\r\n { type: ShimmerElementType.line, height: 30 },\r\n { type: ShimmerElementType.gap, width: 10, height: 30 },\r\n { type: ShimmerElementType.line, height: 30 },\r\n { type: ShimmerElementType.gap, width: 10, height: 30 },\r\n { type: ShimmerElementType.line, height: 30 },\r\n { type: ShimmerElementType.gap, width: 10, height: 30 },\r\n { type: ShimmerElementType.line, height: 30 },\r\n { type: ShimmerElementType.gap, width: 10, height: 30 },\r\n { type: ShimmerElementType.line, height: 30 },\r\n { type: ShimmerElementType.gap, width: 10, height: 30 },\r\n];\r\n\r\nconst shimmerWithElementSecondRow = [\r\n { type: ShimmerElementType.circle, height: 24 },\r\n { type: ShimmerElementType.gap, width: '2%', height: 24 },\r\n { type: ShimmerElementType.line, height: 16, width: '20%' },\r\n { type: ShimmerElementType.gap, width: '100%', height: 16 },\r\n];\r\n\r\nexport const AdScheduleShimmer = () => (\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n);\r\n","import React from 'react';\r\nimport { Shimmer, ShimmerElementType } from '@fluentui/react';\r\n\r\nexport const radiusShimmerElement = [\r\n { type: ShimmerElementType.line, width: 20, height: 20 },\r\n { type: ShimmerElementType.gap, width: 5 },\r\n { type: ShimmerElementType.line, height: 16, width: 300 },\r\n { type: ShimmerElementType.gap, height: 20, width: '100%' },\r\n];\r\n\r\nexport const RadiusShimmer = () => (\r\n \r\n);\r\n","import React from 'react';\r\nimport { Shimmer, ShimmerElementType } from '@fluentui/react';\r\n\r\nconst audienceShimmerElement = [\r\n { type: ShimmerElementType.line, width: 200, height: 100 },\r\n { type: ShimmerElementType.gap, width: '2%', height: 100 },\r\n { type: ShimmerElementType.line, width: 200, height: 100 },\r\n { type: ShimmerElementType.gap, width: '100%', height: 100 },\r\n];\r\n\r\nexport const AudienceSignalShimmer = () => (\r\n
\r\n \r\n
\r\n);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nexport const withShimmer = (WrappedComponent, Shimmer) => {\r\n const ShimmerWrapper = ({ showShimmer, ...props }) => {\r\n if (showShimmer) {\r\n return ;\r\n }\r\n\r\n return ;\r\n };\r\n\r\n ShimmerWrapper.propTypes = {\r\n showShimmer: PropTypes.bool,\r\n };\r\n\r\n ShimmerWrapper.defaultProps = {\r\n showShimmer: false,\r\n };\r\n\r\n return ShimmerWrapper;\r\n};\r\n\r\n","export const ERROR_ENTITY = {\r\n Campaign: 'campaign',\r\n AdGroup: 'adGroup',\r\n AssetGroup: 'assetGroup',\r\n CampaignLocation: 'campaignLocation',\r\n CampaignRadius: 'campaignRadius',\r\n CampaignNegativeLocation: 'campaignNegativeLocation',\r\n CampaignLocationIntent: 'campaignLocationIntent',\r\n CampaignDayTimeCriterion: 'campaignDayTimeCriterion',\r\n CampaignNegativeWebpage: 'campaignNegativeWebpage',\r\n AudienceGroupAssetGroupAssociation: 'audienceGroupAssetGroupAssociation',\r\n BrandListAssociation: 'brandListAssociation',\r\n};\r\n","export const CnDefaultLocationTargetsViewModel = {\r\n bidMode: false,\r\n currentLevelSettings: {\r\n currentLocations: [{\r\n Criterion: {\r\n BidAdjustment: 0,\r\n LocationCriterion: {\r\n CountryCode: 'CN',\r\n Latitude: 36.5594,\r\n LesLocationType: 'Country',\r\n LocationId: 39,\r\n LocationType: 'Country',\r\n Longitude: 103.753,\r\n Name: 'China',\r\n NameTypeCombo: 'China (country/region)',\r\n Type: 'Location',\r\n },\r\n OriginalBidAdjustment: 0,\r\n OriginalCashbackPercent: undefined,\r\n Type: 'Location',\r\n },\r\n CriterionType: 'Location',\r\n Id: undefined,\r\n SelectionStatus: 'Included',\r\n Status: 'Active',\r\n bidAdjustmentDropdown: 'Increase by',\r\n bidAdjustmentInput: 0,\r\n location: 'China (country/region)',\r\n }],\r\n initLocations: [],\r\n peopleInLocation: true,\r\n peopleSearchingForLocation: true,\r\n targetOption: 'specific',\r\n },\r\n parentLevelSettings: {},\r\n useParentLevel: false,\r\n};\r\n\r\nexport const globalDefaultLocationTargetsViewModel = {\r\n bidMode: false,\r\n currentLevelSettings: {\r\n initLocations: [],\r\n peopleInLocation: true,\r\n peopleSearchingForLocation: true,\r\n targetOption: 'everywhere',\r\n },\r\n parentLevelSettings: {},\r\n useParentLevel: false,\r\n};\r\n\r\nexport const getDefaultLocationTargetsViewModel = isCnMarket => (isCnMarket ? CnDefaultLocationTargetsViewModel : globalDefaultLocationTargetsViewModel);\r\n\r\nexport const getDefaultLanguagesViewModel = isCnMarket => (isCnMarket ? ['SimplifiedChinese'] : ['All']);\r\n","export const campaignLanguageStrings = {\r\n None: _TL_('Use my campaign settings'),\r\n Albanian: _TL_('Albanian'),\r\n Arabic: _TL_('Arabic'),\r\n Bosnian: _TL_('Bosnian'),\r\n Bulgarian: _TL_('Bulgarian'),\r\n Croatian: _TL_('Croatian'),\r\n Czech: _TL_('Czech'),\r\n Danish: _TL_('Danish'),\r\n Dutch: _TL_('Dutch'),\r\n English: _TL_('English'),\r\n Estonian: _TL_('Estonian'),\r\n Finnish: _TL_('Finnish'),\r\n French: _TL_('French'),\r\n German: _TL_('German'),\r\n Greek: _TL_('Greek'),\r\n Hungarian: _TL_('Hungarian'),\r\n Icelandic: _TL_('Icelandic'),\r\n Italian: _TL_('Italian'),\r\n Japanese: _TL_('Japanese'),\r\n Latvian: _TL_('Latvian'),\r\n Lithuanian: _TL_('Lithuanian'),\r\n Macedonian: _TL_('Macedonian'),\r\n Maltese: _TL_('Maltese'),\r\n Norwegian: _TL_('Norwegian'),\r\n Polish: _TL_('Polish'),\r\n Portuguese: _TL_('Portuguese'),\r\n Romanian: _TL_('Romanian'),\r\n Russian: _TL_('Russian'),\r\n Serbian: _TL_('Serbian'),\r\n SimplifiedChinese: _TL_('Simplified Chinese'),\r\n Slovak: _TL_('Slovak'),\r\n Slovenian: _TL_('Slovenian'),\r\n Spanish: _TL_('Spanish'),\r\n Swedish: _TL_('Swedish'),\r\n TraditionalChinese: _TL_('Traditional Chinese'),\r\n Turkish: _TL_('Turkish'),\r\n Hebrew: _TL_('Hebrew'),\r\n Hindi: _TL_('Hindi'),\r\n Malay: _TL_('Malay'),\r\n Thai: _TL_('Thai'),\r\n Indonesian: _TL_('Indonesian'),\r\n Tagalog: _TL_('Tagalog'),\r\n Vietnamese: _TL_('Vietnamese'),\r\n};\r\n","import React, { useContext } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { RemainingCharsValidatedTextField } from '@bingads-webui-campaign-react/remaining-chars-hint';\r\nimport { Campaign } from '@bingads-webui/campaign-odata-schemas';\r\nimport {\r\n entityIs,\r\n andComp,\r\n propertyIs,\r\n} from '@bingads-webui-campaign-react/form-error';\r\n\r\nimport { ERROR_ENTITY } from '../constants';\r\n\r\nconst entityIsCampaign = entityIs(ERROR_ENTITY.Campaign);\r\nconst campaignNameProp = andComp(entityIsCampaign, propertyIs('Name'));\r\n\r\nexport const ValidatedCampaignName = () => {\r\n const i18n = useContext(I18nContext);\r\n\r\n return (\r\n \r\n );\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n TextTitle,\r\n getPanelErrorProps,\r\n ValidatedFixedPanel,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\n\r\nimport { ValidatedCampaignName } from '../validated-campaign-name';\r\nimport { SingleLineShimmer, withShimmer } from '../shimmers';\r\n\r\nconst ValidatedCampaignNameWithShimmer = withShimmer(ValidatedCampaignName, SingleLineShimmer);\r\n\r\nexport const CampaignNamePanel = ({ key, isLoading, ...rest }) => (\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n {...rest}\r\n >\r\n \r\n \r\n);\r\n\r\nCampaignNamePanel.propTypes = {\r\n key: PropTypes.string.isRequired,\r\n isLoading: PropTypes.bool,\r\n};\r\n\r\nCampaignNamePanel.defaultProps = {\r\n isLoading: false,\r\n};\r\n","export const PANEL_KEYS = {\r\n CAMPAIGN_NAME: 'campaign',\r\n LANGUAGE_TARGET: 'language-target',\r\n LOCATIONS: 'locations',\r\n AD_SCHEDULE: 'ad-schedule',\r\n BUDGET: 'budget',\r\n START_END_DATES: 'start-end-dates',\r\n SHORT_HEADLINES: 'headlines',\r\n DESCRIPTIONS: 'descriptions',\r\n IMAGES: 'images',\r\n AUDIENCE_SIGNAL: 'audience-signal',\r\n VIDEOS: 'videos',\r\n BID_STRATEGY: 'bid-strategy',\r\n BID_VALUE: 'bid-value',\r\n URL_OPTIONS: 'url-options',\r\n LOGOS: 'logos',\r\n FINAL_URL_EXPANSION: 'final-url-expansion',\r\n AUTO_GEN_ASSETS: 'auto-gen-assets',\r\n PAGE_FEEDS: 'page-feeds',\r\n CAMPAIGN_URL_OPTIONS: 'campaign-url-options',\r\n BRAND_EXCLUSIONS: 'brand-exclusions',\r\n COST_PER_SALE: 'cost_per_sale',\r\n SHOPPING: 'shopping-ads',\r\n CONVERSIONS: 'conversions',\r\n PRONG_IMAGES: 'prong-images',\r\n SPOTLIGHT_IMAGES: 'spotlight-images',\r\n NEW_CUSTOMER_ACQUISITION: 'new-customer-acquisition',\r\n APP: 'app',\r\n DISCLAIMERS: 'disclaimers',\r\n};\r\n","import { isEmpty } from 'underscore';\r\nimport { withValidation, withError, AdapterFactory } from '@bingads-webui-react/validation';\r\nimport { LanguageTarget, SingleLanguageTarget } from '@bingads-webui-campaign-react/language-target';\r\n\r\nconst LanguageTargetValidationAdapter = AdapterFactory({\r\n defaultValue: [],\r\n valueToInject: 'selectedLanguages',\r\n functionToInject: 'setSelectedLanguages',\r\n});\r\n\r\nexport const LanguageTargetValidatorFactory = i18n => function LanguageTargetValidator(value, defaultValidator) {\r\n const defaultErrors = defaultValidator(value);\r\n return [\r\n ...isEmpty(defaultErrors) ? [] : defaultErrors,\r\n ...value.length < 1 ? [i18n.getString(_TL_('Select at least one language'))] : [],\r\n ];\r\n};\r\n\r\nexport const SingleLanguageTargetValidator = (value, defaultValidator) => {\r\n if (value === null || value === undefined) {\r\n return [];\r\n }\r\n return defaultValidator(value);\r\n};\r\n\r\nconst SingleLanguageTargetValidationAdapter = AdapterFactory({\r\n defaultValue: 'None',\r\n valueToInject: 'selectedLanguage',\r\n functionToInject: 'setSelectedLanguage',\r\n});\r\n\r\nexport const ValidatedLanguageTarget = withError(withValidation(LanguageTarget, LanguageTargetValidationAdapter));\r\n\r\nexport const ValidatedSingleLanguageTarget = withError(withValidation(SingleLanguageTarget, SingleLanguageTargetValidationAdapter));\r\n","import React, { useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { map } from 'underscore';\r\nimport { withUnvalidatedControlErrors, withControlErrorHandling } from '@bingads-webui-campaign-react/error-handling';\r\nimport {\r\n entityIs,\r\n propertyIs,\r\n andComp,\r\n} from '@bingads-webui-campaign-react/form-error';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport {\r\n TextTitle,\r\n ValidatedPanel,\r\n getPanelErrorProps\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\n\r\nimport { PANEL_KEYS } from './panel-keys';\r\nimport { ERROR_ENTITY, campaignLanguageStrings } from '../../constants';\r\nimport { LanguageImg } from '../../media';\r\nimport { SectionShimmer, withShimmer } from '../shimmers';\r\nimport { ValidatedLanguageTarget, LanguageTargetValidatorFactory } from '../validated-language-target';\r\n\r\nconst entityIsCampaign = entityIs(ERROR_ENTITY.Campaign);\r\nconst campaignLanguagesProp = andComp(entityIsCampaign, propertyIs('Languages'));\r\n\r\nconst ServerValidatedLanguageTargetWithShimmer =\r\n withShimmer(\r\n withControlErrorHandling(withUnvalidatedControlErrors(\r\n ValidatedLanguageTarget,\r\n { filter: campaignLanguagesProp }\r\n )),\r\n SectionShimmer\r\n );\r\n\r\nexport const LanguageTargetPanel = (props) => {\r\n const i18n = useContext(I18nContext);\r\n const serverContext = useContext(ServerContext);\r\n\r\n const {\r\n CurrentLocale: locale,\r\n DynamicPermissions,\r\n Permissions,\r\n } = serverContext;\r\n\r\n const permissions = useMemo(() => ({ dynamic: { ...DynamicPermissions }, ...Permissions }), [DynamicPermissions, Permissions]);\r\n\r\n const {\r\n isLoading,\r\n expand,\r\n data = {},\r\n topicKey,\r\n ...rest\r\n } = props;\r\n\r\n return (\r\n i18n.getString(campaignLanguageStrings[lang] || lang)\r\n ).toString()}\r\n icon={LanguageImg}\r\n />}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand,\r\n expandKey: PANEL_KEYS.LANGUAGE_TARGET,\r\n }}\r\n {...rest}\r\n >\r\n \r\n \r\n );\r\n};\r\n\r\nLanguageTargetPanel.propTypes = {\r\n isLoading: PropTypes.bool,\r\n expand: PropTypes.func.isRequired,\r\n data: PropTypes.shape({}),\r\n topicKey: PropTypes.string,\r\n};\r\n\r\nLanguageTargetPanel.defaultProps = {\r\n isLoading: false,\r\n data: {},\r\n topicKey: null,\r\n};\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 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 React, { useContext, useState, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { withUnvalidatedControlErrors, withControlErrorHandling } from '@bingads-webui-campaign-react/error-handling';\r\nimport { ValidatedLegacyAdSchedule } from '@bingads-webui-campaign/ad-schedule';\r\nimport {\r\n entityIs,\r\n} from '@bingads-webui-campaign-react/form-error';\r\nimport {\r\n TextTitle,\r\n getPanelErrorProps,\r\n ValidatedPanel,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\n\r\nimport { ERROR_ENTITY } from '../../constants';\r\nimport { getAdScheduleDetails } from '../../utils/ad-schedule-shared';\r\nimport { AdScheduleImg } from '../../media';\r\nimport { AdScheduleShimmer, withShimmer } from '../shimmers';\r\n\r\nconst campaignDayTimeCriterions = entityIs(ERROR_ENTITY.CampaignDayTimeCriterion);\r\n\r\nconst ServerValidatedLegacyAdScheduleWithShimmer =\r\n withShimmer(\r\n withControlErrorHandling(withUnvalidatedControlErrors(\r\n ValidatedLegacyAdSchedule,\r\n { filter: campaignDayTimeCriterions }\r\n )),\r\n AdScheduleShimmer\r\n );\r\n\r\nexport const AdSchedulePanel = (props) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const [adScheduleView, setAdScheduleView] = useState(null);\r\n const setAdScheduleViewCallback = useCallback((view) => { setAdScheduleView(view); }, []);\r\n\r\n const {\r\n key,\r\n isLoading,\r\n expand,\r\n data = {},\r\n ...rest\r\n } = props;\r\n\r\n const { adSchedules } = data;\r\n\r\n return (\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand,\r\n expandKey: key,\r\n }}\r\n {...rest}\r\n >\r\n \r\n \r\n );\r\n};\r\n\r\nAdSchedulePanel.propTypes = {\r\n key: PropTypes.string.isRequired,\r\n isLoading: PropTypes.bool,\r\n expand: PropTypes.func.isRequired,\r\n data: PropTypes.shape({}),\r\n};\r\n\r\nAdSchedulePanel.defaultProps = {\r\n isLoading: false,\r\n data: {},\r\n};\r\n","import React, { useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withUnvalidatedControlErrors, withControlErrorHandling } from '@bingads-webui-campaign-react/error-handling';\r\nimport {\r\n entityIs,\r\n propertyIs,\r\n andComp,\r\n} from '@bingads-webui-campaign-react/form-error';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n TextTitle,\r\n ValidatedPanel,\r\n getPanelErrorProps\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\n\r\nimport { ERROR_ENTITY, campaignLanguageStrings } from '../../constants';\r\nimport { LanguageImg } from '../../media';\r\nimport { ValidatedSingleLanguageTarget, SingleLanguageTargetValidator } from '../validated-language-target';\r\n\r\nconst entityIsAdgroup = entityIs(ERROR_ENTITY.AdGroup);\r\nconst adgroupLanguageProp = andComp(entityIsAdgroup, propertyIs('Language'));\r\n\r\nconst ServerValidatedLanguageTarget = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedSingleLanguageTarget, { filter: adgroupLanguageProp }));\r\n\r\nexport const SingleLanguageTargetPanel = (props) => {\r\n const serverContext = useContext(ServerContext);\r\n const i18n = useContext(I18nContext);\r\n\r\n const {\r\n CurrentLocale: locale,\r\n DynamicPermissions,\r\n Permissions,\r\n } = serverContext;\r\n\r\n const permissions = useMemo(() => ({ dynamic: { ...DynamicPermissions }, ...Permissions }), [DynamicPermissions, Permissions]);\r\n\r\n const {\r\n expand,\r\n data = {},\r\n ...rest\r\n } = props;\r\n\r\n return (\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand,\r\n expandKey: 'language',\r\n }}\r\n {...rest}\r\n >\r\n \r\n \r\n );\r\n};\r\n\r\nSingleLanguageTargetPanel.propTypes = {\r\n expand: PropTypes.func.isRequired,\r\n data: PropTypes.shape({}),\r\n};\r\n\r\nSingleLanguageTargetPanel.defaultProps = {\r\n data: {},\r\n};\r\n","import { useContext, useCallback } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\n\r\nexport const useLocalizeBudget = () => {\r\n const i18n = useContext(I18nContext);\r\n const localizeBudget = useCallback((budget, currency) => i18n.formatCurrency(\r\n Number(budget), currency.toUpperCase(),\r\n { withSymbol: false, maximumFractionDigits: 2 }\r\n ), [i18n]);\r\n return {\r\n localizeBudget,\r\n };\r\n};\r\n","import React, { useContext, useMemo, useCallback, useState, useEffect } from 'react';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { withUnvalidatedControlErrors, withControlErrorHandling } from '@bingads-webui-campaign-react/error-handling';\r\nimport {\r\n entityIs,\r\n propertyIs,\r\n andComp,\r\n} from '@bingads-webui-campaign-react/form-error';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport {\r\n TextTitle,\r\n ValidatedPanel,\r\n getPanelErrorProps\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { BudgetComponent } from '@bingads-webui-campaign-react/budget-component';\r\nimport { useResponsiveStyles } from '@bingads-webui-campaign-react/common-hooks';\r\n// eslint-disable-next-line\r\nimport BingAdsWebUIStaticLegacyPageContext from '@bingads-webui-static-legacy/page-context';\r\n// eslint-disable-next-line\r\nimport { BudgetSuggestionDialog, useBudgetSuggestionRepository, MODE } from '@bingads-webui-campaign-react/budget-suggestion-v2';\r\n\r\nimport { ERROR_ENTITY } from '../../constants';\r\nimport { BudgetImg } from '../../media';\r\nimport { useLocalizeBudget } from '../../utils/use-localize-budget';\r\nimport { SectionShimmer, withShimmer } from '../shimmers';\r\n\r\nconst { BudgetRange } = BingAdsWebUIStaticLegacyPageContext;\r\n\r\nconst getStyles = () => ({\r\n budgetTitle: {\r\n fontSize: '18px',\r\n display: 'inline',\r\n },\r\n});\r\n\r\nconst entityIsCampaign = entityIs(ERROR_ENTITY.Campaign);\r\nconst budgetProp = andComp(entityIsCampaign, propertyIs('Budget'));\r\nconst ServerValidatedBudgetComponentWithShimmer =\r\n withShimmer(\r\n withControlErrorHandling(withUnvalidatedControlErrors(\r\n BudgetComponent,\r\n { filter: budgetProp }\r\n )),\r\n SectionShimmer\r\n );\r\n\r\nexport const BudgetPanel = (props) => {\r\n const i18n = useContext(I18nContext);\r\n const serverContext = useContext(ServerContext);\r\n const { CurrentAccount: { CurrencyCode } } = serverContext || {};\r\n const getResponsiveStyles = useResponsiveStyles(getStyles);\r\n const { localizeBudget } = useLocalizeBudget();\r\n\r\n const {\r\n key,\r\n isLoading,\r\n expand,\r\n onDataChange,\r\n data = {},\r\n ...rest\r\n } = props;\r\n\r\n const {\r\n budgetAmount,\r\n currency,\r\n campaignId,\r\n campaignType,\r\n showBudgetSuggestion,\r\n isCampaignSetting,\r\n campaign,\r\n } = data;\r\n\r\n const { DailyRange } = BudgetRange || {};\r\n\r\n const budgetSuggestion = useMemo(() => ({\r\n Currency: currency,\r\n GlobalMaximumBudget: { DailyBudget: DailyRange.CeilingValue ? DailyRange.CeilingValue : 3000000 },\r\n GlobalMinimumBudget: { DailyBudget: DailyRange.FloorValue ? DailyRange.FloorValue : 0.05 },\r\n }), [currency, DailyRange.CeilingValue, DailyRange.FloorValue]);\r\n\r\n\r\n const budgetTitleDetails = useMemo(() => i18n.getString(_TL_('{{budgetAmount}} {{currency}} per day'), { budgetAmount, currency }), [budgetAmount, currency, i18n]);\r\n\r\n const onFieldChange = useCallback((updatedData) => {\r\n onDataChange({\r\n data: prevData => ({\r\n ...prevData,\r\n ...updatedData,\r\n }),\r\n });\r\n }, [onDataChange]);\r\n\r\n const onBudgetChange = useCallback((newBudget, shouldLocalize = false) => {\r\n if (newBudget) {\r\n const budgetAmountValue = shouldLocalize ? localizeBudget(newBudget, currency) : newBudget;\r\n onFieldChange({ budgetAmount: budgetAmountValue });\r\n }\r\n }, [currency, onFieldChange, localizeBudget]);\r\n\r\n const onBudgetChangeFromBudgetSuggestion = useCallback((newBudget, shouldLocalize = false) => {\r\n if (newBudget && newBudget.Amount) {\r\n const budgetAmountValue = shouldLocalize ? localizeBudget(newBudget.Amount, currency) : newBudget.Amount;\r\n onFieldChange({ budgetAmount: budgetAmountValue });\r\n }\r\n }, [currency, onFieldChange, localizeBudget]);\r\n\r\n const onBudgetValidate = useCallback(({ isValid, messages }) => {\r\n onFieldChange({ isBudgetValid: isValid, budgetErrors: messages });\r\n }, [onFieldChange]);\r\n\r\n const [budgetSuggestionData, setBudgetSuggestionData] = useState(null);\r\n const {\r\n loadBudget,\r\n } = useBudgetSuggestionRepository({\r\n campaignId,\r\n mode: MODE.EDITING,\r\n campaignType,\r\n currency,\r\n });\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n useEffect(() => {\r\n if (showBudgetSuggestion && isCampaignSetting) {\r\n loadBudget({ campaign: {}, assetGroup: {} }).then((datas) => {\r\n setBudgetSuggestionData(datas);\r\n }).finally(() => {\r\n });\r\n }\r\n }, [isCampaignSetting, loadBudget, showBudgetSuggestion]);\r\n\r\n return (\r\n \r\n }\r\n actuationProps={{\r\n expandKey: key,\r\n expand,\r\n }}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n {...rest}\r\n >\r\n \r\n\r\n {/* will check Delivery Status in campaign when MT added */}\r\n {/* {showBudgetSuggestion && (data.DeliveryStatus === 'BudgetSuggestions' || 'BudgetSuggestions' in data.DeliveryStatusDetails) && isCampaignSetting && */}\r\n {showBudgetSuggestion &&\r\n isCampaignSetting &&\r\n !_.isEmpty(budgetSuggestionData) &&\r\n \r\n }\r\n \r\n );\r\n};\r\n\r\nBudgetPanel.propTypes = {\r\n key: PropTypes.string.isRequired,\r\n isLoading: PropTypes.bool,\r\n expand: PropTypes.func.isRequired,\r\n data: PropTypes.shape({}),\r\n onDataChange: PropTypes.func.isRequired,\r\n};\r\n\r\nBudgetPanel.defaultProps = {\r\n isLoading: false,\r\n data: {},\r\n};\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n TextTitle,\r\n ValidatedPanel,\r\n getPanelErrorProps\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { ValidatedLegacyDateSetting, getDateSettingDetails } from '@bingads-webui-campaign/date-setting';\r\n\r\nimport { PANEL_KEYS } from './panel-keys';\r\nimport { StartEndDateImg } from '../../media';\r\nimport { DateSettingsShimmer, withShimmer } from '../shimmers';\r\n\r\nconst ValidatedLegacyDateSettingWithShimmer = withShimmer(ValidatedLegacyDateSetting, DateSettingsShimmer);\r\n\r\nexport const DateSettingsPanel = (props) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const {\r\n isLoading,\r\n expand,\r\n timeZone,\r\n data = {},\r\n ...rest\r\n } = props;\r\n\r\n const {\r\n StartDate,\r\n EndDate,\r\n Id,\r\n } = data;\r\n\r\n return (\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand,\r\n expandKey: PANEL_KEYS.START_END_DATES,\r\n }}\r\n {...rest}\r\n >\r\n \r\n \r\n );\r\n};\r\n\r\nDateSettingsPanel.propTypes = {\r\n isLoading: PropTypes.bool,\r\n // eslint-disable-next-line react/forbid-prop-types\r\n collapseState: PropTypes.arrayOf(PropTypes.any).isRequired,\r\n expand: PropTypes.func.isRequired,\r\n data: PropTypes.shape({}),\r\n timeZone: PropTypes.string,\r\n};\r\n\r\nDateSettingsPanel.defaultProps = {\r\n isLoading: false,\r\n data: {},\r\n timeZone: null,\r\n};\r\n","import React from 'react';\r\nimport { Shimmer, ShimmerElementType } from '@fluentui/react';\r\n\r\nimport { SectionShimmer } from './section-shimmer';\r\nimport { RadiusShimmer } from './radius-shimmer';\r\n\r\nexport const DateSettingsShimmer = () => (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n HeadlineAssetCollection,\r\n} from '@bingads-webui-campaign-react/pmax-text-input';\r\nimport {\r\n TextTitle,\r\n ValidatedPanel,\r\n getPanelErrorProps,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { PANEL_KEYS } from './panel-keys';\r\n\r\nexport const ShortHeadlinesPanel = ({\r\n headlinesCardSummaryDetails,\r\n allAssetsExpand,\r\n icon,\r\n featureName,\r\n setAddNewShortHeadlinesCallback,\r\n isOptional,\r\n ...rest\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n return (\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: allAssetsExpand,\r\n expandKey: PANEL_KEYS.SHORT_HEADLINES,\r\n }}\r\n {...rest}\r\n >\r\n \r\n \r\n );\r\n};\r\n\r\nShortHeadlinesPanel.propTypes = {\r\n headlinesCardSummaryDetails: PropTypes.shape({}).isRequired,\r\n allAssetsExpand: PropTypes.func.isRequired,\r\n icon: PropTypes.node.isRequired,\r\n setAddNewShortHeadlinesCallback: PropTypes.func.isRequired,\r\n featureName: PropTypes.string.isRequired,\r\n isOptional: PropTypes.bool,\r\n};\r\n\r\nShortHeadlinesPanel.defaultProps = {\r\n isOptional: false,\r\n};\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n DescriptionAssetCollection,\r\n} from '@bingads-webui-campaign-react/pmax-text-input';\r\nimport {\r\n TextTitle,\r\n ValidatedPanel,\r\n getPanelErrorProps,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { PANEL_KEYS } from './panel-keys';\r\n\r\nexport const DescriptionsPanel = ({\r\n descriptionsCardSummaryDetails,\r\n allAssetsExpand,\r\n icon,\r\n setAddNewDescriptionCallback,\r\n featureName,\r\n isOptional,\r\n ...rest\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n return (\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: allAssetsExpand,\r\n expandKey: PANEL_KEYS.DESCRIPTIONS,\r\n }}\r\n {...rest}\r\n >\r\n \r\n \r\n );\r\n};\r\n\r\nDescriptionsPanel.propTypes = {\r\n descriptionsCardSummaryDetails: PropTypes.shape({}).isRequired,\r\n allAssetsExpand: PropTypes.func.isRequired,\r\n icon: PropTypes.node.isRequired,\r\n setAddNewDescriptionCallback: PropTypes.func.isRequired,\r\n featureName: PropTypes.string.isRequired,\r\n isOptional: PropTypes.bool,\r\n};\r\n\r\nDescriptionsPanel.defaultProps = {\r\n isOptional: false,\r\n};\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n TextTitle,\r\n ValidatedPanel,\r\n getPanelErrorProps,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n ImageListPortalContainerWithControlErrorHandling,\r\n ImageListSummaryCardDetails,\r\n PerfMaxImageSuggestionCarousel,\r\n} from '@bingads-webui-campaign-react/pmax-image-experience';\r\nimport { PermissionsContext } from '@bingads-webui-react/hoc-with-permissions';\r\nimport { PANEL_KEYS } from './panel-keys';\r\n\r\nexport const BaseImagePanel = ({\r\n titleKey,\r\n topicKey,\r\n panelKey,\r\n icon,\r\n iconAltText,\r\n imagesData,\r\n allAssetsExpand,\r\n containerRef,\r\n portalContainerState,\r\n addNewImageCallback,\r\n description,\r\n maxUploadNum,\r\n ...rest\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const permissions = useContext(PermissionsContext);\r\n return (\r\n }\r\n />}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: allAssetsExpand,\r\n expandKey: panelKey,\r\n }}\r\n {...rest}\r\n >\r\n {description && i18n.getString(description)}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nBaseImagePanel.propTypes = {\r\n titleKey: PropTypes.string.isRequired,\r\n topicKey: PropTypes.string.isRequired,\r\n panelKey: PropTypes.string.isRequired,\r\n icon: PropTypes.string.isRequired,\r\n iconAltText: PropTypes.string.isRequired,\r\n imagesData: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n allAssetsExpand: PropTypes.func.isRequired,\r\n containerRef: PropTypes.shape({}).isRequired,\r\n portalContainerState: PropTypes.shape({}).isRequired,\r\n addNewImageCallback: PropTypes.func.isRequired,\r\n description: PropTypes.string.isRequired,\r\n maxUploadNum: PropTypes.number.isRequired,\r\n};\r\n\r\nexport const ImagesPanel = ({\r\n images,\r\n allAssetsExpand,\r\n icon,\r\n imageExperienceAddNewImageCallback,\r\n maxUploadNum,\r\n imagesContainerRef,\r\n imageExperiencePortalContainerState,\r\n topicKey,\r\n ...rest\r\n}) => (\r\n \r\n);\r\n\r\nImagesPanel.propTypes = {\r\n images: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n allAssetsExpand: PropTypes.func.isRequired,\r\n icon: PropTypes.string.isRequired,\r\n imageExperienceAddNewImageCallback: PropTypes.func.isRequired,\r\n maxUploadNum: PropTypes.number.isRequired,\r\n imagesContainerRef: PropTypes.shape({}).isRequired,\r\n imageExperiencePortalContainerState: PropTypes.shape({}).isRequired,\r\n topicKey: PropTypes.string,\r\n};\r\n\r\nImagesPanel.defaultProps = {\r\n topicKey: null,\r\n};\r\n\r\nexport const LogosPanel = ({\r\n logos,\r\n allAssetsExpand,\r\n icon,\r\n logoExperienceAddNewImageCallback,\r\n maxUploadNum,\r\n logosContainerRef,\r\n logoExperiencePortalContainerState,\r\n description,\r\n titleKey,\r\n ...rest\r\n}) => (\r\n \r\n);\r\n\r\nLogosPanel.propTypes = {\r\n logos: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n allAssetsExpand: PropTypes.func.isRequired,\r\n icon: PropTypes.string.isRequired,\r\n logoExperienceAddNewImageCallback: PropTypes.func.isRequired,\r\n maxUploadNum: PropTypes.number.isRequired,\r\n logosContainerRef: PropTypes.shape({}).isRequired,\r\n logoExperiencePortalContainerState: PropTypes.shape({}).isRequired,\r\n description: PropTypes.string.isRequired,\r\n titleKey: PropTypes.string,\r\n};\r\n\r\nLogosPanel.defaultProp = {\r\n titleKey: null,\r\n};\r\n\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { DefaultButton, Link } from '@bingads-webui-react/fluent-controls';\r\nimport { MessageBar, MessageBarBody } from '@fluentui/react-message-bar';\r\n\r\nimport { ReactTemplate } from '@bingads-webui-react/react-template';\r\n\r\nconst DEFAULT_MESSAGE = _TL_('Conversion tracking must be configured for your bid strategy to be effective. Without configured conversion tracking, your bid strategy will automatically switch to maximizing clicks instead of optimizing for conversions, which may not be ideal for your campaign performance.');\r\nconst TRANSITION_MESSAGE = _TL_('Once we track a sufficient amount of conversion data, your Performance Max campaigns will automatically switch to your selected conversion-based bid strategy. You can always change the bid strategy in the campaign\\'s settings. {{link}}Learn more about bid strategy for Performance Max campaigns{{/link}}');\r\n\r\nconst getTemplateToDisplay = (i18n, usesMaxClicks, isCampaignCreation, hasActiveGoal) => {\r\n if (_.isUndefined(hasActiveGoal)) {\r\n return null;\r\n }\r\n\r\n if (isCampaignCreation) {\r\n if (!hasActiveGoal) {\r\n return { message: i18n.getString(DEFAULT_MESSAGE), type: 'warning' };\r\n }\r\n return null;\r\n }\r\n\r\n if (usesMaxClicks) {\r\n if (!hasActiveGoal) {\r\n return { message: i18n.getString(DEFAULT_MESSAGE), type: 'warning' };\r\n }\r\n return { message: i18n.getString(TRANSITION_MESSAGE), type: 'info' };\r\n }\r\n\r\n return null;\r\n};\r\n\r\nconst getUsesMaxClicks = campaign => _.chain(campaign)\r\n .get(['data', 'CampaignSettings'], [])\r\n .where({ '@odata.type': '#Model.PerformanceMaxSetting' })\r\n .first()\r\n .get('UseMaxClicks')\r\n .value();\r\n\r\nconst getHasActiveGoal = conversionGoalsDetails => _.get(conversionGoalsDetails, 'IsActiveConversionGoalPresent');\r\n\r\n// TODO(orlandom): Remove when the new Big Strategy component is ready\r\nexport const ConversionBasedBiddingBanner = (props) => {\r\n const {\r\n i18n,\r\n scope,\r\n campaign,\r\n conversionGoalsDetails,\r\n isCampaignCreation,\r\n } = props;\r\n\r\n const usesMaxClicks = useMemo(() => getUsesMaxClicks(campaign), [campaign]);\r\n const hasActiveGoal = useMemo(() => getHasActiveGoal(conversionGoalsDetails), [conversionGoalsDetails]);\r\n\r\n const messageSettings = useMemo(\r\n () => getTemplateToDisplay(i18n, usesMaxClicks, isCampaignCreation, hasActiveGoal),\r\n [i18n, usesMaxClicks, isCampaignCreation, hasActiveGoal]\r\n );\r\n\r\n const onSetConversionTracking = useCallback(() => {\r\n scope.save('/campaign/vnext/conversiongoals/create');\r\n }, [scope]);\r\n\r\n if (!messageSettings) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n
\r\n {text},\r\n link: text => (\r\n // eslint-disable-next-line jsx-a11y/anchor-is-valid\r\n {text}\r\n ),\r\n }}\r\n />\r\n
\r\n {(!isCampaignCreation && !hasActiveGoal) && (\r\n
\r\n \r\n
\r\n )}\r\n
\r\n \r\n );\r\n};\r\n\r\nConversionBasedBiddingBanner.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n scope: PropTypes.shape({\r\n save: PropTypes.func.isRequired,\r\n }).isRequired,\r\n campaign: PropTypes.shape({}).isRequired,\r\n conversionGoalsDetails: PropTypes.shape({}).isRequired,\r\n isCampaignCreation: PropTypes.bool.isRequired,\r\n};\r\n","import React, { useContext, useMemo, useCallback } from 'react';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport {\r\n BidStrategyComponent,\r\n BID_STRATEGY_OPTIONS_MAP,\r\n MAX_CONVERSIONS,\r\n MAX_CONVERSIONS_VALUE\r\n} from '@bingads-webui-campaign-react/bid-strategy-component';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport {\r\n TextTitle,\r\n ValidatedPanel,\r\n getPanelErrorProps,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport {\r\n entityIs,\r\n propertyIs,\r\n andComp,\r\n} from '@bingads-webui-campaign-react/form-error';\r\nimport {\r\n withUnvalidatedControlErrors,\r\n withControlErrorHandling,\r\n} from '@bingads-webui-campaign-react/error-handling';\r\nimport { useResponsiveStyles } from '@bingads-webui-campaign-react/common-hooks';\r\nimport { TargetCpaWarningBanner } from '@bingads-webui-campaign-react/target-cpa-warning-banner';\r\n\r\nimport { ConversionBasedBiddingBanner } from '../conversion-based-bidding-banner';\r\nimport { BidStrategyImg } from '../../media';\r\nimport { ERROR_ENTITY } from '../../constants';\r\n\r\nconst getBidStrategyStyles = () => ({\r\n budgetTitle: {\r\n fontSize: '18px',\r\n display: 'inline',\r\n },\r\n bottomMargin: {\r\n marginBottom: '8px',\r\n },\r\n});\r\n\r\nconst entityIsCampaign = entityIs(ERROR_ENTITY.Campaign);\r\nconst bidStrategyProp = andComp(entityIsCampaign, propertyIs('BiddingScheme'));\r\nconst ServerValidatedBidStrategyComponent = withControlErrorHandling(withUnvalidatedControlErrors(BidStrategyComponent, { filter: bidStrategyProp }));\r\n\r\nexport const BidStrategyPanel = (props) => {\r\n const i18n = useContext(I18nContext);\r\n const { scope } = useContext(ScopeContext) || {};\r\n const serverContext = useContext(ServerContext);\r\n const { CurrentAccount: { CurrencyCode } } = serverContext || {};\r\n const bidRange = (serverContext && serverContext.KeywordBidRange) || null;\r\n\r\n const getStyles = useResponsiveStyles(getBidStrategyStyles);\r\n\r\n const {\r\n key,\r\n isLoading,\r\n expand,\r\n onDataChange,\r\n options,\r\n data = {},\r\n topicKey,\r\n ...rest\r\n } = props;\r\n\r\n const {\r\n campaign,\r\n conversionGoalDetails,\r\n bidStrategy,\r\n currency,\r\n cpa,\r\n roas,\r\n isInitialAdditionalDetailsChecked,\r\n budgetAmount,\r\n } = data;\r\n\r\n const {\r\n bidStrategyComponentOptions = {},\r\n biddingBannerOptions = {},\r\n scenario = '',\r\n } = options;\r\n\r\n const {\r\n bidStrategyOptions,\r\n hideAdditionalDetails,\r\n ...restBidStrategyComponentOptions\r\n } = bidStrategyComponentOptions;\r\n\r\n const {\r\n ...restBiddingBannerOptions\r\n } = biddingBannerOptions;\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const bidStrategyTitleDetails = useMemo(() => {\r\n let targetValue = '';\r\n let bidStrategyText = '';\r\n if (bidStrategy) {\r\n if (bidStrategy === MAX_CONVERSIONS.type && cpa) {\r\n targetValue = `${cpa} ${currency}`;\r\n } else if (bidStrategy === MAX_CONVERSIONS_VALUE.type && roas) {\r\n targetValue = `${roas} %`;\r\n }\r\n const predefinedBidStrategy = BID_STRATEGY_OPTIONS_MAP[bidStrategy];\r\n bidStrategyText = predefinedBidStrategy ? predefinedBidStrategy.text : bidStrategy;\r\n }\r\n\r\n return (\r\n <>\r\n {i18n.getString(_TL_('{{bidStrategyText}}'), { bidStrategyText }) + (targetValue ? `, ${i18n.getString(_TL_('target {{targetValue}}'), { targetValue })}` : '')}\r\n \r\n \r\n );\r\n }, [bidStrategy, i18n, budgetAmount, cpa, activity, scenario, roas, currency]);\r\n\r\n const addBottomMargin = useMemo(() => hideAdditionalDetails, [hideAdditionalDetails]);\r\n\r\n const onFieldChange = useCallback((updatedData) => {\r\n onDataChange({\r\n data: prevData => ({\r\n ...prevData,\r\n ...updatedData,\r\n }),\r\n });\r\n }, [onDataChange]);\r\n\r\n const onBidStrategyChange = useCallback((e, newBidStrategy) => {\r\n const bidStrategyType = _.get(newBidStrategy, 'type');\r\n onFieldChange({ bidStrategy: bidStrategyType });\r\n }, [onFieldChange]);\r\n\r\n const onMarketingMetricChange = useCallback(({\r\n data: newMarketingMetric,\r\n isValid,\r\n messages,\r\n }) => {\r\n onFieldChange({\r\n ...newMarketingMetric,\r\n isMarketingMetricValid: isValid,\r\n marketingMetricErrors: messages,\r\n });\r\n }, [onFieldChange]);\r\n\r\n return (\r\n \r\n }\r\n actuationProps={{\r\n expandKey: key,\r\n expand,\r\n }}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n {...rest}\r\n >\r\n \r\n \r\n \r\n {addBottomMargin &&
}\r\n \r\n );\r\n};\r\n\r\nBidStrategyPanel.propTypes = {\r\n key: PropTypes.string.isRequired,\r\n onDataChange: PropTypes.func.isRequired,\r\n data: PropTypes.shape({\r\n bidStrategy: PropTypes.string,\r\n currency: PropTypes.string,\r\n cpa: PropTypes.number,\r\n roas: PropTypes.number,\r\n campaign: PropTypes.shape({}),\r\n conversionGoalDetails: PropTypes.shape({}),\r\n isInitialAdditionalDetailsChecked: PropTypes.bool,\r\n }),\r\n options: PropTypes.shape({\r\n bidStrategyComponentOptions: PropTypes.shape({}),\r\n biddingBannerOptions: PropTypes.shape({}),\r\n scenario: PropTypes.string,\r\n }),\r\n isLoading: PropTypes.bool,\r\n expand: PropTypes.func.isRequired,\r\n topicKey: PropTypes.string,\r\n};\r\n\r\nBidStrategyPanel.defaultProps = {\r\n data: {},\r\n options: {},\r\n isLoading: false,\r\n topicKey: null,\r\n};\r\n","import React, { useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n TextTitle,\r\n ValidatedPanel,\r\n getPanelErrorProps,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { ValidatedUrlOptionsParameter, ValidatedUrlOptionsParameterWithError } from '@bingads-webui-campaign-react/validated-url-input';\r\nimport { getUrlOptionsDetails } from '@bingads-webui-campaign-react/url-options';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\n\r\nimport { UrlOptionsImg } from '../../media';\r\nimport { SingleLineShimmer, withShimmer } from '../shimmers';\r\n\r\nconst getUrlOptionsStyles = () => ({\r\n urlOptionsContainer: {\r\n maxWidth: 435,\r\n },\r\n});\r\n\r\nconst ValidatedUrlOptionsParameterWithShimmer = withShimmer(ValidatedUrlOptionsParameter, SingleLineShimmer);\r\nconst ValidatedUrlOptionsParameterWithErrorWithShimmer = withShimmer(ValidatedUrlOptionsParameterWithError, SingleLineShimmer);\r\n\r\nexport const UrlOptionsPanel = (props) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const classes = useDefaultStyles(getUrlOptionsStyles);\r\n\r\n const {\r\n key,\r\n isLoading,\r\n expand,\r\n options,\r\n data = {},\r\n isTrackingUrlTemplateRequired,\r\n isWithError,\r\n ...rest\r\n } = props;\r\n\r\n const {\r\n showDescription,\r\n urlParameterOptions,\r\n } = options;\r\n\r\n const {\r\n TrackingUrlTemplate: trackingUrlTemplate,\r\n FinalUrlSuffix: finalUrlSuffix,\r\n UrlCustomParameters: urlCustomParameters,\r\n } = data || {};\r\n\r\n const urlOptions = useMemo(() => ({\r\n TrackingUrlTemplate: trackingUrlTemplate,\r\n FinalUrlSuffix: finalUrlSuffix,\r\n UrlCustomParameters: urlCustomParameters,\r\n }), [trackingUrlTemplate, finalUrlSuffix, urlCustomParameters]);\r\n\r\n const urlOptionsDetails = useMemo(() => getUrlOptionsDetails(i18n, urlOptions), [urlOptions, i18n]);\r\n\r\n return (\r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand,\r\n expandKey: key,\r\n }}\r\n {...rest}\r\n >\r\n
\r\n {\r\n showDescription &&\r\n \r\n {i18n.getString(_TL_('Set up the tracking and redirect information for your ads.'))}\r\n \r\n }\r\n {\r\n isWithError ?\r\n () :\r\n ()\r\n }\r\n
\r\n \r\n );\r\n};\r\n\r\nUrlOptionsPanel.propTypes = {\r\n key: PropTypes.string.isRequired,\r\n options: PropTypes.shape({\r\n showDescription: PropTypes.bool,\r\n urlParameterOptions: PropTypes.shape({}),\r\n }),\r\n data: PropTypes.shape({\r\n TrackingUrlTemplate: PropTypes.string,\r\n FinalUrlSuffix: PropTypes.string,\r\n UrlCustomParameters: PropTypes.arrayOf(PropTypes.shape({})),\r\n }),\r\n isLoading: PropTypes.bool,\r\n expand: PropTypes.func.isRequired,\r\n isTrackingUrlTemplateRequired: PropTypes.bool,\r\n isWithError: PropTypes.bool,\r\n};\r\n\r\nUrlOptionsPanel.defaultProps = {\r\n data: {},\r\n options: {},\r\n isLoading: false,\r\n isTrackingUrlTemplateRequired: false,\r\n isWithError: false,\r\n};\r\n","import React, { useContext, useCallback } from 'react';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { CustomValidatedDefaultBid } from '@bingads-webui-campaign-react/default-bid';\r\nimport { Label } from '@fluentui/react';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\n\r\nexport const PriceModelToRange = {\r\n ManualCpa: 'KeywordBidRange',\r\n ManualCpc: 'KeywordBidRange',\r\n};\r\n\r\nexport const ValidatedBidValue = ({\r\n validationProps,\r\n onBidChange,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const serverContext = useContext(ServerContext);\r\n\r\n const { data: campaign, bidValueType } = validationProps || {};\r\n\r\n const { BiddingScheme } = campaign;\r\n\r\n const getBidRange = useCallback((type) => {\r\n const bidCeil = _.result(serverContext[PriceModelToRange[type]], 'CeilingValue');\r\n const bidFloor = _.result(serverContext[PriceModelToRange[type]], 'FloorValue');\r\n\r\n return { bidCeil, bidFloor };\r\n }, [serverContext]);\r\n\r\n const SearchBid = useCallback(() => {\r\n const { bidCeil, bidFloor } = getBidRange(BiddingScheme.Type);\r\n\r\n return (\r\n \r\n );\r\n }, [getBidRange, i18n, BiddingScheme, serverContext.CurrentAccount.CurrencyCode, bidValueType, onBidChange]);\r\n\r\n return (\r\n
\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nValidatedBidValue.propTypes = {\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n campaign: PropTypes.shape({}).isRequired,\r\n bidValueType: PropTypes.string.isRequired,\r\n }).isRequired,\r\n }).isRequired,\r\n onBidChange: PropTypes.func.isRequired,\r\n};\r\n\r\n","import React, { useContext, useMemo, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { withUnvalidatedControlErrors } from '@bingads-webui-campaign-react/error-handling';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n TextTitle,\r\n ValidatedPanel,\r\n getPanelErrorProps,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport {\r\n entityIs,\r\n propertyIs,\r\n andComp,\r\n} from '@bingads-webui-campaign-react/form-error';\r\nimport { useResponsiveStyles } from '@bingads-webui-campaign-react/common-hooks';\r\nimport { SectionShimmer, withShimmer } from '../shimmers';\r\n\r\nimport { ERROR_ENTITY } from '../../constants';\r\nimport { ValidatedBidValue } from '../sections/bid-value';\r\n\r\nconst getBidStrategyStyles = () => ({\r\n budgetTitle: {\r\n fontSize: '18px',\r\n display: 'inline',\r\n },\r\n bottomMargin: {\r\n marginBottom: '8px',\r\n },\r\n});\r\n\r\nconst entityIsCampaign = entityIs(ERROR_ENTITY.Campaign);\r\nconst bidValueProp = andComp(entityIsCampaign, propertyIs('BiddingScheme'));\r\nconst ServerValidatedBidValueComponentWithShimmer =\r\n withShimmer(\r\n withUnvalidatedControlErrors(\r\n ValidatedBidValue,\r\n { filter: bidValueProp }\r\n ),\r\n SectionShimmer\r\n );\r\n\r\nexport const BidValuePanel = (props) => {\r\n const i18n = useContext(I18nContext);\r\n const getStyles = useResponsiveStyles(getBidStrategyStyles);\r\n\r\n const {\r\n key,\r\n isLoading,\r\n expand,\r\n onDataChange,\r\n data = {},\r\n bidValueType,\r\n ...rest\r\n } = props;\r\n\r\n const {\r\n campaign,\r\n currency,\r\n } = data;\r\n\r\n const bidAmount = useMemo(() => {\r\n if (!isLoading && campaign?.BiddingScheme) {\r\n const { BiddingScheme } = campaign;\r\n return BiddingScheme[bidValueType];\r\n }\r\n return null;\r\n }, [isLoading, campaign, bidValueType]);\r\n\r\n const bidValueDetails = useMemo(() => i18n.getString(_TL_('{{bidAmount}} {{currency}}'), { bidAmount, currency }), [bidAmount, currency, i18n]);\r\n\r\n const onBidValueChange = useCallback((updatedData) => {\r\n onDataChange({\r\n data: prevData => ({\r\n ...prevData,\r\n [bidValueType]: updatedData,\r\n }),\r\n });\r\n }, [onDataChange, bidValueType]);\r\n\r\n return (\r\n \r\n }\r\n actuationProps={{\r\n expandKey: key,\r\n expand,\r\n }}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n {...rest}\r\n >\r\n \r\n \r\n );\r\n};\r\n\r\nBidValuePanel.propTypes = {\r\n key: PropTypes.string.isRequired,\r\n onDataChange: PropTypes.func.isRequired,\r\n data: PropTypes.shape({\r\n currency: PropTypes.string,\r\n campaign: PropTypes.shape({}),\r\n }),\r\n isLoading: PropTypes.bool,\r\n expand: PropTypes.func.isRequired,\r\n bidValueType: PropTypes.string.isRequired,\r\n};\r\n\r\nBidValuePanel.defaultProps = {\r\n data: {},\r\n isLoading: false,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n TextTitle,\r\n getPanelErrorProps,\r\n ValidatedFixedPanel,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\n\r\nimport { AppPanel } from '@bingads-webui-campaign-react/app-store-selector';\r\n\r\nimport { SingleLineShimmer, withShimmer } from '../shimmers';\r\n\r\nexport const AppDetailsPanel = (props) => {\r\n const {\r\n key, isLoading, data = {}, ...rest\r\n } = props;\r\n const { campaign } = data || {};\r\n const selectedApp = campaign && campaign.AppSetting;\r\n\r\n const AppPanelWithShimmer = withShimmer(AppPanel, SingleLineShimmer);\r\n\r\n return (\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n {...rest}\r\n >\r\n \r\n \r\n );\r\n};\r\n\r\nAppDetailsPanel.propTypes = {\r\n key: PropTypes.string.isRequired,\r\n isLoading: PropTypes.bool,\r\n data: PropTypes.shape({\r\n campaign: PropTypes.shape({\r\n AppSetting: PropTypes.shape({}),\r\n }),\r\n }),\r\n platform: PropTypes.string.isRequired,\r\n};\r\n\r\nAppDetailsPanel.defaultProps = {\r\n isLoading: false,\r\n data: {},\r\n};\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { Stack } from '@bingads-webui-react/fluent-controls';\r\nimport { useResponsiveStyles } from '@bingads-webui-campaign-react/common-hooks';\r\n\r\nimport { SignalsSparkleImg } from '../../media';\r\n\r\nconst getStyles = () => ({\r\n root: {\r\n marginTop: 24,\r\n },\r\n title: {\r\n fontSize: 20,\r\n fontWeight: 600,\r\n lineHeight: '28px',\r\n margin: 0,\r\n },\r\n});\r\n\r\nexport const AudienceSignalSection = ({ children }) => {\r\n const i18n = useContext(I18nContext);\r\n const getResponsiveStyles = useResponsiveStyles(getStyles);\r\n\r\n return (\r\n \r\n

\r\n {i18n.getString(_TL_('Signals (Optional)'))}\r\n

\r\n \r\n \"\"\r\n \r\n {i18n.getString(_TL_('Signals give us valuable information about who you want to reach.'))}\r\n {i18n.getString(_TL_('We\\'ll use them as a starting point to find customers and determine who sees your ads.'))}\r\n \r\n \r\n
\r\n {children}\r\n
\r\n
\r\n );\r\n};\r\n\r\nAudienceSignalSection.propTypes = {\r\n children: PropTypes.node,\r\n};\r\n\r\nAudienceSignalSection.defaultProps = {\r\n children: null,\r\n};\r\n","export function modelToViewModelDayTimeTargets(targets, resetId = false) {\r\n const schedulingRows = [];\r\n\r\n targets.forEach((target) => {\r\n const criterion = target.Criterion;\r\n const multiplier = target.CriterionBid.Multiplier;\r\n\r\n schedulingRows.push({\r\n Id: resetId ? '' : target.Id,\r\n Day: criterion.Day,\r\n StartHour: criterion.FromHour,\r\n StartMinute: criterion.FromMinute,\r\n EndHour: criterion.ToHour,\r\n EndMinute: criterion.ToMinute,\r\n BidAdjustmentType: multiplier < 0 ? -1 : 1,\r\n BidAdjustmentAmount: window.Math.abs(multiplier),\r\n });\r\n });\r\n\r\n return schedulingRows;\r\n}\r\n","import { WaterfallFilterStorage, WaterfallFilterType, waterfallDateFilterProcessor } from '@bingads-webui-campaign/filter-storage';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { PreferenceContext } from '@bingads-webui-react/preference-context';\r\nimport { useContext } from 'react';\r\nimport kendo from '@bingads-webui/kendo/kendo.core';\r\n\r\n// date-filter plugin and related logic is in \"projection-grid-date-filter/src/plugin.js\"\r\n\r\nconst formatDateInEntitySet = date => kendo.toString(date, 'yyyy-MM-dd');\r\nconst parseDate = dateString => kendo.parseDate(dateString);\r\n\r\nfunction useDateRangeDefault() {\r\n const preferenceService = useContext(PreferenceContext);\r\n const serverContext = useContext(ServerContext);\r\n const waterfallFilterStorage = new WaterfallFilterStorage({\r\n preferenceService,\r\n });\r\n const waterFallDateFilters = waterfallFilterStorage.getFilters([WaterfallFilterType.DateFilter]);\r\n const dateFilter = waterfallDateFilterProcessor(waterFallDateFilters, serverContext);\r\n return dateFilter;\r\n}\r\n\r\nexport function useP$DaterangeDefault() {\r\n const dateFilter = useDateRangeDefault();\r\n return Promise.resolve(dateFilter);\r\n}\r\n\r\n// What about comparison date range?\r\n// Listing Gruop page does not have comparison date range\r\nexport function useDateRange() {\r\n const dateRange = useDateRangeDefault();\r\n return {\r\n StartDate: formatDateInEntitySet(dateRange.start) ||\r\n formatDateInEntitySet(parseDate(dateRange.RangeStartDate)),\r\n EndDate: formatDateInEntitySet(dateRange.end) ||\r\n formatDateInEntitySet(parseDate(dateRange.RangeEndDate)),\r\n };\r\n}\r\n","import _ from 'underscore';\r\nimport { Scopes } from '@bingads-webui-campaign-react/goal-selector';\r\n\r\nexport const getConversionGoalTitleDetails = (i18n, conversionGoals = {}) => {\r\n const {\r\n goalScopeSelection,\r\n goalSelection,\r\n } = conversionGoals;\r\n\r\n if (goalScopeSelection === Scopes.CAMPAIGN && _.size(goalSelection) > 0) {\r\n const goalNames = _.pluck(goalSelection, 'Name');\r\n\r\n return goalNames.join(', ');\r\n }\r\n\r\n return i18n.getString(_TL_('Use account settings'));\r\n};\r\n","import _ from 'underscore';\r\n\r\nexport const getFinalUrlExpansionTitleDetails = (i18n, view, isFinalUrlExpansionEnabled) => {\r\n if (!view) return '';\r\n if (!isFinalUrlExpansionEnabled) {\r\n return i18n.getString(_TL_('Use the Final URL only'));\r\n }\r\n const selected = view.selectedTargetsView.viewmodel.values();\r\n const exactUrls = [];\r\n const rules = [];\r\n\r\n _.each(selected, (target) => {\r\n const conditions = target.Criterion.WebPage.Parameter.Conditions;\r\n _.each(conditions, (condition) => {\r\n if (condition.Operator === 'Equals') {\r\n exactUrls.push(condition.ArgumentOperand);\r\n } else {\r\n rules.push(`URL contains ${condition.ArgumentOperand}`);\r\n }\r\n });\r\n });\r\n\r\n const exactUrlsDetails = exactUrls.length > 0 ? `${i18n.getString(_TL_('Excluded URLs: '))}${exactUrls.join(', ')}` : null;\r\n const rulesDetails = rules.length > 0 ? `${i18n.getString(_TL_('Exclusion rules: '))}${rules.join(', ')}`:null;\r\n\r\n if (exactUrlsDetails && rulesDetails) {\r\n return `${exactUrlsDetails}; ${rulesDetails}`;\r\n }\r\n return exactUrlsDetails || rulesDetails || i18n.getString(_TL_('You’ve enabled Final URL expansion'));\r\n};\r\n","import _ from 'underscore';\r\n\r\nexport const getBidStrategyMap = _.memoize(() => ({\r\n MaxClicks: _TL_('Maximize clicks'),\r\n MaxConversions: _TL_('Maximize conversions'),\r\n MaxConversionValue: _TL_('Maximize conversion value'),\r\n MaxImpressions: _TL_('Maximize impressions'),\r\n MaxReach: _TL_('Maximize reach'),\r\n ManualCpa: _TL_('CPI (cost per install)'),\r\n ManualCpm: _TL_('CPM (cost per thousand impressions) for maximizing reach'),\r\n ManualCpv: _TL_('CPCV (cost per completed view)'),\r\n ManualCpc: _TL_('CPC (cost per click)'),\r\n EnhancedCpc: _TL_('Enhanced CPC (enhanced cost per click)'),\r\n CostPerSale: _TL_('Cost per Sale'),\r\n TargetRoas: _TL_('Target ROAS'),\r\n TargetCpa: _TL_('Target CPA'),\r\n TargetImpressionShare: _TL_('Target impression share'),\r\n}));\r\n\r\nexport const getBidTitleDetails = (i18n, bid) => {\r\n if (!bid || !getBidStrategyMap()[bid.Type]) {\r\n return '';\r\n }\r\n\r\n return i18n.getString(getBidStrategyMap()[bid.Type]);\r\n};\r\n\r\nexport const getBidBudgetTitleDetails = (serverContext, i18n, bid, budget) => {\r\n const currencyCode = serverContext.CurrentAccount.CurrencyCode;\r\n const amount = _.isNumber(budget.Amount) ?\r\n i18n.formatCurrency(budget.Amount, currencyCode) :\r\n '-';\r\n const bidType = getBidTitleDetails(i18n, bid);\r\n let bidVal = '';\r\n if (bid.TargetCpa) {\r\n bidVal = i18n.formatCurrency(bid.TargetCpa, currencyCode);\r\n }\r\n if (bid.TargetRoas) {\r\n bidVal = i18n.formatPercent(bid.TargetRoas);\r\n }\r\n return i18n.getString(_TL_('{{amount}} per day; {{bidType}}, default CPA {{bidVal}}'), {\r\n amount, bidType, bidVal,\r\n });\r\n};\r\n\r\nexport const getBudgetTitleDetails = (serverContext, i18n, budget) => {\r\n const currencyCode = serverContext.CurrentAccount.CurrencyCode;\r\n const amount = _.isNumber(budget && budget.Amount) ?\r\n i18n.formatCurrency(budget.Amount, currencyCode) :\r\n '-';\r\n return i18n.getString(_TL_('{{amount}} per day'), {\r\n amount,\r\n });\r\n};\r\n","import { pluck } from 'underscore';\r\n\r\nexport const getListingGroupDetails = (i18n, isEditing, {\r\n productFilter,\r\n listingGroup,\r\n}) => {\r\n if (isEditing && productFilter) {\r\n return `${i18n.getString(_TL_('Products: Filterd by '))}${productFilter}`;\r\n }\r\n if (!isEditing) {\r\n if (!listingGroup) {\r\n return i18n.getString('All products');\r\n }\r\n return `${listingGroup.operand}: ${pluck(listingGroup.items, 'primary').join(',')}`;\r\n }\r\n return '';\r\n};\r\n","export const getStoreTitleDetails = (i18n, storesData, storeContainerData = {}, isAudience = false) => {\r\n const storeId = storeContainerData.ProviderId;\r\n if (!storeId) {\r\n return i18n.getString(_TL_('No store added'));\r\n }\r\n const { countries, stores } = storesData;\r\n const store =\r\n (stores[storeId] && stores[storeId].text) ||\r\n `ID: ${storeId}`; // Display only Store ID while stores are loading. No localization to be consistent with how we display stores.\r\n const salesCountry =\r\n (countries[storeContainerData.SalesCountry] && countries[storeContainerData.SalesCountry].text)\r\n || storeContainerData.SalesCountry;\r\n const localInventoryAdsEnabled = storeContainerData.LocalInventoryAdsEnabled ?\r\n i18n.getString(_TL_('Enabled')) :\r\n i18n.getString(_TL_('Disabled'));\r\n\r\n if (isAudience) {\r\n return i18n.getString(_TL_('Merchant Center store: {{store}}. Country/region of sale: {{salesCountry}}'), {\r\n store, salesCountry,\r\n });\r\n }\r\n return i18n.getString(_TL_('Merchant Center store: {{store}}. Country/region of sale: {{salesCountry}}. Local inventory ads: {{localInventoryAdsEnabled}}'), {\r\n store, salesCountry, localInventoryAdsEnabled,\r\n });\r\n};\r\n","export const getSearchThemeDetails = (i18n, searchThemes) => {\r\n const selected = searchThemes && searchThemes.filter(item => item.Status !== 'Deleted');\r\n if (selected && selected.length > 0) {\r\n return selected.map(item => item.SearchTheme).join(', ');\r\n }\r\n return i18n.getString(_TL_('No search themes added'));\r\n};\r\n","export const getDisclaimerTitleDetails = (i18n, disclaimer) => {\r\n const {\r\n selectedDisclaimer,\r\n } = disclaimer || {};\r\n\r\n if (selectedDisclaimer && selectedDisclaimer.Name) {\r\n return selectedDisclaimer.Name;\r\n }\r\n return i18n.getString(_TL_('No disclaimer selected'));\r\n};\r\n","export const LocalizationKeys = {\r\n ManualCpc: _TL_('Fixed bid per night (per click)'),\r\n PercentCpc: _TL_('Percentage of room price (per click)'),\r\n Commission: _TL_('Percentage of room price (per stay)'),\r\n Individual: _TL_('Individual budget'),\r\n individual: _TL_('Individual budget'),\r\n 'Increase by': _TL_('Increase by'),\r\n 'Decrease by': _TL_('Decrease by'),\r\n UrlCustomParameters: _TL_('Custom parameters'),\r\n TrackingUrlTemplate: _TL_('Tracking template'),\r\n FinalUrlSuffix: _TL_('Final URL suffix'),\r\n ExcludedSites: _TL_('Website'),\r\n ExcludedIPs: _TL_('IP Address'),\r\n Targeted: _TL_('Targeted'),\r\n Computer: _TL_('Computer'),\r\n Desktop: _TL_('Desktop'),\r\n Tablet: _TL_('Tablet'),\r\n Smartphone: _TL_('Smartphone'),\r\n Monday: _TL_('Monday'),\r\n Tuesday: _TL_('Tuesday'),\r\n Wednesday: _TL_('Wednesday'),\r\n Thursday: _TL_('Thursday'),\r\n Friday: _TL_('Friday'),\r\n Saturday: _TL_('Saturday'),\r\n Sunday: _TL_('Sunday'),\r\n 'Selected date': _TL_('Selected date'),\r\n 'Default date': _TL_('Default date'),\r\n};\r\n\r\nexport const ConversionGoalKeyToStringMapping = {\r\n Campaign_Goals_Account_Level_Label: _TL_('Use the account \"Include in conversions\" setting'),\r\n Campaign_Goals_Account_Level_Subtext: _TL_('This option applies the same conversion goals that you have selected at the account level to this campaign.'),\r\n Campaign_Goals_Campaign_Level_Label: _TL_('Choose conversion goals for this campaign'),\r\n Campaign_Goals_Campaign_Level_Subtext: _TL_('This option allows you to select specific conversion goals for this campaign only.'),\r\n GoalSelector_List_Header: _TL_('Available goals: {{itemCount}}'),\r\n GoalSelector_Result_List_Header: _TL_('Selected goal: {{itemCount}}'),\r\n GoalSelector_Radio_Aria_Label: _TL_('Select which conversions are included in the Conversion columns for this campaign and used for optimizing your bid strategy. Updating this setting will override the “Include in conversions” setting made at the account level.'),\r\n GoalSelector_EmptyList_Content: _TL_('No results to display.'),\r\n EntitySelector_Search_Placeholder: _TL_('Search'),\r\n UnifiedEventTracking_Goal_Creation_Type_Event_Category: _TL_('Category'),\r\n GoalSelector_Result_Action_Bar: _TL_('Select all on this page'),\r\n GoalSelector_TrackingStatus_Value_InactiveDueToTagUnavailable: _TL_('This goal is not associated with an active UET tag. Verify the tag setup and associate the goal with a valid UET tag.'),\r\n GoalSelector_TrackingStatus_Value_NoRecentConversion: _TL_(\"This goal doesn't have enough conversions to optimize campaign performance because it hasn't recorded conversions in the past 7 days. Ensure that for an online goal, the UET tag is placed on every webpage.\"),\r\n GoalSelector_TrackingStatus_Value_RecordingConversions: _TL_(\"We've seen your UET tag and have recorded conversions within the last 7 days. If your conversion window is greater than 7 days and you are filtering on the last 7 days, you may see this status even if no conversions are shown in the Conversions column, as conversions are reported at the time of the click.\"),\r\n GoalSelector_TrackingStatus_Value_TagInactive: _TL_('No website activity data has been received from the UET tag associated with this goal in the past 24 hours. Verify the UET tag setup or associate the goal with an active tag.'),\r\n GoalSelector_TrackingStatus_Value_Unverified: _TL_(\"We haven't received any data from the UET tag for this goal. For new goals, allow 24 hours for conversions to start recording. Otherwise, verify the UET tag setup or associate this goal with an active tag.\"),\r\n Segment_Goal_Category_Download: _TL_('Download'),\r\n Segment_Goal_Category_Purchase: _TL_('Purchase'),\r\n Segment_Goal_Category_AddToCart: _TL_('Add to cart'),\r\n Segment_Goal_Category_BeginCheckout: _TL_('Begin checkout'),\r\n Segment_Goal_Category_BookAppointment: _TL_('Book appointment'),\r\n Segment_Goal_Category_Contact: _TL_('Contact'),\r\n Segment_Goal_Category_GetDirections: _TL_('Get directions'),\r\n Segment_Goal_Category_InStoreVisit: _TL_('In-store visit'),\r\n Segment_Goal_Category_Other: _TL_('Other'),\r\n Segment_Goal_Category_OutboundClick: _TL_('Outbound click'),\r\n Segment_Goal_Category_PageView: _TL_('Page view'),\r\n Segment_Goal_Category_RequestQuote: _TL_('Request quote'),\r\n Segment_Goal_Category_SignUp: _TL_('Sign-up'),\r\n Segment_Goal_Category_SubmitLeadForm: _TL_('Submit lead form'),\r\n Segment_Goal_Category_Subscribe: _TL_('Subscribe'),\r\n Segment_Goal_Category_Unassigned: _TL_('Unassigned'),\r\n Campaign_Goals_Option_Goals: _TL_('Goals'),\r\n Campaign_Goals_Option_GoalSets: _TL_('Goal Sets'),\r\n EntitySelector_Pagination_Page: _TL_('Page:'),\r\n EntitySelector_Pagination_TotalPageCountText: _TL_('of'),\r\n EntitySelector_Pagination_PreviousPageText: _TL_('Previous page'),\r\n EntitySelector_Pagination_NextPageText: _TL_('Next page'),\r\n 'Remove all': 'Remove all',\r\n 'No results found for {{searchText}}': _TL_('No results found for {{searchText}}'),\r\n 'Found {{totalCount}} Results for {{searchText}}': _TL_('Found {{totalCount}} Results for {{searchText}}'),\r\n};\r\n","import React, { useContext } from 'react';\r\nimport { chain, size, sortBy, omit, isEmpty, keys, difference } from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { Target } from '@bingads-webui-react/dimensions-target';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport computerIcon from './styles/media/desktop.svg';\r\nimport tabletIcon from './styles/media/tablet.svg';\r\nimport smartphoneIcon from './styles/media/mobile.svg';\r\nimport connectedTVIcon from './styles/media/ctv.svg';\r\n\r\nexport const DeviceKeys = {\r\n Computers: 'Computers',\r\n Tablets: 'Tablets',\r\n Smartphones: 'Smartphones',\r\n ConnectedTVs: 'ConnectedTVs',\r\n};\r\n\r\nexport const Devices = {\r\n [DeviceKeys.Computers]: _TL_('Desktop'),\r\n [DeviceKeys.Tablets]: _TL_('Tablet'),\r\n [DeviceKeys.Smartphones]: _TL_('Mobile'),\r\n [DeviceKeys.ConnectedTVs]: _TL_('CTV'),\r\n};\r\n\r\nexport const BidStrategyToDevices = {\r\n ManualCpm: [DeviceKeys.Computers, DeviceKeys.Tablets, DeviceKeys.Smartphones],\r\n ManualCpv: [DeviceKeys.ConnectedTVs],\r\n};\r\n\r\nconst sortDevices = devices => sortBy(devices, device => Devices[device]);\r\nconst iconStyle = {\r\n width: 32,\r\n height: 32,\r\n backgroundSize: 'contain',\r\n backgroundRepeat: 'no-repeat',\r\n backgroundPosition: 'center',\r\n};\r\n\r\nconst containerStyle = {\r\n width: 96,\r\n height: 96,\r\n border: '1px solid #E1DFDD',\r\n borderRadius: '4px',\r\n\r\n '&.is-checked': {\r\n border: '1px solid #0078D4',\r\n '&:hover': {\r\n border: '1px solid #005A9E',\r\n },\r\n },\r\n\r\n '&:hover': {\r\n border: '1px solid #323130',\r\n },\r\n\r\n '& input[type=\"checkbox\"]': {\r\n width: '100%',\r\n },\r\n\r\n '& label': {\r\n padding: 0,\r\n flex: 1,\r\n alignSelf: 'stretch',\r\n },\r\n};\r\n\r\nconst getStyle = () => ({\r\n computer: {\r\n ...containerStyle,\r\n '& .icon': {\r\n backgroundImage: `url(\"${computerIcon}\")`,\r\n ...iconStyle,\r\n },\r\n },\r\n tablet: {\r\n ...containerStyle,\r\n '& .icon': {\r\n backgroundImage: `url(\"${tabletIcon}\")`,\r\n ...iconStyle,\r\n },\r\n },\r\n smartphones: {\r\n ...containerStyle,\r\n '& .icon': {\r\n backgroundImage: `url(\"${smartphoneIcon}\")`,\r\n ...iconStyle,\r\n },\r\n },\r\n connectedTVs: {\r\n ...containerStyle,\r\n '& .icon': {\r\n backgroundImage: `url(\"${connectedTVIcon}\")`,\r\n ...iconStyle,\r\n },\r\n },\r\n iconContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n },\r\n pickerContainer: {\r\n '& div.dimensions': {\r\n display: 'flex',\r\n gap: '4px',\r\n margin: '3px 0 3px 3px',\r\n '&>span.fui-Checkbox': {\r\n flexDirection: 'column',\r\n\r\n '& .fui-Checkbox__indicator': {\r\n alignSelf: 'flex-end',\r\n margin: '4px',\r\n },\r\n },\r\n },\r\n },\r\n});\r\n\r\nexport const formatDevice = (device, i18n) => (Devices[device] ? i18n.getString(Devices[device]) : device);\r\n\r\nexport const formatDevices = ({ devices, i18n, isCTVSupported }) => {\r\n if ((isCTVSupported && size(devices) === size(Devices)) ||\r\n (!isCTVSupported && size(devices) === size(Devices) - 1)\r\n ) {\r\n return i18n.getString(_TL_('All devices'));\r\n }\r\n\r\n return chain(sortDevices(devices))\r\n .map(device => formatDevice(device, i18n))\r\n .join(i18n.getString(_TL_(', ')))\r\n .value();\r\n};\r\n\r\nexport const getDeviceDetails = (devices, isCTVSupported, i18n) => {\r\n if (isEmpty(devices)) {\r\n return '';\r\n }\r\n\r\n if ((!isCTVSupported && devices.length === 3) || (isCTVSupported && devices.length === 4)) {\r\n return i18n.getString(_TL_('Targeting: All devices'));\r\n }\r\n\r\n const formattedDevices = devices.map(device => Devices[device] || device).join(i18n.getString(_TL_(', ')));\r\n\r\n return i18n.getString(_TL_('{{formattedDevices}}'), { formattedDevices });\r\n};\r\n\r\nexport const Device = ({\r\n i18n,\r\n devices,\r\n deviceRestrictions,\r\n isCTVSupported,\r\n hideDeselectAll,\r\n validationPropsField,\r\n defaultSelectAll,\r\n}) => {\r\n const classes = useDefaultStyles(getStyle);\r\n const activity = useContext(ActivityContext);\r\n const supportedDevices = isCTVSupported ? Devices : omit(Devices, DeviceKeys.ConnectedTVs);\r\n const isAnyDeviceSupported = isEmpty(difference(keys(supportedDevices), deviceRestrictions));\r\n\r\n return ( {\r\n const { label } = options;\r\n\r\n return (\r\n
\r\n
\r\n
{label}
\r\n
\r\n );\r\n }}\r\n defaultSelectAll={defaultSelectAll}\r\n />);\r\n};\r\n\r\nDevice.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n devices: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n deviceRestrictions: PropTypes.arrayOf(PropTypes.string),\r\n isCTVSupported: PropTypes.bool,\r\n hideDeselectAll: PropTypes.bool,\r\n validationPropsField: PropTypes.string,\r\n defaultSelectAll: PropTypes.bool,\r\n};\r\n\r\nDevice.defaultProps = {\r\n deviceRestrictions: [],\r\n isCTVSupported: true,\r\n hideDeselectAll: true,\r\n validationPropsField: 'deviceTypes',\r\n defaultSelectAll: false,\r\n};\r\n","import React, { useContext } from 'react';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { chain, size, sortBy } from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport { Target as TargetInternal } from '@bingads-webui-react/dimensions-target';\r\nimport { withControlErrorHandling } from '@bingads-webui-campaign-react/error-handling';\r\n\r\nconst Target = withControlErrorHandling(TargetInternal);\r\n\r\nconst GendersWithoutUnknown = {\r\n Female: _TL_('Female'),\r\n Male: _TL_('Male'),\r\n};\r\n\r\nexport const Genders = {\r\n ...GendersWithoutUnknown,\r\n Unknown: _TL_('Unknown'),\r\n};\r\n\r\nconst sortGenders = genders => sortBy(genders, gender => Genders[gender]);\r\n\r\nexport const formatGender = (gender, i18n) => (Genders[gender] ? i18n.getString(Genders[gender]) : gender);\r\n\r\nexport const formatGenders = (genders, i18n) => {\r\n if (size(genders) === size(Genders)) {\r\n return i18n.getString(_TL_('Targeting: All genders'));\r\n }\r\n\r\n return chain(sortGenders(genders))\r\n .map(gender => formatGender(gender, i18n))\r\n .join(i18n.getString(_TL_(', ')))\r\n .value();\r\n};\r\n\r\nexport const Gender = ({ i18n, genders, hideUnknown }) => {\r\n const activity = useContext(ActivityContext);\r\n\r\n return (\r\n );\r\n};\r\n\r\nGender.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n genders: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n};\r\n","import React, { useContext } from 'react';\r\nimport { chain, size, sortBy } from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport { Target as TargetInternal } from '@bingads-webui-react/dimensions-target';\r\nimport { withControlErrorHandling } from '@bingads-webui-campaign-react/error-handling';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\n\r\nconst Target = withControlErrorHandling(TargetInternal);\r\n\r\nexport const AgeRanges = {\r\n EighteenToTwentyFive: _TL_('18-24'),\r\n TwentyFiveToThirtyFive: _TL_('25-34'),\r\n ThirtyFiveToFifty: _TL_('35-49'),\r\n FiftyToSixtyFive: _TL_('50-64'),\r\n SixtyFiveAndAbove: _TL_('65+'),\r\n Unknown: _TL_('Unknown'),\r\n};\r\n\r\nexport const AgeRangesCampaignToAdInsight = {\r\n EighteenToTwentyFive: 'EighteenToTwentyFour',\r\n TwentyFiveToThirtyFive: 'TwentyFiveToThirtyFour',\r\n ThirtyFiveToFifty: 'ThirtyFiveToFourtyNine',\r\n FiftyToSixtyFive: 'FiftyToSixtyFour',\r\n SixtyFiveAndAbove: 'SixtyFiveAndAbove',\r\n Unknown: _TL_('Unknown'),\r\n};\r\n\r\nconst sortAgeRanges = ageRanges => sortBy(ageRanges, ageRange => AgeRanges[ageRange]);\r\n\r\nexport const formatAgeRange = (ageRange, i18n) => (AgeRanges[ageRange] ? i18n.getString(AgeRanges[ageRange]) : ageRange);\r\n\r\nexport const formatAgeRanges = (ageRanges, i18n) => {\r\n if (size(ageRanges) === size(AgeRanges)) {\r\n return i18n.getString(_TL_('Targeting: All ages'));\r\n }\r\n\r\n return chain(sortAgeRanges(ageRanges))\r\n .map(ageRange => formatAgeRange(ageRange, i18n))\r\n .join(i18n.getString(_TL_(', ')))\r\n .value();\r\n};\r\n\r\nexport const AgeRange = ({ i18n, ageRanges }) => {\r\n const activity = useContext(ActivityContext);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nAgeRange.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n ageRanges: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n};\r\n","import { ceil } from 'lodash';\r\nimport { generateNameSuggestionSuffix } from '@bingads-webui-campaign/audience-campaign-shared';\r\nimport { xandrVideoCampaignTypes } from '@bingads-webui-campaign-react/campaign-adgroup-creation';\r\nimport { getBudgetRange, MinXandrDailyBudgetRangePerCurrency } from '@bingads-webui-campaign-legacy/common-grid-config/budget/get-budget-range';\r\nimport { CampaignSubTypeMapping } from '@bingads-webui-campaign-react/constants';\r\nimport { getConvertedCurrencyDealMinimumBid, getAccountExchangeRateFromLocalStorage } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport { Devices } from '../steps/ad-group/target/device';\r\nimport { Genders } from '../steps/ad-group/target/gender';\r\nimport { AgeRanges } from '../steps/ad-group/target/age-range';\r\n\r\nexport const STEP_PATHS = {\r\n CAMPAIGN_SETTINGS: 'CAMPAIGN_SETTINGS',\r\n AD_GROUP: 'AD_GROUP',\r\n ADS: 'ADS',\r\n};\r\n\r\nexport const ScenarioName = {\r\n XandrVideoCampaignCreation: 'XandrVideoCampaignCreation',\r\n XandrVideoAdGroupCreation: 'XandrVideoAdGroupCreation',\r\n XandrVideoCampaignSettings: 'XandrVideoCampaignSettings',\r\n XandrVideoAdGroupSettings: 'XandrVideoAdGroupSettings',\r\n XandrVideoAdsCreation: 'XandrVideoAdsCreation',\r\n};\r\n\r\nexport const StepLoadingStatus = {\r\n loading: 'loading',\r\n ready: 'ready',\r\n failed: 'failed',\r\n};\r\n\r\nconst getDefaultBudget = (currencyCode) => {\r\n if (MinXandrDailyBudgetRangePerCurrency[currencyCode]) {\r\n return MinXandrDailyBudgetRangePerCurrency[currencyCode];\r\n }\r\n const budget = getBudgetRange(currencyCode);\r\n\r\n return budget.Daily.Default;\r\n};\r\n\r\nconst getInitialCampaignData = (i18n, currencyCode, { xandrVideoDeal, xandrVideoCampaignType, isDisplayAds, serverContext }) => {\r\n let biddingSchemeType = (xandrVideoCampaignType === xandrVideoCampaignTypes.xandrVideoWeb || isDisplayAds) ? 'ManualCpm' : 'ManualCpv';\r\n let dealMinimumBid;\r\n\r\n if (xandrVideoDeal) {\r\n biddingSchemeType = 'ManualCpm';\r\n if (serverContext) {\r\n const exchangeRateMapping = getAccountExchangeRateFromLocalStorage(serverContext);\r\n dealMinimumBid = getConvertedCurrencyDealMinimumBid(xandrVideoDeal.MinimumBid, xandrVideoDeal.Currency, currencyCode, exchangeRateMapping.val);\r\n }\r\n }\r\n\r\n let campaignNamePrefix;\r\n if (isDisplayAds) {\r\n campaignNamePrefix = _TL_('Display ads');\r\n } else {\r\n campaignNamePrefix = _TL_('Video views campaign');\r\n }\r\n\r\n return {\r\n Status: 'Active',\r\n Name: generateNameSuggestionSuffix(i18n.getString(campaignNamePrefix)),\r\n Budget: {\r\n Amount: dealMinimumBid ? ceil(dealMinimumBid * 10, 2) : getDefaultBudget(currencyCode),\r\n Type: 'DailyStandard',\r\n },\r\n Languages: ['All'],\r\n BiddingScheme: {\r\n Type: biddingSchemeType,\r\n },\r\n Target: xandrVideoDeal && xandrVideoDeal.Id,\r\n CampaignSubType: isDisplayAds ? CampaignSubTypeMapping.DisplayAds : CampaignSubTypeMapping.BrandAwarenessVideoAds,\r\n CampaignType: 'Audience',\r\n };\r\n};\r\n\r\nexport const getInitialCampaignViewModel = (i18n, currencyCode, options) => ({\r\n data: getInitialCampaignData(i18n, currencyCode, options),\r\n isValid: true,\r\n isDirty: true,\r\n});\r\n\r\nexport const AddedDeviceBidAdjustment = 0;\r\nexport const RemovedDeviceBidAdjustment = -100;\r\n\r\nexport const AdGroupNegativeReferenceId = -111;\r\n\r\nexport const getInitialAdGroupData = ({ i18n, deviceTypes, dealMinimumBid }) => ({\r\n Status: 'Active',\r\n StartDate: new Date(),\r\n Name: generateNameSuggestionSuffix(i18n.getString(_TL_('Ad group'))),\r\n locationTargets: {\r\n bidMode: false,\r\n currentLevelSettings: {\r\n initLocations: [],\r\n peopleInLocation: true,\r\n peopleSearchingForLocation: true,\r\n targetOption: 'everywhere',\r\n },\r\n parentLevelSettings: {},\r\n useParentLevel: false,\r\n },\r\n adSchedules: {\r\n adScheduleUseSearcherTimeZone: undefined,\r\n dayTimeRanges: [],\r\n timeZone: undefined,\r\n },\r\n deviceTypes,\r\n initialDeviceTypes: Object.keys(Devices).map(device => ({\r\n criterion: device,\r\n bidAdjustment: RemovedDeviceBidAdjustment,\r\n })),\r\n ageRanges: Object.keys(AgeRanges),\r\n initialAgeRanges: [],\r\n genderTypes: Object.keys(Genders),\r\n initialGenderTypes: [],\r\n audiences: [],\r\n initialAudiences: [],\r\n FrequencyCapSettings: [{}],\r\n genreTargets: [],\r\n initialGenreTargets: [],\r\n CpmBid: dealMinimumBid,\r\n});\r\n\r\nexport const getInitialAdGroupViewModel = ({ i18n, deviceTypes, dealMinimumBid }) => ({\r\n data: getInitialAdGroupData({ i18n, deviceTypes, dealMinimumBid }),\r\n isValid: false,\r\n isDirty: false,\r\n});\r\n","import { locationTargetsOptionKeys } from '@bingads-webui-campaign-react/wizard-shared-components';\r\n\r\nimport {\r\n shouldSelectBundleOption,\r\n getLocationIntent\r\n} from '@bingads-webui-campaign/hotel-common-targets';\r\nimport { getSelectionFromCriterions } from '@bingads-webui-campaign-react/boost-contextual-target';\r\nimport { RemovedDeviceBidAdjustment } from '../common/constants';\r\n\r\nexport const CRITERION_LEVEL = {\r\n AD_GROUP: 'adGroup',\r\n CAMPAIGN: 'campaign',\r\n};\r\n\r\nexport const modelToViewModelForTargetCriterions = ({\r\n model,\r\n level = CRITERION_LEVEL.AD_GROUP,\r\n campaignDeviceCriterions = [],\r\n}) => {\r\n let positiveOdataType = '';\r\n let negativeOdateType = '';\r\n\r\n if (level === CRITERION_LEVEL.CAMPAIGN) {\r\n positiveOdataType = '#Model.BiddableCampaignCriterion';\r\n negativeOdateType = '#Model.NegativeCampaignCriterion';\r\n } else {\r\n positiveOdataType = '#Model.BiddableAdGroupCriterion';\r\n negativeOdateType = '#Model.NegativeAdGroupCriterion';\r\n }\r\n\r\n const initialDeviceTypes = model.filter(criterion => criterion.Criterion.Type === 'Device')\r\n .map(criterion => ({\r\n Id: criterion.Id,\r\n criterion: criterion.Criterion.DeviceName,\r\n bidAdjustment: criterion.CriterionBid.Multiplier,\r\n }));\r\n\r\n const initialAgeRanges = model.filter(criterion => criterion.Criterion.Type === 'Age' && criterion['@odata.type'] === positiveOdataType)\r\n .map(criterion => ({\r\n Id: criterion.Id,\r\n criterion: criterion.Criterion.AgeRange,\r\n bidAdjustment: criterion.CriterionBid.Multiplier,\r\n }));\r\n const negativeAgeRanges = model.filter(criterion => criterion.Criterion.Type === 'Age' && criterion['@odata.type'] === negativeOdateType)\r\n .map(criterion => ({\r\n Id: criterion.Id,\r\n criterion: criterion.Criterion.AgeRange,\r\n }));\r\n\r\n const initialGenderTypes = model.filter(criterion => criterion.Criterion.Type === 'Gender' && criterion['@odata.type'] === positiveOdataType)\r\n .map(criterion => ({\r\n Id: criterion.Id,\r\n criterion: criterion.Criterion.GenderType,\r\n bidAdjustment: criterion.CriterionBid.Multiplier,\r\n }));\r\n const negativeGenderTYpes = model.filter(criterion => criterion.Criterion.Type === 'Gender' && criterion['@odata.type'] === negativeOdateType)\r\n .map(criterion => ({\r\n Id: criterion.Id,\r\n criterion: criterion.Criterion.GenderType,\r\n }));\r\n\r\n const initialGenreTargets = model.filter(criterion => criterion.Criterion.Type === 'Genre' && criterion['@odata.type'] === positiveOdataType)\r\n .map(criterion => ({\r\n Id: criterion.Id,\r\n criterion: criterion.Criterion.GenreId,\r\n }));\r\n\r\n const initialIndustryTargets = model.filter(criterion => criterion.Criterion.Type === 'Industry' && criterion['@odata.type'] === positiveOdataType)\r\n .map(criterion => ({\r\n Id: criterion.Id,\r\n criterion: criterion.Criterion.ProfileId,\r\n BidAdjustment: criterion.CriterionBid.Multiplier,\r\n }));\r\n\r\n const initialNegativeIndustryTargets = model.filter(criterion => criterion.Criterion.Type === 'Industry' && criterion['@odata.type'] === negativeOdateType)\r\n .map(criterion => ({\r\n Id: criterion.Id,\r\n criterion: criterion.Criterion.ProfileId,\r\n }));\r\n\r\n const initialJobTargets = model.filter(criterion => criterion.Criterion.Type === 'JobFunction' && criterion['@odata.type'] === positiveOdataType)\r\n .map(criterion => ({\r\n Id: criterion.Id,\r\n criterion: criterion.Criterion.ProfileId,\r\n BidAdjustment: criterion.CriterionBid.Multiplier,\r\n }));\r\n\r\n const initialNegativeJobTargets = model.filter(criterion => criterion.Criterion.Type === 'JobFunction' && criterion['@odata.type'] === negativeOdateType)\r\n .map(criterion => ({\r\n Id: criterion.Id,\r\n criterion: criterion.Criterion.ProfileId,\r\n }));\r\n\r\n const initialCompanyNameTargets = model.filter(criterion => criterion.Criterion.Type === 'CompanyName' && criterion['@odata.type'] === positiveOdataType)\r\n .map(criterion => ({\r\n Id: criterion.Id,\r\n Target: criterion.Criterion.ProfileId,\r\n Size: criterion.Criterion.Size,\r\n Industry: criterion.Criterion.Industry,\r\n Name: criterion.Criterion.CompanyName,\r\n BidAdjustment: criterion.CriterionBid.Multiplier,\r\n }));\r\n\r\n const initialNegativeCompanyNameTargets = model.filter(criterion => criterion.Criterion.Type === 'CompanyName' && criterion['@odata.type'] === negativeOdateType)\r\n .map(criterion => ({\r\n Id: criterion.Id,\r\n Target: criterion.Criterion.ProfileId,\r\n Size: criterion.Criterion.Size,\r\n Industry: criterion.Criterion.Industry,\r\n Name: criterion.Criterion.CompanyName,\r\n }));\r\n\r\n const initialContextualTargets = getSelectionFromCriterions(model.filter(criterion => criterion.Criterion.Type === 'ContextualTargetType'));\r\n\r\n const initialCampaignLevelDeviceTargets = campaignDeviceCriterions.filter(criterion => criterion.Criterion.Type === 'Device')\r\n .map(criterion => ({\r\n Id: criterion.Id,\r\n criterion: criterion.Criterion.DeviceName,\r\n bidAdjustment: criterion.CriterionBid.Multiplier,\r\n }));\r\n\r\n const deviceTypes = initialDeviceTypes.filter(device => device.bidAdjustment !== RemovedDeviceBidAdjustment && device.bidAdjustment !== undefined).map(criterion => criterion.criterion);\r\n const campaignLevelDeviceTargets = initialCampaignLevelDeviceTargets.filter(device => device.bidAdjustment !== RemovedDeviceBidAdjustment && device.bidAdjustment !== undefined).map(criterion => criterion.criterion);\r\n\r\n return {\r\n initialDeviceTypes,\r\n deviceTypes,\r\n initialCampaignLevelDeviceTargets,\r\n campaignLevelDeviceTargets,\r\n initialAgeRanges,\r\n ageRanges: initialAgeRanges.map(criterion => criterion.criterion),\r\n initialGenderTypes,\r\n genderTypes: initialGenderTypes.map(criterion => criterion.criterion),\r\n negativeAgeRanges,\r\n negativeGenderTYpes,\r\n initialGenreTargets,\r\n genreTargets: initialGenreTargets.map(criterion => criterion.criterion),\r\n initialIndustryTargets,\r\n industry: initialIndustryTargets.map(criterion => criterion.criterion),\r\n initialNegativeIndustryTargets,\r\n negativeIndustry: initialNegativeIndustryTargets.map(criterion => criterion.criterion),\r\n initialJobTargets,\r\n jobTargets: initialJobTargets.map(criterion => criterion.criterion),\r\n initialNegativeJobTargets,\r\n negativeJobTargets: initialNegativeJobTargets.map(criterion => criterion.criterion),\r\n initialCompanyNameTargets,\r\n companyNameTargets: initialCompanyNameTargets,\r\n initialNegativeCompanyNameTargets,\r\n negativeCompanyNameTargets: initialNegativeCompanyNameTargets,\r\n initialContextualTargets,\r\n contextualTargets: initialContextualTargets,\r\n deviceTargetingCampaignLevel: deviceTypes.length === 0 || initialDeviceTypes === 0,\r\n };\r\n};\r\n\r\nexport const bulkModelToViewModelForLocationTargetsBase = ({\r\n locationTargetsModel, bundleCountries, level = CRITERION_LEVEL.AD_GROUP,\r\n}) => {\r\n const locations = locationTargetsModel\r\n .filter(criterion => criterion.Criterion.Type === 'Radius' || criterion.Criterion.Type === 'Location');\r\n const intent = locationTargetsModel.find(criterion => criterion.Criterion.Type === 'LocationIntentCriterion');\r\n const intentId = intent ? intent.Id : null;\r\n const intentOption = intent ? getLocationIntent(intent.Criterion.LocationIntentCriterion.IntentOption) : null;\r\n let targetOption = locations.length ? locationTargetsOptionKeys.specific : locationTargetsOptionKeys.everywhere;\r\n targetOption = shouldSelectBundleOption(bundleCountries, locations) ? locationTargetsOptionKeys.bundleOrDefaultMarket : targetOption;\r\n\r\n const useParentLevel = level === CRITERION_LEVEL.CAMPAIGN ? false : locations.length === 0;\r\n\r\n return {\r\n locationTargets: {\r\n currentLevelSettings: {\r\n initLocations: locations,\r\n currentLocations: locations,\r\n targetOption,\r\n intentId,\r\n ...intentOption,\r\n },\r\n bidMode: false,\r\n useParentLevel,\r\n },\r\n };\r\n};\r\n","import { pick, isEmpty, chain, difference, map, get } from 'underscore';\r\nimport { edmCampaign } from '@bingads-webui/edm-campaign';\r\nimport { AdGroupCriterion } from '@bingads-webui/campaign-odata-schemas';\r\nimport { modelToViewModelDayTimeTargets, locationTargetsOptionKeys } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport {\r\n getBundleCountriesAndBundleLocationCriterions,\r\n shouldSelectBundleOption,\r\n parseLocationTargets,\r\n convertLocationStateToLocationSchemaCampaign,\r\n} from '@bingads-webui-campaign/hotel-common-targets';\r\nimport { isXandrDisplayAdsCampaign, isAudienceNativeAdsCampaign, isXandrVideoAdsCampaign } from '@bingads-webui-campaign-react/constants';\r\nimport { getContextualTargetInfo } from '@bingads-webui-campaign-react/boost-contextual-target';\r\nimport { AddedDeviceBidAdjustment as DefaultDeviceBidAdjustment, RemovedDeviceBidAdjustment, AdGroupNegativeReferenceId } from '../common/constants';\r\nimport { DeviceKeys } from '../steps/ad-group/target/device';\r\nimport { CRITERION_LEVEL, bulkModelToViewModelForLocationTargetsBase } from './criterions';\r\n\r\nexport const initialAdGroupCriterionsViewModel = {\r\n data: [],\r\n isValid: true,\r\n isDirty: false,\r\n};\r\n\r\nconst whitelistedSchemaPropertyKeys = Object.keys(AdGroupCriterion.properties);\r\n\r\nexport const modelToViewModelForAdGroupCriterions = (adGroupCriterionsModel) => {\r\n const data = pick(adGroupCriterionsModel, whitelistedSchemaPropertyKeys);\r\n const adGroupCriterionsViewModel = {\r\n data,\r\n isValid: true,\r\n isDirty: false,\r\n };\r\n return adGroupCriterionsViewModel;\r\n};\r\n\r\nexport const modelToViewModelForLocationTargets = ({\r\n model, campaignLocationModel, bundleCountries, adGroupId, campaignId, overrideOriginalBidAdjustment = false, bidMode = false,\r\n}) => {\r\n const {\r\n locations,\r\n intentId,\r\n intentOption,\r\n } = parseLocationTargets(model, 'adGroup', adGroupId);\r\n\r\n let targetOption = locations.length ? locationTargetsOptionKeys.specific : locationTargetsOptionKeys.everywhere;\r\n targetOption = shouldSelectBundleOption(bundleCountries, locations) ? locationTargetsOptionKeys.bundleOrDefaultMarket : targetOption;\r\n\r\n let parentLevelSettings;\r\n\r\n if (campaignLocationModel) {\r\n const {\r\n locations: campaignLocations,\r\n intentId: campaignIntentId,\r\n intentOption: campaignIntentOption,\r\n } = parseLocationTargets(campaignLocationModel, 'campaign', campaignId);\r\n\r\n let campaignTargetOption = campaignLocations.length ? locationTargetsOptionKeys.specific : locationTargetsOptionKeys.everywhere;\r\n campaignTargetOption = shouldSelectBundleOption(bundleCountries, campaignLocations) ? locationTargetsOptionKeys.bundleOrDefaultMarket : targetOption;\r\n\r\n parentLevelSettings = {\r\n initLocations: campaignLocations,\r\n currentLocations: campaignLocations,\r\n targetOption: campaignTargetOption,\r\n intentId: campaignIntentId,\r\n ...campaignIntentOption,\r\n };\r\n }\r\n\r\n if (overrideOriginalBidAdjustment) {\r\n locations.forEach((location) => {\r\n // eslint-disable-next-line no-param-reassign\r\n location.Criterion.OriginalBidAdjustment = null;\r\n });\r\n }\r\n\r\n return {\r\n locationTargets: {\r\n currentLevelSettings: {\r\n initLocations: locations,\r\n currentLocations: locations,\r\n targetOption,\r\n intentId,\r\n ...intentOption,\r\n },\r\n parentLevelSettings,\r\n bidMode,\r\n useParentLevel: locations.length === 0,\r\n },\r\n };\r\n};\r\n\r\nexport const modelToViewModelForPlacements = ({\r\n model,\r\n}) => {\r\n const placements = model.map(placement => ({\r\n ...placement.Criterion,\r\n Id: placement.Id,\r\n }));\r\n\r\n return {\r\n placements,\r\n initialPlacements: placements,\r\n };\r\n};\r\n\r\nexport const modelToViewModelForDayTimeTargets = ({\r\n model,\r\n}) => {\r\n const adGroupDayTimeRanges = modelToViewModelDayTimeTargets(model);\r\n return {\r\n adSchedules: {\r\n dayTimeRanges: adGroupDayTimeRanges,\r\n },\r\n };\r\n};\r\n\r\nconst modelToViewModelForAudience = audience => ({\r\n CriterionType: audience.CriterionType,\r\n Id: audience.Id,\r\n Status: audience.Status,\r\n Criterion: {\r\n AudienceId: audience.AudienceCriterion.AudienceId,\r\n AudienceName: audience.AudienceCriterion.AudienceName,\r\n AudienceType: audience.AudienceCriterion.AudienceType,\r\n BidMultiplier: audience.AudienceCriterion.BidMultiplier,\r\n Type: audience.AudienceCriterion.Type,\r\n },\r\n AdGroup: audience.AdGroup,\r\n BidType: audience.BidType,\r\n});\r\n\r\nexport const modelToViewModelForAudienceCriterions = ({ model, separateIMA }) => {\r\n // TODO: filter custom segment out from audiences\r\n let filteredAudiences = model.filter(audience => audience.AudienceCriterion.AudienceType !== 'CustomSegment');\r\n const customSegmentsAudiences = model.filter(audience => audience.AudienceCriterion.AudienceType === 'CustomSegment');\r\n const interests = separateIMA ? model.filter(audience => audience.AudienceCriterion.AudienceType === 'InMarket') : [];\r\n if (separateIMA) {\r\n filteredAudiences = filteredAudiences.filter(audience => audience.AudienceCriterion.AudienceType !== 'InMarket');\r\n }\r\n\r\n const initialCustomSegments = map(customSegmentsAudiences, modelToViewModelForAudience);\r\n\r\n const initialAudiences = map(filteredAudiences, modelToViewModelForAudience);\r\n\r\n const initialInterests = map(interests, modelToViewModelForAudience);\r\n\r\n return {\r\n initialAudiences,\r\n audiences: initialAudiences,\r\n initialCustomSegments,\r\n customSegments: initialCustomSegments,\r\n initialInterests,\r\n interests: initialInterests,\r\n };\r\n};\r\n\r\nexport const bulkModelToViewModelForDayTimeTargets = ({\r\n criterions,\r\n}) => {\r\n const schedulingRows = [];\r\n\r\n chain(criterions)\r\n .filter(criterion => criterion.CriterionType === 'DayTime')\r\n .each((criterion) => {\r\n schedulingRows.push({\r\n Id: criterion.Id,\r\n Day: criterion.Criterion.DayTimeCriterion.Day,\r\n StartHour: criterion.Criterion.DayTimeCriterion.FromHour,\r\n StartMinute: criterion.Criterion.DayTimeCriterion.FromMinute,\r\n EndHour: criterion.Criterion.DayTimeCriterion.ToHour,\r\n EndMinute: criterion.Criterion.DayTimeCriterion.ToMinute,\r\n });\r\n })\r\n .value();\r\n\r\n return {\r\n adSchedules: {\r\n dayTimeRanges: schedulingRows,\r\n },\r\n };\r\n};\r\n\r\nexport const bulkModelToViewModelForLocationTargets = ({\r\n locationTargetsModel, bundleCountries,\r\n}) => bulkModelToViewModelForLocationTargetsBase({\r\n locationTargetsModel, bundleCountries, level: CRITERION_LEVEL.AD_GROUP,\r\n});\r\n\r\nexport const viewModelToBulkModelForLocationTargets = ({ bundleLocationCriterions, adGroupViewModel, campaignViewModel }) => {\r\n if (!adGroupViewModel.data.locationTargets || adGroupViewModel.data.locationRestricted) {\r\n return [];\r\n }\r\n const bulkUpsertModel = convertLocationStateToLocationSchemaCampaign(\r\n adGroupViewModel.data.locationTargets,\r\n bundleLocationCriterions,\r\n {\r\n bidStrategy: { option: 'placeholder' },\r\n ...campaignViewModel,\r\n },\r\n {\r\n ...adGroupViewModel.data,\r\n name: {\r\n value: adGroupViewModel.data.Name,\r\n },\r\n }\r\n );\r\n return bulkUpsertModel;\r\n};\r\n\r\nexport const viewModelToBulkModelForAdSchedules = ({ adGroupViewModel, campaignViewModel }) => {\r\n const targets = adGroupViewModel.data.adSchedulesBulkUpsert || [];\r\n return targets.map((criterion) => {\r\n const Status = isEmpty(criterion) ? 'Active' : criterion.Status;\r\n if (adGroupViewModel.data.Id) {\r\n return {\r\n ...criterion,\r\n Status,\r\n AdGroup: {\r\n Id: adGroupViewModel.data.Id,\r\n },\r\n };\r\n }\r\n return {\r\n ...criterion,\r\n Status,\r\n AdGroupName: adGroupViewModel.data.Name,\r\n CampaignName: campaignViewModel.Name,\r\n };\r\n });\r\n};\r\n\r\nexport const viewModelToBulkModelForAudiences = ({ adGroupViewModel, campaignViewModel }) => {\r\n if (adGroupViewModel.data.audienceRestricted) {\r\n return [];\r\n }\r\n const audiences = adGroupViewModel.data.audiences || [];\r\n const initialAudiences = adGroupViewModel.data.initialAudiences || [];\r\n const customSegments = adGroupViewModel.data.customSegments || [];\r\n const initialCustomSegments = adGroupViewModel.data.initialCustomSegments || [];\r\n const interests = adGroupViewModel.data.interests || [];\r\n const initialInterests = adGroupViewModel.data.initialInterests || [];\r\n\r\n const totalAudiences = [...audiences, ...interests];\r\n const initialTotalAudiences = [...initialAudiences, ...initialInterests];\r\n\r\n const added = totalAudiences.filter(audience => !initialTotalAudiences.find(initialAudience => initialAudience.Criterion.AudienceId === audience.Criterion.AudienceId && initialAudience.Criterion.BidMultiplier === audience.Criterion.BidMultiplier));\r\n const removed = initialTotalAudiences.filter(initialAudience => !totalAudiences.find(audience => audience.Criterion.AudienceId === initialAudience.Criterion.AudienceId)).map(audience => ({\r\n ...audience,\r\n Status: 'Deleted',\r\n }));\r\n\r\n const addedCustomSegments = customSegments.filter(customSegment => !initialCustomSegments.find(initialCustomSegment => initialCustomSegment.Criterion.AudienceId === customSegment.Criterion.AudienceId));\r\n const removedCustomSegments = initialCustomSegments.filter(initialCustomSegment => !customSegments.find(customSegment => customSegment.Criterion.AudienceId === initialCustomSegment.Criterion.AudienceId)).map(customSegment => ({\r\n ...customSegment,\r\n Status: 'Deleted',\r\n }));\r\n\r\n return [...added, ...addedCustomSegments, ...removed, ...removedCustomSegments].map((audience) => {\r\n const Status = isEmpty(audience.Status) ? 'Active' : audience.Status;\r\n\r\n const typePrefix = audience.Status === 'Excluded' ? 'Negative' : '';\r\n const criterionType = `${typePrefix}${audience.Criterion.AudienceType}`;\r\n\r\n if (adGroupViewModel.data.Id) {\r\n return {\r\n ...audience,\r\n Status,\r\n CriterionType: criterionType,\r\n AdGroup: {\r\n Id: adGroupViewModel.data.Id,\r\n },\r\n };\r\n }\r\n\r\n return {\r\n ...audience,\r\n Status,\r\n CriterionType: criterionType,\r\n AdGroupName: adGroupViewModel.data.Name,\r\n CampaignName: campaignViewModel.Name,\r\n AdGroup: {\r\n Id: AdGroupNegativeReferenceId,\r\n },\r\n };\r\n });\r\n};\r\n\r\nexport const viewModelToBulkModelForPlacements = ({ adGroupViewModel, campaignViewModel }) => {\r\n const placements = adGroupViewModel.data.placements || [];\r\n const initialPlacements = adGroupViewModel.data.initialPlacements || [];\r\n\r\n const added = placements.filter(placement => !initialPlacements.find(initialPlacement => initialPlacement.PlacementId === placement.PlacementId));\r\n const removed = initialPlacements.filter(initialPlacement => !placements.find(placement => placement.PlacementId === initialPlacement.PlacementId)).map(placement => ({\r\n ...placement,\r\n Status: 'Deleted',\r\n }));\r\n\r\n return [...added, ...removed].map((placement) => {\r\n const Status = isEmpty(placement.Status) ? 'Active' : placement.Status;\r\n\r\n const adGroupId = adGroupViewModel.data.Id;\r\n if (adGroupId) {\r\n return {\r\n Status,\r\n CriterionType: 'AdGroupPlacementCriterion',\r\n ...(placement.Id ? { Id: placement.Id } : {}),\r\n Criterion: {\r\n PlacementId: placement.PlacementId,\r\n Type: 'Placement',\r\n },\r\n AdGroup: {\r\n Id: adGroupId,\r\n },\r\n };\r\n }\r\n\r\n return {\r\n Status,\r\n ...(placement.Id ? { Id: placement.Id } : {}),\r\n CriterionType: 'AdGroupPlacementCriterion',\r\n AdGroupName: adGroupViewModel.data.Name,\r\n CampaignName: campaignViewModel.Name,\r\n Criterion: {\r\n PlacementId: placement.PlacementId,\r\n Type: 'Placement',\r\n },\r\n AdGroup: {\r\n Id: AdGroupNegativeReferenceId,\r\n },\r\n };\r\n });\r\n};\r\n\r\nexport const getTargetCriterion = ({\r\n targets,\r\n type,\r\n propKey,\r\n adGroupViewModel,\r\n campaignViewModel,\r\n bidAdjustment,\r\n overrideType = undefined,\r\n level = 'adGroup',\r\n}) => targets.map((target) => {\r\n let BidAdjustment = bidAdjustment;\r\n let propValue = target.criterion;\r\n\r\n if (typeof (target.criterion) === 'object') {\r\n propValue = target.criterion.Target;\r\n\r\n if (bidAdjustment === undefined) {\r\n const { BidAdjustment: bid } = target.criterion;\r\n BidAdjustment = bid;\r\n }\r\n }\r\n\r\n const criterion = {\r\n Type: overrideType || type,\r\n BidAdjustment,\r\n [`${overrideType || type}Criterion`]: {\r\n [propKey]: propValue,\r\n },\r\n };\r\n\r\n if (level === 'campaign') {\r\n return {\r\n Id: target.Id,\r\n Status: target.status ? target.status : 'Active',\r\n Criterion: criterion,\r\n CriterionType: type,\r\n Campaign: {\r\n Id: campaignViewModel.data.Id || -111,\r\n },\r\n };\r\n }\r\n\r\n if (adGroupViewModel.data.Id) {\r\n return {\r\n Id: target.Id,\r\n Status: target.status ? target.status : 'Active',\r\n Criterion: criterion,\r\n CriterionType: type,\r\n AdGroup: {\r\n Id: adGroupViewModel.data.Id,\r\n },\r\n CampaignName: campaignViewModel.Name,\r\n };\r\n }\r\n return {\r\n Criterion: criterion,\r\n CriterionType: type,\r\n AdGroupName: adGroupViewModel.data.Name,\r\n CampaignName: campaignViewModel.Name,\r\n AdGroup: {\r\n Id: AdGroupNegativeReferenceId,\r\n },\r\n };\r\n});\r\n\r\n// eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars\r\nfunction getDeviceCriterionsFull(adGroupViewModel, isDeviceTargetingForDisplayEnabled) {\r\n const deviceTargets = adGroupViewModel.data.deviceTypes || [];\r\n const initialDeviceTargets = adGroupViewModel.data.initialDeviceTypes || [];\r\n\r\n const addedBackDevices = initialDeviceTargets.filter(initialTarget => deviceTargets.find(target => initialTarget.criterion === target) && initialTarget.bidAdjustment === RemovedDeviceBidAdjustment)\r\n .map((device => ({ criterion: device.criterion, Id: device.Id })));\r\n const newlyAddedDevices = deviceTargets.filter(target => initialDeviceTargets.find(initialTarget => initialTarget.criterion === target) === undefined)\r\n .filter((device => addedBackDevices.find(addedBackDevice => addedBackDevice.criterion === device) === undefined));\r\n let removedDevices = initialDeviceTargets.filter(initialTarget => deviceTargets.find(target => initialTarget.criterion === target) === undefined);\r\n if (isDeviceTargetingForDisplayEnabled) {\r\n removedDevices = initialDeviceTargets.filter(initialTarget => deviceTargets.find(target => initialTarget.criterion === target) === undefined && initialTarget.bidAdjustment === DefaultDeviceBidAdjustment);\r\n }\r\n const addedDevices = [...addedBackDevices, ...newlyAddedDevices.map(criterion => ({ criterion }))];\r\n\r\n return { addedDevices, removedDevices };\r\n}\r\n\r\nfunction getDeviceCriterionsVideoAds(adGroupViewModel) {\r\n const deviceTargets = adGroupViewModel.data.deviceTypes || []; // user selected device targets\r\n\r\n // ICM 542906055, handles a case where no device criterion was previously saved\r\n const deviceTargetsWhenNoInitialDeviceTargets = [\r\n {\r\n criterion: DeviceKeys.Computers,\r\n bidAdjustment: deviceTargets.includes(DeviceKeys.Computers) ? DefaultDeviceBidAdjustment : RemovedDeviceBidAdjustment,\r\n },\r\n {\r\n criterion: DeviceKeys.Tablets,\r\n bidAdjustment: deviceTargets.includes(DeviceKeys.Tablets) ? DefaultDeviceBidAdjustment : RemovedDeviceBidAdjustment,\r\n },\r\n {\r\n criterion: DeviceKeys.Smartphones,\r\n bidAdjustment: deviceTargets.includes(DeviceKeys.Smartphones) ? DefaultDeviceBidAdjustment : RemovedDeviceBidAdjustment,\r\n },\r\n {\r\n criterion: DeviceKeys.ConnectedTVs,\r\n bidAdjustment: RemovedDeviceBidAdjustment,\r\n },\r\n ];\r\n\r\n const initialDeviceTargets = adGroupViewModel.data.initialDeviceTypes || []; // saved initial device targets\r\n const supportedDevices = [DeviceKeys.Computers, DeviceKeys.Tablets, DeviceKeys.Smartphones]; // supported device targets for VideoAds\r\n\r\n // get added devices - overlap between initial removed devices (bid adjustment = -100) and selected devices\r\n const addedDevices = initialDeviceTargets.length === 0 ? deviceTargetsWhenNoInitialDeviceTargets : initialDeviceTargets.filter(initialTarget => deviceTargets.find(target => initialTarget.criterion === target) && initialTarget.bidAdjustment === RemovedDeviceBidAdjustment);\r\n\r\n // get removed devices - overlap between supported added devices (bid adjustment = 0) and selected devices\r\n const toRemoveDevices = difference(supportedDevices, deviceTargets);\r\n const removedDevices = initialDeviceTargets.filter(initialTarget => toRemoveDevices.find(target => initialTarget.criterion === target) && initialTarget.bidAdjustment === DefaultDeviceBidAdjustment);\r\n\r\n return { addedDevices, removedDevices };\r\n}\r\n\r\nfunction getDeviceCriterions(adGroupViewModel) {\r\n const { deviceTypesWithBidAdjustment = [] } = adGroupViewModel.data;\r\n const deviceTargets = adGroupViewModel.data.deviceTypes || [];\r\n const initialDeviceTargets = adGroupViewModel.data.initialDeviceTypes || [];\r\n const supportedDevices = [DeviceKeys.Computers, DeviceKeys.Tablets, DeviceKeys.Smartphones];\r\n\r\n // if we have deviceTargetingCampaignLevel, we need to delete the targets set at adgroup level.\r\n const deviceTargetingCampaignLevel = adGroupViewModel.data.deviceTargetingCampaignLevel || false;\r\n\r\n if (deviceTargetingCampaignLevel) {\r\n return { addedDevices: [], removedDevices: initialDeviceTargets.map(target => ({ ...target, status: 'Deleted' })) };\r\n }\r\n\r\n const isBidAdjustmentSame = initialTarget => deviceTypesWithBidAdjustment.find(targetWithBid =>\r\n targetWithBid.Criterion.DeviceCriterion.DeviceName === initialTarget.target && targetWithBid.Criterion.BidAdjustment === initialTarget.bidAdjustment);\r\n const isTargetChanged = target => initialDeviceTargets.find(initialTarget => initialTarget.criterion === target && isBidAdjustmentSame(initialTarget)) === undefined;\r\n\r\n const addedDevices = deviceTargets.filter(isTargetChanged).map((target) => {\r\n const deviceTargetWithBid = deviceTypesWithBidAdjustment.find(deviceWithBid => deviceWithBid.Criterion.DeviceCriterion.DeviceName === target) || {};\r\n const initialDeviceTarget = initialDeviceTargets.find(initialTarget => initialTarget.criterion === target) || {};\r\n const { Id } = initialDeviceTarget || deviceTargetWithBid;\r\n const bid = get(deviceTargetWithBid, 'Criterion.BidAdjustment', initialDeviceTarget.bidAdjustment || DefaultDeviceBidAdjustment);\r\n\r\n return {\r\n Id,\r\n criterion: {\r\n Target: target,\r\n BidAdjustment: bid,\r\n },\r\n };\r\n });\r\n\r\n const toRemoveDevices = initialDeviceTargets.length === 0 && deviceTargets.length === 0 ? [] : difference(supportedDevices, deviceTargets); // don't remove devices if no change\r\n\r\n const removedDevices = toRemoveDevices.map((target) => {\r\n const { Id } = initialDeviceTargets.find(initialTarget => initialTarget.criterion === target) || {};\r\n\r\n return {\r\n Id,\r\n criterion: {\r\n Target: target,\r\n BidAdjustment: RemovedDeviceBidAdjustment,\r\n },\r\n };\r\n });\r\n\r\n return { addedDevices, removedDevices };\r\n}\r\n\r\n\r\nconst isBidAdjustmentSame = (criterionType, targetWithBidAdjustmentList, target, initialTarget) =>\r\n targetWithBidAdjustmentList.find(targetWithBid =>\r\n targetWithBid.Criterion[`${criterionType}Criterion`].Target === target &&\r\n targetWithBid.Criterion.BidAdjustment === initialTarget.bidAdjustment);\r\n\r\nconst hydrateCriterionWithBidAndId = (criterionType, initialTargetList, adddedCriterionList, targetWithBidAdjustmentList) => {\r\n for (let i = 0; i < adddedCriterionList.length; i += 1) {\r\n const criterion = adddedCriterionList[i];\r\n // add bid adjustments to modified criterion\r\n const matchingAgeRangeWithBid = targetWithBidAdjustmentList.find(criterionWithBidAdjustment =>\r\n criterionWithBidAdjustment.Criterion[`${criterionType}Criterion`].Target === criterion.Criterion[`${criterionType}Criterion`].Target);\r\n criterion.Criterion.BidAdjustment = matchingAgeRangeWithBid.Criterion.BidAdjustment;\r\n\r\n // add id to update existing criterion in MT\r\n const originalCrition = initialTargetList.find(initialTarget => initialTarget.criterion === criterion.Criterion[`${criterionType}Criterion`].Target);\r\n if (originalCrition) {\r\n criterion.Id = originalCrition.Id;\r\n }\r\n }\r\n};\r\n\r\nexport const viewModelToBulkModelForTargeting = ({\r\n adGroupViewModel,\r\n campaignViewModel,\r\n isXandrDeviceTargetEnabled,\r\n isBoostEnabled = false,\r\n isDeviceTargetingForDisplayEnabled = false,\r\n isMultiAdFormatEnabled = false,\r\n isXandrServing = false,\r\n isPremiumStreamingEnabled = false,\r\n}) => {\r\n let addedDeviceCriterion = [];\r\n let removedDeviceCriterion = [];\r\n // deviceTypes\r\n const isDisplayAds = isXandrDisplayAdsCampaign(campaignViewModel.CampaignSubType);\r\n const isNativeAds = isAudienceNativeAdsCampaign(campaignViewModel.CampaignSubType);\r\n const isVideoAds = isXandrVideoAdsCampaign(campaignViewModel.CampaignSubType);\r\n const isDealBasedAds = adGroupViewModel.data.deal;\r\n\r\n const isXandrDeviceTargetForOLVEnabled = isXandrDeviceTargetEnabled && isVideoAds && campaignViewModel.BiddingScheme.Type === 'ManualCpm';\r\n const isUpdate = !!adGroupViewModel.data.Id;\r\n\r\n let addedDevices = [];\r\n let removedDevices = [];\r\n\r\n if (isUpdate) {\r\n // updating\r\n if (isDisplayAds) {\r\n const { addedDevices: displayAddDevices, removedDevices: displayRemovedDevices } = getDeviceCriterionsFull(adGroupViewModel, isDeviceTargetingForDisplayEnabled);\r\n\r\n addedDevices = displayAddDevices;\r\n removedDevices = displayRemovedDevices;\r\n } else if (isNativeAds) {\r\n const { addedDevices: displayAddDevices, removedDevices: displayRemovedDevices } = getDeviceCriterions(adGroupViewModel);\r\n\r\n addedDevices = displayAddDevices;\r\n removedDevices = displayRemovedDevices;\r\n } else if (isDealBasedAds) {\r\n if (!adGroupViewModel.data.deviceRestricted) {\r\n addedDevices = adGroupViewModel.data.deviceTypes.map(device => ({ criterion: device }));\r\n removedDevices = difference(Object.keys(DeviceKeys), adGroupViewModel.data.deviceTypes).map(device => ({ criterion: device }));\r\n }\r\n } else if (isVideoAds && (!isXandrServing || isXandrDeviceTargetForOLVEnabled)) {\r\n const { addedDevices: displayAddDevices, removedDevices: displayRemovedDevices } = getDeviceCriterionsVideoAds(adGroupViewModel);\r\n\r\n addedDevices = displayAddDevices;\r\n removedDevices = displayRemovedDevices;\r\n } else if (isXandrDeviceTargetForOLVEnabled) {\r\n addedDevices = adGroupViewModel.data.deviceTypes.map(device => ({ criterion: device }));\r\n removedDevices = difference(Object.keys(DeviceKeys), adGroupViewModel.data.deviceTypes).map(device => ({ criterion: device }));\r\n } else if (isVideoAds && isPremiumStreamingEnabled && campaignViewModel.BiddingScheme.Type === 'ManualCpv') {\r\n addedDevices = adGroupViewModel.data.deviceTypes.map(device => ({ criterion: device }));\r\n removedDevices = difference(Object.keys(DeviceKeys), adGroupViewModel.data.deviceTypes).map(device => ({ criterion: device }));\r\n } else {\r\n const cpmTargets = [DeviceKeys.Computers, DeviceKeys.Tablets, DeviceKeys.Smartphones];\r\n const cpvTargets = [DeviceKeys.ConnectedTVs];\r\n if (campaignViewModel.BiddingScheme.Type === 'ManualCpm') {\r\n addedDevices = cpmTargets.map(device => ({ criterion: device }));\r\n removedDevices = cpvTargets.map(device => ({ criterion: device }));\r\n } else {\r\n addedDevices = cpvTargets.map(device => ({ criterion: device }));\r\n removedDevices = cpmTargets.map(device => ({ criterion: device }));\r\n }\r\n }\r\n } else {\r\n // creating\r\n // eslint-disable-next-line no-lonely-if\r\n if (isDisplayAds || (isNativeAds && isMultiAdFormatEnabled)) {\r\n const supportedDevices = [DeviceKeys.Computers, DeviceKeys.Tablets, DeviceKeys.Smartphones];\r\n addedDevices = adGroupViewModel.data.deviceTypes.map(device => ({ criterion: device }));\r\n removedDevices = difference(supportedDevices, adGroupViewModel.data.deviceTypes).map(device => ({ criterion: device }));\r\n } else if (isDealBasedAds) {\r\n if (!adGroupViewModel.data.deviceRestricted) {\r\n addedDevices = adGroupViewModel.data.deviceTypes.map(device => ({ criterion: device }));\r\n removedDevices = difference(Object.keys(DeviceKeys), adGroupViewModel.data.deviceTypes).map(device => ({ criterion: device }));\r\n }\r\n } else if (isXandrDeviceTargetForOLVEnabled) {\r\n addedDevices = adGroupViewModel.data.deviceTypes.map(device => ({ criterion: device }));\r\n removedDevices = difference(Object.keys(DeviceKeys), adGroupViewModel.data.deviceTypes).map(device => ({ criterion: device }));\r\n } else if (isVideoAds && isPremiumStreamingEnabled && campaignViewModel.BiddingScheme.Type === 'ManualCpv') {\r\n addedDevices = adGroupViewModel.data.deviceTypes.map(device => ({ criterion: device }));\r\n removedDevices = difference(Object.keys(DeviceKeys), adGroupViewModel.data.deviceTypes).map(device => ({ criterion: device }));\r\n }\r\n }\r\n\r\n // deviceTypesWithBidAdjustment is not set then use DefaultDeviceBidAdjustment for all added devices\r\n const { deviceTypesWithBidAdjustment } = adGroupViewModel.data;\r\n const defaultBidAdjustment = deviceTypesWithBidAdjustment ? undefined : DefaultDeviceBidAdjustment;\r\n\r\n addedDeviceCriterion = getTargetCriterion({\r\n targets: addedDevices, type: 'Device', propKey: 'DeviceName', adGroupViewModel, campaignViewModel, bidAdjustment: defaultBidAdjustment,\r\n });\r\n\r\n // ICM 542906055, in this scenario, the getTargetCriterion function sets the bid adjustment to 0 for all devices\r\n if (isVideoAds && !isXandrServing && adGroupViewModel.data.initialDeviceTypes.length === 0) {\r\n const deviceTypes = [DeviceKeys.Computers, DeviceKeys.Tablets, DeviceKeys.Smartphones, DeviceKeys.ConnectedTVs];\r\n const adjustedAddedDeviceCriterion = addedDeviceCriterion.map((addedCriterion, idx) => {\r\n if (deviceTypes.includes(addedCriterion.Criterion.DeviceCriterion.DeviceName)) {\r\n return {\r\n ...addedCriterion,\r\n Criterion: {\r\n ...addedCriterion.Criterion,\r\n BidAdjustment: addedDevices[idx].bidAdjustment,\r\n },\r\n };\r\n }\r\n return addedCriterion;\r\n });\r\n addedDeviceCriterion = adjustedAddedDeviceCriterion;\r\n }\r\n\r\n removedDeviceCriterion = getTargetCriterion({\r\n targets: removedDevices, type: 'Device', propKey: 'DeviceName', adGroupViewModel, campaignViewModel, bidAdjustment: RemovedDeviceBidAdjustment,\r\n });\r\n\r\n // ageRanges\r\n const ageTargets = adGroupViewModel.data.ageRanges || [];\r\n const initialAgeTargets = adGroupViewModel.data.initialAgeRanges || [];\r\n const { ageRangesWithBidAdjustment } = adGroupViewModel.data;\r\n const addedAges = ageTargets.filter(target => initialAgeTargets.find(initialTarget => initialTarget.criterion === target\r\n && (!ageRangesWithBidAdjustment || isBidAdjustmentSame('Age', ageRangesWithBidAdjustment, target, initialTarget))) === undefined);\r\n const removedAges = initialAgeTargets.filter(initialTarget => ageTargets.find(target => initialTarget.criterion === target) === undefined).map(target => ({ ...target, status: 'Deleted' }));\r\n const addedAgeCriterion = getTargetCriterion({\r\n targets: addedAges.map(criterion => ({ criterion })), type: 'Age', propKey: 'Target', adGroupViewModel, campaignViewModel,\r\n });\r\n const removedAgeCriterion = getTargetCriterion({\r\n targets: removedAges, type: 'Age', propKey: 'Target', adGroupViewModel, campaignViewModel,\r\n });\r\n\r\n const negativeAgeRanges = adGroupViewModel.data.negativeAgeRanges || [];\r\n const removedNegativeAges = negativeAgeRanges.filter(negativeAge => addedAges.find(addedTarget => addedTarget === negativeAge.criterion)).map(target => ({ ...target, status: 'Deleted' }));\r\n const removedNegativeAgeCriterion = getTargetCriterion({\r\n targets: removedNegativeAges, type: 'NegativeAge', propKey: 'Target', adGroupViewModel, campaignViewModel,\r\n });\r\n\r\n if (ageRangesWithBidAdjustment) {\r\n hydrateCriterionWithBidAndId('Age', initialAgeTargets, addedAgeCriterion, ageRangesWithBidAdjustment);\r\n }\r\n // genderTypes\r\n const genderTypes = adGroupViewModel.data.genderTypes || [];\r\n const initialGenderTypes = adGroupViewModel.data.initialGenderTypes || [];\r\n const { genderTypesWithBidAdjustment } = adGroupViewModel.data;\r\n const addedGenders = genderTypes.filter(target => initialGenderTypes.find(initialTarget => initialTarget.criterion === target\r\n && (!genderTypesWithBidAdjustment || isBidAdjustmentSame('Gender', genderTypesWithBidAdjustment, target, initialTarget))) === undefined);\r\n const removedGenders = initialGenderTypes.filter(initialTarget => genderTypes.find(target => initialTarget.criterion === target) === undefined).map(target => ({ ...target, status: 'Deleted' }));\r\n const addedGenderCriterion = getTargetCriterion({\r\n targets: addedGenders.map(criterion => ({ criterion })), type: 'Gender', propKey: 'Target', adGroupViewModel, campaignViewModel,\r\n });\r\n const removedGenderCriterion = getTargetCriterion({\r\n targets: removedGenders, type: 'Gender', propKey: 'Target', adGroupViewModel, campaignViewModel,\r\n });\r\n\r\n const negativeGenderTypes = adGroupViewModel.data.negativeGenderTYpes || [];\r\n const removedNegativeGenders = negativeGenderTypes.filter(negativeGenderType => addedGenders.find(addedTarget => addedTarget === negativeGenderType.criterion)).map(target => ({ ...target, status: 'Deleted' }));\r\n const removedNegativeGenderCriterion = getTargetCriterion({\r\n targets: removedNegativeGenders, type: 'NegativeGender', propKey: 'Target', adGroupViewModel, campaignViewModel,\r\n });\r\n\r\n if (genderTypesWithBidAdjustment) {\r\n hydrateCriterionWithBidAndId('Gender', initialGenderTypes, addedGenderCriterion, genderTypesWithBidAdjustment);\r\n }\r\n\r\n // genreTargets\r\n const genreTargets = adGroupViewModel.data.genreTargets || [];\r\n const initialGenreTargets = adGroupViewModel.data.initialGenreTargets || [];\r\n const addedGenres = genreTargets.filter(target => initialGenreTargets.find(initialTarget => initialTarget.criterion === target) === undefined);\r\n const removedGenres = initialGenreTargets.filter(initialTarget => genreTargets.find(target => initialTarget.criterion === target) === undefined).map(target => ({ ...target, status: 'Deleted' }));\r\n const addedGenreTargets = getTargetCriterion({\r\n targets: addedGenres.map(criterion => ({ criterion })), type: 'Genre', propKey: 'Target', adGroupViewModel, campaignViewModel,\r\n });\r\n const removedGenreCriterion = getTargetCriterion({\r\n targets: removedGenres, type: 'Genre', propKey: 'Target', adGroupViewModel, campaignViewModel,\r\n });\r\n\r\n // industry target\r\n const { data: { industryTargetsBidAdjustment } } = adGroupViewModel;\r\n let industryTargets = [];\r\n let negativeIndustryTargets = [];\r\n let initialIndustryTargets = [];\r\n let initialNegativeIndustryTargets = [];\r\n let addedIndustryTargets = [];\r\n let removedIndustryTargets = [];\r\n let addedIndustryCriterion = [];\r\n let removedIndustryCriterion = [];\r\n let negativeAddedIndustryTargets = [];\r\n let negativeRemovedIndustryTargets = [];\r\n let negativeAddedIndustryCriterion = [];\r\n let negativeRemovedIndustryCriterion = [];\r\n\r\n if ((!isXandrServing && isDisplayAds) || (!isXandrServing && isVideoAds) || isNativeAds) {\r\n industryTargets = adGroupViewModel.data.industry || [];\r\n initialIndustryTargets = adGroupViewModel.data.initialIndustryTargets || [];\r\n\r\n negativeIndustryTargets = adGroupViewModel.data.negativeIndustry || [];\r\n initialNegativeIndustryTargets = adGroupViewModel.data.initialNegativeIndustryTargets || [];\r\n\r\n const isIndustryTargetBidAdjustmentUpdated = ({ criterion, BidAdjustment }) => industryTargetsBidAdjustment.find(targetWithBid =>\r\n get(targetWithBid, 'Criterion.IndustryCriterion.Target') === criterion && get(targetWithBid, 'Criterion.BidAdjustment') === BidAdjustment);\r\n\r\n addedIndustryTargets = industryTargets.filter(target => initialIndustryTargets.find(initialTarget =>\r\n initialTarget.criterion === target && (!industryTargetsBidAdjustment || isIndustryTargetBidAdjustmentUpdated(initialTarget))) === undefined);\r\n removedIndustryTargets = initialIndustryTargets.filter(initialTarget => industryTargets.find(target => initialTarget.criterion === target) === undefined).map(target => ({ ...target, status: 'Deleted' }));\r\n addedIndustryCriterion = getTargetCriterion({\r\n targets: addedIndustryTargets.map(criterion => ({ criterion })), type: 'Industry', propKey: 'Target', adGroupViewModel, campaignViewModel,\r\n });\r\n\r\n removedIndustryCriterion = getTargetCriterion({\r\n targets: removedIndustryTargets, type: 'Industry', propKey: 'Target', adGroupViewModel, campaignViewModel,\r\n });\r\n\r\n negativeAddedIndustryTargets = negativeIndustryTargets.filter(target => initialNegativeIndustryTargets.find(initialTarget => initialTarget.criterion === target) === undefined);\r\n negativeRemovedIndustryTargets = initialNegativeIndustryTargets.filter(initialTarget => negativeIndustryTargets.find(target => initialTarget.criterion === target) === undefined).map(target => ({ ...target, status: 'Deleted' }));\r\n negativeAddedIndustryCriterion = getTargetCriterion({\r\n targets: negativeAddedIndustryTargets.map(criterion => ({ criterion })), type: 'NegativeIndustry', propKey: 'Target', adGroupViewModel, campaignViewModel, overrideType: 'Industry',\r\n });\r\n\r\n negativeRemovedIndustryCriterion = getTargetCriterion({\r\n targets: negativeRemovedIndustryTargets, type: 'NegativeIndustry', propKey: 'Target', adGroupViewModel, campaignViewModel, overrideType: 'Industry',\r\n });\r\n\r\n if (industryTargetsBidAdjustment && industryTargetsBidAdjustment.length > 0) {\r\n hydrateCriterionWithBidAndId('Industry', initialIndustryTargets, addedIndustryCriterion, industryTargetsBidAdjustment);\r\n }\r\n }\r\n\r\n // job target\r\n const { data: { jobTargetBidAdjustments } } = adGroupViewModel;\r\n let jobTargets = [];\r\n let negativeJobTargets = [];\r\n let initialJobTargets = [];\r\n let initialNegativeJobTargets = [];\r\n let addedJobTargets = [];\r\n let removedJobTargets = [];\r\n let addedJobCriterion = [];\r\n let removedJobCriterion = [];\r\n let negativeAddedJobTargets = [];\r\n let negativeRemovedJobTargets = [];\r\n let negativeAddedJobCriterion = [];\r\n let negativeRemovedJobCriterion = [];\r\n\r\n if ((!isXandrServing && isDisplayAds) || (!isXandrServing && isVideoAds) || isNativeAds) {\r\n jobTargets = adGroupViewModel.data.jobTargets || [];\r\n initialJobTargets = adGroupViewModel.data.initialJobTargets || [];\r\n\r\n negativeJobTargets = adGroupViewModel.data.negativeJobTargets || [];\r\n initialNegativeJobTargets = adGroupViewModel.data.initialNegativeJobTargets || [];\r\n\r\n const isJobTargetBidAdjustmentUpdated = ({ criterion, BidAdjustment }) => jobTargetBidAdjustments.find(targetWithBid =>\r\n get(targetWithBid, 'Criterion.JobFunctionCriterion.Target') === criterion && get(targetWithBid, 'Criterion.BidAdjustment') === BidAdjustment);\r\n\r\n addedJobTargets = jobTargets.filter(target => initialJobTargets.find(initialTarget =>\r\n initialTarget.criterion === target && (!jobTargetBidAdjustments || isJobTargetBidAdjustmentUpdated(initialTarget))) === undefined);\r\n removedJobTargets = initialJobTargets.filter(initialTarget => jobTargets.find(target => initialTarget.criterion === target) === undefined).map(target => ({ ...target, status: 'Deleted' }));\r\n addedJobCriterion = getTargetCriterion({\r\n targets: addedJobTargets.map(criterion => ({ criterion })), type: 'JobFunction', propKey: 'Target', adGroupViewModel, campaignViewModel,\r\n });\r\n\r\n removedJobCriterion = getTargetCriterion({\r\n targets: removedJobTargets, type: 'JobFunction', propKey: 'Target', adGroupViewModel, campaignViewModel,\r\n });\r\n\r\n negativeAddedJobTargets = negativeJobTargets.filter(target => initialNegativeJobTargets.find(initialTarget => initialTarget.criterion === target) === undefined);\r\n negativeRemovedJobTargets = initialNegativeJobTargets.filter(initialTarget => negativeJobTargets.find(target => initialTarget.criterion === target) === undefined).map(target => ({ ...target, status: 'Deleted' }));\r\n negativeAddedJobCriterion = getTargetCriterion({\r\n targets: negativeAddedJobTargets.map(criterion => ({ criterion })), type: 'NegativeJobFunction', propKey: 'Target', adGroupViewModel, campaignViewModel, overrideType: 'JobFunction',\r\n });\r\n\r\n negativeRemovedJobCriterion = getTargetCriterion({\r\n targets: negativeRemovedJobTargets, type: 'NegativeJobFunction', propKey: 'Target', adGroupViewModel, campaignViewModel, overrideType: 'JobFunction',\r\n });\r\n\r\n if (jobTargetBidAdjustments && jobTargetBidAdjustments.length > 0) {\r\n hydrateCriterionWithBidAndId('JobFunction', initialJobTargets, addedJobCriterion, jobTargetBidAdjustments);\r\n }\r\n }\r\n // companyName targets\r\n let companyNameTargets = [];\r\n let negativeCompanyNameTargets = [];\r\n let initialCompanyNameTargets = [];\r\n let initialNegativeCompanyNameTargets = [];\r\n let addedCompanyNameTargets = [];\r\n let removedCompanyNameTargets = [];\r\n let addedCompanyNameCriterion = [];\r\n let removedCompanyNameCriterion = [];\r\n let negativeAddedCompanyNameTargets = [];\r\n let negativeRemovedCompanyNameTargets = [];\r\n let negativeAddedCompanyNameCriterion = [];\r\n let negativeRemovedCompanyNameCriterion = [];\r\n\r\n if ((!isXandrServing && isDisplayAds) || (!isXandrServing && isVideoAds) || isNativeAds) {\r\n companyNameTargets = adGroupViewModel.data.companyNameTargets || [];\r\n initialCompanyNameTargets = adGroupViewModel.data.initialCompanyNameTargets || [];\r\n\r\n\r\n negativeCompanyNameTargets = adGroupViewModel.data.negativeCompanyNameTargets || [];\r\n initialNegativeCompanyNameTargets = adGroupViewModel.data.initialNegativeCompanyNameTargets || [];\r\n\r\n addedCompanyNameTargets = companyNameTargets.filter(target => initialCompanyNameTargets.find(initialTarget =>\r\n initialTarget.Target === target.Target && initialTarget.BidAdjustment === target.BidAdjustment) === undefined);\r\n removedCompanyNameTargets = initialCompanyNameTargets.filter(initialTarget => companyNameTargets.find(target => initialTarget.Target === target.Target) === undefined).map(target => ({ ...target, criterion: target.Target, status: 'Deleted' }));\r\n\r\n addedCompanyNameCriterion = getTargetCriterion({\r\n targets: addedCompanyNameTargets.map(({ Id, ...criterion }) => ({ Id, criterion })), type: 'CompanyName', propKey: 'Target', adGroupViewModel, campaignViewModel,\r\n });\r\n\r\n removedCompanyNameCriterion = getTargetCriterion({\r\n targets: removedCompanyNameTargets, type: 'CompanyName', propKey: 'Target', adGroupViewModel, campaignViewModel,\r\n });\r\n\r\n negativeAddedCompanyNameTargets = negativeCompanyNameTargets.filter(target => initialNegativeCompanyNameTargets.find(initialTarget => initialTarget.Target === target.Target) === undefined);\r\n negativeRemovedCompanyNameTargets = initialNegativeCompanyNameTargets.filter(initialTarget => negativeCompanyNameTargets.find(target => initialTarget.Target === target.Target) === undefined).map(target => ({ ...target, criterion: target.Target, status: 'Deleted' }));\r\n\r\n negativeAddedCompanyNameCriterion = getTargetCriterion({\r\n targets: negativeAddedCompanyNameTargets.map(criterion => ({ criterion })), type: 'NegativeCompanyName', propKey: 'Target', adGroupViewModel, campaignViewModel, overrideType: 'CompanyName',\r\n });\r\n\r\n negativeRemovedCompanyNameCriterion = getTargetCriterion({\r\n targets: negativeRemovedCompanyNameTargets, type: 'NegativeCompanyName', propKey: 'Target', adGroupViewModel, campaignViewModel, overrideType: 'CompanyName',\r\n });\r\n }\r\n\r\n let initialContextualTargets = [];\r\n let contextualTargets = [];\r\n let updatedContextualTargets = [];\r\n\r\n if (isAudienceNativeAdsCampaign(campaignViewModel.CampaignSubType) && isBoostEnabled) {\r\n initialContextualTargets = adGroupViewModel.data.initialContextualTargets || [];\r\n contextualTargets = adGroupViewModel.data.contextualTargets || [];\r\n\r\n updatedContextualTargets = getContextualTargetInfo(initialContextualTargets, contextualTargets).map((criterion) => {\r\n // eslint-disable-next-line no-param-reassign\r\n criterion.AdGroup = { Id: adGroupViewModel.data.Id ? adGroupViewModel.data.Id : AdGroupNegativeReferenceId };\r\n return criterion;\r\n }) || [];\r\n }\r\n\r\n return [\r\n ...addedDeviceCriterion,\r\n ...removedDeviceCriterion,\r\n ...removedNegativeAgeCriterion,\r\n ...addedAgeCriterion,\r\n ...removedAgeCriterion,\r\n ...removedNegativeGenderCriterion,\r\n ...addedGenderCriterion,\r\n ...removedGenderCriterion,\r\n ...addedGenreTargets,\r\n ...removedGenreCriterion,\r\n ...addedIndustryCriterion,\r\n ...removedIndustryCriterion,\r\n ...negativeAddedIndustryCriterion,\r\n ...negativeRemovedIndustryCriterion,\r\n ...addedJobCriterion,\r\n ...removedJobCriterion,\r\n ...negativeAddedJobCriterion,\r\n ...negativeRemovedJobCriterion,\r\n ...addedCompanyNameCriterion,\r\n ...removedCompanyNameCriterion,\r\n ...negativeAddedCompanyNameCriterion,\r\n ...negativeRemovedCompanyNameCriterion,\r\n ...updatedContextualTargets,\r\n ];\r\n};\r\n\r\nexport const loadBundleCountries = ({\r\n cid,\r\n aid,\r\n serverContext,\r\n}) => {\r\n const lcid = serverContext ? serverContext.CurrentUser.LocaleID : '1033';\r\n const market = serverContext ? serverContext.CurrentUser.Market : 'US';\r\n const language = 'All';\r\n\r\n return getBundleCountriesAndBundleLocationCriterions(cid, aid, lcid, language, market);\r\n};\r\n\r\nconst adGroupCriterionTypeName = 'Model.AdGroupCriterion';\r\n\r\nexport const readAdGroupCriterions = ({\r\n cid,\r\n aid,\r\n campaignId,\r\n adGroupId,\r\n type,\r\n}) =>\r\n edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Campaigns.$withKey(campaignId)\r\n .AdGroups.$withKey(adGroupId)\r\n .AdGroupCriterions\r\n .$cast(adGroupCriterionTypeName)\r\n .get({\r\n filter: {\r\n where: type,\r\n },\r\n })\r\n .toPromise();\r\n\r\nexport const readPlacementCriterions = ({\r\n cid,\r\n aid,\r\n campaignId,\r\n adGroupId,\r\n}) =>\r\n readAdGroupCriterions({\r\n cid,\r\n aid,\r\n campaignId,\r\n adGroupId,\r\n type: \"isof(Criterion, 'Model.PlacementCriterion')\",\r\n });\r\n\r\nexport const readLocationCriterions = ({\r\n cid,\r\n aid,\r\n campaignId,\r\n adGroupId,\r\n}) =>\r\n readAdGroupCriterions({\r\n cid,\r\n aid,\r\n campaignId,\r\n adGroupId,\r\n type: \"isof(Criterion,'Model.LocationCriterion') or isof(Criterion,'Model.RadiusCriterion') or isof(Criterion,'Model.LocationIntentCriterion')\",\r\n });\r\n\r\nexport const readDayTimeCriterions = ({\r\n cid,\r\n aid,\r\n campaignId,\r\n adGroupId,\r\n}) =>\r\n readAdGroupCriterions({\r\n cid,\r\n aid,\r\n campaignId,\r\n adGroupId,\r\n type: \"isof(Criterion,'Model.DayTimeCriterion')\",\r\n });\r\n\r\nexport const readTargetingCriterions = ({\r\n cid,\r\n aid,\r\n campaignId,\r\n adGroupId,\r\n}) =>\r\n readAdGroupCriterions({\r\n cid,\r\n aid,\r\n campaignId,\r\n adGroupId,\r\n type: \"isof(Criterion,'Model.AgeCriterion') or isof(Criterion,'Model.GenderCriterion') or isof(Criterion,'Model.DeviceCriterion') or isof(Criterion,'Model.GenreCriterion') or isof(Criterion, 'Model.IndustryCriterion') or isof(Criterion, 'Model.JobFunctionCriterion') or isof(Criterion, 'Model.CompanyNameCriterion') or isof(Criterion, 'Model.ContextualTarget')\",\r\n });\r\n\r\nexport const readAudienceCriterions = ({\r\n cid,\r\n aid,\r\n campaignId,\r\n adGroupId,\r\n}) =>\r\n edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Campaigns.$withKey(campaignId)\r\n .AdGroups.$withKey(adGroupId)\r\n .AudienceAssociations\r\n .get({ top: 2000 })\r\n .toPromise();\r\n","import { RemainingCharsValidatedTextField } from '@bingads-webui-campaign-react/remaining-chars-hint';\r\n\r\nexport const ServerValidatedRemainingCharsValidatedTextField = RemainingCharsValidatedTextField;\r\n","import { useCallback, useEffect, useMemo, useContext, useState } from 'react';\r\nimport { useSelector } from '@xstate/react';\r\nimport { isCanceling, stateLoggingListener, StepEvents, isSaving } from '@bingads-webui-campaign-react/step-wizard-machine';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { buildLegacyI18n } from '@bingads-webui/build-legacy-i18n';\r\nimport { ValidationStringMap } from '@bingads-webui/validation-string-map';\r\nimport { useExitWithoutSavingConfirmation } from '@bingads-webui-campaign-react/step-wizard';\r\nimport { serverErrorsCompare } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport { useImpulse, usePrevProp } from '@bingads-webui-campaign-react/step-wizard-controls';\r\nimport timeZoneMapper from '@bingads-webui-component-legacy/timezonemapper/index';\r\nimport { isXandrDisplayAdsCampaign, CampaignSubTypeMapping, isXandrVideoAdsCampaign } from '@bingads-webui-campaign-react/constants';\r\nimport { needsSaving } from './step-wizard-config';\r\nimport { AgeRangesCampaignToAdInsight } from './target/age-range';\r\nimport { BidStrategyToDevices } from './target/device';\r\n\r\nconst doesNeedSavingSelector = state => !isCanceling(state) && needsSaving(state.context) && !isSaving(state);\r\nconst hideStepHeaderSelector = state => state.context.stepInfo.hideStepHeader;\r\nconst serverContextSelector = state => state.context.stepsData.serverContext;\r\nconst adGroupIdSelector = state => state.context.stepsData.adGroupId;\r\nconst adGroupSelector = state => state.context.data.adGroup;\r\nconst scopeSelector = state => state.context.stepsData.scope;\r\nconst locationTargetsSelector = state => state.context.data.adGroup.data.locationTargets;\r\nconst bundleCountriesSelector = state => state.context.data.bundleCountries;\r\nconst bundleLocationCriterionsSelector = state => state.context.data.bundleLocationCriterions;\r\nconst adSchedulesSelector = state => state.context.data.adGroup.data.adSchedules;\r\nconst adSchedulesBulkUpsertModelSelector = state => state.context.data.adGroup.data.adSchedulesBulkUpsert;\r\nconst genreTargetsSelector = state => state.context.data.adGroup.data.genreTargets;\r\nconst ageRangesSelector = state => state.context.data.adGroup.data.ageRanges;\r\nconst genderTypesSelector = state => state.context.data.adGroup.data.genderTypes;\r\nconst deviceTypesSelector = state => state.context.data.adGroup.data.deviceTypes;\r\nconst deviceRestrictionsSelector = state => state.context.data.adGroup.data.deviceRestrictions;\r\nconst deviceRestrictedSelector = state => state.context.data.adGroup.data.deviceRestricted;\r\nconst companyNameTargetsSelector = state => state.context.data.adGroup.data.companyNameTargets;\r\nconst negativeCompanyNameTargetsSelector = state => state.context.data.adGroup.data.negativeCompanyNameTargets;\r\nconst jobTargetsSelector = state => state.context.data.adGroup.data.jobTargets;\r\nconst negativeJobTargetsSelector = state => state.context.data.adGroup.data.negativeJobTargets;\r\nconst industrySelector = state => state.context.data.adGroup.data.industry;\r\nconst negativeIndustrySelector = state => state.context.data.adGroup.data.negativeIndustry;\r\nconst locationRestrictedSelector = state => state.context.data.adGroup.data.locationRestricted;\r\nconst dealLocationListSelector = state => state.context.data.adGroup.data.dealLocationList;\r\nconst genreRestrictedSelector = state => state.context.data.adGroup.data.genreRestricted;\r\nconst ageRestrictedSelector = state => state.context.data.adGroup.data.ageRestricted;\r\nconst genderRestrictedSelector = state => state.context.data.adGroup.data.genderRestricted;\r\nconst audienceRestrictedSelector = state => state.context.data.adGroup.data.audienceRestricted;\r\nconst customSegmentsSelector = state => state.context.data.adGroup.data.customSegments;\r\nconst campaignTimeZoneSelector = state => (state.context.stepsData.campaign && state.context.stepsData.campaign.TimeZone) || (state.context.stepsData.currentCampaign && state.context.stepsData.currentCampaign.TimeZone);\r\nconst campaignBiddingStrategySelector = state => (state.context.stepsData.campaign && state.context.stepsData.campaign.BiddingScheme) || (state.context.stepsData.currentCampaign && state.context.stepsData.currentCampaign.BiddingScheme);\r\nconst campaignSubTypeSelector = state => (state.context.stepsData.campaign && state.context.stepsData.campaign.CampaignSubType) || (state.context.stepsData.currentCampaign && state.context.stepsData.currentCampaign.CampaignSubType);\r\nconst campaignSettingsSelector = state => (state.context.stepsData.campaign && state.context.stepsData.campaign.CampaignSettings) || (state.context.stepsData.currentCampaign && state.context.stepsData.currentCampaign.CampaignSettings);\r\nconst systemErrorsSelector = state => state.context.data.systemErrors;\r\nconst isEditingSelector = state => state.context.stepsData.isEditing;\r\nconst serverErrorsSelector = state => state.context.data.serverErrors;\r\nconst invalidSaveAttemptSelector = state => state.context.invalidSaveAttempt;\r\nconst dealDetailsSelector = state => state.context.data.adGroup.data.deal;\r\nconst permissionsSelector = state => state.context.stepsData.permissions;\r\nconst placementsSelector = state => state.context.data.adGroup.data.placements;\r\nconst exclusionsSelector = state => state.context.data.adGroup.data.exclusions;\r\nconst initialAdGroupSelector = state => state.context.data.adGroup;\r\n\r\n\r\nexport const useStepAdGroupSettingsState = (stepService) => {\r\n const i18n = useContext(I18nContext);\r\n const legacyI18n = useMemo(() => buildLegacyI18n(i18n, [ValidationStringMap]), [i18n]);\r\n\r\n useEffect(() => {\r\n const subscription = stepService.subscribe(stateLoggingListener);\r\n return subscription.unsubscribe;\r\n }, [stepService]);\r\n\r\n const hideStepHeader = useSelector(stepService, hideStepHeaderSelector);\r\n const serverContext = useSelector(stepService, serverContextSelector);\r\n const adGroupId = useSelector(stepService, adGroupIdSelector);\r\n const adGroup = useSelector(stepService, adGroupSelector);\r\n const scope = useSelector(stepService, scopeSelector);\r\n const locationTargets = useSelector(stepService, locationTargetsSelector);\r\n const bundleCountries = useSelector(stepService, bundleCountriesSelector);\r\n const bundleLocationCriterions = useSelector(stepService, bundleLocationCriterionsSelector);\r\n const adSchedules = useSelector(stepService, adSchedulesSelector);\r\n const adSchedulesBulkUpsert = useSelector(stepService, adSchedulesBulkUpsertModelSelector);\r\n const genreTargets = useSelector(stepService, genreTargetsSelector);\r\n const ageRanges = useSelector(stepService, ageRangesSelector);\r\n const genderTypes = useSelector(stepService, genderTypesSelector);\r\n const deviceTypes = useSelector(stepService, deviceTypesSelector);\r\n const companyNameTargets = useSelector(stepService, companyNameTargetsSelector);\r\n const negativeCompanyNameTargets = useSelector(stepService, negativeCompanyNameTargetsSelector);\r\n const jobTargets = useSelector(stepService, jobTargetsSelector);\r\n const negativeJobTargets = useSelector(stepService, negativeJobTargetsSelector);\r\n const industry = useSelector(stepService, industrySelector);\r\n const negativeIndustry = useSelector(stepService, negativeIndustrySelector);\r\n const campaignTimeZone = useSelector(stepService, campaignTimeZoneSelector);\r\n const campaignBiddingStrategy = useSelector(stepService, campaignBiddingStrategySelector);\r\n const campaignSubtype = useSelector(stepService, campaignSubTypeSelector);\r\n const campaignSettings = useSelector(stepService, campaignSettingsSelector);\r\n const isEditing = useSelector(stepService, isEditingSelector);\r\n\r\n const doesNeedSaving = useSelector(stepService, doesNeedSavingSelector);\r\n const systemErrors = useSelector(stepService, systemErrorsSelector);\r\n\r\n const serverErrors = useSelector(stepService, serverErrorsSelector);\r\n const invalidSaveAttempt = useSelector(stepService, invalidSaveAttemptSelector);\r\n\r\n const dealDetails = useSelector(stepService, dealDetailsSelector);\r\n const deviceRestrictions = useSelector(stepService, deviceRestrictionsSelector);\r\n const deviceRestricted = useSelector(stepService, deviceRestrictedSelector);\r\n const locationRestricted = useSelector(stepService, locationRestrictedSelector);\r\n const genreRestricted = useSelector(stepService, genreRestrictedSelector);\r\n const ageRestricted = useSelector(stepService, ageRestrictedSelector);\r\n const genderRestricted = useSelector(stepService, genderRestrictedSelector);\r\n const audienceRestricted = useSelector(stepService, audienceRestrictedSelector);\r\n const customSegments = useSelector(stepService, customSegmentsSelector);\r\n const dealLocationList = useSelector(stepService, dealLocationListSelector);\r\n const permissions = useSelector(stepService, permissionsSelector);\r\n const placements = useSelector(stepService, placementsSelector);\r\n const exclusions = useSelector(stepService, exclusionsSelector);\r\n const [initialAdGroup] = useState(useSelector(stepService, initialAdGroupSelector));\r\n\r\n const [navigationConfirmationPrompt] = useExitWithoutSavingConfirmation(doesNeedSaving, stepService, i18n);\r\n\r\n const onAdGroupValidation = useCallback((results) => {\r\n const { data: newAdGroupData, ...restResults } = results;\r\n const dataPatch = {\r\n adGroup: {\r\n ...adGroup,\r\n data: {\r\n ...adGroup.data,\r\n ...newAdGroupData,\r\n },\r\n ...restResults,\r\n },\r\n };\r\n stepService.send({ type: StepEvents.UPDATE_VALIDATION, data: dataPatch });\r\n }, [stepService, adGroup]);\r\n\r\n // eslint-disable-next-line no-bitwise\r\n const [, hasInvalidSaveAttemptChanged] = usePrevProp(invalidSaveAttempt | 0);\r\n const [, hasServerErrorsChanged] = usePrevProp(serverErrors, serverErrorsCompare);\r\n const areBeaconsActive = useImpulse(hasInvalidSaveAttemptChanged || hasServerErrorsChanged);\r\n\r\n const [showAllValidationErrors, setShowAllValidationErrors] = useState(false);\r\n if (hasInvalidSaveAttemptChanged) {\r\n setShowAllValidationErrors(true);\r\n }\r\n\r\n const getLocationIds = useCallback(() => {\r\n if (locationTargets && locationTargets.currentLevelSettings) {\r\n const { targetOption, currentLocations } = locationTargets.currentLevelSettings;\r\n\r\n if (targetOption === 'bundle' && bundleCountries && bundleCountries.length > 0) {\r\n return bundleCountries.map(c => c.LocationId);\r\n }\r\n\r\n if (targetOption === 'specific' && currentLocations && currentLocations.length > 0) {\r\n return currentLocations.reduce((locationIds, cl) => {\r\n if (cl.SelectionStatus === 'Included' && cl.Criterion.LocationCriterion) {\r\n locationIds.push(cl.Criterion.LocationCriterion.LocationId);\r\n }\r\n return locationIds;\r\n }, []);\r\n }\r\n\r\n return [];\r\n }\r\n\r\n return [];\r\n }, [bundleCountries, locationTargets]);\r\n\r\n const getExcludedLocationIds = useCallback(() => {\r\n if (locationTargets && locationTargets.currentLevelSettings) {\r\n const { targetOption, currentLocations } = locationTargets.currentLevelSettings;\r\n\r\n if (targetOption === 'specific' && currentLocations && currentLocations.length > 0) {\r\n return currentLocations.reduce((locationIds, cl) => {\r\n if (cl.SelectionStatus === 'Excluded' && cl.Criterion.LocationCriterion) {\r\n locationIds.push(cl.Criterion.LocationCriterion.LocationId);\r\n }\r\n return locationIds;\r\n }, []);\r\n }\r\n\r\n return [];\r\n }\r\n\r\n return [];\r\n }, [locationTargets]);\r\n\r\n const getRadiusCriterions = useCallback(() => {\r\n if (locationTargets && locationTargets.currentLevelSettings) {\r\n const { currentLocations } = locationTargets.currentLevelSettings;\r\n if (currentLocations && currentLocations.length > 0) {\r\n return currentLocations.reduce((radiusTargets, cl) => {\r\n if (cl.CriterionType === 'Radius') {\r\n radiusTargets.push({\r\n CenterLatitude: cl.Criterion.RadiusCriterion.Latitude,\r\n CenterLongitude: cl.Criterion.RadiusCriterion.Longitude,\r\n Radius: cl.Criterion.RadiusCriterion.Radius,\r\n });\r\n }\r\n return radiusTargets;\r\n }, []);\r\n }\r\n return [];\r\n }\r\n return [];\r\n }, [locationTargets]);\r\n\r\n const getAudienceIds = useCallback(() => {\r\n if (adGroup && adGroup.data && adGroup.data.audiences && adGroup.data.audiences.length > 0) {\r\n return adGroup.data.audiences.reduce((includeIds, audience) => {\r\n if (audience.Status === 'Active') {\r\n includeIds.push(audience.Criterion.AudienceId);\r\n }\r\n return includeIds;\r\n }, []);\r\n }\r\n\r\n return [];\r\n }, [adGroup]);\r\n\r\n const getExcludedAudienceIds = useCallback(() => {\r\n if (adGroup && adGroup.data && adGroup.data.audiences && adGroup.data.audiences.length > 0) {\r\n return adGroup.data.audiences.reduce((includeIds, audience) => {\r\n if (audience.Status === 'Excluded') {\r\n includeIds.push(audience.Criterion.AudienceId);\r\n }\r\n return includeIds;\r\n }, []);\r\n }\r\n\r\n return [];\r\n }, [adGroup]);\r\n\r\n const getGenreTargets = useCallback(() => genreTargets, [genreTargets]);\r\n\r\n const getAgeRanges = useCallback(() => ageRanges && ageRanges.map(ar => AgeRangesCampaignToAdInsight[ar]), [ageRanges]);\r\n\r\n const getDevices = useCallback(() => {\r\n if (dealDetails) {\r\n return deviceTypes;\r\n }\r\n\r\n if (isXandrVideoAdsCampaign(campaignSubtype) && permissions.dynamic.XandrDeviceTarget && campaignBiddingStrategy.Type === 'ManualCpm') {\r\n return deviceTypes;\r\n }\r\n\r\n return BidStrategyToDevices[campaignBiddingStrategy.Type];\r\n }, [campaignBiddingStrategy.Type, campaignSubtype, dealDetails, deviceTypes, permissions.dynamic.XandrDeviceTarget]);\r\n\r\n const getCompanyNameTargets = useCallback(() => companyNameTargets, [companyNameTargets]);\r\n\r\n const getNegativeCompanyNameTargets = useCallback(() => negativeCompanyNameTargets, [negativeCompanyNameTargets]);\r\n\r\n const getJobTargets = useCallback(() => jobTargets, [jobTargets]);\r\n\r\n const getNegativeJobTargets = useCallback(() => negativeJobTargets, [negativeJobTargets]);\r\n\r\n const getIndustry = useCallback(() => industry, [industry]);\r\n\r\n const getNegativeIndustry = useCallback(() => negativeIndustry, [negativeIndustry]);\r\n\r\n const isAdScheduleInvalid = useMemo(() => adGroup && adGroup.messages && adGroup.messages.length > 0 && adGroup.messages.indexOf('Ad schedule has validation errors') !== -1, [adGroup]);\r\n\r\n const getAdSchedule = useCallback(() => {\r\n if (adGroup && adGroup.data && adGroup.data.adSchedulesBulkUpsert && adGroup.data.adSchedulesBulkUpsert.length > 0 && !isAdScheduleInvalid) {\r\n return adGroup.data.adSchedulesBulkUpsert.map((a) => {\r\n const { Day, FromHour, ToHour } = a.Criterion.DayTimeCriterion;\r\n return {\r\n Day,\r\n StartHour: FromHour,\r\n EndHour: ToHour,\r\n };\r\n });\r\n }\r\n return [];\r\n }, [adGroup, isAdScheduleInvalid]);\r\n\r\n const reachEstimationTargets = useMemo(() => ({\r\n Age: {\r\n Includes: getAgeRanges(),\r\n },\r\n Gender: {\r\n Includes: genderTypes,\r\n },\r\n Device: {\r\n Includes: getDevices(),\r\n },\r\n CompanyName: {\r\n Includes: getCompanyNameTargets(),\r\n Excludes: getNegativeCompanyNameTargets(),\r\n },\r\n Job: {\r\n Includes: getJobTargets(),\r\n Excludes: getNegativeJobTargets(),\r\n },\r\n Industry: {\r\n Includes: getIndustry(),\r\n Excludes: getNegativeIndustry(),\r\n },\r\n Location: {\r\n Includes: getLocationIds(),\r\n Excludes: getExcludedLocationIds(),\r\n },\r\n RadiusTargets: getRadiusCriterions(),\r\n Audience: {\r\n Includes: getAudienceIds(),\r\n Excludes: getExcludedAudienceIds(),\r\n },\r\n Genre: { Includes: getGenreTargets() },\r\n Day: getAdSchedule(),\r\n TimeZone: timeZoneMapper.getAccountIANATimeZone(),\r\n CampaignSubType: isXandrDisplayAdsCampaign(campaignSubtype) ? CampaignSubTypeMapping.DisplayAds : CampaignSubTypeMapping.BrandAwarenessVideoAds,\r\n }), [getAgeRanges, genderTypes, getDevices, getCompanyNameTargets, getNegativeCompanyNameTargets, getJobTargets, getNegativeJobTargets, getIndustry, getNegativeIndustry, getLocationIds, getRadiusCriterions, getExcludedLocationIds, getAudienceIds, getExcludedAudienceIds, getGenreTargets, getAdSchedule, campaignSubtype]);\r\n\r\n const state = {\r\n serverContext,\r\n adGroup,\r\n isEditing,\r\n i18n,\r\n legacyI18n,\r\n hideStepHeader,\r\n adGroupId,\r\n scope,\r\n locationTargets,\r\n bundleCountries,\r\n bundleLocationCriterions,\r\n adSchedules,\r\n adSchedulesBulkUpsert,\r\n genreTargets,\r\n ageRanges,\r\n genderTypes,\r\n deviceTypes,\r\n companyNameTargets,\r\n negativeCompanyNameTargets,\r\n jobTargets,\r\n negativeJobTargets,\r\n industry,\r\n negativeIndustry,\r\n campaignTimeZone,\r\n campaignBiddingStrategy,\r\n campaignSubtype,\r\n campaignSettings,\r\n dealDetails,\r\n systemErrors,\r\n navigationConfirmationPrompt,\r\n reachEstimationTargets,\r\n showAllValidationErrors,\r\n areBeaconsActive,\r\n serverErrors,\r\n deviceRestrictions,\r\n deviceRestricted,\r\n locationRestricted,\r\n genreRestricted,\r\n ageRestricted,\r\n dealLocationList,\r\n genderRestricted,\r\n audienceRestricted,\r\n customSegments,\r\n placements,\r\n exclusions,\r\n initialAdGroup,\r\n };\r\n const api = { onAdGroupValidation };\r\n\r\n return [state, api];\r\n};\r\n","import React, { useCallback, useEffect, useMemo, useState, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { compact, find, map, noop } from 'underscore';\r\nimport { AimAudienceAssociationView } from '@bingads-webui-campaign-legacy/audience-association/view/aim-component-view';\r\nimport { perfMarkerPropTypes } from '@bingads-webui/performance-marker';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { getRoutePathById, withSiteMap } from '@bingads-webui-campaign-react/with-site-map';\r\nimport { getAudiencePickerStyle } from './styles/audience-picker';\r\n\r\nexport const formatAudience = ({ audiences, i18n }) => {\r\n if (!audiences || !audiences.length) {\r\n return i18n.getString(_TL_('Targeting: No audience segments selected.'));\r\n }\r\n\r\n const targetedAudiences = audiences.filter(({ Status }) => Status === 'Active');\r\n const excludedAudiences = audiences.filter(({ Status }) => Status === 'Excluded');\r\n\r\n let targetedAudienceDetails = '';\r\n let excludedAudienceDetails = '';\r\n\r\n if (targetedAudiences.length === 1) {\r\n targetedAudienceDetails = i18n.getString(_TL_('Targeted: 1 audience'));\r\n } else if (targetedAudiences.length > 1) {\r\n targetedAudienceDetails = i18n.getString(_TL_('Targeted: {{count}} audiences'), { count: (targetedAudiences.length) });\r\n }\r\n\r\n if (excludedAudiences.length === 1) {\r\n excludedAudienceDetails = i18n.getString(_TL_('Excluded: 1 audience'));\r\n } else if (excludedAudiences.length > 1) {\r\n excludedAudienceDetails = i18n.getString(_TL_('Excluded: {{count}} audiences'), { count: (excludedAudiences.length) });\r\n }\r\n\r\n return `${targetedAudienceDetails}${targetedAudienceDetails && excludedAudienceDetails && '. '}${excludedAudienceDetails}`;\r\n};\r\n\r\nconst audiencesLibraryId = 'audiences-library';\r\nconst tagsManagementId = 'uet-tag';\r\n\r\nexport const navigate = (siteMap, scopeService, routeId, state) => {\r\n const path = getRoutePathById(siteMap, routeId);\r\n\r\n scopeService.history.push({\r\n pathname: path,\r\n search: scopeService.history.location.search,\r\n state,\r\n });\r\n};\r\n\r\nconst UnstyledAudiencePicker = (props) => {\r\n const {\r\n classes,\r\n validationProps,\r\n updateValidation,\r\n perfMarker,\r\n campaignSubType,\r\n campaignSettings,\r\n campaignBiddingStrategy,\r\n supportExclusion,\r\n siteMap,\r\n isAudienceCreationWorkflow,\r\n isIMARedesignEnabled,\r\n hideCustomSegmentsOption,\r\n } = props;\r\n\r\n const { data: { audiences } } = validationProps;\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const [audienceAssociationRef, setAudienceAssociationRef] = useState();\r\n\r\n const { scope } = useContext(ScopeContext);\r\n\r\n const audienceAssociationView = useMemo(() => {\r\n const associationView = new AimAudienceAssociationView({\r\n isForVNext: true,\r\n perfMarker,\r\n campaignSubType,\r\n hideExclusion: !supportExclusion,\r\n hideAssociationHeader: true,\r\n biddingScheme: campaignBiddingStrategy,\r\n campaignSettings,\r\n isAudienceCreationWorkflow,\r\n deps: {\r\n router: {\r\n navigateToAudiences: data => navigate(siteMap, scope, audiencesLibraryId, data),\r\n navigateToTags: () => navigate(siteMap, scope, tagsManagementId),\r\n },\r\n },\r\n isIMARedesignEnabled,\r\n hideCustomSegmentsOption,\r\n });\r\n\r\n associationView.canExpandAssociation = true;\r\n associationView.render();\r\n associationView.expandAssociation();\r\n if (supportExclusion) {\r\n associationView.expandExclusion();\r\n }\r\n\r\n return associationView;\r\n }, [isAudienceCreationWorkflow, campaignBiddingStrategy, campaignSettings, campaignSubType, perfMarker, scope, siteMap, supportExclusion, isIMARedesignEnabled]);\r\n\r\n const onAudienceListChanged = useCallback(() => {\r\n const associationList = audienceAssociationView.getAudienceCriterion();\r\n\r\n updateValidation([], { audiences: [...associationList] });\r\n if (activity) {\r\n activity.signal(`onAudienceListChange - ${JSON.stringify({ audiences: associationList })}`);\r\n }\r\n }, [audienceAssociationView, updateValidation, activity]);\r\n\r\n useEffect(() => {\r\n if (audienceAssociationRef && audienceAssociationRef.childElementCount === 0 && audienceAssociationView) {\r\n audienceAssociationRef.innerHTML = '';\r\n audienceAssociationRef.append(audienceAssociationView.el);\r\n }\r\n }, [audienceAssociationRef, audienceAssociationView]);\r\n\r\n useEffect(() => {\r\n if (audienceAssociationView) {\r\n audienceAssociationView\r\n .ensureLoadedAsync()\r\n .then(() => {\r\n const associationList = compact(map(audiences, ({ Criterion, Status }) => find(audienceAssociationView.doubleListBoxViewModel.allAudiences, audience =>\r\n audience.Id === Criterion.AudienceId && Status === 'Active')));\r\n const exclusionList = compact(map(audiences, ({ Criterion, Status }) => find(audienceAssociationView.doubleListBoxViewModel.allAudiences, audience => audience.Id === Criterion.AudienceId && Status === 'Excluded')));\r\n\r\n audienceAssociationView.off('selectionChanged', onAudienceListChanged);\r\n audienceAssociationView.setLists({\r\n associationList,\r\n exclusionList,\r\n });\r\n\r\n audienceAssociationView.on('selectionChanged', onAudienceListChanged);\r\n });\r\n\r\n return () => {\r\n audienceAssociationView.off('selectionChanged', onAudienceListChanged);\r\n };\r\n }\r\n\r\n return noop;\r\n }, [audiences]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n return (\r\n
\r\n
setAudienceAssociationRef(newRef)} />\r\n
\r\n );\r\n};\r\n\r\nUnstyledAudiencePicker.propTypes = {\r\n classes: PropTypes.shape({\r\n pickerContainer: PropTypes.string.isRequired,\r\n }).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n isAudienceCreationWorkflow: PropTypes.bool.isRequired,\r\n perfMarker: perfMarkerPropTypes.isRequired,\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n audiences: PropTypes.arrayOf(PropTypes.shape({})),\r\n }),\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n campaignSubType: PropTypes.string,\r\n supportExclusion: PropTypes.bool,\r\n campaignSettings: PropTypes.shape({}).isRequired,\r\n campaignBiddingStrategy: PropTypes.shape({}).isRequired,\r\n siteMap: PropTypes.arrayOf(PropTypes.shape({\r\n id: PropTypes.string,\r\n })).isRequired,\r\n isIMARedesignEnabled: PropTypes.bool,\r\n hideCustomSegmentsOption: PropTypes.bool,\r\n};\r\n\r\nUnstyledAudiencePicker.defaultProps = {\r\n campaignSubType: null,\r\n supportExclusion: false,\r\n isIMARedesignEnabled: false,\r\n hideCustomSegmentsOption: false,\r\n};\r\n\r\nexport const ValidatedAudiencePicker = withDefaultStyles(withSiteMap(withCustomValidation(UnstyledAudiencePicker)), getAudiencePickerStyle);\r\n","import {\r\n audienceAssociationSectionStyle,\r\n commonDoubleListBoxStyle,\r\n convertToLocalStyle,\r\n glyphIconStyle,\r\n helpbuttonStyle,\r\n paginationStyle,\r\n searchboxStyle,\r\n uiblockerStyle,\r\n audienceModalStyles,\r\n audienceExpressionStyle,\r\n audienceCombinedListStyle,\r\n} from '@bingads-webui-campaign-react/common-styles';\r\n\r\nexport const getAudiencePickerStyle = (_, { palette }) => ({\r\n '@global': {\r\n ...uiblockerStyle({ palette }),\r\n ...audienceModalStyles({ palette }, { modalWidth: 500 }),\r\n ...audienceExpressionStyle(),\r\n ...audienceCombinedListStyle({ palette }),\r\n '.audience-modal.create-audience': {\r\n width: 700,\r\n },\r\n },\r\n pickerContainer: {\r\n '& .audience-association-view': {\r\n ...audienceAssociationSectionStyle({ palette }, { singleListBoxWidth: 450 }),\r\n ...commonDoubleListBoxStyle({ palette }),\r\n ...paginationStyle({ palette }),\r\n ...searchboxStyle({ palette }),\r\n ...convertToLocalStyle(glyphIconStyle({ palette })),\r\n ...convertToLocalStyle(helpbuttonStyle({ palette })),\r\n\r\n '& .create-audience-link-section': {\r\n marginLeft: 0,\r\n },\r\n\r\n '& .exclude-audience-link-section': {\r\n marginLeft: 0,\r\n },\r\n\r\n '& .ima-reach-ineligible-audience-toggle': {\r\n marginLeft: 16,\r\n marginTop: 8,\r\n },\r\n\r\n '& .association-section, .audience__association, .audience__exclusion': {\r\n '& .DMP_doublelistbox_section .doubleListBox.layout-columns': {\r\n width: 920,\r\n\r\n '& .form-group, .layout-columns-element:nth-child(1) .form-group:nth-child(1) .dlb-filter-alignPlaceholder .form-control-feedback': {\r\n margin: 0,\r\n },\r\n },\r\n\r\n '& .row': {\r\n margin: 0,\r\n },\r\n },\r\n\r\n '& .selectable-treeview ul': {\r\n listStyleType: 'none',\r\n padding: 0,\r\n },\r\n },\r\n },\r\n});\r\n","import _ from 'underscore';\r\nimport React, { useState, useMemo, useCallback, useContext } from 'react';\r\nimport classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport { Toggle } from '@fluentui/react';\r\nimport { Dropdown, TextField } from '@bingads-webui-react/fabric-with-signal';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { withCustomValidation, withValidation, withError } from '@bingads-webui-react/validation';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\n\r\nconst ValidatedTextField = withValidation(TextField);\r\n\r\nconst FrequencyIntervals = {\r\n Hour: 'HOUR',\r\n Day: 'DAY',\r\n Week: 'WEEK',\r\n Month: 'MONTH',\r\n Lifetime: 'LIFETIME',\r\n};\r\n\r\nconst FrequencyCapUnit = 'IMPRESSION';\r\n\r\nconst getKeyStringMap = i18n => [\r\n { key: FrequencyIntervals.Hour, text: i18n.getString(_TL_('hour')) },\r\n { key: FrequencyIntervals.Day, text: i18n.getString(_TL_('day')) },\r\n { key: FrequencyIntervals.Week, text: i18n.getString(_TL_('week')) },\r\n // Don't support month and lifetime for now\r\n // { key: FrequencyIntervals.Month, text: i18n.getString(_TL_('month')) },\r\n // { key: FrequencyIntervals.Lifetime, text: i18n.getString(_TL_('lifetime')) },\r\n];\r\n\r\nexport const formatFrequencyCapping = ({ CapValue, TimeGranularity, i18n }) => {\r\n let interval;\r\n if (TimeGranularity === undefined || TimeGranularity === null) {\r\n return i18n.getString(_TL_('No limit to how often people see your ads'));\r\n }\r\n if (TimeGranularity === '') {\r\n interval = '';\r\n } else {\r\n interval = getKeyStringMap(i18n).find(({ key }) => key === TimeGranularity).text;\r\n }\r\n return i18n.getString(_TL_('{{count}} times per {{interval}}'), { count: CapValue, interval });\r\n};\r\n\r\nconst textWidth = 100;\r\nconst textStyles = { root: { width: textWidth } };\r\n\r\nconst dropdownWidth = 100;\r\nconst dropDownStyles = { dropdown: { width: dropdownWidth } };\r\n\r\nconst getStyle = () => ({\r\n inputContainer: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n frequency: {\r\n margin: '0 10px',\r\n },\r\n});\r\n\r\nconst ValueAndInterval = ({\r\n i18n,\r\n TimeGranularity,\r\n onIntervalChanged,\r\n timeOptions,\r\n validationProps,\r\n}) => {\r\n const classes = useDefaultStyles(getStyle);\r\n\r\n return (\r\n
\r\n \r\n {formatFrequencyCapping({ CapValue: '', TimeGranularity: '', i18n })}\r\n \r\n
\r\n );\r\n};\r\n\r\nValueAndInterval.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n TimeGranularity: PropTypes.string,\r\n onIntervalChanged: PropTypes.func.isRequired,\r\n timeOptions: PropTypes.shape({}).isRequired,\r\n validationProps: PropTypes.shape({}).isRequired,\r\n};\r\n\r\nValueAndInterval.defaultProps = {\r\n TimeGranularity: '',\r\n};\r\n\r\nconst ValidatedValueAndInterval = withError(ValueAndInterval);\r\n\r\nconst FrequencyCapping = ({\r\n i18n,\r\n validationProps,\r\n updateValidation,\r\n}) => {\r\n const activity = useContext(ActivityContext);\r\n const { data: [{ CapValue = null, TimeGranularity } = {}] = [] } = validationProps;\r\n const [errorMessage, setErrorMessage] = useState([]);\r\n\r\n const onIntervalChanged = useCallback((e, value) => {\r\n updateValidation(errorMessage, {\r\n FrequencyCapSettings: [{\r\n CapValue,\r\n TimeGranularity: value.key,\r\n FrequencyCapUnit,\r\n }],\r\n });\r\n\r\n if (activity) {\r\n activity.signal(`onFrequencyIntervalChanged - ${JSON.stringify(value)})}`);\r\n }\r\n }, [updateValidation, errorMessage, CapValue, activity]);\r\n\r\n const timeOptions = useMemo(() => getKeyStringMap(i18n), [i18n]);\r\n\r\n const onToggle = useCallback((e, checked) => {\r\n if (checked) {\r\n updateValidation([], {\r\n FrequencyCapSettings: [{\r\n CapValue: undefined,\r\n TimeGranularity: TimeGranularity || FrequencyIntervals.Hour,\r\n FrequencyCapUnit,\r\n }],\r\n });\r\n } else {\r\n updateValidation([], { FrequencyCapSettings: [{}] });\r\n }\r\n\r\n if (activity) {\r\n activity.signal(`onFrequencyCapToggleChanged - toggleStatus: ${checked}`);\r\n }\r\n }, [TimeGranularity, activity, updateValidation]);\r\n\r\n const onCountValidate = useCallback((result) => {\r\n const { messages = [], data: { capValue } } = result;\r\n if (!_.isEqual(messages, errorMessage) || capValue !== CapValue) {\r\n setErrorMessage(messages);\r\n\r\n updateValidation(messages, {\r\n FrequencyCapSettings: [{\r\n CapValue: capValue,\r\n TimeGranularity,\r\n FrequencyCapUnit,\r\n }],\r\n });\r\n }\r\n }, [errorMessage, CapValue, updateValidation, TimeGranularity]);\r\n\r\n const customErrors = {\r\n decimalLength: i18n.getString(_TL_('Field requires integer value')),\r\n };\r\n\r\n const errorProcessor = errors => _.map(\r\n errors,\r\n (oldError, key) => customErrors[key] || oldError\r\n );\r\n\r\n return (\r\n \r\n \r\n { TimeGranularity && (\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nFrequencyCapping.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n classes: PropTypes.shape({\r\n inputContainer: PropTypes.string.isRequired,\r\n frequency: PropTypes.string.isRequired,\r\n }).isRequired,\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n CapValue: PropTypes.string,\r\n TimeGranularity: PropTypes.string,\r\n }),\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n};\r\n\r\nexport const ValidatedFrequencyCapping = withCustomValidation(FrequencyCapping);\r\n","import _ from 'underscore';\r\nimport classNames from 'classnames';\r\nimport React, { useContext, useMemo, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { ThemeProvider } from 'react-jss';\r\nimport { ComponentSettings, ThemeFluent } from '@bingads-webui-theme-2018/theme-fluent';\r\nimport { DoubleListBox, DoubleListBoxContextProvider, DoubleListBoxContext } from '@bingads-webui-react/double-list-box-fluent';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { getStyles } from './get-styles';\r\n\r\nconst DataSource = ({ genreOptions }) => {\r\n const {\r\n state: {\r\n search,\r\n },\r\n dispatch,\r\n } = useContext(DoubleListBoxContext);\r\n\r\n useEffect(() => {\r\n dispatch({ type: 'START_LOAD_DATA' });\r\n\r\n const items = search ? genreOptions.filter(item => item.name.toLowerCase().includes(search.toLowerCase())) : genreOptions;\r\n const start = 0;\r\n const end = items.length;\r\n dispatch({\r\n type: 'FINISH_LOAD_DATA',\r\n payload: {\r\n items: items.slice(start, end),\r\n totalCount: items.length,\r\n },\r\n });\r\n }, [dispatch, search, genreOptions]);\r\n\r\n return null;\r\n};\r\n\r\nDataSource.propTypes = {\r\n genreOptions: PropTypes.arrayOf(PropTypes.shape({\r\n id: PropTypes.number.isRequired,\r\n name: PropTypes.string.isRequired,\r\n })).isRequired,\r\n};\r\n\r\nconst UnthemedGenreSelectionDoubleListBox = ({\r\n onSelectionChange, i18n, genreOptions, genreTargets, classes,\r\n}) => {\r\n const selectedItems = useMemo(\r\n () => _.map(genreTargets, genreTarget => _.findWhere(genreOptions, { id: genreTarget }))\r\n , [genreTargets, genreOptions]\r\n );\r\n\r\n return (\r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nUnthemedGenreSelectionDoubleListBox.propTypes = {\r\n classes: PropTypes.shape(_.mapObject(getStyles(), _.constant(PropTypes.string.isRequired)))\r\n .isRequired,\r\n onSelectionChange: PropTypes.func.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n genreOptions: PropTypes.arrayOf(PropTypes.shape({\r\n id: PropTypes.number.isRequired,\r\n name: PropTypes.string.isRequired,\r\n })).isRequired,\r\n genreTargets: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n};\r\n\r\nconst GenreSelectionDoubleListBox = withDefaultStyles(UnthemedGenreSelectionDoubleListBox, getStyles);\r\n\r\nexport { GenreSelectionDoubleListBox };\r\n","export const getStyles = (_, { palette = {} } = {}) => {\r\n const doubleListBox = {\r\n '& > div': {\r\n height: 470,\r\n },\r\n '& .items .item[aria-selected=\"true\"]': {\r\n backgroundColor: palette.neutralLight,\r\n\r\n '& div:nth-child(2)': {\r\n display: 'none',\r\n },\r\n },\r\n };\r\n\r\n return {\r\n doubleListBox,\r\n };\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useContext, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { RadioGroup } from '@bingads-webui-react/radio';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { GenreSelectionDoubleListBox } from './genre-selection-double-list-box';\r\n\r\nconst genreTargetAllOptionIds = {\r\n AllGenres: 'AllGenres',\r\n SelectSpecifics: 'SelectSpecifics',\r\n};\r\n\r\nconst radioOptions = [\r\n genreTargetAllOptionIds.AllGenres,\r\n genreTargetAllOptionIds.SelectSpecifics,\r\n];\r\n\r\nconst GenreTargets = ({\r\n i18n,\r\n genreTargets,\r\n genreOptions,\r\n updateValidation,\r\n}) => {\r\n const activity = useContext(ActivityContext);\r\n const isAllSelected = genreTargets == null || genreTargets.length === 0;\r\n\r\n const [selectedOptionId, setSelectedOptionId] = useState(radioOptions[isAllSelected ? 0 : 1]);\r\n\r\n const optionToString = {\r\n [genreTargetAllOptionIds.AllGenres]: i18n.getString(_TL_('All genres')),\r\n [genreTargetAllOptionIds.SelectSpecifics]: i18n.getString(_TL_('Let me choose specific genres')),\r\n };\r\n\r\n const renderItem = useCallback(id => optionToString[id], [optionToString]);\r\n const getItemId = _.identity;\r\n\r\n const onGenreTargetsChanged = useCallback((selections) => {\r\n const selectionIds = _.map(selections, selection => selection.id);\r\n updateValidation([], { genreTargets: selectionIds });\r\n if (activity) {\r\n activity.signal(`onGenreTargetChange - ${JSON.stringify({ genreTargets: selectionIds })}`);\r\n }\r\n }, [updateValidation, activity]);\r\n\r\n const onRadioGroupChange = useCallback((id) => {\r\n if (id === genreTargetAllOptionIds.AllGenres) {\r\n // reset the selections.\r\n updateValidation([], { genreTargets: [] });\r\n }\r\n\r\n setSelectedOptionId(id);\r\n }, [updateValidation]);\r\n\r\n return (\r\n \r\n
\r\n { i18n.getString(_TL_('What genre do you want your ads to target?')) }\r\n
\r\n \r\n {\r\n selectedOptionId === genreTargetAllOptionIds.SelectSpecifics &&\r\n \r\n }\r\n
\r\n );\r\n};\r\n\r\nGenreTargets.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n genreTargets: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n genreOptions: PropTypes.arrayOf(PropTypes.shape({\r\n id: PropTypes.number.isRequired,\r\n name: PropTypes.string.isRequired,\r\n })).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n};\r\n\r\nconst formatGenreTargets = ({ i18n, genreTargets, genreOptions }) => {\r\n if (genreTargets === null ||\r\n genreTargets === undefined ||\r\n genreTargets.length === 0 ||\r\n genreTargets.length === genreOptions.length) {\r\n return i18n.getString(_TL_('All genres'));\r\n }\r\n\r\n const genreTargetStr = genreTargets.length + i18n.getString(_TL_(' targets selected: ')) +\r\n _.chain(genreTargets)\r\n .sortBy()\r\n .take(10)\r\n .map(genreTargetId => _.findWhere(genreOptions, { id: genreTargetId }).name)\r\n .join(i18n.getString(_TL_(', ')))\r\n .value();\r\n\r\n if (genreTargets.length > 10) {\r\n return genreTargetStr + i18n.getString(_TL_('...'));\r\n }\r\n\r\n return genreTargetStr;\r\n};\r\n\r\nconst ValidatedGenreTargets = withCustomValidation(GenreTargets);\r\n\r\nexport { ValidatedGenreTargets, formatGenreTargets };\r\n","const getGenreOptions = i18n =>\r\n [\r\n {\r\n id: 1,\r\n name: i18n.getString(_TL_('Horror')),\r\n },\r\n {\r\n id: 2,\r\n name: i18n.getString(_TL_('Crime')),\r\n },\r\n {\r\n id: 3,\r\n name: i18n.getString(_TL_('Game-show')),\r\n },\r\n {\r\n id: 4,\r\n name: i18n.getString(_TL_('Documentary')),\r\n },\r\n {\r\n id: 5,\r\n name: i18n.getString(_TL_('Romance')),\r\n },\r\n {\r\n id: 6,\r\n name: i18n.getString(_TL_('Sports - Other')),\r\n },\r\n {\r\n id: 7,\r\n name: i18n.getString(_TL_('Talk')),\r\n },\r\n {\r\n id: 8,\r\n name: i18n.getString(_TL_('Drama')),\r\n },\r\n {\r\n id: 9,\r\n name: i18n.getString(_TL_('Fantasy')),\r\n },\r\n {\r\n id: 10,\r\n name: i18n.getString(_TL_('Music')),\r\n },\r\n {\r\n id: 11,\r\n name: i18n.getString(_TL_('Shopping')),\r\n },\r\n {\r\n id: 12,\r\n name: i18n.getString(_TL_('Other')),\r\n },\r\n {\r\n id: 13,\r\n name: i18n.getString(_TL_('Action')),\r\n },\r\n {\r\n id: 14,\r\n name: i18n.getString(_TL_('Thriller')),\r\n },\r\n {\r\n id: 15,\r\n name: i18n.getString(_TL_('News')),\r\n },\r\n {\r\n id: 17,\r\n name: i18n.getString(_TL_('Reality')),\r\n },\r\n {\r\n id: 18,\r\n name: i18n.getString(_TL_('Comedy')),\r\n },\r\n {\r\n id: 19,\r\n name: i18n.getString(_TL_('Business & Finance')),\r\n },\r\n {\r\n id: 20,\r\n name: i18n.getString(_TL_('Cooking')),\r\n },\r\n {\r\n id: 21,\r\n name: i18n.getString(_TL_('Sitcom')),\r\n },\r\n {\r\n id: 22,\r\n name: i18n.getString(_TL_('Adventure')),\r\n },\r\n {\r\n id: 23,\r\n name: i18n.getString(_TL_('Sci-fi')),\r\n },\r\n {\r\n id: 25,\r\n name: i18n.getString(_TL_('Football')),\r\n },\r\n {\r\n id: 26,\r\n name: i18n.getString(_TL_('Animation')),\r\n },\r\n {\r\n id: 27,\r\n name: i18n.getString(_TL_('Baseball')),\r\n },\r\n {\r\n id: 28,\r\n name: i18n.getString(_TL_('Basketball')),\r\n },\r\n {\r\n id: 29,\r\n name: i18n.getString(_TL_('Biography')),\r\n },\r\n {\r\n id: 30,\r\n name: i18n.getString(_TL_('History')),\r\n },\r\n {\r\n id: 31,\r\n name: i18n.getString(_TL_('Musical')),\r\n },\r\n {\r\n id: 32,\r\n name: i18n.getString(_TL_('Mystery')),\r\n },\r\n {\r\n id: 33,\r\n name: i18n.getString(_TL_('Soccer')),\r\n },\r\n {\r\n id: 34,\r\n name: i18n.getString(_TL_('War')),\r\n },\r\n {\r\n id: 35,\r\n name: i18n.getString(_TL_('Western')),\r\n },\r\n {\r\n id: 36,\r\n name: i18n.getString(_TL_('Animals')),\r\n },\r\n {\r\n id: 37,\r\n name: i18n.getString(_TL_('Automotive')),\r\n },\r\n {\r\n id: 38,\r\n name: i18n.getString(_TL_('Science & Technology')),\r\n },\r\n {\r\n id: 39,\r\n name: i18n.getString(_TL_('Travel')),\r\n },\r\n {\r\n id: 40,\r\n name: i18n.getString(_TL_('Golf')),\r\n },\r\n {\r\n id: 41,\r\n name: i18n.getString(_TL_('Ice Hockey')),\r\n },\r\n {\r\n id: 42,\r\n name: i18n.getString(_TL_('Motor Sports')),\r\n },\r\n {\r\n id: 43,\r\n name: i18n.getString(_TL_('Beauty & Fashion')),\r\n },\r\n {\r\n id: 44,\r\n name: i18n.getString(_TL_('Home & Garden')),\r\n },\r\n {\r\n id: 45,\r\n name: i18n.getString(_TL_('Health')),\r\n },\r\n {\r\n id: 46,\r\n name: i18n.getString(_TL_('Fitness')),\r\n },\r\n // Children not allowed\r\n // {\r\n // id: 47,\r\n // name: i18n.getString(_TL_('Children')),\r\n // },\r\n {\r\n id: 48,\r\n name: i18n.getString(_TL_('Weather')),\r\n },\r\n {\r\n id: 49,\r\n name: i18n.getString(_TL_('Education')),\r\n },\r\n {\r\n id: 50,\r\n name: i18n.getString(_TL_('Cycling')),\r\n },\r\n {\r\n id: 51,\r\n name: i18n.getString(_TL_('Gaming')),\r\n },\r\n {\r\n id: 52,\r\n name: i18n.getString(_TL_('Rugby League')),\r\n },\r\n {\r\n id: 53,\r\n name: i18n.getString(_TL_('Rugby Union')),\r\n },\r\n {\r\n id: 54,\r\n name: i18n.getString(_TL_('Australian Rules Football')),\r\n },\r\n {\r\n id: 55,\r\n name: i18n.getString(_TL_('Tennis')),\r\n },\r\n {\r\n id: 56,\r\n name: i18n.getString(_TL_('Olympics')),\r\n },\r\n {\r\n id: 57,\r\n name: i18n.getString(_TL_('Softball')),\r\n },\r\n {\r\n id: 58,\r\n name: i18n.getString(_TL_('Cricket')),\r\n },\r\n {\r\n id: 59,\r\n name: i18n.getString(_TL_('MMA')),\r\n },\r\n {\r\n id: 60,\r\n name: i18n.getString(_TL_('Boxing')),\r\n },\r\n {\r\n id: 61,\r\n name: i18n.getString(_TL_('Horse Racing')),\r\n },\r\n // Religion and Politics not allowed\r\n // {\r\n // id: 62,\r\n // name: i18n.getString(_TL_('Politics')),\r\n // },\r\n // {\r\n // id: 63,\r\n // name: i18n.getString(_TL_('Religion')),\r\n // },\r\n {\r\n id: 64,\r\n name: i18n.getString(_TL_('Nature')),\r\n },\r\n {\r\n id: 65,\r\n name: i18n.getString(_TL_('Outdoors')),\r\n },\r\n {\r\n id: 66,\r\n name: i18n.getString(_TL_('Arts')),\r\n },\r\n {\r\n id: 67,\r\n name: i18n.getString(_TL_('Pop Culture')),\r\n },\r\n {\r\n id: 68,\r\n name: i18n.getString(_TL_('Fishing')),\r\n },\r\n {\r\n id: 69,\r\n name: i18n.getString(_TL_('Surfing')),\r\n },\r\n {\r\n id: 70,\r\n name: i18n.getString(_TL_('Paranormal')),\r\n },\r\n {\r\n id: 71,\r\n name: i18n.getString(_TL_('Awards')),\r\n },\r\n {\r\n id: 72,\r\n name: i18n.getString(_TL_('Martial Arts')),\r\n },\r\n {\r\n id: 73,\r\n name: i18n.getString(_TL_('Hobbies')),\r\n },\r\n {\r\n id: 74,\r\n name: i18n.getString(_TL_('Dance')),\r\n },\r\n {\r\n id: 75,\r\n name: i18n.getString(_TL_('Law')),\r\n },\r\n {\r\n id: 76,\r\n name: i18n.getString(_TL_('Comic Book')),\r\n },\r\n {\r\n id: 77,\r\n name: i18n.getString(_TL_('Holidays')),\r\n },\r\n {\r\n id: 78,\r\n name: i18n.getString(_TL_('Wrestling')),\r\n },\r\n // {\r\n // id: 79,\r\n // name: i18n.getString(_TL_('Gambling')),\r\n // },\r\n {\r\n id: 80,\r\n name: i18n.getString(_TL_('Anime')),\r\n },\r\n {\r\n id: 81,\r\n name: i18n.getString(_TL_('Soap-Opera')),\r\n },\r\n ];\r\n\r\nconst getDealGenreOptions = i18n =>\r\n [\r\n {\r\n id: 1,\r\n name: i18n.getString(_TL_('Horror')),\r\n },\r\n {\r\n id: 4,\r\n name: i18n.getString(_TL_('Documentary')),\r\n },\r\n {\r\n id: 5,\r\n name: i18n.getString(_TL_('Romance')),\r\n },\r\n {\r\n id: 8,\r\n name: i18n.getString(_TL_('Drama')),\r\n },\r\n {\r\n id: 9,\r\n name: i18n.getString(_TL_('Fantasy')),\r\n },\r\n {\r\n id: 13,\r\n name: i18n.getString(_TL_('Action')),\r\n },\r\n {\r\n id: 18,\r\n name: i18n.getString(_TL_('Comedy')),\r\n },\r\n ];\r\n\r\nexport { getGenreOptions, getDealGenreOptions };\r\n","import { getCollapsiblePanelStyles } from '@bingads-webui-campaign-react/display-plus-native-ads';\r\n\r\nexport const getAdGroupStepStyles = (components, theme) => ({\r\n collapsiblePanel: getCollapsiblePanelStyles(components, theme),\r\n container: {\r\n marginTop: 10,\r\n },\r\n reachEstimate: {\r\n height: '100%',\r\n top: 111,\r\n position: 'sticky',\r\n },\r\n reachEstimationError: {\r\n marginBottom: 12,\r\n },\r\n});\r\n","export const getReachEstimateStyles = (_, core) => ({\r\n reachEstimateControl: {\r\n width: 400,\r\n },\r\n\r\n estimateNote: {\r\n color: '#323130',\r\n fontSize: 12,\r\n },\r\n\r\n panel: {\r\n minHeight: 161,\r\n paddingTop: 8,\r\n position: 'relative',\r\n boxShadow: '0px 0.3px 0.9px rgba(0, 0, 0, 0.1), 0px 1.6px 3.6px rgba(0, 0, 0, 0.13)',\r\n borderRadius: 2,\r\n backgroundColor: `${core && core.palette && core.palette.white}`,\r\n },\r\n\r\n panelBody: {\r\n padding: 10,\r\n },\r\n\r\n reachEstimateTitle: {\r\n fontSize: 18,\r\n marginBottom: 8,\r\n },\r\n\r\n impressionsCountMessage: {\r\n fontSize: 18,\r\n },\r\n\r\n impressionsCount: {\r\n fontWeight: 'bold',\r\n },\r\n\r\n meterContainer: {\r\n height: 37,\r\n margin: '10px 0 13px 0',\r\n position: 'relative',\r\n fontSize: 12,\r\n '& .specificMeter': {\r\n width: '10%',\r\n height: 12,\r\n backgroundColor: '#C4C4C4',\r\n position: 'absolute',\r\n top: 17,\r\n },\r\n '& .broadMeter': {\r\n width: '90%',\r\n height: 12,\r\n backgroundColor: '#C4C4C4',\r\n position: 'absolute',\r\n top: 17,\r\n marginLeft: '10%',\r\n },\r\n },\r\n\r\n specificMeter: {\r\n width: '10%',\r\n height: 12,\r\n backgroundColor: '#C4C4C4',\r\n position: 'absolute',\r\n top: 17,\r\n },\r\n\r\n broadMeter: {\r\n width: '90%',\r\n height: 12,\r\n backgroundColor: '#C4C4C4',\r\n position: 'absolute',\r\n top: 17,\r\n marginLeft: '10%',\r\n },\r\n\r\n audienceSpecificLabel: {\r\n position: 'absolute',\r\n top: 35,\r\n fontSize: 12,\r\n },\r\n\r\n audienceBroadLabel: {\r\n position: 'absolute',\r\n top: 35,\r\n fontSize: 12,\r\n right: 0,\r\n },\r\n\r\n arrow: {\r\n backgroundColor: '#107C10',\r\n top: 5,\r\n width: 16,\r\n height: 35,\r\n position: 'absolute',\r\n border: `4px solid ${core && core.palette && core.palette.white} !important`,\r\n zIndex: 1,\r\n },\r\n});\r\n","import React, { useEffect, useRef, useCallback, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { getReachEstimateStyles } from './reach-estimate-styles';\r\n\r\n\r\nconst meterProps = {\r\n value: 0,\r\n max: 100,\r\n min: 0,\r\n};\r\n\r\nconst calcBroadMeterValue = (estimatedImpressions) => {\r\n // Use logarithmic scale to represent impressions: y = a ln x + b\r\n // 96 = a ln 466B + b: (466B experimentally derived as max impressions value)\r\n // 20 = a ln 1M + b: (1M is required as min broad impressions value)\r\n // TODO: Tune this as needed after initial self-hosting\r\n const transformedVal = (5.82288 * Math.log(estimatedImpressions)) - 60.44618;\r\n\r\n return transformedVal;\r\n};\r\n\r\nexport const AudienceMeter = (props) => {\r\n const {\r\n estimatedImpressions, isImpressionTooSpecific, i18n, isDealEstimate,\r\n } = props;\r\n\r\n const classes = useDefaultStyles(getReachEstimateStyles);\r\n\r\n const arrowRef = useRef(null);\r\n const specificMeterRef = useRef(null);\r\n const broadMeterRef = useRef(null);\r\n\r\n const [arrowStyles, setArrowStyles] = useState(null);\r\n const [arrowType, setArrowType] = useState(null);\r\n const [broadMeterStyle, setBroadMeterStyle] = useState(null);\r\n const [specificMeterStyle, setSpecificMeterStyle] = useState(null);\r\n\r\n const calcBroadPos = useCallback((value) => {\r\n const specificMeterSize = specificMeterRef.current.offsetWidth;\r\n const broadMeterSize = broadMeterRef.current.offsetWidth;\r\n const arrowGap = arrowRef.current.style.borderLeftWidth;\r\n\r\n const broadScalePos = value * ((broadMeterSize - arrowGap) / meterProps.max);\r\n\r\n // Offset final position with specific meter width\r\n return (0.1 * specificMeterSize) + broadScalePos;\r\n }, [arrowRef, specificMeterRef, broadMeterRef]);\r\n\r\n const moveAlongBroad = useCallback((value) => {\r\n if (arrowRef && arrowRef.current) {\r\n setArrowStyles({\r\n left: calcBroadPos(value),\r\n borderTopColor: 'green',\r\n backgroundColor: '#107C10',\r\n });\r\n setArrowType('arrow-broad');\r\n }\r\n\r\n if (isDealEstimate && specificMeterRef.current && broadMeterRef.current) {\r\n const totalWidth = (0.1 * specificMeterRef.current.clientWidth) + broadMeterRef.current.clientWidth;\r\n const estimatePos = calcBroadPos(value);\r\n\r\n setSpecificMeterStyle({\r\n width: '100%',\r\n });\r\n setBroadMeterStyle({\r\n width: `${(estimatePos / totalWidth) * 100}%`,\r\n marginLeft: 0,\r\n });\r\n setArrowStyles({\r\n visibility: 'hidden',\r\n });\r\n }\r\n }, [isDealEstimate, calcBroadPos]);\r\n\r\n const calcSpecificPos = useCallback((value) => {\r\n const specificMeterSize = specificMeterRef.current.offsetWidth;\r\n const arrowGap = arrowRef.current.style.borderLeftWidth;\r\n\r\n return value * ((specificMeterSize - arrowGap) / meterProps.max);\r\n }, [arrowRef, specificMeterRef]);\r\n\r\n const moveToSpecific = useCallback(() => {\r\n const midPointVal = 50; // percentage\r\n\r\n if (arrowRef && arrowRef.current) {\r\n setArrowStyles({\r\n left: calcSpecificPos(midPointVal),\r\n borderTopColor: 'red',\r\n backgroundColor: '#A80000',\r\n });\r\n setArrowType('arrow-narrow');\r\n }\r\n }, [calcSpecificPos]);\r\n\r\n useEffect(() => {\r\n if (arrowRef.current && specificMeterRef.current && broadMeterRef.current) {\r\n if (isImpressionTooSpecific) {\r\n moveToSpecific();\r\n } else {\r\n moveAlongBroad(calcBroadMeterValue(estimatedImpressions));\r\n }\r\n }\r\n }, [moveAlongBroad, moveToSpecific, estimatedImpressions, isImpressionTooSpecific, arrowRef, specificMeterRef, broadMeterRef]);\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {i18n.getString(_TL_('Low'))}\r\n
\r\n
\r\n {i18n.getString(_TL_('High'))}\r\n
\r\n
\r\n );\r\n};\r\n\r\nAudienceMeter.propTypes = {\r\n estimatedImpressions: PropTypes.number,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n isImpressionTooSpecific: PropTypes.bool,\r\n isDealEstimate: PropTypes.bool,\r\n};\r\n\r\nAudienceMeter.defaultProps = {\r\n estimatedImpressions: null,\r\n isImpressionTooSpecific: false,\r\n isDealEstimate: false,\r\n};\r\n","const unitValueMap = {\r\n None: {\r\n value: 1,\r\n unit: '',\r\n },\r\n Thousand: {\r\n value: 1000,\r\n unit: 'K',\r\n },\r\n Million: {\r\n value: 1000000,\r\n unit: 'M',\r\n },\r\n Billion: {\r\n value: 1000000000,\r\n unit: 'B',\r\n },\r\n};\r\n\r\nexport { unitValueMap };\r\n","import PropTypes from 'prop-types';\r\nimport React, { useState, useEffect, useCallback, useContext } from 'react';\r\nimport _ from 'underscore';\r\nimport { useFetch } from 'use-http';\r\nimport classNames from 'classnames';\r\nimport { Stack, Spinner, SpinnerSize, MessageBar, MessageBarType } from '@fluentui/react';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { getReachEstimateStyles } from './reach-estimate-styles';\r\nimport { AudienceMeter } from './audience-meter';\r\nimport { unitValueMap } from './utils';\r\n\r\nexport const tooNarrowFlag = 'ToNarrow';\r\nexport const tooNarrowErrorMessage = _TL_('Your targeting is too narrow. Update your targets to broaden your audience and increase estimated impressions.');\r\n\r\nconst title = _TL_('Potential monthly impressions');\r\n\r\nconst ReachEstimate = (props) => {\r\n const {\r\n i18n,\r\n permissions,\r\n targets,\r\n accountId,\r\n customerId,\r\n updateValidation,\r\n validationProps,\r\n shouldServeOnMSAN,\r\n } = props;\r\n\r\n const classes = useDefaultStyles(getReachEstimateStyles);\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const {\r\n post: fetchReachEstimation,\r\n response: reachEstimationResponse,\r\n loading: reachEstimationLoading,\r\n error: reachEstimationError,\r\n } = useFetch(`Customers(${customerId})/Accounts(${accountId})/planner/AudienceEstimation`);\r\n\r\n const [currentTargets, setCurrentTargets] = useState(null);\r\n\r\n const [showPanel, setShowPanel] = useState(true);\r\n const [isLoading, setIsLoading] = useState(true);\r\n\r\n const [estimatedImpressions, setEstimatedImpressions] = useState();\r\n const [estimatedImpressionsText, setEstimatedImpressionsText] = useState();\r\n const [isImpressionTooSpecific, setIsImpressionTooSpecific] = useState();\r\n\r\n const [errorMessage, setErrorMessage] = useState();\r\n\r\n const updateEstimatesOnMeter = useCallback((data) => {\r\n if (!data || !data.estImpression) {\r\n return;\r\n }\r\n\r\n const estImpressionsVal = data.estImpression.value;\r\n const estImpressionsUnit = unitValueMap[data.estImpression.unit].unit;\r\n const estImpressionsUnitVal = unitValueMap[data.estImpression.unit].value;\r\n\r\n const estImpressionsText = `${estImpressionsVal}${estImpressionsUnit}`;\r\n const estImpressions = estImpressionsVal * estImpressionsUnitVal;\r\n\r\n setEstimatedImpressions(estImpressions);\r\n setEstimatedImpressionsText(estImpressionsText);\r\n setIsImpressionTooSpecific(data.isImpressionTooSpecific);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (shouldServeOnMSAN) {\r\n if (isImpressionTooSpecific && !permissions.IsAmplifyEnabled) {\r\n updateValidation([i18n.getString(_TL_('Targeting too specific'))], { [validationProps.field]: tooNarrowFlag }, false);\r\n } else if (isLoading) {\r\n updateValidation([i18n.getString(_TL_('Loading'))], { [validationProps.field]: null }, false);\r\n } else {\r\n updateValidation([], { [validationProps.field]: null }, false);\r\n }\r\n }\r\n }, [i18n, isLoading, updateValidation, isImpressionTooSpecific, permissions.IsAmplifyEnabled, validationProps, shouldServeOnMSAN]);\r\n\r\n const updatePanel = useCallback((data) => {\r\n let currentErrorMessage = null;\r\n if (_.get(data, ['estImpression', 'value']) || data.isImpressionTooSpecific) {\r\n setShowPanel(true);\r\n updateEstimatesOnMeter(data);\r\n\r\n if (data.isImpressionTooSpecific && !permissions.IsAmplifyEnabled) {\r\n currentErrorMessage = tooNarrowErrorMessage;\r\n }\r\n setErrorMessage(currentErrorMessage && i18n.getString(currentErrorMessage));\r\n } else {\r\n setShowPanel(false);\r\n }\r\n }, [i18n, permissions.IsAmplifyEnabled, updateEstimatesOnMeter]);\r\n\r\n useEffect(() => {\r\n if (!reachEstimationLoading) {\r\n const { data } = reachEstimationResponse;\r\n\r\n setIsLoading(false);\r\n\r\n if (data) {\r\n updatePanel(data);\r\n }\r\n\r\n if (reachEstimationError) {\r\n setShowPanel(false);\r\n }\r\n\r\n if (activity) {\r\n activity.signal(`onReachEstimationChange - ${JSON.stringify({ estimation: data })}`);\r\n }\r\n }\r\n }, [reachEstimationError, reachEstimationLoading, reachEstimationResponse, updateValidation, updatePanel, activity]);\r\n\r\n // Allow Updating Estimates no more than once every 2000 ms\r\n const debouncedUpdateEstimate = useCallback(_.debounce(data => fetchReachEstimation('', data), 2000), [fetchReachEstimation]);\r\n\r\n useEffect(() => {\r\n if (targets && !_.isEqual(targets, currentTargets)) {\r\n setIsLoading(true);\r\n setShowPanel(true);\r\n setCurrentTargets(targets);\r\n debouncedUpdateEstimate(targets);\r\n }\r\n }, [targets, debouncedUpdateEstimate, currentTargets]);\r\n\r\n return (\r\n
\r\n {showPanel &&\r\n
\r\n \r\n {isLoading ? (\r\n <>\r\n
{i18n.getString(title)}
\r\n \r\n \r\n \r\n \r\n )\r\n : (\r\n <>\r\n \r\n
{i18n.getString(`${title}: `)}
\r\n
{estimatedImpressionsText}
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n {i18n.getString(_TL_('These are estimates based on your targeting and audience settings.'))}\r\n
\r\n {errorMessage &&\r\n \r\n {errorMessage}\r\n \r\n }\r\n
\r\n \r\n )\r\n }\r\n
\r\n
\r\n }\r\n
\r\n );\r\n};\r\n\r\nReachEstimate.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n permissions: PropTypes.shape({\r\n IsAmplifyEnabled: PropTypes.bool,\r\n IsKPIEstimateForAudienceFeedBasedEnabled: PropTypes.bool,\r\n }).isRequired,\r\n shouldServeOnMSAN: PropTypes.bool,\r\n targets: PropTypes.shape({}),\r\n accountId: PropTypes.number.isRequired,\r\n customerId: PropTypes.number.isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n validationProps: PropTypes.shape({\r\n field: PropTypes.string.isRequired,\r\n }).isRequired,\r\n};\r\n\r\nReachEstimate.defaultProps = {\r\n targets: null,\r\n shouldServeOnMSAN: false,\r\n};\r\n\r\n\r\nconst validatedReachEstimate = withCustomValidation(ReachEstimate);\r\n\r\nexport { validatedReachEstimate as ReachEstimate };\r\n","export const getDealPotentialImpression = () => ({\r\n dealImpression: {\r\n backgroundColor: 'white',\r\n boxShadow: '0px 0.3px 0.9px rgba(0, 0, 0, 0.1), 0px 1.6px 3.6px rgba(0, 0, 0, 0.13)',\r\n padding: 10,\r\n width: 400,\r\n height: 'fit-content',\r\n marginBottom: 20,\r\n '&.panel-mode': {\r\n height: 'unset',\r\n boxShadow: 'none',\r\n },\r\n '& .deal-seller': {\r\n fontSize: '18px',\r\n fontWeight: 'bold',\r\n marginBottom: '15px',\r\n },\r\n '& .deal-warning': {\r\n fontSize: '18px',\r\n fontWeight: 'bold',\r\n marginBottom: '15px',\r\n '& .deleted-text': {\r\n color: '#A80000',\r\n },\r\n },\r\n '& .desc': {\r\n fontSize: '12px',\r\n fontWeight: 'bold',\r\n },\r\n '& .impression': {\r\n fontSize: '28px',\r\n fontWeight: 'bold',\r\n },\r\n '& .deal-impression': {\r\n marginBottom: '20px',\r\n },\r\n '& .broadMeter': {\r\n backgroundColor: '#004578 !important',\r\n height: '24px !important',\r\n top: '8px !important',\r\n },\r\n '& .specificMeter': {\r\n height: '24px !important',\r\n top: '8px !important',\r\n },\r\n },\r\n});\r\n","import React, { useCallback, useEffect, useState } from 'react';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport { useFetch } from 'use-http';\r\nimport BlockUi from 'react-block-ui';\r\nimport { Link, Panel, Spinner, SpinnerSize } from '@fluentui/react';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { useBoolean } from '@fluentui/react-hooks';\r\n\r\nimport { DealDetails, bytesForHuman, isNetflixDeal, isDealDeleted } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport { AudienceMeter } from '../../steps/ad-group/reach-estimate/audience-meter';\r\nimport { getDealPotentialImpression } from './deal-potential-impression-styles';\r\nimport { unitValueMap } from '../../steps/ad-group/reach-estimate/utils';\r\n\r\nexport const DealImpressionPanel = (props) => {\r\n const {\r\n deal, i18n, isPanelMode, targets, serverContext, impression,\r\n } = props;\r\n\r\n const classes = useDefaultStyles(getDealPotentialImpression);\r\n const [isOpen, { setTrue: openPanel, setFalse: dismissPanel }] = useBoolean(false);\r\n const [estimateLoaded, setEstimateLoaded] = useState(!!impression);\r\n const [estImpression, setEstImpression] = useState(impression);\r\n\r\n const dealDeleted = isDealDeleted(deal);\r\n // hide impression for netflix\r\n const hideDealImpression = isNetflixDeal(deal) || dealDeleted;\r\n\r\n const {\r\n DynamicPermissions: {\r\n GenreTargets,\r\n },\r\n Permissions: {\r\n IsDealFilterEnabled,\r\n },\r\n } = serverContext;\r\n const shouldShowGenre = GenreTargets && IsDealFilterEnabled && deal;\r\n\r\n const {\r\n post: fetchReachEstimation,\r\n } = useFetch(`Customers(${serverContext.CurrentCustomer.Id})/Accounts(${serverContext.CurrentAccount.Id})/planner/AudienceEstimation`);\r\n\r\n const debouncedUpdateEstimate = useCallback(_.debounce((data) => {\r\n fetchReachEstimation('', data).then((res) => {\r\n if (!res) {\r\n return;\r\n }\r\n const estImpressionsVal = res.estImpression.value;\r\n const estImpressionsUnitVal = unitValueMap[res.estImpression.unit].value;\r\n const estImpressions = estImpressionsVal * estImpressionsUnitVal;\r\n\r\n // set to undefine if 0\r\n if (estImpressions === 0) {\r\n setEstImpression(undefined);\r\n } else {\r\n setEstImpression(estImpressions);\r\n }\r\n setEstimateLoaded(true);\r\n });\r\n }, 3000), []);\r\n\r\n useEffect(() => {\r\n if (!impression && !hideDealImpression) {\r\n setEstimateLoaded(false);\r\n debouncedUpdateEstimate({\r\n ...targets,\r\n DealIds: { Includes: [deal.Id] },\r\n });\r\n }\r\n }, [targets, debouncedUpdateEstimate, deal.Id, impression]);\r\n\r\n\r\n return (\r\n
\r\n {dealDeleted ?\r\n
\r\n {i18n.getString(_TL_('Media deal'))}: {i18n.getString(_TL_('Deleted'))}\r\n
\r\n :
{i18n.getString(_TL_('Media deal'))}: {deal.Name}
\r\n }\r\n { estImpression &&
{i18n.getString(_TL_('Potential impression for this deal'))}
}\r\n { estImpression &&
{bytesForHuman(estImpression)}
}\r\n\r\n {\r\n !hideDealImpression &&\r\n
\r\n } >\r\n \r\n \r\n
\r\n }\r\n {\r\n !dealDeleted &&\r\n (\r\n isPanelMode ?\r\n :\r\n // eslint-disable-next-line jsx-a11y/anchor-is-valid\r\n {i18n.getString(_TL_('View deal'))}\r\n )\r\n }\r\n {\r\n !isPanelMode &&\r\n \r\n \r\n \r\n }\r\n
\r\n );\r\n};\r\n\r\n\r\nDealImpressionPanel.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n impression: PropTypes.number,\r\n deal: PropTypes.shape({\r\n Seller: PropTypes.string,\r\n Name: PropTypes.string,\r\n AskPrice: PropTypes.number,\r\n EstimatedImpressions: PropTypes.number,\r\n Id: PropTypes.number,\r\n }).isRequired,\r\n isPanelMode: PropTypes.bool,\r\n serverContext: PropTypes.shape({\r\n CurrentCustomer: PropTypes.shape({ Id: PropTypes.string }),\r\n CurrentAccount: PropTypes.shape({ Id: PropTypes.string }),\r\n Permissions: PropTypes.shape({\r\n IsDealFilterEnabled: PropTypes.bool,\r\n }),\r\n DynamicPermissions: PropTypes.shape({\r\n GenreTargets: PropTypes.bool,\r\n }),\r\n }).isRequired,\r\n targets: PropTypes.shape({}),\r\n};\r\n\r\nDealImpressionPanel.defaultProps = {\r\n isPanelMode: false,\r\n impression: null,\r\n targets: {},\r\n};\r\n","import React from 'react';\r\nimport { MessageBar } from '@fluentui/react';\r\n\r\nexport const getNetflixFrequencyCapping = i18n => (\r\n
\r\n
\r\n \r\n
{i18n.getString(_TL_('The publisher\\'s frequency limits have been applied: 3 impressions/day, 14 impressions/week, and 40 impressions/month.'))}
\r\n
\r\n
\r\n
\r\n);\r\n","import React, { useEffect, useCallback, useState } from 'react';\r\nimport { MessageBar, Checkbox, Spinner, SpinnerSize } from '@fluentui/react';\r\nimport { Link } from '@bingads-webui-react/fabric-with-signal';\r\nimport PropTypes from 'prop-types';\r\nimport { edmCampaign } from '@bingads-webui/edm-campaign';\r\nimport BlockUi from 'react-block-ui';\r\n\r\nconst NetflixTCAgreement = ({ i18n, cid, aid }) => {\r\n const [fetched, setFetched] = useState(false);\r\n const [accepted, setAccepted] = useState(false);\r\n\r\n const readAccount = useCallback(() => edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .get({ select: ['NetflixTCAccepted'] })\r\n .toPromise(), [aid, cid]);\r\n\r\n const patchAccount = useCallback(() => edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .patch({ NetflixTCAccepted: 'true' })\r\n .toPromise(), [aid, cid]);\r\n\r\n const onAccept = useCallback(() => {\r\n setFetched(false);\r\n patchAccount()\r\n .then(() => {\r\n setAccepted(true);\r\n setFetched(true);\r\n });\r\n }, [patchAccount]);\r\n\r\n useEffect(() => {\r\n readAccount().then((account) => {\r\n setFetched(true);\r\n setAccepted(account.NetflixTCAccepted === 'true');\r\n });\r\n }, [readAccount]);\r\n\r\n return (\r\n } >\r\n \r\n {i18n.getString(_TL_('I have read and agree to the '))}\r\n \r\n {i18n.getString(_TL_('Netflix Inventory Policy'))}\r\n \r\n {i18n.getString(_TL_('.'))}\r\n \r\n }\r\n checked={accepted}\r\n onChange={onAccept}\r\n disabled={accepted}\r\n defaultChecked={false}\r\n />\r\n \r\n {i18n.getString(_TL_('To be eligible to show ads on Netflix, your campaigns must meet all Netflix requirements, such as containing a bid, having a certain video quality and adhering to Netflix’s policies.'))}\r\n \r\n \r\n \r\n {\r\n i18n.getString(_TL_('Advertisers in the following verticals are required to submit their licenses and/or proof of creative approval in select markets to serve their ads on Netflix: Alcohol, Financial Services, Insurance, High fat/sugar/salt foods, online sports betting, state-run lotteries, healthcare, pharmaceuticals, and dating. Licenses and proof of creative approval can be submitted in web forms linked through the'))\r\n }\r\n \r\n \r\n {i18n.getString(_TL_('Restricted policy page.'))}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nNetflixTCAgreement.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n cid: PropTypes.number.isRequired,\r\n aid: PropTypes.number.isRequired,\r\n};\r\n\r\nexport { NetflixTCAgreement };\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React, { useState, useCallback, useMemo } from 'react';\r\nimport _, { compact } from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { Panel as BootstrapPanel } from 'react-bootstrap';\r\nimport { Link } from '@bingads-webui-react/fabric-with-signal';\r\nimport { MessageBarType, MessageBar } from '@fluentui/react';\r\nimport { Stack, Label } from '@bingads-webui-react/fabric-control';\r\nimport { ValidationGroup, ErrorMessages } from '@bingads-webui-react/validation';\r\nimport { getLocationTargetTitleDetails, getAdScheduleDetails, getBidTitleDetails } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport { CustomValidatedDefaultBid } from '@bingads-webui-campaign-react/default-bid';\r\nimport { AdGroup } from '@bingads-webui/campaign-odata-schemas';\r\nimport { ValidatedLegacyDateSetting, getDateSettingDetails } from '@bingads-webui-campaign/date-setting';\r\nimport { ValidatedLocationTargetSetting } from '@bingads-webui-campaign-react/step-wizard-controls';\r\nimport { withStepLoadingShell } from '@bingads-webui-campaign-react/step-wizard';\r\nimport { ValidatedLegacyAdSchedule } from '@bingads-webui-campaign/ad-schedule';\r\nimport { SEARCH_TYPE } from '@bingads-webui-react/bing-maps';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport {\r\n FormErrorGroup, UnmappedFormErrors,\r\n entityIs, andComp, propertyIs, anyComp, notComp,\r\n} from '@bingads-webui-campaign-react/form-error';\r\nimport { AttentionBeaconGroup } from '@bingads-webui-campaign-react/attention-beacon';\r\nimport { ActuationGroup, withActuation, FocusableActuator } from '@bingads-webui-campaign-react/actuator';\r\nimport { ERROR_ENTITY, getPanelErrorProps, getConvertedCurrencyDealMinimumBid, getAccountExchangeRateFromLocalStorage } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport {\r\n Collapse,\r\n TextTitle,\r\n useCollapseState,\r\n ValidatedBootstrapPanel,\r\n ValidatedFixedPanel,\r\n ValidatedPanel,\r\n collapseExpander,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport {\r\n isXandrDisplayAdsCampaign,\r\n isXandrVideoAdsCampaign,\r\n CampaignSubTypes,\r\n campaignShouldServeOnMSAN,\r\n isXandrServing,\r\n ScopeLevel\r\n} from '@bingads-webui-campaign-react/constants';\r\nimport { Alert } from '@bingads-webui-react/alert';\r\nimport {\r\n ValidatedCompanyPicker,\r\n formatCompany,\r\n ValidatedIndustryPicker,\r\n formatIndustry,\r\n ValidatedJobFunctionPicker,\r\n formatJobFunction,\r\n PredictiveTargetingHeader,\r\n PredictiveTargetingControlHeader,\r\n SectionShimmer,\r\n} from '@bingads-webui-campaign-react/display-plus-native-ads';\r\nimport { ValidatedCustomSegmentsPicker, formatCustomSegment } from '@bingads-webui-campaign-react/custom-segments-edit-create';\r\nimport { ServerValidatedWebExclusionsWithValidation, webExclusionPropertyVal } from '@bingads-webui-react/web-exclusions';\r\nimport { getContentTargetingPlacementsSummaryText, ContentTargetingPlacements } from '@bingads-webui-campaign-react/display-plus-campaigns/src/steps/adgroup/components/content-targeting-placements';\r\nimport { ServerValidatedRemainingCharsValidatedTextField } from '../../common/shared-components';\r\nimport { useStepAdGroupSettingsState } from './use-step-ad-group-state';\r\nimport { AgeRange, formatAgeRanges } from './target/age-range';\r\nimport { Gender, formatGenders } from './target/gender';\r\nimport { Device, formatDevices } from './target/device';\r\nimport { ValidatedAudiencePicker, formatAudience } from './target/audience-picker';\r\nimport { ValidatedFrequencyCapping } from './frequency-capping';\r\nimport { ValidatedGenreTargets, formatGenreTargets } from './genre-targeting';\r\nimport { getGenreOptions, getDealGenreOptions } from './genre-targeting/genre-options';\r\nimport { getAdGroupStepStyles } from './step-ad-group-settings-styles';\r\nimport { ReachEstimate, tooNarrowFlag, tooNarrowErrorMessage } from './reach-estimate';\r\nimport { DealImpressionPanel } from '../../common/deal-potential-impression/deal-potential-impression';\r\nimport { getNetflixFrequencyCapping } from './frequency-capping/netflixFrequencyCapping';\r\nimport { NetflixTCAgreement } from './netflix-tc/netflix-tc-agreement';\r\n\r\nconst FocusableErrorMessage = withActuation(ErrorMessages, { Actuators: [FocusableActuator] });\r\n\r\nconst entityIsAdGroup = entityIs(ERROR_ENTITY.AdGroup);\r\n\r\nconst adGroupUrlOptionsProperties = notComp(andComp(\r\n entityIsAdGroup,\r\n anyComp(\r\n propertyIs('TrackingUrlTemplate'),\r\n propertyIs('UrlCustomParameters'),\r\n propertyIs('FinalUrlSuffix')\r\n )\r\n));\r\n\r\nexport const adGroupNameProp = andComp(entityIsAdGroup, propertyIs('Name'));\r\nexport const adGroupBidProp = andComp(entityIsAdGroup, anyComp(propertyIs('Bid'), propertyIs('BidAmount')));\r\nfunction StepAdGroupSettings(props) {\r\n const {\r\n stepService,\r\n } = props;\r\n\r\n const [optimizedTargetingEnabled, setOptimizedTargetingEnabled] = useState(false);\r\n\r\n const [stepState, stepApi] = useStepAdGroupSettingsState(stepService);\r\n\r\n const [adScheduleView, setAdScheduleView] = useState(null);\r\n const setAdScheduleViewCallback = useCallback((view) => {\r\n setAdScheduleView(view);\r\n }, []);\r\n\r\n const {\r\n i18n,\r\n legacyI18n,\r\n hideStepHeader,\r\n serverContext,\r\n bundleCountries,\r\n locationTargets,\r\n bundleLocationCriterions,\r\n adSchedules,\r\n campaignTimeZone,\r\n genreTargets,\r\n ageRanges,\r\n genderTypes,\r\n deviceTypes,\r\n deviceRestrictions,\r\n deviceRestricted,\r\n companyNameTargets,\r\n negativeCompanyNameTargets,\r\n jobTargets,\r\n negativeJobTargets,\r\n industry,\r\n negativeIndustry,\r\n locationRestricted,\r\n dealLocationList,\r\n genreRestricted,\r\n ageRestricted,\r\n genderRestricted,\r\n audienceRestricted,\r\n campaignBiddingStrategy,\r\n campaignSubtype,\r\n scope,\r\n adGroup,\r\n adGroupErrors,\r\n systemErrors,\r\n navigationConfirmationPrompt,\r\n reachEstimationTargets,\r\n serverErrors,\r\n dealDetails,\r\n areBeaconsActive,\r\n showAllValidationErrors,\r\n campaignSettings,\r\n customSegments,\r\n placements,\r\n exclusions,\r\n initialAdGroup,\r\n } = stepState;\r\n const { onAdGroupValidation } = stepApi;\r\n\r\n const {\r\n DynamicPermissions: {\r\n XandrVideoCampaignsAudienceTargets,\r\n XandrNegativeTarget,\r\n XandrDeviceTarget,\r\n GenreTargets,\r\n ShowNetflixTCAccepted,\r\n AgeGenderDisclaimer,\r\n EnableMSANDisplayCampaigns,\r\n EnableMSANVideoCampaigns,\r\n EnableKeywordCustomSegments,\r\n ContentTargeting,\r\n ContentTargetingMSNSubcategories,\r\n CampaignLifetimeBudget,\r\n },\r\n Permissions: {\r\n IsDealFilterEnabled,\r\n },\r\n CurrentCustomer: {\r\n Id: cid,\r\n },\r\n CurrentAccount: {\r\n Id: aid,\r\n },\r\n NetflixEnabledCountryCodes = 'GB',\r\n } = serverContext;\r\n\r\n const shouldServeOnMSAN = campaignShouldServeOnMSAN(campaignSettings);\r\n const isEnableMSANDisplayCampaignsEnabled = EnableMSANDisplayCampaigns && isXandrDisplayAdsCampaign(campaignSubtype) && shouldServeOnMSAN;\r\n const isEnableMSANVideoCampaignsEnabled = EnableMSANVideoCampaigns && isXandrVideoAdsCampaign(campaignSubtype) && shouldServeOnMSAN;\r\n\r\n const isMSANEnabled = isEnableMSANDisplayCampaignsEnabled || isEnableMSANVideoCampaignsEnabled;\r\n const isXandrServingCampaign = isXandrServing(campaignSubtype, campaignSettings);\r\n\r\n const basicOptions = compact([\r\n 'ad-group',\r\n 'bid',\r\n 'locations',\r\n 'age-range',\r\n 'gender',\r\n 'start-end-date',\r\n isMSANEnabled && 'predictive-targeting',\r\n isMSANEnabled && 'web-exclusions',\r\n !isMSANEnabled && 'audience',\r\n !isMSANEnabled && 'device',\r\n !isMSANEnabled && 'frequency-capping',\r\n !isMSANEnabled && 'ad-schedule',\r\n !isMSANEnabled && 'genre-targets',\r\n !isMSANEnabled && 'netflix-tc',\r\n ]);\r\n\r\n const [\r\n allAdGroupSettingsSections,\r\n adGroupSettingsExpandedSections,\r\n setAdGroupSettingsExpandedSections,\r\n flipAdGroupSettingsExpandAllState,\r\n ] = useCollapseState(\r\n basicOptions /* all sections */,\r\n dealDetails ? ['ad-group', 'bid'] : ['ad-group', 'bid', 'locations'] /* initially expanded sections */\r\n );\r\n\r\n const [\r\n allAdGroupSettingsTargetingSections,\r\n adGroupSettingsTargetingExpandedSections,\r\n setAdGroupSettingsTargetingExpandedSections,\r\n ] = useCollapseState(\r\n compact([\r\n 'audience',\r\n 'device',\r\n 'company-target',\r\n 'job-target',\r\n 'industry-target',\r\n 'frequency-capping',\r\n 'ad-schedule',\r\n 'genre-targets',\r\n 'netflix-tc',\r\n 'predictive-targeting-control',\r\n 'start-end-date',\r\n EnableKeywordCustomSegments && 'custom-segments',\r\n ContentTargeting && 'content-targeting-placements',\r\n ]) /* all sections */,\r\n [] /* initially expanded sections */\r\n );\r\n\r\n const classes = useDefaultStyles(getAdGroupStepStyles);\r\n const isDealTypeRestricted = dealDetails && _.isEqual('Restricted', dealDetails.Type);\r\n const shouldUsePredefinedFrequencyLimit = isDealTypeRestricted;\r\n const shouldHideDeviceListForDeal = isDealTypeRestricted;\r\n\r\n let bidType = (campaignBiddingStrategy && campaignBiddingStrategy.Type === 'ManualCpm') ? 'CpmBid' : 'CpvBid';\r\n if (campaignBiddingStrategy.Type === 'EnhancedCpc') {\r\n bidType = 'SearchBid';\r\n }\r\n\r\n let bidRange = serverContext.KeywordBidRange;\r\n\r\n if (isXandrServing(campaignSubtype, campaignSettings) && isXandrVideoAdsCampaign(campaignSubtype)) {\r\n bidRange = bidType === 'CpmBid' ? serverContext.VideoViewsCPMBidRange : serverContext.VideoViewsCPVBidRange;\r\n }\r\n\r\n if (isXandrDisplayAdsCampaign(campaignSubtype)) {\r\n bidRange = serverContext.KeywordCPMBidRange;\r\n }\r\n\r\n const shouldShowDealLocationTarget = IsDealFilterEnabled && dealDetails && !locationRestricted;\r\n const isDealGenreRestricted = GenreTargets && IsDealFilterEnabled && dealDetails && dealDetails.Genre;\r\n const genreOptions = useMemo(() => _.sortBy(isDealGenreRestricted ? getDealGenreOptions(i18n) : getGenreOptions(i18n), 'name'), [i18n, isDealGenreRestricted]);\r\n\r\n const isCTVSupported = !isXandrDisplayAdsCampaign(campaignSubtype) && bidType === 'CpvBid';\r\n const isXandrVideoCampaignsAudienceTargetsEnabled = XandrVideoCampaignsAudienceTargets;\r\n\r\n const shouldShowDeviceTarget = (!dealDetails && bidType !== 'CpvBid' && !isXandrDisplayAdsCampaign(campaignSubtype) && XandrDeviceTarget) || !isXandrServingCampaign;\r\n\r\n let dealMinimumBid = 0;\r\n if (dealDetails) {\r\n const exchangeRateMapping = getAccountExchangeRateFromLocalStorage(serverContext);\r\n dealMinimumBid = getConvertedCurrencyDealMinimumBid(dealDetails.MinimumBid, dealDetails.Currency, serverContext.CurrentAccount.CurrencyCode, exchangeRateMapping.val);\r\n }\r\n\r\n const bidValidationProps = {\r\n field: bidType,\r\n schema: {\r\n properties: {\r\n [bidType]: {\r\n type: 'number',\r\n minimum: dealDetails ? Math.max(dealMinimumBid, bidRange.FloorValue) : bidRange.FloorValue,\r\n maximum: dealDetails ? null : bidRange.CeilingValue,\r\n required: true,\r\n },\r\n },\r\n },\r\n };\r\n\r\n const reachEstimationToNarrowErrorMessage = useMemo(() => {\r\n if (adGroup.data.reachEstimation === tooNarrowFlag) {\r\n return [i18n.getString(tooNarrowErrorMessage)];\r\n }\r\n return null;\r\n }, [adGroup.data.reachEstimation, i18n]);\r\n\r\n const basicSettingsExpand = useMemo(\r\n () => collapseExpander({ setActiveKeys: setAdGroupSettingsExpandedSections }),\r\n [setAdGroupSettingsExpandedSections]\r\n );\r\n\r\n const shouldHideAudiences = !isXandrVideoCampaignsAudienceTargetsEnabled && isCTVSupported;\r\n\r\n const getAdScheduleDetailsCombined = useMemo(() => {\r\n const adScheduleDetails = getAdScheduleDetails(i18n, adScheduleView && adScheduleView.current, true);\r\n\r\n return ` ${adScheduleDetails}`;\r\n }, [adScheduleView, i18n]);\r\n\r\n const NetflixEnabledCountryCodesArr = useMemo(() => NetflixEnabledCountryCodes.split(','), [NetflixEnabledCountryCodes]);\r\n const BundleCountriesCodesArr = useMemo(() => (bundleLocationCriterions && bundleLocationCriterions.map(c => c && c.Criterion && c.Criterion.LocationCriterion && c.Criterion.LocationCriterion.CountryCode)) || [], [bundleLocationCriterions]);\r\n\r\n const webExclusionsError = serverErrors && serverErrors.filter(err => err.property === 'webExclusions');\r\n\r\n const shouldShowNetflixTC = useMemo(() =>\r\n ShowNetflixTCAccepted &&\r\n isCTVSupported &&\r\n locationTargets &&\r\n (\r\n locationTargets.currentLevelSettings.targetOption === 'everywhere' ||\r\n (\r\n locationTargets.currentLevelSettings.targetOption === 'bundle'\r\n && BundleCountriesCodesArr.some(bundleCountry => NetflixEnabledCountryCodesArr.indexOf(bundleCountry) >= 0)\r\n ) ||\r\n (\r\n locationTargets.currentLevelSettings.targetOption === 'specific' &&\r\n _.some(\r\n locationTargets.currentLevelSettings.currentLocations,\r\n location => location.SelectionStatus === 'Included'\r\n && location.Criterion.LocationCriterion\r\n && NetflixEnabledCountryCodesArr.indexOf(location.Criterion.LocationCriterion.CountryCode) >= 0\r\n )\r\n )\r\n ), [ShowNetflixTCAccepted, isCTVSupported, locationTargets, NetflixEnabledCountryCodesArr, BundleCountriesCodesArr]);\r\n\r\n const isFCapEnabled = useMemo(() => (bidType === 'CpmBid'), [bidType]);\r\n\r\n const shouldSelectAllDeviceByDefault = useMemo(() => {\r\n if (campaignSubtype === CampaignSubTypes.AudienceStatic || !isXandrServingCampaign) {\r\n if (adGroup.data && _.isArray(adGroup.data.initialDeviceTypes) && adGroup.data.initialDeviceTypes.length === 0) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }, [campaignSubtype, adGroup, isXandrServingCampaign]);\r\n\r\n const deviceTargetingPanel = useMemo(() => (\r\n }\r\n >\r\n \r\n \r\n ), [deviceTypes, deviceRestrictions, i18n, isCTVSupported, shouldSelectAllDeviceByDefault]);\r\n\r\n const audienceTargetingPanel = useMemo(() => (\r\n }\r\n >\r\n new Date())}\r\n />\r\n \r\n ), [adGroup.data.audiences, i18n, campaignSubtype, campaignSettings, campaignBiddingStrategy, XandrNegativeTarget, initialAdGroup, adGroup]);\r\n\r\n const genreTargetingPanel = useMemo(() => (\r\n }\r\n >\r\n \r\n \r\n ), [genreTargets, genreOptions, i18n]);\r\n\r\n const adScheduleTargetingPanel = useMemo(() => (\r\n }\r\n >\r\n {\r\n !dealDetails &&\r\n \r\n }\r\n \r\n ), [adGroup, adSchedules, dealDetails, setAdScheduleViewCallback, getAdScheduleDetailsCombined]);\r\n\r\n const getBasicSettingsSection = () => (\r\n
\r\n \r\n \r\n \r\n {adGroupSettingsExpandedSections.length ? i18n.getString(_TL_('Collapse all')) : i18n.getString(_TL_('Expand all'))}\r\n \r\n {reachEstimationToNarrowErrorMessage &&\r\n
\r\n \r\n
\r\n }\r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n \r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: basicSettingsExpand,\r\n expandKey: 'budget',\r\n }}\r\n >\r\n \r\n \r\n {\r\n shouldUsePredefinedFrequencyLimit ?\r\n getNetflixFrequencyCapping(i18n)\r\n :\r\n (isFCapEnabled || !(isEnableMSANDisplayCampaignsEnabled || isEnableMSANVideoCampaignsEnabled)) &&\r\n \r\n }\r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n new Date()),\r\n },\r\n }}\r\n />\r\n \r\n {\r\n !(dealLocationList && dealLocationList.length === 0) && (!shouldHideDeviceListForDeal || shouldShowDealLocationTarget) &&\r\n }\r\n >\r\n 0)}\r\n scope={scope}\r\n bidStrategyType=\"placeholder\"\r\n strings={{\r\n description: i18n.getString(_TL_('For example, a country/region, state/province, or ZIP/postal code.')),\r\n }}\r\n />\r\n \r\n }\r\n {\r\n shouldShowNetflixTC &&\r\n }\r\n >\r\n \r\n \r\n }\r\n {\r\n !ageRestricted && !shouldHideAudiences &&\r\n }\r\n >\r\n \r\n \r\n }\r\n {\r\n !genderRestricted && !shouldHideAudiences &&\r\n }\r\n >\r\n \r\n \r\n }\r\n {\r\n !shouldHideAudiences && (isEnableMSANDisplayCampaignsEnabled || isEnableMSANVideoCampaignsEnabled) &&\r\n : }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n
\r\n \r\n }\r\n {\r\n (((dealDetails && !(deviceRestricted && deviceTypes.length === 0) && !shouldHideDeviceListForDeal)) || shouldShowDeviceTarget) &&\r\n deviceTargetingPanel\r\n }\r\n {\r\n !audienceRestricted && !shouldHideAudiences &&\r\n (!isEnableMSANDisplayCampaignsEnabled || !isEnableMSANVideoCampaignsEnabled) &&\r\n audienceTargetingPanel\r\n }\r\n {\r\n ((!genreRestricted && isCTVSupported) || (isDealGenreRestricted)) &&\r\n (!isEnableMSANDisplayCampaignsEnabled || !isEnableMSANVideoCampaignsEnabled) &&\r\n genreTargetingPanel\r\n }\r\n {\r\n (!isEnableMSANDisplayCampaignsEnabled || !isEnableMSANVideoCampaignsEnabled) &&\r\n adScheduleTargetingPanel\r\n }\r\n {\r\n (isEnableMSANDisplayCampaignsEnabled || isEnableMSANVideoCampaignsEnabled) &&\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: basicSettingsExpand,\r\n expandKey: 'web-exclusions',\r\n }}\r\n >\r\n \r\n {i18n.getString(_TL_('Which websites should not show your ads and which IP addresses should be blocked from seeing your ads?'))}\r\n \r\n \r\n \r\n }\r\n \r\n {\r\n (isEnableMSANDisplayCampaignsEnabled || isEnableMSANVideoCampaignsEnabled) &&\r\n \r\n (\r\n <>\r\n \r\n \r\n {i18n.getString(_TL_('Targeting preferences (optional)'))}\r\n \r\n \r\n \r\n \r\n
\r\n \r\n {\r\n (((dealDetails && !(deviceRestricted && deviceTypes.length === 0) && !shouldHideDeviceListForDeal)) || shouldShowDeviceTarget) &&\r\n deviceTargetingPanel\r\n }\r\n {\r\n !audienceRestricted && !shouldHideAudiences &&\r\n audienceTargetingPanel\r\n }\r\n {\r\n !shouldHideAudiences &&\r\n }\r\n >\r\n \r\n \r\n }\r\n {\r\n !shouldHideAudiences &&\r\n }\r\n >\r\n \r\n \r\n }\r\n {\r\n !shouldHideAudiences &&\r\n }\r\n >\r\n \r\n \r\n }\r\n {\r\n ((!genreRestricted && isCTVSupported) ||\r\n (isDealGenreRestricted))\r\n &&\r\n genreTargetingPanel\r\n }\r\n {adScheduleTargetingPanel}\r\n {EnableKeywordCustomSegments &&\r\n }\r\n noOverflowHidden\r\n >\r\n \r\n \r\n }\r\n {ContentTargeting &&\r\n }\r\n >\r\n \r\n \r\n }\r\n {\r\n !shouldHideAudiences &&\r\n )\r\n : \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n \r\n {!optimizedTargetingEnabled ?\r\n i18n.getString(_TL_('Predictive targeting is automatically enabled. You can disable it by setting a targeting preference.'))\r\n : i18n.getString(_TL_('Turning off predictive targeting significantly limits our ability to help you reach the best audience for your campaign.'))\r\n }\r\n\r\n \r\n \r\n }\r\n \r\n
\r\n
\r\n
\r\n \r\n )}\r\n />\r\n
\r\n }\r\n \r\n
\r\n {\r\n dealDetails &&\r\n \r\n }\r\n {\r\n !dealDetails &&\r\n \r\n }\r\n
\r\n \r\n
);\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n {!hideStepHeader &&\r\n <>\r\n

{i18n.getString(_TL_('Ad group'))}

\r\n {i18n.getString(_TL_(''))}\r\n \r\n }\r\n
\r\n {/* // TODO: add error handling for \"CampaignServiceDuplicateAdGroupCriterion\" */}\r\n \r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n \r\n {getBasicSettingsSection()}\r\n \r\n {navigationConfirmationPrompt}\r\n {AgeGenderDisclaimer && not use individuals’ demographics—such as age, gender, location, etc.—for the purpose of personalizing advertising, segmenting, or profiling customers.'))}\r\n level=\"Info\"\r\n icon={(
)}\r\n dismissible={false}\r\n />}\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nStepAdGroupSettings.propTypes = {\r\n stepService: PropTypes.shape({}).isRequired,\r\n};\r\n\r\nconst withLoadingShell = withStepLoadingShell(StepAdGroupSettings);\r\n\r\nexport { withLoadingShell as StepAdGroupSettings };\r\n","const globalLegacyI18n = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/campaign-creation-advanced');\r\n\r\nconst parseLoadDate = (i18n, dateString) => globalLegacyI18n.parseDate(dateString.substring(0, 10), { raw: 'yyyy-MM-dd' });\r\n\r\nconst parseDateFromAPIFormat = (i18n, date) => {\r\n if (date == null) {\r\n return null;\r\n }\r\n\r\n if (typeof date === 'string') {\r\n return globalLegacyI18n.parseDate(date.substring(0, 10), { raw: 'M/d/yyyy' });\r\n }\r\n\r\n return date;\r\n};\r\n\r\n\r\n// keeping unused i18n in case we find bugs with replacement to globalLegacyI18n and change need to be reverted\r\nexport const formatDateToAPIFormat = (i18n, date) => {\r\n if (date == null) {\r\n return '';\r\n }\r\n\r\n if (typeof date === 'string') {\r\n return date;\r\n }\r\n\r\n return globalLegacyI18n.formatDate(date, {\r\n raw: 'M/d/yyyy',\r\n });\r\n};\r\n\r\nexport const modelToViewModelForDateSetting = ({ model, i18n }) => ({\r\n StartDate: parseLoadDate(i18n, model.StartDate),\r\n EndDate: model.EndDate ? parseLoadDate(i18n, model.EndDate) : undefined,\r\n});\r\n\r\nexport const bulkModelToViewModelForDateSetting = ({ model, i18n }) => ({\r\n StartDate: parseDateFromAPIFormat(i18n, model.StartDate),\r\n EndDate: model.EndDate ? parseDateFromAPIFormat(i18n, model.EndDate) : undefined,\r\n});\r\n\r\nexport const viewModelToBulkModelForDateSetting = ({ viewModel, i18n }) => ({\r\n StartDate: formatDateToAPIFormat(i18n, viewModel.data.StartDate),\r\n EndDate: viewModel.data.EndDate ? formatDateToAPIFormat(i18n, viewModel.data.EndDate) : '1/1/3000',\r\n});\r\n","import { each, pick, extend, defaults, omit, isString, isEmpty, has, get, find, isArray, without } from 'underscore';\r\nimport { edmCampaign } from '@bingads-webui/edm-campaign';\r\nimport {\r\n modelToViewModelForLocationTargets,\r\n modelToViewModelForDayTimeTargets,\r\n bulkModelToViewModelForLocationTargets,\r\n bulkModelToViewModelForDayTimeTargets,\r\n modelToViewModelForAudienceCriterions,\r\n modelToViewModelForPlacements,\r\n} from './ad-group-criterions';\r\nimport { modelToViewModelForTargetCriterions } from './criterions';\r\n\r\nimport { AdGroupNegativeReferenceId } from '../common/constants';\r\nimport { modelToViewModelForDateSetting, viewModelToBulkModelForDateSetting, bulkModelToViewModelForDateSetting } from '../common/date-settings';\r\n\r\nconst whitelistedSchemaPropertyKeysForModel = [\r\n 'Id', 'Name', 'Status', 'BidStrategyName', 'Campaign', 'CpmBid', 'CpvBid', 'SearchBid',\r\n 'AdScheduleUseSearcherTimeZone', 'StartDate', 'EndDate', 'FrequencyCapSettings',\r\n 'TrackingUrlTemplate', 'FinalUrlSuffix', 'UrlCustomParameters',\r\n];\r\n\r\nconst readonlyPropertyKeysForModel = [\r\n 'StartDate',\r\n];\r\n\r\nexport const modelToViewModelForAdGroup = ({\r\n adGroupModel,\r\n campaignModel,\r\n locationCriterionsModel,\r\n campaignLocationCriterionsModel,\r\n campaignDeviceCriterions,\r\n dayTimeCriterionsModel,\r\n bundleCountries,\r\n targetCriterionsModel,\r\n audienceCriterionsModel,\r\n placementCriterionsModel,\r\n i18n,\r\n isAudienceAds = false,\r\n isAudienceAdGroupEdit = false,\r\n isDisplayAds = false,\r\n isVideoAds = false,\r\n defaultAdGroupData = null,\r\n defaultTargeting = null,\r\n isXandrServing = false,\r\n separateIMA = false,\r\n campaignExclusions,\r\n adgroupExclusions,\r\n ads,\r\n}) => {\r\n let data = pick(adGroupModel, whitelistedSchemaPropertyKeysForModel);\r\n\r\n if (isAudienceAds) {\r\n const AdRotationSettings = get(adGroupModel, 'AdRotation', {}) || {};\r\n data.AdRotation = AdRotationSettings.RotationType;\r\n }\r\n\r\n if (campaignExclusions || adgroupExclusions) {\r\n data.exclusions = {\r\n campaignExclusions,\r\n adgroupExclusions,\r\n };\r\n }\r\n\r\n if (isAudienceAds ||\r\n (!isXandrServing && isDisplayAds) ||\r\n (!isXandrServing && isVideoAds)) {\r\n if (adGroupModel.UseOptimizedTargeting != null) {\r\n data.UseOptimizedTargeting = adGroupModel.UseOptimizedTargeting;\r\n }\r\n\r\n /**\r\n * NOTE: this is where the default values from getDefaultAdGroup() - are gettting over-written by the value from the adGroupModel odata response.\r\n * MT odata response for AdGroup can have values missing or different from getDefaultAdGroup()\r\n * example: responds with a default value (0.05) for SearchBid, even when it was NOT set by the Bulk Upsert call.\r\n */\r\n\r\n data.CampaignSubType = campaignModel && campaignModel.CampaignSubType;\r\n data.CampaignBidStrategyName = campaignModel && campaignModel.BiddingScheme.Type;\r\n\r\n const adGroupSettings = get(adGroupModel, 'Settings', []);\r\n\r\n const BoostPlacementSetting = find(adGroupSettings, setting => setting['@odata.type'] === '#Model.BoostPlacementSetting') || {};\r\n\r\n data.BoostAdunitIds = BoostPlacementSetting.AdUnitIds;\r\n data.BoostPublisherIds = BoostPlacementSetting.PublisherIds;\r\n data.BoostAccountIds = BoostPlacementSetting.AccountIds;\r\n data.BoostTriggerIds = BoostPlacementSetting.TriggerIds;\r\n\r\n const adGroupTargetSettings = get(adGroupModel, 'TargetSetting', null);\r\n if (adGroupTargetSettings) {\r\n each(adGroupTargetSettings.Details, (targetSetting) => {\r\n data[`isTargetSet${targetSetting.CriterionType}`] = !targetSetting.TargetAll;\r\n });\r\n }\r\n }\r\n\r\n if (placementCriterionsModel) {\r\n data = extend(data, modelToViewModelForPlacements({ model: placementCriterionsModel }));\r\n }\r\n\r\n if (locationCriterionsModel) {\r\n data = extend(data, modelToViewModelForLocationTargets({\r\n model: locationCriterionsModel,\r\n campaignLocationModel: campaignLocationCriterionsModel,\r\n bundleCountries,\r\n adGroupId: adGroupModel.Id,\r\n campaignId: campaignModel && campaignModel.Id,\r\n bidMode: isAudienceAdGroupEdit,\r\n }));\r\n }\r\n\r\n if (dayTimeCriterionsModel) {\r\n data = extend(data, modelToViewModelForDayTimeTargets({\r\n model: dayTimeCriterionsModel,\r\n }));\r\n }\r\n\r\n if (adGroupModel.StartDate) {\r\n data = extend(data, modelToViewModelForDateSetting({\r\n model: adGroupModel,\r\n i18n,\r\n }));\r\n }\r\n\r\n if (targetCriterionsModel) {\r\n data = extend(data, modelToViewModelForTargetCriterions({\r\n model: targetCriterionsModel,\r\n campaignDeviceCriterions,\r\n }));\r\n }\r\n\r\n if ((targetCriterionsModel === null ||\r\n (targetCriterionsModel && isArray(targetCriterionsModel) && targetCriterionsModel.length === 0)) &&\r\n defaultTargeting) {\r\n data = extend(data, defaultTargeting);\r\n }\r\n\r\n if (audienceCriterionsModel) {\r\n data = extend(data, modelToViewModelForAudienceCriterions({\r\n model: audienceCriterionsModel,\r\n separateIMA,\r\n }));\r\n }\r\n\r\n if (defaultAdGroupData) {\r\n defaults(data, defaultAdGroupData);\r\n }\r\n\r\n data.ads = get(ads, 'ads', {});\r\n\r\n const adGroupViewModel = {\r\n data,\r\n isValid: true,\r\n isDirty: false,\r\n };\r\n return adGroupViewModel;\r\n};\r\n\r\nexport const bulkModelToViewModelForAdGroup = ({\r\n adGroupModel,\r\n bundleCountries,\r\n originalAdGroupViewModel,\r\n i18n,\r\n}) => {\r\n let data = pick(adGroupModel, whitelistedSchemaPropertyKeysForModel);\r\n if (data.Id && isString(data.Id)) {\r\n // eslint-disable-next-line no-param-reassign\r\n data.Id = parseInt(data.Id, 10);\r\n }\r\n data = extend(data, bulkModelToViewModelForLocationTargets({\r\n locationTargetsModel: adGroupModel.AdGroupCriterions,\r\n bundleCountries,\r\n }));\r\n data = extend(data, bulkModelToViewModelForDayTimeTargets({\r\n criterions: adGroupModel.AdGroupCriterions,\r\n }));\r\n\r\n data = extend(data, bulkModelToViewModelForDateSetting({ model: adGroupModel, i18n }));\r\n\r\n if (isEmpty(data.FrequencyCapSettings)) {\r\n data = extend(data, { FrequencyCapSettings: [{}] });\r\n }\r\n\r\n if (originalAdGroupViewModel.data.customSegments) {\r\n data = extend(data, { customSegments: originalAdGroupViewModel.data.customSegments });\r\n data = extend(data, { initialCustomSegments: originalAdGroupViewModel.data.initialCustomSegments });\r\n }\r\n\r\n if (originalAdGroupViewModel.data.deal) {\r\n data = extend(data, {\r\n deal: originalAdGroupViewModel.data.deal,\r\n });\r\n }\r\n\r\n if (has(adGroupModel, 'AdRotation')) {\r\n data = extend(data, { AdRotation: adGroupModel.AdRotation });\r\n }\r\n\r\n const adGroupViewModel = {\r\n data,\r\n isValid: true,\r\n isDirty: false,\r\n };\r\n return adGroupViewModel;\r\n};\r\n\r\nexport const viewModelToModelForAdGroup = ({ adGroupViewModel, i18n, isDisplayPlus = false }) => {\r\n let model = pick(adGroupViewModel.data, whitelistedSchemaPropertyKeysForModel);\r\n\r\n model = extend(model, viewModelToBulkModelForDateSetting({ i18n, viewModel: adGroupViewModel }));\r\n\r\n if (!adGroupViewModel.data.Id || adGroupViewModel.data.Id === AdGroupNegativeReferenceId) {\r\n model.Id = AdGroupNegativeReferenceId;\r\n\r\n if (isEmpty(model.FrequencyCapSettings) ||\r\n isEmpty(model.FrequencyCapSettings[0]) ||\r\n !model.FrequencyCapSettings[0].CapValue) {\r\n model = omit(model, 'FrequencyCapSettings');\r\n }\r\n } else if (isDisplayPlus) {\r\n const filteredReadonlyKeys = without(readonlyPropertyKeysForModel, 'StartDate');\r\n model = omit(model, filteredReadonlyKeys);\r\n } else {\r\n model = omit(model, readonlyPropertyKeysForModel);\r\n }\r\n\r\n if (has(adGroupViewModel.data, 'UseOptimizedTargeting') && adGroupViewModel.data.UseOptimizedTargeting !== null) {\r\n model.UseOptimizedTargeting = adGroupViewModel.data.UseOptimizedTargeting;\r\n }\r\n\r\n if (has(adGroupViewModel.data, 'PricingModel')) {\r\n model.PricingModel = adGroupViewModel.data.PricingModel;\r\n }\r\n\r\n if (has(adGroupViewModel.data, 'BoostAdunitIds')) {\r\n const adUnitIds = adGroupViewModel.data.BoostAdunitIds;\r\n model.BoostAdunitIds = isArray(adUnitIds) ? adUnitIds.join(';') : adUnitIds;\r\n model.BoostPublisherIds = adGroupViewModel.data.BoostPublisherIds;\r\n model.BoostAccountIds = adGroupViewModel.data.BoostAccountIds;\r\n model.BoostTriggerIds = adGroupViewModel.data.BoostTriggerIds;\r\n }\r\n\r\n if (has(adGroupViewModel.data, 'TargetSetting') && adGroupViewModel.data.TargetSetting !== null) {\r\n model.TargetSetting = adGroupViewModel.data.TargetSetting;\r\n }\r\n\r\n if (has(adGroupViewModel.data, 'AdRotation')) {\r\n model.AdRotation = adGroupViewModel.data.AdRotation;\r\n }\r\n\r\n return model;\r\n};\r\n\r\n\r\nconst readAdGroup = (cid, aid, campaignId, adGroupId) =>\r\n edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Campaigns.$withKey(campaignId)\r\n .AdGroups.$withKey(adGroupId)\r\n .get()\r\n .toPromise();\r\n\r\nexport const loadAdGroup = (cid, aid, campaignId, adGroupId) =>\r\n readAdGroup(cid, aid, campaignId, adGroupId);\r\n","import { pick } from 'underscore';\r\nimport { AdGroup } from '@bingads-webui/campaign-odata-schemas';\r\nimport { edmCampaign } from '@bingads-webui/edm-campaign';\r\nimport { isMSANServingDNV, ScopeLevel } from '@bingads-webui-campaign-react/constants';\r\nimport exclusionRepository from '@bingads-webui-campaign-legacy/advanced-settings/util/exclusion-repository';\r\nimport { modelConstraints, ERROR_ENTITY, isBulkWrappedResponse, getBulkUploadErrorType, modelToViewModelForBulkErrors, removeReferencedEntityInvalidIdErrors } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport { bulkModelToViewModelForAdGroup, viewModelToModelForAdGroup } from './ad-group';\r\nimport { viewModelToBulkModelForLocationTargets, viewModelToBulkModelForAdSchedules, viewModelToBulkModelForTargeting, viewModelToBulkModelForAudiences, viewModelToBulkModelForPlacements } from './ad-group-criterions';\r\n\r\nconst adGroupEDM = edmCampaign.types.resolve('Model.AdGroup');\r\nconst adGroupResource = new adGroupEDM.ResourceIdentifier();\r\n\r\nconst createOrUpdateAdGroup = (data) => {\r\n const createOrUpdateCall = data && data.Id ?\r\n adGroupResource.bulkUpdate.bind(adGroupResource) :\r\n adGroupResource.bulkCreate.bind(adGroupResource);\r\n return createOrUpdateCall(data);\r\n};\r\n\r\nconst GENERIC_ERROR_MESSAGE_KEY = _TL_(\"We've encountered an error and can't continue. Please contact support for further assistance.\");\r\n\r\nconst bulkUpsertAdGroupSettingsEntityErrorMap = {\r\n [getBulkUploadErrorType(AdGroup)]: ERROR_ENTITY.AdGroup,\r\n};\r\n\r\nconst parallelSave = async (modelToSave, adGroupViewModel, campaign) => {\r\n const savePromise = createOrUpdateAdGroup(modelToSave);\r\n\r\n let saveExclusionsPromise = Promise.resolve();\r\n if (adGroupViewModel && adGroupViewModel.data && adGroupViewModel.data.exclusions) {\r\n const saveExclusionsData = {\r\n CampaignId: campaign.Id,\r\n AdGroupId: adGroupViewModel.data.Id,\r\n AdvancedSettings: {\r\n ExcludedSites: adGroupViewModel.data.exclusions.adgroupExclusions.ExcludedSites,\r\n },\r\n };\r\n saveExclusionsPromise = exclusionRepository.saveExtensions(saveExclusionsData, ScopeLevel.AdGroup);\r\n }\r\n\r\n return {\r\n result: await savePromise,\r\n resultExclusion: await saveExclusionsPromise,\r\n };\r\n};\r\n\r\nexport const getErrorsPlaceholders = () => ({\r\n systemErrors: [],\r\n serverErrors: [],\r\n});\r\n\r\nexport const saveAdGroup = async ({\r\n adGroup: adGroupViewModel,\r\n bundleCountries,\r\n bundleLocationCriterions,\r\n campaign,\r\n customTargetingBulkModel = null,\r\n isDisplayPlus = false,\r\n flow = '',\r\n}, {\r\n scenario, i18n, activityLogger, serverContext,\r\n}) => {\r\n // NOTE: adGroupViewModel.data.CampaignBidStrategyName is not set when this is called first time from create-ad step.\r\n // ensure that you have no logic relying on this or any other fields being set from campaign model onto adgroup model.\r\n\r\n const adGroupModel = viewModelToModelForAdGroup({ adGroupViewModel, i18n, isDisplayPlus });\r\n const locationTargetsModel = viewModelToBulkModelForLocationTargets({\r\n bundleLocationCriterions,\r\n adGroupViewModel,\r\n campaignViewModel: campaign,\r\n });\r\n const adSchedulesModel = viewModelToBulkModelForAdSchedules({ adGroupViewModel, campaignViewModel: campaign });\r\n let isMSANServingDNVCampaign = false;\r\n if (flow === 'VIDEO_CAMPAIGNS' && campaign.CampaignSubType === 4 && serverContext.DynamicPermissions.EnableMSANVideoCampaigns) {\r\n isMSANServingDNVCampaign = true;\r\n } else if (flow === 'DISPLAY_CAMPAIGNS' && campaign.CampaignSubType === 5 && serverContext.DynamicPermissions.EnableMSANDisplayCampaigns) {\r\n isMSANServingDNVCampaign = true;\r\n } else {\r\n isMSANServingDNVCampaign = isMSANServingDNV(campaign.CampaignSubType, campaign.CampaignSettings);\r\n }\r\n\r\n const targetingModel = customTargetingBulkModel ?\r\n customTargetingBulkModel({ adGroupViewModel, campaignViewModel: campaign }) :\r\n viewModelToBulkModelForTargeting({\r\n adGroupViewModel,\r\n campaignViewModel: campaign,\r\n isXandrDeviceTargetEnabled: serverContext.DynamicPermissions.XandrDeviceTarget,\r\n isBoostEnabled: serverContext.Permissions.IsAmplifyEnabled,\r\n isDeviceTargetingForDisplayEnabled: serverContext.DynamicPermissions.DeviceTargetingForDisplay,\r\n isMultiAdFormatEnabled: serverContext.DynamicPermissions.MultiAdFormat,\r\n isPremiumStreamingEnabled: serverContext.DynamicPermissions.PremiumStreaming,\r\n isXandrServing: !isMSANServingDNVCampaign,\r\n });\r\n const audienceCriterionsModel = viewModelToBulkModelForAudiences({ adGroupViewModel, campaignViewModel: campaign });\r\n\r\n const placementCriterionsModel = viewModelToBulkModelForPlacements({ adGroupViewModel, campaignViewModel: campaign });\r\n\r\n const modelToSave = {\r\n ...adGroupModel,\r\n AdGroupCriterions: [\r\n ...locationTargetsModel,\r\n ...adSchedulesModel,\r\n ...targetingModel,\r\n ...placementCriterionsModel,\r\n ],\r\n AdGroupAudienceCriterions: audienceCriterionsModel,\r\n Campaign: pick(campaign, 'Id'),\r\n };\r\n\r\n try {\r\n const saveResult = await parallelSave(modelToSave, adGroupViewModel, campaign);\r\n\r\n const data = {\r\n adGroup: bulkModelToViewModelForAdGroup({\r\n adGroupModel: saveResult.result,\r\n originalAdGroupViewModel: adGroupViewModel,\r\n bundleCountries,\r\n i18n,\r\n }),\r\n ...getErrorsPlaceholders(),\r\n };\r\n return data;\r\n } catch (bulkOrSystemError) {\r\n if (isBulkWrappedResponse(bulkOrSystemError)) {\r\n const { entity, errors } = bulkOrSystemError;\r\n const adGroup = entity ?\r\n bulkModelToViewModelForAdGroup({\r\n adGroupModel: entity,\r\n originalAdGroupViewModel: adGroupViewModel,\r\n bundleCountries,\r\n errors,\r\n i18n,\r\n }) :\r\n adGroupViewModel;\r\n\r\n if (adGroupViewModel.data.deal) {\r\n adGroup.data = await modelConstraints(adGroupViewModel.data.deal, adGroupViewModel.data, serverContext);\r\n }\r\n\r\n let filteredErrors = errors;\r\n if (adGroup.data.Id <= 0) {\r\n filteredErrors = removeReferencedEntityInvalidIdErrors(errors);\r\n }\r\n\r\n const serverErrors = modelToViewModelForBulkErrors(\r\n filteredErrors,\r\n bulkUpsertAdGroupSettingsEntityErrorMap,\r\n scenario,\r\n i18n,\r\n activityLogger\r\n );\r\n\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n return Promise.reject({\r\n adGroup,\r\n serverErrors,\r\n });\r\n }\r\n\r\n if (bulkOrSystemError && bulkOrSystemError.NegativeSitesResult) {\r\n const { NegativeSitesResult } = bulkOrSystemError;\r\n const serverErrors = [{\r\n property: 'webExclusions',\r\n NegativeSitesResult: NegativeSitesResult.EntityErrors,\r\n }];\r\n\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n return Promise.reject({\r\n adGroup: adGroupViewModel,\r\n serverErrors,\r\n });\r\n }\r\n\r\n // Activity\r\n // eslint-disable-next-line no-console\r\n console.warn(`AdGroup bulk upsert system error: ${bulkOrSystemError.stack || bulkOrSystemError.message || bulkOrSystemError}`);\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n\r\n return {\r\n adGroup: adGroupViewModel,\r\n systemErrors: [i18n.getString(GENERIC_ERROR_MESSAGE_KEY)],\r\n // TODO: We would want to return the criterions with Ids, but UI's bulk drops them\r\n };\r\n }\r\n};\r\n\r\nexport const saveJustAdGroup = async ({\r\n adGroup: adGroupViewModel,\r\n campaign,\r\n}, {\r\n i18n,\r\n}) => {\r\n const adGroupModel = viewModelToModelForAdGroup({ adGroupViewModel, i18n });\r\n\r\n const modelToSave = {\r\n ...adGroupModel,\r\n Campaign: pick(campaign, 'Id'),\r\n };\r\n\r\n try {\r\n const result = await createOrUpdateAdGroup(modelToSave);\r\n const data = {\r\n adGroup: bulkModelToViewModelForAdGroup({\r\n adGroupModel: result,\r\n originalAdGroupViewModel: adGroupViewModel,\r\n i18n,\r\n }),\r\n ...getErrorsPlaceholders(),\r\n };\r\n return data;\r\n } catch (bulkOrSystemError) {\r\n if (isBulkWrappedResponse(bulkOrSystemError)) {\r\n const { errors } = bulkOrSystemError;\r\n\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n return Promise.reject({\r\n errors,\r\n });\r\n }\r\n\r\n // Activity\r\n // eslint-disable-next-line no-console\r\n console.warn(`AdGroup bulk upsert system error: ${bulkOrSystemError.stack || bulkOrSystemError.message || bulkOrSystemError}`);\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n\r\n return {\r\n adGroup: adGroupViewModel,\r\n systemErrors: [i18n.getString(GENERIC_ERROR_MESSAGE_KEY)],\r\n // TODO: We would want to return the criterions with Ids, but UI's bulk drops them\r\n };\r\n }\r\n};\r\n","import _ from 'underscore';\r\nimport {\r\n shouldSelectBundleOption,\r\n parseLocationTargets,\r\n convertLocationStateToLocationSchemaCampaign,\r\n} from '@bingads-webui-campaign/hotel-common-targets';\r\nimport { locationTargetsOptionKeys } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport { CRITERION_LEVEL, bulkModelToViewModelForLocationTargetsBase } from './criterions';\r\nimport { getTargetCriterion } from './ad-group-criterions';\r\nimport { AddedDeviceBidAdjustment as DefaultDeviceBidAdjustment, RemovedDeviceBidAdjustment } from '../common/constants';\r\nimport { DeviceKeys } from '../steps/ad-group/target/device';\r\n\r\nexport const viewModelToBulkModelForDealTargets = model => ({\r\n CriterionType: 'DealCriterion',\r\n CampaignName: model.data.Name,\r\n Criterion: {\r\n Type: 'DealCriterion',\r\n DealCriterion: {\r\n DealId: _.get(model, ['data', 'deal', 'Id']),\r\n },\r\n },\r\n});\r\n\r\nexport const modelToViewModelForLocationTargets = ({\r\n model, bundleCountries, campaignId, overrideOriginalBidAdjustment = false,\r\n}) => {\r\n const {\r\n locations,\r\n intentId,\r\n intentOption,\r\n } = parseLocationTargets(model, 'campaign', campaignId);\r\n let targetOption = locations.length ? locationTargetsOptionKeys.specific : locationTargetsOptionKeys.everywhere;\r\n targetOption = shouldSelectBundleOption(bundleCountries, locations) ? locationTargetsOptionKeys.bundleOrDefaultMarket : targetOption;\r\n\r\n if (overrideOriginalBidAdjustment) {\r\n locations.forEach((location) => {\r\n // eslint-disable-next-line no-param-reassign\r\n location.Criterion.OriginalBidAdjustment = null;\r\n });\r\n }\r\n\r\n return {\r\n locationTargets: {\r\n currentLevelSettings: {\r\n initLocations: locations,\r\n currentLocations: locations,\r\n targetOption,\r\n intentId,\r\n ...intentOption,\r\n },\r\n bidMode: false,\r\n useParentLevel: false,\r\n },\r\n };\r\n};\r\n\r\nexport const viewModelToBulkModelForLocationTargets = ({ bundleLocationCriterions, campaignViewModel }) => {\r\n if (!campaignViewModel.data.locationTargets || campaignViewModel.data.locationRestricted) {\r\n return [];\r\n }\r\n const bulkUpsertModel = convertLocationStateToLocationSchemaCampaign(\r\n campaignViewModel.data.locationTargets,\r\n bundleLocationCriterions,\r\n {\r\n bidStrategy: { option: 'placeholder' },\r\n ...campaignViewModel.data,\r\n name: {\r\n value: campaignViewModel.data.Name,\r\n },\r\n }\r\n );\r\n return bulkUpsertModel;\r\n};\r\n\r\nexport const bulkModelToViewModelForLocationTargets = ({\r\n locationTargetsModel, bundleCountries,\r\n}) => bulkModelToViewModelForLocationTargetsBase({\r\n locationTargetsModel, bundleCountries, level: CRITERION_LEVEL.CAMPAIGN,\r\n});\r\n\r\nexport const viewModelToBulkModelForDeviceTargets = ({ campaignViewModel }) => {\r\n const deviceTargets = campaignViewModel.data.campaignLevelDeviceTargets || [];\r\n const initialDeviceTargets = campaignViewModel.data.initialCampaignLevelDeviceTargets || [];\r\n const campaignDeviceTypesWithBidAdjustment = campaignViewModel.data.campaignDeviceTypesWithBidAdjustment || [];\r\n const supportedDevices = [DeviceKeys.Computers, DeviceKeys.Tablets, DeviceKeys.Smartphones];\r\n\r\n const isBidAdjustmentSame = initialTarget => campaignDeviceTypesWithBidAdjustment.find(targetWithBid =>\r\n targetWithBid.Criterion.DeviceCriterion.DeviceName === initialTarget.target && targetWithBid.Criterion.BidAdjustment === initialTarget.bidAdjustment);\r\n const isTargetChanged = target => initialDeviceTargets.find(initialTarget => initialTarget.criterion === target && isBidAdjustmentSame(initialTarget)) === undefined;\r\n\r\n const addedDevices = deviceTargets.filter(isTargetChanged).map((target) => {\r\n const deviceTargetWithBid = campaignDeviceTypesWithBidAdjustment.find(deviceWithBid => deviceWithBid.Criterion.DeviceCriterion.DeviceName === target) || {};\r\n const initialDeviceTarget = initialDeviceTargets.find(initialTarget => initialTarget.criterion === target) || {};\r\n const { Id } = initialDeviceTarget || deviceTargetWithBid;\r\n const bid = _.get(deviceTargetWithBid, 'Criterion.BidAdjustment', initialDeviceTarget.bidAdjustment || DefaultDeviceBidAdjustment);\r\n\r\n return {\r\n Id,\r\n criterion: {\r\n Target: target,\r\n BidAdjustment: bid,\r\n },\r\n };\r\n });\r\n\r\n const toRemoveDevices = initialDeviceTargets.length === 0 && deviceTargets.length === 0 ? [] : _.difference(supportedDevices, deviceTargets); // don't remove devices if no change\r\n const isTargetInitiallyRemoved = target => initialDeviceTargets.find(initialTarget =>\r\n initialTarget.criterion === target && initialTarget.bidAdjustment === RemovedDeviceBidAdjustment);\r\n\r\n const removedDevices = toRemoveDevices.filter(target => !isTargetInitiallyRemoved(target)).map((target) => {\r\n const { Id } = initialDeviceTargets.find(initialTarget => initialTarget.criterion === target) || {};\r\n\r\n return {\r\n Id,\r\n criterion: {\r\n Target: target,\r\n BidAdjustment: RemovedDeviceBidAdjustment,\r\n },\r\n };\r\n });\r\n\r\n const defaultBidAdjustment = campaignDeviceTypesWithBidAdjustment ? undefined : DefaultDeviceBidAdjustment;\r\n\r\n const addedDeviceCriterion = getTargetCriterion({\r\n targets: addedDevices, type: 'Device', propKey: 'DeviceName', adGroupViewModel: null, campaignViewModel, bidAdjustment: defaultBidAdjustment, level: 'campaign',\r\n });\r\n\r\n const removedDeviceCriterion = getTargetCriterion({\r\n targets: removedDevices, type: 'Device', propKey: 'DeviceName', adGroupViewModel: null, campaignViewModel, bidAdjustment: RemovedDeviceBidAdjustment, level: 'campaign',\r\n });\r\n\r\n\r\n return [\r\n ...addedDeviceCriterion,\r\n ...removedDeviceCriterion,\r\n ];\r\n};\r\n","import { pick, isString, extend, get, isArray, filter } from 'underscore';\r\nimport { edmCampaign } from '@bingads-webui/edm-campaign';\r\nimport { getDealDetails, fillLocationForDeal } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport { CampaignSubTypeMapping, CampaignSubTypeTextMapping } from '@bingads-webui-campaign-react/constants';\r\nimport { getVerifiedTrackingSettingsRead } from '@bingads-webui-campaign-react/third-party-measurement';\r\nimport { modelToViewModelForConversionGoals, bulkModelToViewModelForConversionGoals } from '@bingads-webui-campaign-react/perf-max-step-wizard';\r\nimport { modelToViewModelForDayTimeTargets } from './ad-group-criterions';\r\nimport { modelToViewModelForLocationTargets, bulkModelToViewModelForLocationTargets } from './campaign-criterions';\r\nimport { modelToViewModelForCallToActionSettings } from './call-to-action-settings';\r\nimport { RemovedDeviceBidAdjustment } from '../common/constants';\r\nimport { modelToViewModelForDateSetting, viewModelToBulkModelForDateSetting, bulkModelToViewModelForDateSetting } from '../common/date-settings';\r\n\r\nconst whitelistedSchemaPropertyKeysForModel = [\r\n 'Budget', 'Id', 'Name', 'Status', 'TimeZone', 'BidStrategyName', 'BudgetId',\r\n 'AdScheduleUseSearcherTimeZone',\r\n 'DeliveryStatus', 'DeliveryStatusDetails', 'CampaignType', 'CampaignSubType',\r\n 'StartDate', 'EndDate',\r\n 'UseCampaignLevelDates',\r\n 'IsBidLandscapeAvailable',\r\n 'BiddingScheme',\r\n 'CampaignSettings', 'DisplayBiddingStrategyType',\r\n 'DisplayBiddingStrategyMaxCpc', 'DisplayBiddingStrategyTargetCpa', 'Languages',\r\n 'BaseCampaignName',\r\n 'VerifiedTrackingData',\r\n 'CampaignObjectiveSetting',\r\n 'TrackingUrlTemplate', 'FinalUrlSuffix', 'UrlCustomParameters', 'DisclaimerAdsEnabled',\r\n];\r\n\r\nexport const viewModelToModelForCampaign = (campaignViewModel) => {\r\n let data = {\r\n ...pick(campaignViewModel.data, whitelistedSchemaPropertyKeysForModel),\r\n CampaignSubType: CampaignSubTypeTextMapping[campaignViewModel.data.CampaignSubType],\r\n };\r\n\r\n data = extend(data, viewModelToBulkModelForDateSetting({ i18n: null, viewModel: campaignViewModel }));\r\n\r\n if (campaignViewModel.data && campaignViewModel.data.Status === 'UserPaused') {\r\n data.Status = 'Paused'; // if we send back userpaused mt treats it as active, we explicitly need to send paused\r\n }\r\n\r\n return data;\r\n};\r\n\r\nexport const bulkModelToViewModelForCampaign = ({\r\n campaignModel,\r\n originalCampaignModel,\r\n bundleCountries,\r\n}) => {\r\n let data = {\r\n ...pick(campaignModel, whitelistedSchemaPropertyKeysForModel),\r\n CampaignSubType: CampaignSubTypeMapping[campaignModel.CampaignSubType],\r\n };\r\n\r\n data = extend(data, {\r\n deal: get(originalCampaignModel, ['data', 'deal']),\r\n });\r\n if (data.Id && isString(data.Id)) {\r\n // eslint-disable-next-line no-param-reassign\r\n data.Id = parseInt(data.Id, 10);\r\n }\r\n\r\n if (data.CampaignType === 'Audience') {\r\n data = extend(data, bulkModelToViewModelForConversionGoals({\r\n campaignModel,\r\n originalCampaignViewModel: originalCampaignModel,\r\n }));\r\n }\r\n\r\n if (data.StartDate) {\r\n data = extend(data, bulkModelToViewModelForDateSetting({\r\n model: campaignModel,\r\n i18n: null,\r\n }));\r\n }\r\n\r\n if (campaignModel && campaignModel.CampaignCriterions && isArray(campaignModel.CampaignCriterions)) {\r\n data = extend(data, bulkModelToViewModelForLocationTargets({\r\n locationTargetsModel: campaignModel.CampaignCriterions,\r\n bundleCountries,\r\n }));\r\n }\r\n\r\n const campaignViewModel = {\r\n data,\r\n isValid: true,\r\n isDirty: false,\r\n };\r\n\r\n return campaignViewModel;\r\n};\r\n\r\nconst readCampaign = (cid, aid, campaignId) =>\r\n edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Campaigns.$withKey(campaignId)\r\n .get({\r\n select: ['Budget', 'CampaignConversionGoal/Goals'],\r\n })\r\n .toPromise();\r\n\r\nexport const loadCampaign = (cid, aid, campaignId) =>\r\n readCampaign(cid, aid, campaignId);\r\n\r\nexport const modelToViewModelForCampaign = ({\r\n campaignModel,\r\n dealDetails,\r\n dayTimeCriterionsModel = [],\r\n locationCriterionsModel,\r\n campaignDeviceCriterions,\r\n bundleCountries,\r\n isAudienceMMACTAOptOutEnabled = false,\r\n isAudienceMMACTADefaultOptOutEnabled = false,\r\n exclusions,\r\n}) => {\r\n let data = {\r\n ...pick(campaignModel, [...whitelistedSchemaPropertyKeysForModel, 'ImportProperties']),\r\n CampaignSubType: CampaignSubTypeMapping[campaignModel.CampaignSubType],\r\n };\r\n\r\n if (dealDetails) {\r\n data = extend(data, { deal: dealDetails });\r\n }\r\n\r\n if (exclusions) {\r\n data = extend(data, { exclusions });\r\n }\r\n\r\n if (data.CampaignType === 'Audience') {\r\n const audienceSettings = filter(\r\n get(data, ['CampaignSettings'], []),\r\n setting => setting['@odata.type'] === '#Model.AudienceSettings'\r\n );\r\n const audienceSetting = get(audienceSettings, [0], {});\r\n data = extend(data, getVerifiedTrackingSettingsRead(audienceSetting));\r\n }\r\n\r\n // adding conversion goals for display ads, video ads and native ads\r\n if (data.CampaignType === 'Audience' &&\r\n (data.CampaignSubType === CampaignSubTypeMapping.AudienceStatic ||\r\n data.CampaignSubType === CampaignSubTypeMapping.DisplayAds ||\r\n data.CampaignSubType === CampaignSubTypeMapping.BrandAwarenessVideoAds\r\n )) {\r\n data = extend(data, modelToViewModelForConversionGoals(campaignModel));\r\n }\r\n\r\n if (data.CampaignType === 'Audience' && data.CampaignSubType === CampaignSubTypeMapping.AudienceStatic) {\r\n data = extend(data, modelToViewModelForDayTimeTargets({ model: dayTimeCriterionsModel }));\r\n\r\n if (isAudienceMMACTAOptOutEnabled) {\r\n data = extend(data, modelToViewModelForCallToActionSettings(campaignModel, isAudienceMMACTADefaultOptOutEnabled));\r\n }\r\n }\r\n\r\n if (locationCriterionsModel) {\r\n data = extend(data, modelToViewModelForLocationTargets({\r\n model: locationCriterionsModel,\r\n bundleCountries,\r\n campaignId: campaignModel.Id,\r\n }));\r\n }\r\n\r\n if (campaignModel.StartDate) {\r\n data = extend(data, modelToViewModelForDateSetting({\r\n model: campaignModel,\r\n i18n: null,\r\n }));\r\n }\r\n\r\n if (campaignDeviceCriterions) {\r\n const initialCampaignLevelDeviceTargets = campaignDeviceCriterions.filter(criterion => criterion.Criterion.Type === 'Device')\r\n .map(criterion => ({\r\n Id: criterion.Id,\r\n criterion: criterion.Criterion.DeviceName,\r\n bidAdjustment: criterion.CriterionBid.Multiplier,\r\n }));\r\n\r\n const campaignLevelDeviceTargets = initialCampaignLevelDeviceTargets\r\n .filter(device => device.bidAdjustment !== RemovedDeviceBidAdjustment && device.bidAdjustment !== undefined)\r\n .map(criterion => criterion.criterion);\r\n\r\n data = extend(data, {\r\n initialCampaignLevelDeviceTargets,\r\n campaignLevelDeviceTargets,\r\n });\r\n }\r\n\r\n const campaignViewModel = {\r\n data,\r\n isValid: true,\r\n isDirty: false,\r\n };\r\n return campaignViewModel;\r\n};\r\n\r\nexport {\r\n getDealDetails,\r\n fillLocationForDeal,\r\n};\r\n","import _ from 'underscore';\r\n\r\nexport const modelToViewModelForCallToActionSettings = (model, isAudienceMMACTADefaultOptOutEnabled) => {\r\n const isOptOut = _.result(_.find(\r\n _.get(model, 'CampaignSettings', []),\r\n setting => setting['@odata.type'] === '#Model.CallToActionSetting'\r\n ), 'CallToActionOptOut', !!isAudienceMMACTADefaultOptOutEnabled);\r\n\r\n return {\r\n IsCallToActionOptOut: isOptOut,\r\n };\r\n};\r\n","import { isEmpty, result, extend } from 'underscore';\r\nimport { assign } from 'xstate';\r\nimport Promise from 'bluebird';\r\nimport { stepStateMachine } from '@bingads-webui-campaign-react/step-wizard-machine';\r\n// import { modelConstraints } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport { modelConstraints, getConvertedCurrencyDealMinimumBid, getAccountExchangeRateFromLocalStorage } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport { isXandrDisplayAdsCampaign, isXandrVideoAdsCampaign, isXandrServing, ScopeLevel } from '@bingads-webui-campaign-react/constants';\r\nimport exclusionRepository from '@bingads-webui-campaign-legacy/advanced-settings/util/exclusion-repository';\r\n\r\nimport { loadBundleCountries, readLocationCriterions, readDayTimeCriterions, readTargetingCriterions, readAudienceCriterions, readPlacementCriterions } from '../../model/ad-group-criterions';\r\nimport { STEP_PATHS, getInitialAdGroupViewModel, AdGroupNegativeReferenceId } from '../../common/constants';\r\nimport { StepAdGroupSettings } from './step-ad-group-settings';\r\nimport { DeviceKeys, Devices } from './target/device';\r\nimport { saveAdGroup, getErrorsPlaceholders } from '../../model/ad-group-bulk';\r\nimport { viewModelToModelForCampaign, getDealDetails } from '../../model/campaign';\r\nimport { viewModelToModelForAdGroup, loadAdGroup, modelToViewModelForAdGroup } from '../../model/ad-group';\r\n\r\nconst needsLoading = () => true;\r\nconst hasCampaignData = context =>\r\n Boolean(result(context, ['stepsData', 'campaign', 'Id']));\r\n\r\nconst getCampaignId = context => result(context, ['data', 'campaign', 'data', 'Id']) || result(context, ['stepsData', 'campaign', 'Id']) || result(context, ['stepsData', 'currentCampaign', 'Id']);\r\nconst getAdGoupId = context => result(context, ['data', 'adGroup', 'data', 'Id']) || result(context, ['stepsData', 'adGroupId']);\r\nconst getBiddingScheme = context => result(context, ['stepsData', 'currentCampaign', 'BiddingScheme', 'Type']) || result(context, ['stepsData', 'campaign', 'BiddingScheme', 'Type']);\r\nconst getCampaignSubType = context => result(context, ['stepsData', 'currentCampaign', 'CampaignSubType']) || result(context, ['stepsData', 'campaign', 'CampaignSubType']);\r\n\r\nconst getInitDeviceTypes = (context, permissions) => {\r\n const campaignSubType = getCampaignSubType(context);\r\n const biddingScheme = getBiddingScheme(context);\r\n const isDisplayAds = isXandrDisplayAdsCampaign(campaignSubType);\r\n const isVideoAds = isXandrVideoAdsCampaign(campaignSubType);\r\n\r\n if (isDisplayAds) {\r\n return [DeviceKeys.Computers, DeviceKeys.Tablets, DeviceKeys.Smartphones];\r\n }\r\n\r\n if (isVideoAds && permissions.dynamic.XandrDeviceTarget) {\r\n return biddingScheme === 'ManualCpm' ? [DeviceKeys.Computers, DeviceKeys.Tablets, DeviceKeys.Smartphones] : [DeviceKeys.ConnectedTVs];\r\n }\r\n\r\n return Object.keys(Devices);\r\n};\r\n\r\n/**\r\n * Loads step data asynchronously. The returned promise must resolve\r\n * into a single object, opaque to the step, which will be saved\r\n * in the context under the `data` property.\r\n *\r\n * The function is called when the wizard enters the step.\r\n * The step will be blocked until the promise resolves.\r\n * @param {Object} context - the current context\r\n * @returns {Promise} a promise that must resolve\r\n * into a single object, opaque to the step, which will be saved\r\n * in the context under the `data` property.\r\n */\r\nconst loadData = async (context) => {\r\n const {\r\n cid, aid, serverContext, i18n, permissions,\r\n } = context.stepsData;\r\n const deal = result(context, ['stepsData', 'campaign', 'deal']);\r\n const campaignId = getCampaignId(context);\r\n const adGroupId = getAdGoupId(context);\r\n const deviceTypes = getInitDeviceTypes(context, permissions);\r\n\r\n let dealMinimumBid;\r\n if (deal) {\r\n const exchangeRateMapping = getAccountExchangeRateFromLocalStorage(serverContext);\r\n dealMinimumBid = getConvertedCurrencyDealMinimumBid(deal.MinimumBid, deal.Currency, serverContext.CurrentAccount.CurrencyCode, exchangeRateMapping.val);\r\n }\r\n\r\n let loadPromises = {\r\n adGroup: Promise.resolve(getInitialAdGroupViewModel({ i18n, dealMinimumBid, deviceTypes })),\r\n bundleCountriesAndLocationCriterions: loadBundleCountries({\r\n cid,\r\n aid,\r\n serverContext,\r\n }),\r\n dealDetails: deal || getDealDetails(cid, aid, campaignId, serverContext),\r\n };\r\n\r\n if (adGroupId && adGroupId !== AdGroupNegativeReferenceId) {\r\n loadPromises = extend(loadPromises, {\r\n adGroup: loadAdGroup(cid, aid, campaignId, adGroupId),\r\n locationCriterions: readLocationCriterions({\r\n cid, aid, campaignId, adGroupId,\r\n }),\r\n dayTimeCriterions: readDayTimeCriterions({\r\n cid, aid, campaignId, adGroupId,\r\n }),\r\n targetCriterions: readTargetingCriterions({\r\n cid, aid, campaignId, adGroupId,\r\n }),\r\n audienceCriterions: readAudienceCriterions({\r\n cid, aid, campaignId, adGroupId,\r\n }),\r\n placementCriterions: readPlacementCriterions({\r\n cid, aid, campaignId, adGroupId,\r\n }),\r\n exclusions: exclusionRepository.load(campaignId, adGroupId, ScopeLevel.AdGroup),\r\n });\r\n }\r\n\r\n const {\r\n adGroup,\r\n locationCriterions,\r\n dealDetails,\r\n bundleCountriesAndLocationCriterions,\r\n dayTimeCriterions,\r\n targetCriterions,\r\n audienceCriterions,\r\n placementCriterions,\r\n exclusions: [campaignExclusions, adgroupExclusions] = [null, null],\r\n } = await Promise.props(loadPromises);\r\n\r\n let results = {\r\n ...bundleCountriesAndLocationCriterions,\r\n adGroup,\r\n ...getErrorsPlaceholders(),\r\n };\r\n\r\n const campaign = isEmpty(context.stepsData.campaign) ? context.stepsData.currentCampaign : context.stepsData.campaign;\r\n\r\n if (adGroupId) {\r\n const adGroupData = modelToViewModelForAdGroup({\r\n adGroupModel: adGroup,\r\n locationCriterionsModel: locationCriterions ? locationCriterions.value : [],\r\n bundleCountries: bundleCountriesAndLocationCriterions.bundleCountries,\r\n dayTimeCriterionsModel: dayTimeCriterions ? dayTimeCriterions.value : [],\r\n targetCriterionsModel: targetCriterions ? targetCriterions.value : [],\r\n audienceCriterionsModel: audienceCriterions ? audienceCriterions.value : [],\r\n i18n,\r\n isDisplayAds: isXandrDisplayAdsCampaign(getCampaignSubType(context)),\r\n isVideoAds: isXandrVideoAdsCampaign(getCampaignSubType(context)),\r\n isXandrServing: isXandrServing(getCampaignSubType(context), campaign.CampaignSettings),\r\n placementCriterionsModel: placementCriterions ? placementCriterions.value : [],\r\n campaignExclusions,\r\n adgroupExclusions,\r\n });\r\n results = extend(results, {\r\n adGroup: adGroupData,\r\n });\r\n }\r\n\r\n if (dealDetails) {\r\n results.adGroup.data = await modelConstraints(dealDetails, results.adGroup.data, serverContext);\r\n }\r\n\r\n results.adGroup.data.genreRestricted = !context.stepsData.permissions.dynamic.GenreTargets || results.adGroup.data.genreRestricted;\r\n\r\n return results;\r\n};\r\n\r\n// must return `Promise.resolve(data)` or `Promise.reject(error)`\r\n// the payload will be available in `onDone` and `onError` in event's `data` prop.\r\nconst saveData = (context) => {\r\n const campaign = isEmpty(context.stepsData.campaign) ? context.stepsData.currentCampaign : context.stepsData.campaign;\r\n\r\n return saveAdGroup({\r\n adGroup: context.data.adGroup,\r\n campaign,\r\n bundleLocationCriterions: context.data.bundleLocationCriterions,\r\n bundleCountries: context.data.bundleCountries,\r\n isDisplayPlus: true,\r\n }, {\r\n scenario: context.stepsData.scenarioName,\r\n activityLogger: context.stepsData.scenario.createActivity('saveAdGroup'),\r\n i18n: context.stepsData.i18n,\r\n serverContext: context.stepsData.serverContext,\r\n });\r\n};\r\n\r\nconst isValid = context => context.data.adGroup.isValid;\r\nconst isDirty = context => context.data.adGroup.isDirty;\r\nconst hasServerErrors = context => !isEmpty(context.data.serverErrors) || !isEmpty(context.data.otherErrors) || !isEmpty(context.data.systemErrors);\r\nexport const needsSaving = context => isDirty(context) || hasServerErrors(context) || !context.data.adGroup.data.Id || context.data.adGroup.data.Id === AdGroupNegativeReferenceId;\r\n\r\nconst patchStepsData = assign({\r\n stepsData: (context/* , event */) => {\r\n const campaignViewModel = isEmpty(context.stepsData.campaign) ? { data: context.stepsData.currentCampaign } : { data: context.stepsData.campaign };\r\n\r\n return {\r\n ...context.stepsData,\r\n adGroup: {\r\n ...viewModelToModelForAdGroup({ adGroupViewModel: context.data.adGroup, i18n: context.stepsData.i18n }),\r\n deal: context.data.adGroup.data.deal,\r\n },\r\n ...hasCampaignData(context) ? {} :\r\n { campaign: viewModelToModelForCampaign(campaignViewModel) },\r\n };\r\n },\r\n});\r\n\r\nconst clearErrors = assign({\r\n data: context => ({\r\n ...context.data,\r\n ...getErrorsPlaceholders(),\r\n }),\r\n});\r\n\r\nexport const stepAdGroupWizardConfig = {\r\n id: STEP_PATHS.AD_GROUP,\r\n title: _TL_('Ad group'),\r\n StepMachine: stepStateMachine,\r\n StepMachineOptions: (stepInfo, initialStepsData) => ({\r\n machineId: STEP_PATHS.AD_GROUP,\r\n initialContext: {\r\n id: stepInfo.id,\r\n stepInfo,\r\n stepsData: initialStepsData,\r\n data: {\r\n adGroup: getInitialAdGroupViewModel({ i18n: initialStepsData.i18n, isDisplayAds: initialStepsData.isDisplayAds }),\r\n ...getErrorsPlaceholders(),\r\n },\r\n invalidSaveAttempt: 0,\r\n },\r\n actions: {\r\n patchStepsData,\r\n clearErrors,\r\n },\r\n guards: {\r\n needsLoading,\r\n needsSaving,\r\n isValid,\r\n isDirty,\r\n },\r\n }),\r\n StepComponent: StepAdGroupSettings,\r\n canNavigateBackWithoutSaving: true,\r\n stepRepositoryConfig: {\r\n saveData,\r\n loadData,\r\n },\r\n};\r\n","import { Campaign } from '@bingads-webui/campaign-odata-schemas';\r\nimport _ from 'underscore';\r\nimport { edmCampaign } from '@bingads-webui/edm-campaign';\r\nimport { viewModelToBulkModelForConversionGoals } from '@bingads-webui-campaign-react/perf-max-step-wizard';\r\nimport { CampaignSubTypeMapping, ScopeLevel } from '@bingads-webui-campaign-react/constants';\r\nimport exclusionRepository from '@bingads-webui-campaign-legacy/advanced-settings/util/exclusion-repository';\r\nimport { ERROR_ENTITY, isBulkWrappedResponse, getBulkUploadErrorType, modelToViewModelForBulkErrors, removeReferencedEntityInvalidIdErrors, isDealCampaign } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport { bulkModelToViewModelForCampaign, viewModelToModelForCampaign } from './campaign';\r\nimport { viewModelToBulkModelForDealTargets, viewModelToBulkModelForLocationTargets, viewModelToBulkModelForDeviceTargets } from './campaign-criterions';\r\n\r\nconst campaignEDM = edmCampaign.types.resolve('Model.Campaign');\r\nconst campaignResource = new campaignEDM.ResourceIdentifier();\r\n\r\nconst createOrUpdateCampaign = (data) => {\r\n const createOrUpdateCall = data && data.Id ?\r\n campaignResource.bulkUpdate.bind(campaignResource) :\r\n campaignResource.bulkCreate.bind(campaignResource);\r\n return createOrUpdateCall(data);\r\n};\r\n\r\nconst GENERIC_ERROR_MESSAGE_KEY = _TL_(\"We've encountered an error and can't continue. Please contact support for further assistance.\");\r\n\r\nconst bulkUpsertCampaignSettingsEntityErrorMap = {\r\n [getBulkUploadErrorType(Campaign)]: ERROR_ENTITY.Campaign,\r\n};\r\n\r\nconst allSettledPromiseWrapper = (promises) => {\r\n const wrappedPromises = promises.map(p => Promise.resolve(p)\r\n .then(\r\n val => ({ status: 'fulfilled', value: val }),\r\n err => ({ status: 'rejected', reason: err })\r\n ));\r\n return Promise.all(wrappedPromises);\r\n};\r\n\r\nexport const getErrorsPlaceholders = () => ({\r\n systemErrors: [],\r\n serverErrors: [],\r\n});\r\n\r\nexport const saveCampaign = ({\r\n campaign: campaignViewModel,\r\n viewModelToBulkModelForAdSchedules = null,\r\n bundleCountries = null,\r\n bundleLocationCriterions = null,\r\n viewModelToBulkModelForDisclaimerAssociation = null,\r\n isAudienceMMACTAOptOutEnabled = false,\r\n viewModelToBulkModelForVerifiedTrackingSettings = null,\r\n}, { scenario, i18n, activityLogger }) => {\r\n const campaignModel = viewModelToModelForCampaign(campaignViewModel);\r\n\r\n let conversionGoalsAssociations = {};\r\n let adExtensionAssociations = {};\r\n let adSchedulesModel = [];\r\n let locationTargetsModel = [];\r\n let verifiedTrackingDataObj = {};\r\n\r\n const modelToSave = {\r\n ...campaignModel,\r\n ...conversionGoalsAssociations,\r\n };\r\n\r\n // Add conversion goals to Native, Display and Video campaigns\r\n if (campaignViewModel.data.CampaignType === 'Audience' &&\r\n (campaignViewModel.data.CampaignSubType === CampaignSubTypeMapping.AudienceStatic ||\r\n campaignViewModel.data.CampaignSubType === CampaignSubTypeMapping.DisplayAds ||\r\n campaignViewModel.data.CampaignSubType === CampaignSubTypeMapping.BrandAwarenessVideoAds\r\n ) && campaignViewModel.data.conversionGoals) {\r\n conversionGoalsAssociations = {\r\n CampaignConversionGoalAssociations: viewModelToBulkModelForConversionGoals(campaignViewModel, campaignViewModel.data.Id || -111),\r\n };\r\n _.extend(modelToSave, { ...conversionGoalsAssociations });\r\n }\r\n // Add ads schedule and location targets for Native campaigns\r\n if (campaignViewModel.data.CampaignType === 'Audience' && campaignViewModel.data.CampaignSubType === CampaignSubTypeMapping.AudienceStatic) {\r\n if (viewModelToBulkModelForAdSchedules) {\r\n adSchedulesModel = viewModelToBulkModelForAdSchedules({ campaignViewModel });\r\n }\r\n\r\n if (bundleLocationCriterions) {\r\n locationTargetsModel = viewModelToBulkModelForLocationTargets({\r\n bundleLocationCriterions,\r\n campaignViewModel,\r\n });\r\n }\r\n\r\n if (viewModelToBulkModelForDisclaimerAssociation) {\r\n adExtensionAssociations = viewModelToBulkModelForDisclaimerAssociation({ campaignViewModel });\r\n }\r\n\r\n _.extend(modelToSave, { ...adExtensionAssociations });\r\n modelToSave.CampaignCriterions = [\r\n ...adSchedulesModel,\r\n ...locationTargetsModel,\r\n ...viewModelToBulkModelForDeviceTargets({ campaignViewModel }),\r\n ];\r\n\r\n if (isAudienceMMACTAOptOutEnabled) {\r\n modelToSave.CallToActionOptOut = campaignViewModel.data.IsCallToActionOptOut;\r\n }\r\n }\r\n\r\n if (isDealCampaign()) {\r\n modelToSave.IsDealCampaign = true;\r\n const dealModel = viewModelToBulkModelForDealTargets(campaignViewModel);\r\n modelToSave.CampaignCriterions = [dealModel];\r\n }\r\n\r\n if (campaignViewModel.data.CampaignType === 'Audience' && viewModelToBulkModelForVerifiedTrackingSettings) {\r\n const campaignData = _.get(campaignViewModel, ['data'], {});\r\n if (_.has(campaignData, 'VerifiedTrackingSettings')) {\r\n const verifiedTrackingSettings = _.get(campaignData, ['VerifiedTrackingSettings'], []);\r\n verifiedTrackingDataObj = viewModelToBulkModelForVerifiedTrackingSettings(verifiedTrackingSettings);\r\n _.extend(modelToSave, verifiedTrackingDataObj);\r\n }\r\n }\r\n\r\n const saveCampaignPromise = createOrUpdateCampaign(modelToSave)\r\n // with bulk the result will have shape of:\r\n // - { ...entityData } - in case of success;\r\n // - { entity: { ...entityData }, errors: [(EditorialError|MTError)] } - in case of error(s).\r\n .then((result) => {\r\n const data = {\r\n campaign: bulkModelToViewModelForCampaign({\r\n campaignModel: result,\r\n originalCampaignModel: campaignViewModel,\r\n bundleCountries,\r\n }),\r\n ...getErrorsPlaceholders(),\r\n };\r\n\r\n return data;\r\n }, (bulkOrSystemError) => {\r\n if (isBulkWrappedResponse(bulkOrSystemError)) {\r\n const { entity, errors } = bulkOrSystemError;\r\n const campaign = entity ?\r\n bulkModelToViewModelForCampaign({\r\n campaignModel: entity,\r\n originalCampaignModel: campaignViewModel,\r\n }) :\r\n campaignViewModel;\r\n\r\n let filteredErrors = errors;\r\n if (campaign.data.Id <= 0) {\r\n filteredErrors = removeReferencedEntityInvalidIdErrors(errors);\r\n }\r\n\r\n const serverErrors = modelToViewModelForBulkErrors(\r\n filteredErrors,\r\n bulkUpsertCampaignSettingsEntityErrorMap,\r\n scenario,\r\n i18n,\r\n activityLogger\r\n );\r\n\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n return Promise.reject({\r\n campaign,\r\n serverErrors,\r\n });\r\n }\r\n\r\n // Activity\r\n // eslint-disable-next-line no-console\r\n console.warn(`Campaign bulk upsert system error: ${bulkOrSystemError.stack || bulkOrSystemError.message || bulkOrSystemError}`);\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n return Promise.reject({\r\n campaign: campaignViewModel,\r\n systemErrors: [i18n.getString(GENERIC_ERROR_MESSAGE_KEY)],\r\n // TODO: We would want to return the criterions with Ids, but UI's bulk drops them\r\n });\r\n });\r\n let saveExclusionsPromise = Promise.resolve();\r\n if (campaignViewModel && campaignViewModel.data && campaignViewModel.data.exclusions) {\r\n const saveExclusionsData = {\r\n campaignId: campaignViewModel.data.Id,\r\n AdvanceSettings: {\r\n Exclusions: {\r\n ExcludedIPs: campaignViewModel.data.exclusions.campaignExclusions.ExcludedIPs,\r\n ExcludedSites: campaignViewModel.data.exclusions.campaignExclusions.ExcludedSites,\r\n },\r\n },\r\n };\r\n\r\n saveExclusionsPromise = exclusionRepository.saveExtensions(saveExclusionsData, ScopeLevel.Campaign);\r\n }\r\n\r\n const savePromises = [saveCampaignPromise, saveExclusionsPromise];\r\n\r\n return new Promise((resolve, reject) => {\r\n allSettledPromiseWrapper(savePromises).then((results) => {\r\n const allSuccess = _.every(results, result => result.status === 'fulfilled');\r\n\r\n if (allSuccess) {\r\n return resolve({\r\n campaign: results[0].value.campaign,\r\n ...getErrorsPlaceholders(),\r\n });\r\n }\r\n\r\n const errors = _.map(results, (result) => {\r\n let { serverErrors = null } = result.reason || {};\r\n\r\n if (result.reason && result.reason.NegativeSitesResult) {\r\n const { NegativeSitesResult } = result.reason;\r\n serverErrors = {\r\n property: 'webExclusions',\r\n NegativeSitesResult: NegativeSitesResult.EntityErrors,\r\n };\r\n }\r\n\r\n if (result.reason && result.reason.NegativeIPsResult) {\r\n const { NegativeIPsResult } = result.reason;\r\n serverErrors = {\r\n property: 'webExclusions',\r\n NegativeIPsResult: NegativeIPsResult.EntityErrors,\r\n };\r\n }\r\n\r\n return serverErrors;\r\n });\r\n\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n return reject({\r\n campaign: campaignViewModel,\r\n serverErrors: _.flatten(errors.filter(val => val !== null)),\r\n });\r\n });\r\n });\r\n};\r\n","\r\nimport React, { useEffect, useMemo, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _, { noop } from 'underscore';\r\nimport classNames from 'classnames';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { ImpressionTrackingUrlOptions as ImpressionTrackingView} from '@bingads-webui-campaign/audience-campaign-shared';\r\n\r\nconst extractImpressionTrackingSetting = (verifiedTrackingData) => {\r\n if (_.isArray(verifiedTrackingData) && verifiedTrackingData.length === 2) {\r\n return verifiedTrackingData;\r\n }\r\n return ['', ''];\r\n};\r\n\r\nexport const formatImpressionTrackingSetting = (campaignSettings, i18n) => {\r\n const [advertiserEntityID, publisherEntityID] = extractImpressionTrackingSetting(_.get(campaignSettings, '[0].VerifiedTrackingSettings[0].VerifiedTrackingData[0].Data.Values'));\r\n return (\r\n
\r\n
{i18n.getString(_TL_('Advertiser entity ID: ')) + (advertiserEntityID === '' ? i18n.getString(_TL_('None')) : advertiserEntityID)}
\r\n
{i18n.getString(_TL_('Publisher entity ID: ')) + (publisherEntityID === '' ? i18n.getString(_TL_('None')) : publisherEntityID)}
\r\n
\r\n );\r\n};\r\n\r\nconst ImpressionTrackingSetting = ({\r\n i18n,\r\n campaignSettings,\r\n updateValidation,\r\n}) => {\r\n const classes = useDefaultStyles();\r\n\r\n const [impressionTrackingSettingRef, setImpressionTrackingSettingRef] = useState();\r\n\r\n const impressionTrackingView1 = useMemo(() => {\r\n const impressionTrackingView = new ImpressionTrackingView({\r\n i18n,\r\n isEnabledForVerifiedImpressionTrackingAtCampaignLevel: true,\r\n initialIASImpressionTrackingUrlValue: extractImpressionTrackingSetting(_.get(campaignSettings, '[0].VerifiedTrackingSettings[0].VerifiedTrackingData[0].Data.Values')),\r\n isImpressionTrackingUrlSectionVisible: false,\r\n isForBrandAwarenessCampaign: true,\r\n });\r\n\r\n impressionTrackingView.render();\r\n\r\n return impressionTrackingView;\r\n });\r\n\r\n useEffect(() => {\r\n if (impressionTrackingSettingRef) {\r\n impressionTrackingSettingRef.innerHTML = '';\r\n impressionTrackingSettingRef.append(impressionTrackingView1.el);\r\n\r\n impressionTrackingView1.on('IASInputChange', (value) => {\r\n updateValidation([], {\r\n VerifiedTrackingData: value,\r\n });\r\n });\r\n }\r\n\r\n return noop;\r\n }, [impressionTrackingSettingRef]);\r\n\r\n return (\r\n
\r\n
setImpressionTrackingSettingRef(newRef)} />\r\n
\r\n );\r\n};\r\n\r\nImpressionTrackingSetting.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n campaignSettings: PropTypes.shape(PropTypes.string).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n};\r\n\r\nconst validatedImpressionTrackingSetting = withCustomValidation(ImpressionTrackingSetting);\r\n\r\nexport { validatedImpressionTrackingSetting as ImpressionTrackingSetting };\r\n","import { useCallback, useEffect, useMemo, useContext, useState } from 'react';\r\nimport { useSelector } from '@xstate/react';\r\nimport { get } from 'underscore';\r\nimport { isCanceling, stateLoggingListener, StepEvents, isSaving } from '@bingads-webui-campaign-react/step-wizard-machine';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { buildLegacyI18n } from '@bingads-webui/build-legacy-i18n';\r\nimport { ValidationStringMap } from '@bingads-webui/validation-string-map';\r\nimport { useExitWithoutSavingConfirmation } from '@bingads-webui-campaign-react/step-wizard';\r\nimport { useImpulse, usePrevProp } from '@bingads-webui-campaign-react/step-wizard-controls';\r\nimport { serverErrorsCompare } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\n\r\nimport { needsSaving } from './step-wizard-config';\r\n\r\nconst doesNeedSavingSelector = state => !isCanceling(state) && needsSaving(state.context) && !isSaving(state);\r\nconst serverContextSelector = state => state.context.stepsData.serverContext;\r\nconst hideStepHeaderSelector = state => state.context.stepInfo.hideStepHeader;\r\nconst campaignIdSelector = state => state.context.stepsData.campaignId;\r\nconst campaignSelector = state => state.context.data.campaign;\r\nconst campaignSettingsSelector = state => (state.context.stepsData.campaign && state.context.stepsData.campaign.CampaignSettings) || (state.context.stepsData.currentCampaign && state.context.stepsData.currentCampaign.CampaignSettings);\r\nconst serverErrorsSelector = state => state.context.data.serverErrors;\r\nconst invalidSaveAttemptSelector = state => state.context.invalidSaveAttempt;\r\nconst systemErrorsSelector = state => state.context.data.systemErrors;\r\nconst permissionsSelector = state => get(state, 'context.stepsData.permissions');\r\nconst scenarioNameSelector = state => get(state, 'context.stepsData.scenarioName');\r\nconst exclusionsSelector = state => state.context.data.campaign.data.exclusions;\r\n\r\nexport const useStepCampaignSettingsState = (stepService) => {\r\n const i18n = useContext(I18nContext);\r\n const legacyI18n = useMemo(() => buildLegacyI18n(i18n, [ValidationStringMap]), [i18n]);\r\n\r\n useEffect(() => {\r\n const subscription = stepService.subscribe(stateLoggingListener);\r\n return subscription.unsubscribe;\r\n }, [stepService]);\r\n\r\n const serverContext = useSelector(stepService, serverContextSelector);\r\n const hideStepHeader = useSelector(stepService, hideStepHeaderSelector);\r\n const campaignId = useSelector(stepService, campaignIdSelector);\r\n const campaign = useSelector(stepService, campaignSelector);\r\n const campaignSettings = useSelector(stepService, campaignSettingsSelector);\r\n\r\n const doesNeedSaving = useSelector(stepService, doesNeedSavingSelector);\r\n const systemErrors = useSelector(stepService, systemErrorsSelector);\r\n\r\n const serverErrors = useSelector(stepService, serverErrorsSelector);\r\n const invalidSaveAttempt = useSelector(stepService, invalidSaveAttemptSelector);\r\n\r\n const permissions = useSelector(stepService, permissionsSelector);\r\n const scenarioName = useSelector(stepService, scenarioNameSelector);\r\n const exclusions = useSelector(stepService, exclusionsSelector);\r\n\r\n const dealDetails = campaign.data.deal;\r\n\r\n const [navigationConfirmationPrompt] = useExitWithoutSavingConfirmation(doesNeedSaving, stepService, i18n);\r\n const onCampaignValidation = useCallback((results) => {\r\n const { data: newCampaignData, ...restResults } = results;\r\n const dataPatch = {\r\n campaign: {\r\n ...campaign,\r\n data: {\r\n ...campaign.data,\r\n ...newCampaignData,\r\n },\r\n ...restResults,\r\n },\r\n };\r\n stepService.send({ type: StepEvents.UPDATE_VALIDATION, data: dataPatch });\r\n }, [stepService, campaign]);\r\n\r\n // eslint-disable-next-line no-bitwise\r\n const [, hasInvalidSaveAttemptChanged] = usePrevProp(invalidSaveAttempt | 0);\r\n const [, hasServerErrorsChanged] = usePrevProp(serverErrors, serverErrorsCompare);\r\n const areBeaconsActive = useImpulse(hasInvalidSaveAttemptChanged || hasServerErrorsChanged);\r\n\r\n const [showAllValidationErrors, setShowAllValidationErrors] = useState(false);\r\n if (hasInvalidSaveAttemptChanged) {\r\n setShowAllValidationErrors(true);\r\n }\r\n\r\n const state = {\r\n campaign,\r\n serverContext,\r\n i18n,\r\n legacyI18n,\r\n hideStepHeader,\r\n campaignId,\r\n campaignSettings,\r\n systemErrors,\r\n navigationConfirmationPrompt,\r\n showAllValidationErrors,\r\n areBeaconsActive,\r\n serverErrors,\r\n permissions,\r\n scenarioName,\r\n dealDetails,\r\n exclusions,\r\n };\r\n const api = { onCampaignValidation };\r\n\r\n return [state, api];\r\n};\r\n","export const getStepCampaignSettingsStyles = (components, theme) => ({\r\n container: {\r\n marginTop: 10,\r\n },\r\n description: {\r\n marginBottom: '10px',\r\n },\r\n bidStrategy: {\r\n '&.vanilla-bid-strategy .bid-strategy-container select': {\r\n width: 300,\r\n },\r\n },\r\n collapsiblePanel: {\r\n border: 'none',\r\n marginBottom: 'unset',\r\n backgroundColor: 'unset',\r\n '& .panel-heading': {\r\n padding: 0,\r\n borderBottom: 'none',\r\n marginBottom: 18,\r\n '& .panel-title': {\r\n fontSize: 18,\r\n '& > a': {\r\n color: theme && theme.palette && theme.palette.themePrimary,\r\n padding: 0,\r\n '&:hover, &:active': {\r\n color: theme && theme.palette && theme.palette.themeDarker,\r\n textDecoration: 'none',\r\n backgroundColor: 'unset',\r\n },\r\n },\r\n '& > a:after': {\r\n transform: 'rotate(180deg)',\r\n },\r\n '& > a.collapsed:after': {\r\n transform: 'rotate(90deg)',\r\n },\r\n },\r\n },\r\n '& .panel-collapse': {\r\n '& .panel-body': {\r\n padding: 0,\r\n overflow: 'hidden',\r\n },\r\n },\r\n },\r\n});\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React, { useMemo, useState, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { Panel as BootstrapPanel } from 'react-bootstrap';\r\nimport { Stack } from '@fluentui/react';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { ValidationGroup, ErrorMessages } from '@bingads-webui-react/validation';\r\nimport { ServerValidatedWebExclusionsWithValidation, webExclusionPropertyVal } from '@bingads-webui-react/web-exclusions';\r\nimport { Campaign } from '@bingads-webui/campaign-odata-schemas';\r\nimport _ from 'underscore';\r\nimport {\r\n FormErrorGroup, UnmappedFormErrors,\r\n entityIs, andComp, propertyIs, anyComp, notComp,\r\n} from '@bingads-webui-campaign-react/form-error';\r\nimport { AttentionBeaconGroup } from '@bingads-webui-campaign-react/attention-beacon';\r\nimport { ActuationGroup } from '@bingads-webui-campaign-react/actuator';\r\nimport { withControlErrorHandling, withUnvalidatedControlErrors } from '@bingads-webui-campaign-react/error-handling';\r\nimport { ERROR_ENTITY, getPanelErrorProps, getConvertedCurrencyDealMinimumBid, getAccountExchangeRateFromLocalStorage } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport { ValidatedLegacyBudget, ValidatedConversionGoals } from '@bingads-webui-campaign-react/step-wizard-controls';\r\nimport { getBidTitleDetails } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport { withStepLoadingShell } from '@bingads-webui-campaign-react/step-wizard';\r\nimport { MinXandrDailyBudgetRangePerCurrency } from '@bingads-webui-campaign-legacy/common-grid-config/budget/get-budget-range';\r\nimport { Collapse, TextTitle, ValidatedBootstrapPanel, useCollapseState, ValidatedFixedPanel, ValidatedPanel, collapseExpander } from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport {\r\n isXandrDisplayAdsCampaign,\r\n isXandrVideoAdsCampaign,\r\n campaignShouldServeOnMSAN,\r\n ScopeLevel\r\n} from '@bingads-webui-campaign-react/constants';\r\n\r\nimport {\r\n SectionShimmer,\r\n AudienceBudgetBidStrategy,\r\n} from '@bingads-webui-campaign-react/display-plus-native-ads';\r\nimport { ThirdPartyMeasurementV3WithValidation, formatVendorSettings } from '@bingads-webui-campaign-react/third-party-measurement';\r\n\r\nimport { ImpressionTrackingSetting, formatImpressionTrackingSetting } from './audience-setting/audience-setting';\r\nimport { ServerValidatedRemainingCharsValidatedTextField } from '../../common/shared-components';\r\nimport { DealImpressionPanel } from '../../common/deal-potential-impression/deal-potential-impression';\r\nimport { useStepCampaignSettingsState } from './use-step-campaign-settings-state';\r\nimport { getStepCampaignSettingsStyles } from './step-campaign-settings-styles';\r\n\r\nconst entityIsCampaign = entityIs(ERROR_ENTITY.Campaign);\r\n\r\nexport const campaignNameProp = andComp(entityIsCampaign, propertyIs('Name'));\r\nconst campaignBudgetProp = andComp(entityIsCampaign, propertyIs('Budget'));\r\nconst campaignCampaignSettingsProp = andComp(entityIsCampaign, propertyIs('CampaignSettings'));\r\n\r\nexport const ServerValidatedLegacyBudget = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedLegacyBudget, { filter: campaignBudgetProp }));\r\nexport const ValidatedImpressionTrackingSetting = withControlErrorHandling(withUnvalidatedControlErrors(ImpressionTrackingSetting, { filter: campaignCampaignSettingsProp }));\r\n\r\nconst campaignUrlOptionsProperties = notComp(andComp(\r\n entityIsCampaign,\r\n anyComp(\r\n propertyIs('TrackingUrlTemplate'),\r\n propertyIs('UrlCustomParameters'),\r\n propertyIs('FinalUrlSuffix')\r\n )\r\n));\r\n\r\nfunction StepCampaignSettings(props) {\r\n const {\r\n stepService,\r\n scope: { values: { aid, cid } },\r\n } = props;\r\n\r\n const classes = useDefaultStyles(getStepCampaignSettingsStyles);\r\n const [stepState, stepApi] = useStepCampaignSettingsState(stepService);\r\n\r\n const {\r\n i18n,\r\n legacyI18n,\r\n hideStepHeader,\r\n campaignId,\r\n campaign,\r\n campaignErrors,\r\n navigationConfirmationPrompt,\r\n serverErrors,\r\n systemErrors,\r\n areBeaconsActive,\r\n showAllValidationErrors,\r\n serverContext,\r\n dealDetails,\r\n campaignSettings,\r\n exclusions,\r\n } = stepState;\r\n const { onCampaignValidation } = stepApi;\r\n\r\n const advertiserCustomerId = serverContext.CurrentAccount.AdvertiserCustomerID;\r\n\r\n const {\r\n DynamicPermissions: {\r\n EnableMSANDisplayCampaigns,\r\n EnableMSANVideoCampaigns,\r\n EnableDoubleVerify,\r\n },\r\n Permissions: {\r\n IsMSANISPOTEnabled,\r\n },\r\n } = serverContext;\r\n\r\n // Deprecate IAS verified impression tracking URLs\r\n const shouldshowIASVerifiedImpressionTrackingURLs = false;\r\n\r\n const shouldShowThirdPartyTrackginSetting = IsMSANISPOTEnabled || EnableDoubleVerify;\r\n\r\n const verifiedTrackingSettingsValidationProps = useMemo(\r\n () => {\r\n if (_.isNull(campaign) || _.isUndefined(campaign)) {\r\n return { data: null };\r\n }\r\n const VerifiedTrackingSettings = _.get(campaign, ['data', 'VerifiedTrackingSettings'], []);\r\n\r\n return {\r\n data: {\r\n VerifiedTrackingSettings,\r\n },\r\n };\r\n }\r\n , [campaign]\r\n );\r\n\r\n const shouldServeOnMSAN = campaignShouldServeOnMSAN(campaignSettings);\r\n const isEnableMSANDisplayCampaignsEnabled = EnableMSANDisplayCampaigns && isXandrDisplayAdsCampaign(campaign.data.CampaignSubType) && shouldServeOnMSAN;\r\n const isEnableMSANVideoCampaignsEnabled = EnableMSANVideoCampaigns && isXandrVideoAdsCampaign(campaign.data.CampaignSubType) && shouldServeOnMSAN;\r\n\r\n const [\r\n allCampaignSettingsSections,\r\n campaignSettingsExpandedSections,\r\n setCampaignSettingsExpandedSections,\r\n ] = useCollapseState(\r\n _.compact([\r\n 'campaign',\r\n (!isEnableMSANDisplayCampaignsEnabled && !isEnableMSANVideoCampaignsEnabled) && 'budget',\r\n (!isEnableMSANDisplayCampaignsEnabled && !isEnableMSANVideoCampaignsEnabled) && 'bid-strategy',\r\n (isEnableMSANDisplayCampaignsEnabled || isEnableMSANVideoCampaignsEnabled) && 'bid-and-budget',\r\n shouldshowIASVerifiedImpressionTrackingURLs && 'impression-tracking-URLs',\r\n shouldShowThirdPartyTrackginSetting && 'third-party-measurement-settings',\r\n ]), /* all sections */\r\n _.compact([\r\n 'campaign',\r\n (!isEnableMSANDisplayCampaignsEnabled && !isEnableMSANVideoCampaignsEnabled) && 'budget',\r\n (!isEnableMSANDisplayCampaignsEnabled && !isEnableMSANVideoCampaignsEnabled) && 'bid-strategy',\r\n (isEnableMSANDisplayCampaignsEnabled || isEnableMSANVideoCampaignsEnabled) && 'bid-and-budget',\r\n ]) /* initially expanded sections */\r\n );\r\n\r\n const basicSettingsExpand = useMemo(\r\n () => collapseExpander({ setActiveKeys: setCampaignSettingsExpandedSections }),\r\n [setCampaignSettingsExpandedSections]\r\n );\r\n\r\n const [\r\n allAdvancedCampaignSettingsSections,\r\n advancedCampaignSettingsExpandedSections,\r\n setAdvancedCampaignSettingsExpandedSections,\r\n ] = useCollapseState(_.compact([\r\n (isEnableMSANDisplayCampaignsEnabled || isEnableMSANVideoCampaignsEnabled) && 'web-exclusions',\r\n ]), ['']);\r\n\r\n const advancedSettingsExpand = useMemo(\r\n () => collapseExpander({ setActiveKeys: setAdvancedCampaignSettingsExpandedSections }),\r\n [setAdvancedCampaignSettingsExpandedSections]\r\n );\r\n\r\n const webExclusionsError = serverErrors && serverErrors.filter(err => err.property === 'webExclusions');\r\n const [moreOptionsSectionExpanded, setNameAndTitleExpanded] = useState(false);\r\n const onMoreOptionsSectionToggle = useCallback((expanded) => {\r\n setNameAndTitleExpanded(expanded);\r\n }, []);\r\n\r\n const minBudget = useMemo(() => {\r\n let dealMinimumBid = 0;\r\n if (dealDetails) {\r\n const exchangeRateMapping = getAccountExchangeRateFromLocalStorage(serverContext);\r\n dealMinimumBid = getConvertedCurrencyDealMinimumBid(dealDetails.MinimumBid, dealDetails.Currency, serverContext.CurrentAccount.CurrencyCode, exchangeRateMapping.val);\r\n return Math.max(dealMinimumBid || 0, MinXandrDailyBudgetRangePerCurrency[serverContext.CurrentAccount.CurrencyCode]);\r\n }\r\n return MinXandrDailyBudgetRangePerCurrency[serverContext.CurrentAccount.CurrencyCode];\r\n }, [dealDetails, serverContext]);\r\n const getBasicSettingsSection = () => (\r\n
\r\n \r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n \r\n \r\n {\r\n (isEnableMSANDisplayCampaignsEnabled || isEnableMSANVideoCampaignsEnabled) &&\r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: basicSettingsExpand,\r\n expandKey: 'bid-and-budget',\r\n }}\r\n >\r\n {\r\n campaign && campaign.data ? (\r\n \r\n ) : ()\r\n }\r\n \r\n }\r\n {\r\n (!isEnableMSANDisplayCampaignsEnabled && !isEnableMSANVideoCampaignsEnabled) &&\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: basicSettingsExpand,\r\n expandKey: 'budget',\r\n }}\r\n >\r\n \r\n \r\n }\r\n {\r\n (!isEnableMSANDisplayCampaignsEnabled && !isEnableMSANVideoCampaignsEnabled) &&\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: basicSettingsExpand,\r\n expandKey: 'bid-strategy',\r\n }}\r\n >\r\n \r\n {getBidTitleDetails(i18n, campaign.data.BiddingScheme)}\r\n \r\n \r\n }\r\n }\r\n actuationProps={{\r\n expand: basicSettingsExpand,\r\n expandKey: 'impression-tracking-URLs',\r\n }}\r\n >\r\n \r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: basicSettingsExpand,\r\n expandKey: 'third-party-measurement',\r\n }}\r\n >\r\n \r\n \r\n {\r\n (isEnableMSANDisplayCampaignsEnabled || isEnableMSANVideoCampaignsEnabled) &&\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n \r\n \r\n }\r\n \r\n {dealDetails && }\r\n \r\n {\r\n allAdvancedCampaignSettingsSections && allAdvancedCampaignSettingsSections.length > 0 &&\r\n \r\n (\r\n <>\r\n \r\n \r\n {i18n.getString(_TL_('Advanced settings'))}\r\n \r\n \r\n \r\n \r\n
\r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: advancedSettingsExpand,\r\n expandKey: 'web-exclusions',\r\n }}\r\n >\r\n \r\n {i18n.getString(_TL_('Which websites should not show your ads and which IP addresses should be blocked from seeing your ads?'))}\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n )}\r\n />\r\n
\r\n }\r\n
);\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n {!hideStepHeader &&\r\n <>\r\n

{i18n.getString(_TL_('Campaign settings'))}

\r\n {i18n.getString(_TL_('Tell us about your campaign and how much you want to spend.'))}\r\n \r\n }\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n {getBasicSettingsSection()}\r\n \r\n {navigationConfirmationPrompt}\r\n
\r\n
\r\n
\r\n \r\n );\r\n}\r\n\r\nStepCampaignSettings.propTypes = {\r\n stepService: PropTypes.shape({}).isRequired,\r\n scope: PropTypes.shape({\r\n values: PropTypes.shape({\r\n cid: PropTypes.number.isRequired,\r\n aid: PropTypes.number.isRequired,\r\n uid: PropTypes.number.isRequired,\r\n campaignId: PropTypes.number,\r\n }).isRequired,\r\n }).isRequired,\r\n};\r\n\r\nconst withLoadingShell = withStepLoadingShell(StepCampaignSettings);\r\n\r\nexport { withLoadingShell as StepCampaignSettings };\r\n","import { isEmpty, result, extend } from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport { assign } from 'xstate';\r\nimport { withScope } from '@bingads-webui-react/scope-service';\r\nimport { stepStateMachine } from '@bingads-webui-campaign-react/step-wizard-machine';\r\nimport { getVerifiedTrackingSettingWrite as viewModelToBulkModelForVerifiedTrackingSettings } from '@bingads-webui-campaign-react/third-party-measurement';\r\nimport { ScopeLevel } from '@bingads-webui-campaign-react/constants';\r\nimport exclusionRepository from '@bingads-webui-campaign-legacy/advanced-settings/util/exclusion-repository';\r\nimport { saveCampaign, getErrorsPlaceholders } from '../../model/campaign-bulk';\r\nimport { STEP_PATHS, getInitialCampaignViewModel } from '../../common/constants';\r\nimport { StepCampaignSettings } from './step-campaign-settings';\r\nimport { viewModelToModelForCampaign, loadCampaign, modelToViewModelForCampaign, getDealDetails, fillLocationForDeal } from '../../model/campaign';\r\n\r\nconst getCampaignId = context => result(context, ['data', 'campaign', 'data', 'Id']) || result(context, ['stepsData', 'campaignId']);\r\n\r\nconst needsLoading = () => true;\r\n\r\n/**\r\n * Loads step data asynchronously. The returned promise must resolve\r\n * into a single object, opaque to the step, which will be saved\r\n * in the context under the `data` property.\r\n *\r\n * The function is called when the wizard enters the step.\r\n * The step will be blocked until the promise resolves.\r\n * @param {Object} context - the current context\r\n * @returns {Promise} a promise that must resolve\r\n * into a single object, opaque to the step, which will be saved\r\n * in the context under the `data` property.\r\n */\r\nconst loadData = (context) => {\r\n const {\r\n cid,\r\n aid,\r\n i18n,\r\n xandrVideoCampaignType,\r\n xandrVideoDeal,\r\n serverContext,\r\n isDisplayAds,\r\n } = context.stepsData;\r\n const campaignId = getCampaignId(context);\r\n let loadPromises = {\r\n campaign: Promise.resolve(getInitialCampaignViewModel(i18n, serverContext.CurrentAccount.CurrencyCode, {\r\n xandrVideoDeal,\r\n xandrVideoCampaignType,\r\n isDisplayAds,\r\n serverContext,\r\n })),\r\n };\r\n if (campaignId) {\r\n loadPromises = extend(loadPromises, {\r\n campaign: loadCampaign(cid, aid, campaignId),\r\n dealDetails: getDealDetails(cid, aid, campaignId, serverContext),\r\n exclusions: exclusionRepository.load(campaignId, null, ScopeLevel.Campaign),\r\n });\r\n } else {\r\n loadPromises = extend(loadPromises, {\r\n dealDetails: fillLocationForDeal(xandrVideoDeal, serverContext),\r\n });\r\n }\r\n\r\n return Promise.props(loadPromises).then(({\r\n campaign,\r\n dealDetails,\r\n exclusions: [campaignExclusions] = [null],\r\n }) => {\r\n let results = {\r\n campaign,\r\n ...getErrorsPlaceholders(),\r\n };\r\n if (campaignId) {\r\n const campaignData = modelToViewModelForCampaign({\r\n campaignModel: campaign,\r\n dealDetails,\r\n exclusions: {\r\n campaignExclusions,\r\n },\r\n });\r\n results = extend(results, {\r\n campaign: campaignData,\r\n });\r\n } else {\r\n results = extend(results, {\r\n campaign: {\r\n ...campaign,\r\n data: {\r\n ...campaign.data,\r\n deal: dealDetails,\r\n },\r\n },\r\n });\r\n }\r\n return results;\r\n });\r\n};\r\n\r\n// must return `Promise.resolve(data)` or `Promise.reject(error)`\r\n// the payload will be available in `onDone` and `onError` in event's `data` prop.\r\nconst saveData = context =>\r\n saveCampaign({\r\n campaign: context.data.campaign,\r\n viewModelToBulkModelForVerifiedTrackingSettings,\r\n }, {\r\n scenario: context.stepsData.scenarioName,\r\n activityLogger: context.stepsData.scenario.createActivity('saveCampaignAndLinkedData'),\r\n i18n: context.stepsData.i18n,\r\n });\r\n\r\nconst isValid = context => context.data.campaign.isValid;\r\nconst isDirty = context => context.data.campaign.isDirty;\r\nconst hasServerErrors = context => !isEmpty(context.data.serverErrors) || !isEmpty(context.data.systemErrors);\r\nexport const needsSaving = context => isDirty(context) || hasServerErrors(context) || !context.data.campaign.data.Id;\r\n\r\nconst patchStepsData = assign({\r\n stepsData: (context/* , event */) => ({\r\n ...context.stepsData,\r\n campaign: {\r\n ...viewModelToModelForCampaign(context.data.campaign),\r\n deal: context.data.campaign.data.deal,\r\n },\r\n }),\r\n});\r\nconst clearErrors = assign({\r\n data: context => ({\r\n ...context.data,\r\n ...getErrorsPlaceholders(),\r\n }),\r\n});\r\nconst hasIncomingSystemError = () => false;\r\n\r\nexport const stepCampaignSettingsWizardConfig = {\r\n id: STEP_PATHS.CAMPAIGN_SETTINGS,\r\n title: _TL_('Campaign settings'),\r\n StepMachine: stepStateMachine,\r\n StepMachineOptions: (stepInfo, initialStepsData) => ({\r\n machineId: STEP_PATHS.CAMPAIGN_SETTINGS,\r\n initialContext: {\r\n id: stepInfo.id,\r\n stepsData: initialStepsData,\r\n stepInfo,\r\n data: {\r\n campaign: getInitialCampaignViewModel(\r\n initialStepsData.i18n,\r\n initialStepsData.serverContext.CurrentAccount.CurrencyCode,\r\n {\r\n xandrVideoCampaignType: initialStepsData.xandrVideoCampaignType,\r\n xandrVideoDeal: initialStepsData.xandrVideoDeal,\r\n isDisplayAds: initialStepsData.isDisplayAds,\r\n }\r\n ),\r\n ...getErrorsPlaceholders(),\r\n },\r\n invalidSaveAttempt: 0,\r\n },\r\n actions: {\r\n patchStepsData,\r\n clearErrors,\r\n },\r\n guards: {\r\n needsLoading,\r\n isValid,\r\n isDirty,\r\n needsSaving,\r\n hasIncomingSystemError,\r\n },\r\n }),\r\n StepComponent: withScope(StepCampaignSettings),\r\n stepRepositoryConfig: {\r\n saveData,\r\n loadData,\r\n },\r\n};\r\n","/* eslint-disable import/prefer-default-export */\r\nimport React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Provider } from 'use-http';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { getDefaultOptions, getDefaultUrl } from './config';\r\n\r\nexport function MmpFetchProvider({ url, options, children }) {\r\n const serverContext = useContext(ServerContext);\r\n const finalOptions = getDefaultOptions(serverContext);\r\n\r\n if (options && options.headers) {\r\n finalOptions.headers = { ...finalOptions.headers, ...options.headers };\r\n }\r\n\r\n const finalUrl = url || getDefaultUrl(serverContext);\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\n\r\nMmpFetchProvider.propTypes = {\r\n url: PropTypes.string,\r\n options: PropTypes.shape({\r\n headers: PropTypes.shape({}),\r\n }),\r\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,\r\n};\r\n\r\nMmpFetchProvider.defaultProps = {\r\n url: undefined,\r\n options: undefined,\r\n};\r\n","import { generateGuid } from '@bingads-webui-universal/primitive-utilities';\r\n\r\nexport function getDefaultUrl(serverContext) {\r\n const { CampaignAPI } = serverContext.ServicesEndpoints;\r\n\r\n return `${CampaignAPI}mmp/`;\r\n}\r\n\r\nexport function getDefaultOptions(serverContext) {\r\n const defaultOptions = {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n lcid: serverContext.CurrentUser.Locale,\r\n 'x-ms-clientapplication': 'bingadsweb', // required, will get 401 if missing\r\n 'x-ms-pagetrackingid': serverContext.PageTrackingId,\r\n Authorization: `CCMTSmallToken ${serverContext.Token}`,\r\n },\r\n cachePolicy: 'no-cache',\r\n interceptors: {\r\n request: ({ options }) => {\r\n // eslint-disable-next-line no-param-reassign\r\n options.headers['x-ms-requestid'] = generateGuid();\r\n\r\n return options;\r\n },\r\n },\r\n };\r\n\r\n return defaultOptions;\r\n}\r\n","export const getAdsStepStyles = (/* components, theme */) => ({\r\n displayAdPanelRoot: {\r\n marginTop: 20,\r\n width: 500,\r\n minHeight: 181,\r\n padding: 20,\r\n paddingBottom: 20,\r\n paddingTop: 10,\r\n background: '#FFFFFF',\r\n boxShadow: '0px 2px 4px rgba(0, 0, 0, 0.1)',\r\n borderRadius: 6,\r\n '& .image-list-item-status-indicator': {\r\n background: 'linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, #000000 100%)',\r\n borderRadius: 6,\r\n width: '170px !important',\r\n height: '96px !important',\r\n paddingTop: '10px !important',\r\n '&:hover': {\r\n '& .edit-button': {\r\n display: 'none',\r\n },\r\n },\r\n '& .placeholder-content': {\r\n color: 'white !important',\r\n },\r\n },\r\n '& .error': {\r\n width: 400,\r\n marginTop: 20,\r\n float: 'left',\r\n },\r\n '& .image-experience-content': {\r\n width: 170,\r\n '& .col-sm-3': {\r\n background: 'linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, #000000 100%)',\r\n borderRadius: 6,\r\n width: '170px !important',\r\n height: '96px !important',\r\n paddingTop: '10px !important',\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n '&:hover': {\r\n '& .edit-button': {\r\n display: 'none',\r\n },\r\n },\r\n '& .placeholder-content': {\r\n color: 'white !important',\r\n },\r\n '& .ms-Button': {\r\n width: 56,\r\n height: 24,\r\n marginTop: 10,\r\n },\r\n },\r\n '& .add-image-button': {\r\n border: '1px solid #8a8886',\r\n background: '#FFFFFF !important',\r\n fontWeight: 600,\r\n borderRadius: 2,\r\n '&:before': {\r\n content: '\"\\\\E710\"',\r\n color: '#0078D4',\r\n marginRight: 8,\r\n fontFamily: 'MsAds MDL2 Assets',\r\n },\r\n },\r\n },\r\n '& .image-section-label': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n '& .image-list-label': {\r\n fontWeight: 600,\r\n },\r\n '& .image-list-content': {\r\n width: '170px !important', // fixed for 16:9 aspect ratio\r\n border: 'none !important',\r\n padding: '0px !important',\r\n },\r\n '& .image-list-item-video': {\r\n position: 'relative',\r\n backgroundColor: 'none !important',\r\n width: '170px !important', // fixed for 16:9 aspect ratio\r\n '&:hover': {\r\n '& .edit-button': {\r\n display: 'flex',\r\n },\r\n },\r\n '& .placeholder-content': {\r\n color: 'black !important',\r\n },\r\n\r\n },\r\n '& .image-item-ratio-label': {\r\n paddingTop: 10,\r\n },\r\n '& .thumbnail-preview': {\r\n borderRadius: 6,\r\n filter: 'drop-shadow(0px 0.6px 1.8px rgba(0, 0, 0, 0.1)) drop-shadow(0px 3.2px 7.2px rgba(0, 0, 0, 0.13))',\r\n width: '170px !important',\r\n height: '96px !important',\r\n },\r\n },\r\n addNewImageButton: {\r\n height: 96,\r\n width: 170,\r\n borderRadius: '6px',\r\n border: '1px dashed #c8c6c4',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n },\r\n selectedPanel: {\r\n border: '1px solid #0078D4',\r\n },\r\n displayAdPanelHeader: {\r\n display: 'flex',\r\n width: '100%',\r\n justifyContent: 'flex-end',\r\n height: 5,\r\n },\r\n displayAdPanelButton: {\r\n justifyContent: 'flex-end',\r\n display: 'none',\r\n cursor: 'pointer',\r\n borderRadius: 99,\r\n background: '#FFFFFF',\r\n width: 32,\r\n height: 32,\r\n },\r\n displayAdPanelButtonContainer: {\r\n position: 'absolute',\r\n left: '50%',\r\n top: '50%',\r\n transform: 'translate(-50%, -50%)',\r\n columnGap: '2px',\r\n display: 'flex',\r\n },\r\n previewContainer: {\r\n height: 280,\r\n width: '100%',\r\n },\r\n emptyPreview: {\r\n width: '100%',\r\n height: '100%',\r\n backgroundColor: '#F3F2F1',\r\n borderRadius: 6,\r\n },\r\n adPreviewRoot: {\r\n maxWidth: '540px',\r\n width: '100%',\r\n padding: 20,\r\n paddingTop: 0,\r\n position: 'sticky',\r\n top: '-10px',\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n justifyContent: 'center',\r\n marginTop: '-18px',\r\n },\r\n adPreviewSizeHeader: {\r\n height: 40,\r\n },\r\n adPreviewPageTitle: {\r\n fontSize: 14,\r\n fontWeight: 600,\r\n },\r\n adPreviewSizeTitle: {\r\n fontSize: 14,\r\n fontWeight: 700,\r\n paddingRight: 5,\r\n },\r\n adPreviewPanel: {\r\n maxWidth: '540px',\r\n width: '100%',\r\n padding: 20,\r\n position: 'sticky',\r\n top: '0px',\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n justifyContent: 'center',\r\n marginTop: 16,\r\n background: '#FFFFFF',\r\n boxShadow: '0px 2px 4px rgba(0, 0, 0, 0.1)',\r\n borderRadius: 6,\r\n },\r\n displayAd: {\r\n borderRadius: '6px',\r\n filter: 'drop-shadow(0px 0.6px 1.8px rgba(0, 0, 0, 0.1)) drop-shadow(0px 3.2px 7.2px rgba(0, 0, 0, 0.13))',\r\n },\r\n previewTag: {\r\n marginTop: 20,\r\n },\r\n previewTagText: {\r\n fontSize: 12,\r\n color: '#605E5C',\r\n },\r\n pagination: {\r\n paddingTop: 20,\r\n width: '100%',\r\n },\r\n pageControls: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n columnGap: '10px',\r\n },\r\n pageControl: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n pageControlPreviousIcon: {\r\n paddingRight: 8,\r\n },\r\n pageControlNextIcon: {\r\n paddingLeft: 8,\r\n },\r\n paginationIndicatorDot: {\r\n height: 8,\r\n width: 8,\r\n borderRadius: '50%',\r\n display: 'inline-block',\r\n cursor: 'pointer',\r\n marginRight: 10,\r\n },\r\n paginationButton: {\r\n height: 8,\r\n width: 8,\r\n opacity: 0,\r\n },\r\n paginationIndicator: {\r\n display: 'flex',\r\n columnGap: '2px',\r\n },\r\n displayAdPanelContent: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n },\r\n placementInfoTile: {\r\n paddingTop: 20,\r\n marginLeft: 10,\r\n },\r\n placementInfos: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n columnGap: 10,\r\n rowGap: '5px',\r\n },\r\n enabledPlacement: {\r\n backgroundColor: '#DFF6DD',\r\n padding: '3px 5px',\r\n borderRadius: 4,\r\n },\r\n enabledText: {\r\n color: '#0C5E0C',\r\n fontWeight: 600,\r\n display: 'flex',\r\n alignItems: 'center',\r\n columnGap: 5,\r\n },\r\n disabledPlacement: {\r\n backgroundColor: '#F3F2F1',\r\n padding: '3px 5px',\r\n borderRadius: 4,\r\n },\r\n disabledText: {\r\n color: '#605E5C',\r\n fontWeight: 600,\r\n display: 'flex',\r\n alignItems: 'center',\r\n columnGap: 5,\r\n },\r\n fontStyle: {\r\n fontSize: 14,\r\n fontWeight: 600,\r\n },\r\n placementLabel: {\r\n paddingTop: 0,\r\n paddingBottom: 0,\r\n },\r\n placmentResolution: {\r\n paddingTop: 5,\r\n paddingBottom: 5,\r\n },\r\n displayAdPanelFinalUrlContainer: {\r\n width: 45,\r\n },\r\n displayImageLabel: {\r\n marginBottom: 4,\r\n },\r\n});\r\n\r\nexport const getCreativeWorkbenchStyles = () => ({\r\n creativeWorkbenchRoot: {\r\n position: 'relative',\r\n display: 'flex',\r\n padding: '24px',\r\n height: 'auto',\r\n flexDirection: 'column',\r\n justifyContent: 'space-between',\r\n borderRadius: '12px',\r\n marginTop: '16px',\r\n border: '1px dashed #B3B0AD',\r\n },\r\n header: {\r\n fontSize: 16,\r\n fontWeight: '600',\r\n lineHeight: '20px',\r\n display: 'flex',\r\n },\r\n copilotIcon: {\r\n paddingTop: '3px !important',\r\n paddingLeft: '0px !important',\r\n paddingRight: '9px !important',\r\n marginBottom: '2px',\r\n height: '21px',\r\n },\r\n description: {\r\n fontSize: 14,\r\n fontWeight: '400',\r\n color: 'rgba(96, 94, 92, 1)',\r\n lineHeight: '20px',\r\n },\r\n});\r\n\r\nexport const getImageSuggestionCarouselStyles = () => ({\r\n imageSuggestionCarouselRoot: {\r\n '& .image-suggestion-carousel-root': {\r\n '& .panel': {\r\n backgroundColor: 'transparent',\r\n },\r\n },\r\n marginTop: 10,\r\n },\r\n croppedImage: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n width: '107px',\r\n height: '76px',\r\n background: '#F3F2F1',\r\n },\r\n});\r\n\r\nexport const getDisplayAdStepBaseStyles = () => ({\r\n displayAdsStepRoot: {\r\n '& .display-ad-panel-root': {\r\n width: '100% !important',\r\n },\r\n },\r\n});\r\n","import React from 'react';\r\nimport { CroppedImageView } from '@bingads-webui-campaign-react/cropped-image-view';\r\n\r\nexport const CropPreview = props => (\r\n
\r\n
\r\n
\r\n);\r\n","import { DropdownMenuItemType } from '@bingads-webui-react/fabric-control';\r\n\r\nconst partnerTrafficString = _TL_('Eligible to serve on partner traffic');\r\nconst onoTrafficString = _TL_('Eligible to serve on Microsoft sites');\r\n\r\nconst standard = [{\r\n width: 970,\r\n height: 250,\r\n text: _TL_('970 x 250 — Billboard'),\r\n sizeText: _TL_('970 x 250'),\r\n targetText: _TL_('Billboard'),\r\n}, {\r\n width: 970,\r\n height: 90,\r\n text: _TL_('970 x 90 — Super leaderboard'),\r\n sizeText: _TL_('970 x 90'),\r\n targetText: _TL_('Super leaderboard'),\r\n}, {\r\n width: 728,\r\n height: 90,\r\n text: _TL_('728 x 90 — Leaderboard'),\r\n sizeText: _TL_('728 x 90'),\r\n targetText: _TL_('Leaderboard'),\r\n}, {\r\n width: 468,\r\n height: 60,\r\n text: _TL_('468 x 60 — Full banner'),\r\n sizeText: _TL_('468 x 60'),\r\n targetText: _TL_('Full banner'),\r\n}, {\r\n width: 336,\r\n height: 280,\r\n text: _TL_('336 x 280 — Large rectangle'),\r\n sizeText: _TL_('336 x 280'),\r\n targetText: _TL_('Large rectangle'),\r\n}, {\r\n width: 300,\r\n height: 600,\r\n text: _TL_('300 x 600 — Half-page'),\r\n sizeText: _TL_('300 x 600'),\r\n targetText: _TL_('Half-page'),\r\n}, {\r\n width: 300,\r\n height: 250,\r\n text: _TL_('300 x 250 — Medium rectangle'),\r\n sizeText: _TL_('300 x 250'),\r\n targetText: _TL_('Medium rectangle'),\r\n}, {\r\n width: 250,\r\n height: 250,\r\n text: _TL_('250 x 250 — Square'),\r\n sizeText: _TL_('250 x 250'),\r\n targetText: _TL_('Square'),\r\n}, {\r\n width: 234,\r\n height: 60,\r\n text: _TL_('234 x 60 — Half-banner'),\r\n sizeText: _TL_('234 x 60'),\r\n targetText: _TL_('Half-banner'),\r\n}, {\r\n width: 180,\r\n height: 150,\r\n text: _TL_('180 x 150 — Rectangle'),\r\n sizeText: _TL_('180 x 150'),\r\n targetText: _TL_('Rectangle'),\r\n}, {\r\n width: 160,\r\n height: 600,\r\n text: _TL_('160 x 600 — Wide skyscraper'),\r\n sizeText: _TL_('160 x 600'),\r\n targetText: _TL_('Wide skyscraper'),\r\n}, {\r\n width: 120,\r\n height: 600,\r\n text: _TL_('120 x 600 — Skyscraper'),\r\n sizeText: _TL_('120 x 600'),\r\n targetText: _TL_('Skyscraper'),\r\n}];\r\n\r\nconst mobile = [{\r\n width: 480,\r\n height: 320,\r\n text: _TL_('480 x 320 — Landscape (interstitial)'),\r\n sizeText: _TL_('480 x 320'),\r\n targetText: _TL_('Landscape (interstitial)'),\r\n}, {\r\n width: 320,\r\n height: 480,\r\n text: _TL_('320 x 480 — Portrait (interstitial)'),\r\n sizeText: _TL_('320 x 480'),\r\n targetText: _TL_('Portrait (interstitial)'),\r\n}, {\r\n width: 320,\r\n height: 100,\r\n text: _TL_('320 x 100 — Large banner'),\r\n sizeText: _TL_('320 x 100'),\r\n targetText: _TL_('Large banner'),\r\n}, {\r\n width: 320,\r\n height: 50,\r\n text: _TL_('320 x 50 — Leaderboard'),\r\n sizeText: _TL_('320 x 50'),\r\n targetText: _TL_('Leaderboard'),\r\n}, {\r\n width: 300,\r\n height: 50,\r\n text: _TL_('300 x 50 — Banner'),\r\n sizeText: _TL_('300 x 50'),\r\n targetText: _TL_('Banner'),\r\n}, {\r\n width: 216,\r\n height: 36,\r\n text: _TL_('216 x 36 — Large banner'),\r\n sizeText: _TL_('216 x 36'),\r\n targetText: _TL_('Large banner'),\r\n}, {\r\n width: 168,\r\n height: 28,\r\n text: _TL_('168 x 28 — Medium banner'),\r\n sizeText: _TL_('168 x 28'),\r\n targetText: _TL_('Medium banner'),\r\n}, {\r\n width: 120,\r\n height: 20,\r\n text: _TL_('120 x 20 — Small banner'),\r\n sizeText: _TL_('120 x 20'),\r\n targetText: _TL_('Small banner'),\r\n}];\r\n\r\nconst getSupportedSize = (supportedSize, source) => {\r\n if (!supportedSize || !source) {\r\n return [];\r\n }\r\n\r\n return source.filter(sourceSize => supportedSize.some(baseSize => baseSize.width === sourceSize.width && baseSize.height === sourceSize.height));\r\n};\r\n\r\nconst getStandardOnO = () => {\r\n const supportedSize = [{\r\n width: 300,\r\n height: 250,\r\n }, {\r\n width: 728,\r\n height: 90,\r\n }, {\r\n width: 300,\r\n height: 600,\r\n }, {\r\n width: 160,\r\n height: 600,\r\n }, {\r\n width: 970,\r\n height: 250,\r\n }];\r\n\r\n return getSupportedSize(supportedSize, standard);\r\n};\r\n\r\nconst getStandardOthers = () => {\r\n const supportedSize = [{\r\n width: 336,\r\n height: 280,\r\n }, {\r\n width: 250,\r\n height: 250,\r\n }, {\r\n width: 120,\r\n height: 600,\r\n }, {\r\n width: 970,\r\n height: 90,\r\n }, {\r\n width: 468,\r\n height: 60,\r\n }, {\r\n width: 234,\r\n height: 60,\r\n }, {\r\n width: 180,\r\n height: 150,\r\n }];\r\n\r\n return getSupportedSize(supportedSize, standard);\r\n};\r\n\r\nconst getMobileOnO = () => {\r\n const supportedSize = [{\r\n width: 320,\r\n height: 50,\r\n }];\r\n\r\n return getSupportedSize(supportedSize, mobile);\r\n};\r\n\r\nconst getMobileOthers = () => {\r\n const supportedSize = [{\r\n width: 320,\r\n height: 100,\r\n }, {\r\n width: 320,\r\n height: 480,\r\n }, {\r\n width: 480,\r\n height: 320,\r\n }, {\r\n width: 120,\r\n height: 20,\r\n }, {\r\n width: 300,\r\n height: 50,\r\n }, {\r\n width: 216,\r\n height: 36,\r\n }, {\r\n width: 168,\r\n height: 28,\r\n }];\r\n\r\n return getSupportedSize(supportedSize, mobile);\r\n};\r\n\r\nconst getOptionsTranslated = (\r\n i18n,\r\n sourceWidth,\r\n sourceHeight,\r\n sourceOptions\r\n) => {\r\n const resultOptions = [];\r\n sourceOptions.forEach(({\r\n width,\r\n height,\r\n text,\r\n sizeText,\r\n targetText,\r\n }) => {\r\n if ((!sourceHeight || sourceHeight >= height) && (!sourceWidth || sourceWidth >= width)) {\r\n resultOptions.push({\r\n key: `Image${width}x${height}`,\r\n width,\r\n height,\r\n text: i18n.getString(text),\r\n sizeText: i18n.getString(sizeText),\r\n targetText: i18n.getString(targetText),\r\n });\r\n }\r\n });\r\n\r\n return resultOptions;\r\n};\r\n\r\nexport const getAllStandardOptions = () => getStandardOnO().concat(getStandardOthers());\r\n\r\nexport const getAllMobileOptions = () => getMobileOnO().concat(getMobileOthers());\r\n\r\nexport const getStandardTargetOptions = ({\r\n i18n,\r\n sourceWidth,\r\n sourceHeight,\r\n}) => {\r\n const standardOnO = getStandardOnO();\r\n const standardOnoOptions = getOptionsTranslated(i18n, sourceWidth, sourceHeight, standardOnO);\r\n const standardOthers = getStandardOthers();\r\n const standardOtherOptions = getOptionsTranslated(i18n, sourceWidth, sourceHeight, standardOthers);\r\n\r\n const options = [\r\n ...(standardOnoOptions.length > 0 ? [{\r\n key: 'standardOnoPlacements',\r\n text: i18n.getString(onoTrafficString),\r\n itemType: DropdownMenuItemType.Header,\r\n }]: []),\r\n ...standardOnoOptions,\r\n ...(standardOnoOptions.length > 0 ? [{\r\n key: 'divider',\r\n itemType: DropdownMenuItemType.Divider,\r\n }]: []),\r\n ...(standardOtherOptions.length > 0 ? [{\r\n key: 'standardOtherPlacements',\r\n text: i18n.getString(partnerTrafficString),\r\n itemType: DropdownMenuItemType.Header,\r\n }]:[]),\r\n ...standardOtherOptions,\r\n ];\r\n\r\n return options;\r\n};\r\n\r\nexport const getMobileTargetOptions = ({\r\n i18n,\r\n sourceWidth,\r\n sourceHeight,\r\n}) => {\r\n const mobileOnO = getMobileOnO();\r\n const mobileOnoOptions = getOptionsTranslated(i18n, sourceWidth, sourceHeight, mobileOnO);\r\n const mobileOthers = getMobileOthers();\r\n const mobileOtherOptions = getOptionsTranslated(i18n, sourceWidth, sourceHeight, mobileOthers);\r\n\r\n const options = [\r\n ...(mobileOnoOptions.length > 0 ? [{\r\n key: 'mobileOnoPlacements',\r\n text: i18n.getString(onoTrafficString),\r\n itemType: DropdownMenuItemType.Header,\r\n }]: []),\r\n ...mobileOnoOptions,\r\n ...(mobileOnoOptions.length > 0 ? [{\r\n key: 'divider',\r\n itemType: DropdownMenuItemType.Divider,\r\n }]: []),\r\n ...(mobileOtherOptions.length > 0 ? [{\r\n key: 'mobileOtherPlacements',\r\n text: i18n.getString(partnerTrafficString),\r\n itemType: DropdownMenuItemType.Header,\r\n }]:[]),\r\n ...mobileOtherOptions,\r\n ];\r\n\r\n return options;\r\n};\r\n\r\nexport const getTargetOptions = ({\r\n i18n,\r\n sourceWidth,\r\n sourceHeight,\r\n}) => {\r\n const standardOptions = [];\r\n standard.forEach(({\r\n width,\r\n height,\r\n text,\r\n sizeText,\r\n targetText,\r\n }) => {\r\n if ((!sourceHeight || sourceHeight >= height) && (!sourceWidth || sourceWidth >= width)) {\r\n standardOptions.push({\r\n key: `Image${width}x${height}`,\r\n width,\r\n height,\r\n text: i18n.getString(text),\r\n sizeText: i18n.getString(sizeText),\r\n targetText: i18n.getString(targetText),\r\n });\r\n }\r\n });\r\n\r\n const mobileOptions = [];\r\n mobile.forEach(({\r\n width,\r\n height,\r\n text,\r\n sizeText,\r\n targetText,\r\n }) => {\r\n if ((!sourceHeight || sourceHeight >= height) && (!sourceWidth || sourceWidth >= width)) {\r\n mobileOptions.push({\r\n key: `Image${width}x${height}`,\r\n width,\r\n height,\r\n text: i18n.getString(text),\r\n sizeText: i18n.getString(sizeText),\r\n targetText: i18n.getString(targetText),\r\n });\r\n }\r\n });\r\n\r\n const options = [\r\n ...(standardOptions.length > 0 ? [{\r\n key: 'standard',\r\n text: i18n.getString(_TL_('Standard')),\r\n itemType: DropdownMenuItemType.Header,\r\n }]: []),\r\n ...standardOptions,\r\n ...(standardOptions.length > 0 ? [{\r\n key: 'divider',\r\n itemType: DropdownMenuItemType.Divider,\r\n }]: []),\r\n ...(mobileOptions.length > 0 ? [{\r\n key: 'Mobile',\r\n text: i18n.getString(_TL_('Mobile')),\r\n itemType: DropdownMenuItemType.Header,\r\n }]:[]),\r\n ...mobileOptions,\r\n ];\r\n\r\n return options;\r\n};\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React, { useEffect, useState, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { Text, FontIcon } from '@bingads-webui-react/fabric-control';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { Link } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport { getAdsStepStyles } from './styles';\r\nimport { CropPreview } from './cropped-preview';\r\nimport { getTargetOptions } from './image-targets';\r\n\r\nconst ITEMS_PER_PAGE = 10;\r\n\r\nexport const AdPreview = (props) => {\r\n const {\r\n i18n,\r\n ads,\r\n onUpdateCurrentImageIndex,\r\n disablePagination,\r\n customStyleFunction,\r\n useCustomStyleFunction,\r\n } = props;\r\n\r\n const displayAds = (ads && ads.data) || [];\r\n const defaultClasses = useDefaultStyles(getAdsStepStyles);\r\n const customClasses = useDefaultStyles(customStyleFunction);\r\n const classes = useCustomStyleFunction ? customClasses : defaultClasses;\r\n const { currentPageIndex } = ads;\r\n const [currentImageIdx, setCurrentImageIdx] = useState(0);\r\n const targetOptions = useMemo(() => getTargetOptions({ i18n }), [i18n]);\r\n\r\n const getPageAdjustedIndex = (idx, pageNumber = null) => {\r\n const page = pageNumber || currentPageIndex;\r\n\r\n const val = (((page - 1) * ITEMS_PER_PAGE) + idx);\r\n\r\n return val;\r\n };\r\n\r\n const goToPrevImage = () => {\r\n setCurrentImageIdx(currentImageIdx - 1);\r\n };\r\n\r\n const goToNextImage = () => {\r\n setCurrentImageIdx(currentImageIdx + 1);\r\n };\r\n\r\n const goToImageIndex = (idx) => {\r\n setCurrentImageIdx(idx);\r\n };\r\n\r\n const displayAdsArray = _.isArray(displayAds) ? displayAds : [];\r\n const displayAdsInPage = displayAdsArray.slice(getPageAdjustedIndex(0), getPageAdjustedIndex(9) + 1);\r\n const currentAd = displayAds[getPageAdjustedIndex(currentImageIdx)] || displayAds[0];\r\n const currentImage = (currentAd && currentAd.data && currentAd.data.image) || undefined;\r\n const resizeImageHeight = useMemo(() => {\r\n if (currentImage && currentImage.cropHeight && currentImage.cropWidth) {\r\n const aspectRatio = currentImage.cropWidth / currentImage.cropHeight;\r\n const maxWidth = 458;\r\n return Math.min(maxWidth / aspectRatio, 280);\r\n }\r\n return 0;\r\n }, [currentImage]);\r\n\r\n const currentImageTarget = useMemo(() => {\r\n if (!currentImage) {\r\n return null;\r\n }\r\n const target = targetOptions.find(option => option.key === `Image${currentImage.targetWidth}x${currentImage.targetHeight}`);\r\n\r\n return target || null;\r\n }, [currentImage, targetOptions]);\r\n\r\n useEffect(() => {\r\n setCurrentImageIdx(0);\r\n }, [currentPageIndex]);\r\n\r\n useEffect(() => {\r\n if (currentImageIdx > displayAdsInPage.length - 1) {\r\n setCurrentImageIdx(0);\r\n }\r\n onUpdateCurrentImageIndex(currentImageIdx);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [currentImageIdx, displayAdsInPage.length]);\r\n\r\n return (\r\n
\r\n
\r\n {`${i18n.getString(_TL_('Preview'))}: ${i18n.getString(_TL_('Ad'))} ${currentImageIdx + 1}`} \r\n
\r\n
\r\n
\r\n {currentImageTarget &&\r\n
\r\n {currentImageTarget.sizeText}\r\n \r\n {currentImageTarget.targetText}\r\n \r\n
\r\n }\r\n
\r\n
\r\n { currentImage ? (\r\n ) : (\r\n
\r\n )\r\n }\r\n
\r\n {\r\n !disablePagination && displayAdsInPage.length > 1 && (\r\n
\r\n
\r\n \r\n {i18n.getString(_TL_('Previous ad'))} \r\n \r\n
\r\n {displayAdsInPage.map((image, idx) => (\r\n
\r\n goToImageIndex(idx)}\r\n onClick={() => goToImageIndex(idx)}\r\n className={classes.paginationIndicatorDot}\r\n style={{ backgroundColor: getPageAdjustedIndex(idx) === getPageAdjustedIndex(currentImageIdx) ? '#0078d4' : '#c8c6c4' }}\r\n />\r\n
\r\n ))}\r\n
\r\n \r\n {i18n.getString(_TL_('Next ad'))} \r\n \r\n
\r\n
\r\n )\r\n }\r\n
\r\n \r\n {i18n.getString(_TL_('This is an example of what your display ad might look like. Depending on placement, the actual ad shown may appear differently.'))}\r\n \r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nAdPreview.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n ads: PropTypes.shape({\r\n data: PropTypes.instanceOf(Array),\r\n currentPageIndex: PropTypes.number,\r\n }).isRequired,\r\n disablePagination: PropTypes.bool,\r\n onUpdateCurrentImageIndex: PropTypes.func,\r\n customStyleFunction: PropTypes.func,\r\n useCustomStyleFunction: PropTypes.bool,\r\n};\r\n\r\nAdPreview.defaultProps = {\r\n disablePagination: false,\r\n customStyleFunction: _.noop,\r\n useCustomStyleFunction: false,\r\n onUpdateCurrentImageIndex: _.noop,\r\n};\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { Link, TextField } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport { FontIcon, Text } from '@bingads-webui-react/fabric-control';\r\n\r\nexport const Pagination = ({\r\n totalPages,\r\n disablePagination,\r\n classes,\r\n goToPrevPage,\r\n goToNextPage,\r\n goToPage,\r\n currentPageIndex,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n return (\r\n <>\r\n {totalPages > 1 && !disablePagination && (\r\n
\r\n
\r\n \r\n Prev \r\n \r\n goToPage(val)}\r\n />\r\n {i18n.getString(_TL_('of'))} {totalPages} \r\n \r\n {i18n.getString(_TL_('Next'))} \r\n \r\n
\r\n
\r\n )}\r\n \r\n );\r\n};\r\n\r\nPagination.propTypes = {\r\n totalPages: PropTypes.number.isRequired,\r\n disablePagination: PropTypes.bool,\r\n classes: PropTypes.shape({\r\n pagination: PropTypes.shape({}).isRequired,\r\n pageControls: PropTypes.shape({}).isRequired,\r\n }).isRequired,\r\n goToPrevPage: PropTypes.func.isRequired,\r\n goToNextPage: PropTypes.func.isRequired,\r\n goToPage: PropTypes.func.isRequired,\r\n currentPageIndex: PropTypes.number.isRequired,\r\n};\r\n\r\nPagination.defaultProps = {\r\n disablePagination: false,\r\n};\r\n","import _ from 'underscore';\r\nimport { AspectRatiosForDisplayAds } from '@bingads-webui-campaign-react/image-experience-model';\r\n\r\nexport const imageModelToViewModel = (imageModel) => {\r\n const type = /^Image(\\d+)x(\\d+)/.exec(imageModel.type);\r\n const width = parseInt(type[1], 10);\r\n const height = parseInt(type[2], 10);\r\n const image = {\r\n id: imageModel.id,\r\n disableEdit: imageModel.disableEdit,\r\n subType: 'DisplayCreativeImage',\r\n targetWidth: width,\r\n targetHeight: height,\r\n cropX: imageModel.cropSettings.SourceX,\r\n cropY: imageModel.cropSettings.SourceY,\r\n cropWidth: imageModel.cropSettings.SourceWidth,\r\n cropHeight: imageModel.cropSettings.SourceHeight,\r\n src: imageModel.src,\r\n text: imageModel.text,\r\n originalWidth: imageModel.width,\r\n originalHeight: imageModel.height,\r\n };\r\n\r\n return image;\r\n};\r\n\r\nexport const imagePlacementsToImage = ({ crops, defaults, selected }) => {\r\n const filtered = crops.filter(({ type, width, height }) => {\r\n const aspectRatio = AspectRatiosForDisplayAds[type];\r\n const { minSize: [minWidth, minHeight] } = aspectRatio;\r\n return width >= minWidth && height >= minHeight;\r\n });\r\n\r\n let selectedImage = null;\r\n if (selected) {\r\n const selectedIndex = filtered.findIndex(({ type }) => type === `Image${selected.TargetWidth}x${selected.TargetHeight}`);\r\n filtered[selectedIndex].cropSettings = {\r\n ...filtered[selectedIndex].cropSettings,\r\n SourceWidth: selected.CropWidth,\r\n SourceHeight: selected.CropHeight,\r\n SourceX: selected.CropX,\r\n SourceY: selected.CropY,\r\n };\r\n selectedImage = filtered[selectedIndex];\r\n } else {\r\n selectedImage = _.max(filtered, ({ cropSettings: { SourceHeight, SourceWidth }, width, height }) => (SourceHeight * SourceWidth) / width / height);\r\n }\r\n\r\n return {\r\n data: {\r\n ...defaults,\r\n image: imageModelToViewModel(selectedImage),\r\n imagePlacements: filtered,\r\n },\r\n };\r\n};\r\n\r\nexport const isAdsEmpty = ({\r\n displayAds,\r\n}) => {\r\n if (displayAds.length === 1) {\r\n return displayAds[0].data && displayAds[0].data.image === null && displayAds[0].data.FinalUrls.length === 1 && displayAds[0].data.FinalUrls[0] === undefined;\r\n }\r\n\r\n return !(displayAds.length > 1);\r\n};\r\n\r\nexport const addCreativesToDisplayAds = ({\r\n displayAds, creatives,\r\n}) => {\r\n if (isAdsEmpty({ displayAds })) {\r\n // no ad exists, all ads are empty.\r\n return [...creatives];\r\n }\r\n\r\n return [...displayAds, ...creatives];\r\n};\r\n\r\n// recursivley translate all the keys and child keys first character to upper case for now\r\nexport const transformFirstCharacterToUpperCase = (creativeData = {}) => Object.keys(creativeData).reduce((acc, key) => {\r\n if (typeof creativeData[key] === 'object') {\r\n acc[key.charAt(0).toUpperCase() + key.slice(1)] = transformFirstCharacterToUpperCase(creativeData[key]);\r\n } else {\r\n acc[key.charAt(0).toUpperCase() + key.slice(1)] = creativeData[key];\r\n }\r\n return acc;\r\n}, {});\r\n\r\n","import React, { useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { noop } from 'underscore';\r\nimport { constants } from '@bingads-webui-campaign-react/image-experience-model';\r\nimport { AddImageCrudAdComponent } from '@bingads-webui-campaign-react/add-media-panel-crud-ad';\r\nimport { useAssetLibraryImagePicker } from '@bingads-webui-campaign-react/add-image-hooks';\r\n\r\nexport const AddImage = ({\r\n advertiserCustomerId,\r\n accountId,\r\n i18n,\r\n perfMarker,\r\n preferenceService,\r\n permissions,\r\n oDataConfig,\r\n suggestionState,\r\n suggestionPoller,\r\n fullUrl,\r\n urlPrefix,\r\n onUpdateUrlPrefix,\r\n onUpdateUrlValue,\r\n dateFormat,\r\n timeZone,\r\n activityLogger,\r\n maxUploadNum,\r\n displayImagePicker,\r\n setDisplayImagePicker,\r\n selectedMediaPanelSource,\r\n setSelectedMediaPanelSource,\r\n onNewImageSelected,\r\n isAADUser,\r\n creativeEditorProps,\r\n serverContext,\r\n}) => {\r\n const [addImageChildPerfmarker] = useState(() => perfMarker.createChild('imagePicker'));\r\n const emptyFinalUrl = !fullUrl || fullUrl === `${urlPrefix}://`;\r\n\r\n const {\r\n imagePickerError,\r\n setImagePickerError,\r\n clearImagePickerError,\r\n uploadImage,\r\n processUploadedImage,\r\n minSize,\r\n addImageByUrl,\r\n getStockImages,\r\n getInvestImages,\r\n onSelectStockImage,\r\n onImageSelected,\r\n onImagesSelected,\r\n socialMediaDataSource,\r\n customMediaSourceConfig,\r\n } = useAssetLibraryImagePicker({\r\n cid: advertiserCustomerId.toString(),\r\n aid: accountId.toString(),\r\n oDataConfig,\r\n onNewImageSelected,\r\n i18n,\r\n permissions,\r\n isDisplayAds: true,\r\n });\r\n\r\n const { suggestion = {} } = suggestionState;\r\n\r\n return (\r\n {\r\n setDisplayImagePicker(newOpen);\r\n if (!newOpen) {\r\n clearImagePickerError();\r\n }\r\n }}\r\n uploadImage={uploadImage}\r\n processUploadedImage={processUploadedImage}\r\n minSize={minSize}\r\n maxUploadNum={maxUploadNum}\r\n imageExperienceProps={{\r\n suggestion,\r\n suggestionPoller,\r\n finalUrl: emptyFinalUrl ? '' : fullUrl,\r\n finalUrlProtocol: `${urlPrefix}://`,\r\n onUpdateFinalUrl: onUpdateUrlValue,\r\n onUpdateFinalUrlPrefix: onUpdateUrlPrefix,\r\n isMultimediaAd: false,\r\n imageOption: constants.defaultImageOption,\r\n isDisplayAds: true,\r\n }}\r\n addImageByUrl={addImageByUrl}\r\n managedViewSelectionState={selectedMediaPanelSource}\r\n updateManagedViewSelectionState={setSelectedMediaPanelSource}\r\n stockImageConfig={{\r\n getStockImages,\r\n onSelectStockImage,\r\n }}\r\n investImageConfig={{\r\n getInvestImages,\r\n }}\r\n socialImageConfig={{\r\n socialMediaDataSource,\r\n activityLogger,\r\n }}\r\n assetLibraryConfig={{\r\n cid: advertiserCustomerId.toString(),\r\n aid: accountId.toString(),\r\n oDataConfig,\r\n dateFormat,\r\n timeZone,\r\n preferencesService: preferenceService,\r\n activityLogger,\r\n onImageSelected,\r\n onImagesSelected,\r\n onImageAddError: e => setImagePickerError(e),\r\n enableStockMultipleSelection: true,\r\n enableInvestMultipleSelection: true,\r\n enableWebsiteMultipleSelection: true,\r\n }}\r\n i18n={i18n}\r\n cid={advertiserCustomerId.toString()}\r\n aid={accountId.toString()}\r\n errorMessage={imagePickerError}\r\n imageType={null}\r\n customMediaSourceConfig={customMediaSourceConfig}\r\n perfMarker={addImageChildPerfmarker}\r\n permissions={permissions}\r\n isAADUser={isAADUser}\r\n creativeEditorProps={creativeEditorProps}\r\n serverContext={serverContext}\r\n />\r\n );\r\n};\r\n\r\nAddImage.propTypes = {\r\n advertiserCustomerId: PropTypes.number.isRequired,\r\n accountId: PropTypes.number.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n perfMarker: PropTypes.shape({\r\n willFetchFile: PropTypes.func.isRequired,\r\n willInit: PropTypes.func.isRequired,\r\n willFetchData: PropTypes.func.isRequired,\r\n willRender: PropTypes.func.isRequired,\r\n done: PropTypes.func.isRequired,\r\n createChild: PropTypes.func.isRequired,\r\n }).isRequired,\r\n preferenceService: PropTypes.shape({\r\n setAtUserLevel: PropTypes.func,\r\n findByNameAtUserLevel: PropTypes.func,\r\n }).isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({\r\n }),\r\n }),\r\n oDataConfig: PropTypes.shape({\r\n odataRootUrl: PropTypes.string,\r\n odataPath: PropTypes.string,\r\n odataToken: PropTypes.string,\r\n }).isRequired,\r\n suggestionState: PropTypes.shape({\r\n suggestion: PropTypes.shape({}),\r\n carousel: PropTypes.shape({}),\r\n }).isRequired,\r\n suggestionPoller: PropTypes.shape({}).isRequired,\r\n adCreatorScenario: PropTypes.shape({\r\n scenarioName: PropTypes.string,\r\n scenarioValue: PropTypes.string,\r\n }),\r\n fullUrl: PropTypes.string,\r\n urlPrefix: PropTypes.string,\r\n onUpdateUrlPrefix: PropTypes.func,\r\n onUpdateUrlValue: PropTypes.func,\r\n dateFormat: PropTypes.string,\r\n timeZone: PropTypes.number,\r\n activityLogger: PropTypes.shape({}),\r\n maxUploadNum: PropTypes.number,\r\n displayImagePicker: PropTypes.bool,\r\n setDisplayImagePicker: PropTypes.func.isRequired,\r\n selectedMediaPanelSource: PropTypes.string.isRequired,\r\n setSelectedMediaPanelSource: PropTypes.func.isRequired,\r\n onNewImageSelected: PropTypes.func.isRequired,\r\n isAADUser: PropTypes.bool,\r\n creativeEditorProps: PropTypes.shape({}),\r\n assetLibraryConfigs: PropTypes.shape({\r\n imagePickerError: PropTypes.string,\r\n setImagePickerError: PropTypes.func,\r\n clearImagePickerError: PropTypes.func,\r\n uploadImage: PropTypes.func,\r\n processUploadedImage: PropTypes.func,\r\n minSize: PropTypes.number,\r\n addImageByUrl: PropTypes.func,\r\n getStockImages: PropTypes.func,\r\n getInvestImages: PropTypes.func,\r\n onSelectStockImage: PropTypes.func,\r\n onImageSelected: PropTypes.func,\r\n onImagesSelected: PropTypes.func,\r\n socialMediaDataSource: PropTypes.shape({}),\r\n customMediaSourceConfig: PropTypes.shape({}),\r\n }).isRequired,\r\n};\r\n\r\nAddImage.defaultProps = {\r\n permissions: {},\r\n adCreatorScenario: undefined,\r\n fullUrl: '',\r\n urlPrefix: '',\r\n onUpdateUrlPrefix: noop,\r\n onUpdateUrlValue: noop,\r\n dateFormat: 'M/d/yyyy',\r\n timeZone: 71,\r\n activityLogger: {},\r\n displayImagePicker: false,\r\n maxUploadNum: 1,\r\n isAADUser: false,\r\n creativeEditorProps: undefined,\r\n};\r\n","import React, { useContext, useState, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { get } from 'underscore';\r\nimport classNames from 'classnames';\r\nimport { DefaultButton } from '@bingads-webui-react/fabric-control';\r\nimport { ActivityContext, ScenarioContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { withInstrumentation } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { withPreference } from '@bingads-webui-react/preference-context';\r\nimport {\r\n getUrlPrefixAndDestination,\r\n getUpdatedFullUrlOnPrefixUpdate,\r\n getUpdatedFullUrlOnTextUpdate,\r\n validateAdUrl\r\n} from '@bingads-webui-campaign-react/url-input-fluent';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { useWebsiteSuggestion } from '@bingads-webui-campaign-react/add-image-hooks';\r\n\r\nimport { AddImage } from './add-image';\r\n\r\nconst getStyles = () => ({\r\n buttonContainer: {\r\n display: 'flex',\r\n padding: '32px',\r\n height: '134px',\r\n flexDirection: 'column',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n borderRadius: '12px',\r\n marginTop: '16px',\r\n border: '1px dashed #B3B0AD',\r\n },\r\n});\r\n\r\nconst PopulateImages = ({\r\n aid,\r\n i18n,\r\n perfMarker,\r\n preferenceService,\r\n permissions,\r\n oDataConfig,\r\n serverContext,\r\n onNewImageSelected,\r\n selectedMediaPanelSource,\r\n setSelectedMediaPanelSource,\r\n displayImagePicker,\r\n setDisplayImagePicker,\r\n instrumentation,\r\n campaignId,\r\n onUpdateUrl,\r\n fullUrl,\r\n maxUploadNum,\r\n showAddButton,\r\n creativeEditorProps,\r\n}) => {\r\n const classes = useDefaultStyles(getStyles);\r\n const activity = useContext(ActivityContext);\r\n const scenario = useContext(ScenarioContext);\r\n const [privateUrl, setPrivateUrl] = useState('');\r\n\r\n const url = useMemo(() => {\r\n if (validateAdUrl(fullUrl)=== null) {\r\n return fullUrl;\r\n }\r\n\r\n return privateUrl || 'https://';\r\n }, [fullUrl, privateUrl]);\r\n\r\n const urlPrefixValue = useMemo(() => {\r\n const [prefix] = getUrlPrefixAndDestination(url);\r\n return prefix;\r\n }, [url]);\r\n\r\n const {\r\n suggestionState,\r\n suggestionPoller,\r\n } = useWebsiteSuggestion({\r\n oDataConfig,\r\n adContext: {\r\n advertiserCustomerId: get(serverContext, ['CurrentAccount', 'AdvertiserCustomerID']),\r\n accountId: aid,\r\n campaignId,\r\n },\r\n instrumentation,\r\n logActivity: activity.signal,\r\n permissions,\r\n fullUrl: url,\r\n hasErrorInUrl: validateAdUrl(url) !== null,\r\n adCreatorScenario: {\r\n scenarioName: `${scenario.name}AdCreation`,\r\n scenarioValue: `${scenario.name}AdCreation`,\r\n },\r\n });\r\n\r\n const updateUrl = (evt) => {\r\n const { value } = evt.target;\r\n const newUrl = getUpdatedFullUrlOnTextUpdate(urlPrefixValue, value);\r\n if (onUpdateUrl) {\r\n onUpdateUrl(newUrl);\r\n } else {\r\n setPrivateUrl(newUrl);\r\n }\r\n };\r\n\r\n const updateUrlPrefix = (evt, { text }) => {\r\n const newPrefix = text.substring(0, text.length - 3);\r\n const [, original] = getUrlPrefixAndDestination(url);\r\n const newUrl = getUpdatedFullUrlOnPrefixUpdate(original, newPrefix);\r\n if (onUpdateUrl) {\r\n onUpdateUrl(newUrl);\r\n } else {\r\n setPrivateUrl(newUrl);\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n { showAddButton &&\r\n
\r\n {\r\n setDisplayImagePicker(true);\r\n }}\r\n className=\"add-image-button\"\r\n styles={{ root: { minWidth: '200px', marginTop: 16 } }}\r\n />\r\n
\r\n }\r\n \r\n );\r\n};\r\n\r\nPopulateImages.propTypes = {\r\n aid: PropTypes.number.isRequired,\r\n campaignId: PropTypes.number.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n perfMarker: PropTypes.shape({\r\n }).isRequired,\r\n preferenceService: PropTypes.shape({\r\n setAtUserLevel: PropTypes.func,\r\n findByNameAtUserLevel: PropTypes.func,\r\n }).isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({\r\n }),\r\n }).isRequired,\r\n oDataConfig: PropTypes.shape({\r\n odataRootUrl: PropTypes.string,\r\n odataPath: PropTypes.string,\r\n odataToken: PropTypes.string,\r\n }).isRequired,\r\n serverContext: PropTypes.shape({\r\n CurrentAccount: PropTypes.shape({\r\n AdvertiserCustomerID: PropTypes.number,\r\n TimeZone: PropTypes.number,\r\n }),\r\n CurrentUser: PropTypes.shape({\r\n CultureDateTimeFormat: PropTypes.shape({\r\n ShortDatePattern: PropTypes.string,\r\n }),\r\n }),\r\n }).isRequired,\r\n onNewImageSelected: PropTypes.func.isRequired,\r\n selectedMediaPanelSource: PropTypes.string.isRequired,\r\n setSelectedMediaPanelSource: PropTypes.func.isRequired,\r\n displayImagePicker: PropTypes.bool.isRequired,\r\n setDisplayImagePicker: PropTypes.func.isRequired,\r\n instrumentation: PropTypes.shape({\r\n addScenario: PropTypes.func,\r\n }).isRequired,\r\n onUpdateUrl: PropTypes.func,\r\n fullUrl: PropTypes.string,\r\n maxUploadNum: PropTypes.number,\r\n showAddButton: PropTypes.bool,\r\n creativeEditorProps: PropTypes.shape({}),\r\n};\r\n\r\nPopulateImages.defaultProps = {\r\n onUpdateUrl: undefined,\r\n fullUrl: '',\r\n maxUploadNum: 10,\r\n showAddButton: true,\r\n creativeEditorProps: undefined,\r\n};\r\n\r\nconst wrapped = withPreference(withInstrumentation(PopulateImages));\r\n\r\nexport { wrapped as PopulateImages };\r\n","import _ from 'underscore';\r\n\r\n// errors\r\nexport const errors = {\r\n NO_RECOMMENDATION: _TL_('There are no recommendations for this Final URL'),\r\n FinalURL: _TL_('Unable to generate recommendations for this Final URL'),\r\n DEFAULT: _TL_('Unable to generate recommendations'),\r\n};\r\n\r\n// convert placementTexts and placements to a map\r\nexport const placements = {\r\n SuperLeaderboard: {\r\n name: _TL_('970x90 Super leaderboard'),\r\n size: '970x90',\r\n },\r\n Leaderboard: {\r\n name: _TL_('728x90 Leaderboard'),\r\n size: '728x90',\r\n },\r\n FullBanner: {\r\n name: _TL_('468x60 Full banner'),\r\n size: '468x60',\r\n },\r\n SmallLeaderboard: {\r\n name: _TL_('320x50 Small leaderboard'),\r\n size: '320x50',\r\n },\r\n Banner: {\r\n name: _TL_('300x50 Banner'),\r\n size: '300x50',\r\n },\r\n LargeBanner: {\r\n name: _TL_('216x36 Large banner'),\r\n size: '216x36',\r\n },\r\n MediumBanner: {\r\n name: _TL_('168x28 Medium banner'),\r\n size: '168x28',\r\n },\r\n SmallBanner: {\r\n name: _TL_('120x20 Small banner'),\r\n size: '120x20',\r\n },\r\n HalfBanner: {\r\n name: _TL_('234x60 Half banner'),\r\n size: '234x60',\r\n },\r\n Billboard: {\r\n name: _TL_('970x250 Billboard'),\r\n size: '970x250',\r\n },\r\n LandscapeLargeBanner: {\r\n name: _TL_('320x100 Landscape large banner'),\r\n size: '320x100',\r\n },\r\n Landscape: {\r\n name: _TL_('480x320 Landscape'),\r\n size: '480x320',\r\n },\r\n LargeRectangle: {\r\n name: _TL_('336x280 Large rectangle'),\r\n size: '336x280',\r\n },\r\n MediumRectangle: {\r\n name: _TL_('300x250 Medium rectangle'),\r\n size: '300x250',\r\n },\r\n Rectangle: {\r\n name: _TL_('180x150 Rectangle'),\r\n size: '180x150',\r\n },\r\n Square: {\r\n name: _TL_('250x250 Square'),\r\n size: '250x250',\r\n },\r\n Portrait: {\r\n name: _TL_('320x480 Portrait'),\r\n size: '320x480',\r\n },\r\n HalfPage: {\r\n name: _TL_('300x600 Half page'),\r\n size: '300x600',\r\n },\r\n WideSkyscraper: {\r\n name: _TL_('160x600 Wide skyscraper'),\r\n size: '160x600',\r\n },\r\n Skyscraper: {\r\n name: _TL_('120x600 Skyscraper'),\r\n size: '120x600',\r\n },\r\n};\r\n\r\nconst ratios = {\r\n [placements.SuperLeaderboard.size]: 'SuperLeaderboard',\r\n [placements.Leaderboard.size]: 'Leaderboard',\r\n [placements.FullBanner.size]: 'FullBanner',\r\n [placements.SmallLeaderboard.size]: 'SmallLeaderboard',\r\n [placements.Banner.size]: 'Banner',\r\n [placements.LargeBanner.size]: 'LargeBanner',\r\n [placements.MediumBanner.size]: 'MediumBanner',\r\n [placements.SmallBanner.size]: 'SmallBanner',\r\n [placements.HalfBanner.size]: 'HalfBanner',\r\n [placements.Billboard.size]: 'Billboard',\r\n [placements.LandscapeLargeBanner.size]: 'LandscapeLargeBanner',\r\n [placements.Landscape.size]: 'Landscape',\r\n [placements.LargeRectangle.size]: 'LargeRectangle',\r\n [placements.MediumRectangle.size]: 'MediumRectangle',\r\n [placements.Rectangle.size]: 'Rectangle',\r\n [placements.Square.size]: 'Square',\r\n [placements.Portrait.size]: 'Portrait',\r\n [placements.HalfPage.size]: 'HalfPage',\r\n [placements.WideSkyscraper.size]: 'WideSkyscraper',\r\n [placements.Skyscraper.size]: 'Skyscraper',\r\n};\r\n\r\nexport const ratioGrouping = {\r\n XWide: [\r\n ratios[placements.SuperLeaderboard.size],\r\n ratios[placements.Leaderboard.size],\r\n ratios[placements.FullBanner.size],\r\n ratios[placements.SmallLeaderboard.size],\r\n ratios[placements.Banner.size],\r\n ratios[placements.LargeBanner.size],\r\n ratios[placements.MediumBanner.size],\r\n ratios[placements.SmallBanner.size],\r\n ],\r\n Landscape: [\r\n ratios[placements.HalfBanner.size],\r\n ratios[placements.Billboard.size],\r\n ratios[placements.LandscapeLargeBanner.size],\r\n ratios[placements.Landscape.size],\r\n ],\r\n Square: [\r\n ratios[placements.LargeRectangle.size],\r\n ratios[placements.MediumRectangle.size],\r\n ratios[placements.Rectangle.size],\r\n ratios[placements.Square.size],\r\n ],\r\n Vertical: [\r\n ratios[placements.Portrait.size],\r\n ratios[placements.HalfPage.size],\r\n ratios[placements.WideSkyscraper.size],\r\n ratios[placements.Skyscraper.size],\r\n ],\r\n};\r\n\r\n// MT has this unicode character : –\r\nexport const getPlacement = ad => ratios[ad.template.templateName.split('-')[0].trim()];\r\n\r\nexport const getPlacementFromTemplate = template => ratios[template.templateName.split('-')[0].trim()];\r\n\r\n// add placement to each ad\r\nexport const addPlacementToAd = (ads) => {\r\n const adsWithPlacement = ads.map((ad) => {\r\n const MTPlacement = getPlacement(ad);\r\n\r\n return {\r\n ...ad,\r\n placement: MTPlacement,\r\n };\r\n });\r\n\r\n return adsWithPlacement;\r\n};\r\n\r\n// return a map grouped by image url\r\nexport const groupAdsByImages = (ads) => {\r\n const groupedAds = _.groupBy(ads, ad => ad.template.image.url);\r\n return groupedAds;\r\n};\r\n\r\nexport const groupAdsByRatio = (groupedAds) => {\r\n const adsWithRatioGroups = {};\r\n\r\n const imageUrls = _.keys(groupedAds);\r\n\r\n // for each image url, group by placement ratio group\r\n _.each(imageUrls, (imageUrl) => {\r\n const ads = groupedAds[imageUrl];\r\n const groupedByPlacement = _.groupBy(ads, (ad) => {\r\n const { placement } = ad;\r\n const ratioGroup = _.findKey(ratioGrouping, ratiosKey => _.contains(ratiosKey, placement));\r\n return ratioGroup;\r\n });\r\n\r\n adsWithRatioGroups[imageUrl] = groupedByPlacement;\r\n });\r\n\r\n return adsWithRatioGroups;\r\n};\r\n\r\nconst getRandomImageForEachRatioGroup = (adsWithRatioGroups) => {\r\n const randomImages = [];\r\n\r\n _.each(adsWithRatioGroups, (ads) => {\r\n const randomImage = _.mapObject(ads, (group) => {\r\n const randomAd = _.sample(group);\r\n\r\n const imageSuggestionCarouselObj = {\r\n thumbnailUrl: randomAd.url,\r\n fullUrl: randomAd.template.image.url,\r\n suggestionId: randomAd.recommendationId,\r\n };\r\n\r\n return imageSuggestionCarouselObj;\r\n });\r\n\r\n randomImages.push(..._.values(randomImage));\r\n });\r\n\r\n return randomImages;\r\n};\r\n\r\n\r\nexport const processAndGroupAds = (ads) => {\r\n const adsWithPlacement = addPlacementToAd(ads);\r\n const groupedAds = groupAdsByImages(adsWithPlacement);\r\n const adsWithRatioGroups = groupAdsByRatio(groupedAds);\r\n\r\n return {\r\n imagesToSuggest: getRandomImageForEachRatioGroup(adsWithRatioGroups),\r\n groupedAds: adsWithRatioGroups,\r\n };\r\n};\r\n\r\n\r\nexport const getItemsForListFromGroupedAds = (groupedAds) => {\r\n const items = [];\r\n\r\n _.each(groupedAds, (ratioGroups) => {\r\n _.each(ratioGroups, (ads) => {\r\n const sampleAd = _.sample(ads);\r\n\r\n const newItem = {\r\n id: sampleAd.recommendationId,\r\n previewSrc: sampleAd.url,\r\n previewType: sampleAd.placement,\r\n placements: ads.map(ad => ({\r\n id: ad.recommendationId,\r\n type: ad.placement,\r\n })),\r\n };\r\n\r\n items.push(newItem);\r\n });\r\n });\r\n\r\n return items;\r\n};\r\n\r\nexport const getAdsInMatchingGroup = (groupedAds, id) => {\r\n const matchingGroup = _.find(groupedAds, ratioGroups => _.find(ratioGroups, ads => _.some(ads, ad => ad.recommendationId === id)));\r\n const matchingAds = _.find(matchingGroup, ads => _.some(ads, ad => ad.recommendationId === id));\r\n\r\n return matchingAds;\r\n};\r\n\r\nexport const getODataConfig = (serverContext) => {\r\n const isLocal = () => {\r\n const hostname = document.location.hostname.toLowerCase();\r\n return hostname.indexOf('ads.microsoft.com') === -1 &&\r\n hostname.indexOf('ads-int.microsoft.com') === -1;\r\n };\r\n\r\n const odataPath = isLocal() ? 'Advertiser/V2' : 'Campaign/V2';\r\n\r\n const oDataConfig = {\r\n odataToken: serverContext.Token,\r\n oDataToken: serverContext.Token,\r\n odataPath: `${serverContext.ServicesEndpoints.CampaignAPI}${odataPath}`,\r\n oDataPath: `${serverContext.ServicesEndpoints.CampaignAPI}${odataPath}`,\r\n };\r\n\r\n return oDataConfig;\r\n};\r\n","import React, { useEffect, useMemo, useCallback, useState, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport classNames from 'classnames';\r\nimport { Text, ChoiceGroup } from '@fluentui/react';\r\nimport { Dropdown, Label, Stack } from '@bingads-webui-react/fabric-control';\r\nimport { withCustomValidation, withError } from '@bingads-webui-react/validation';\r\nimport { entityIs, propertyIs, andComp } from '@bingads-webui-campaign-react/form-error';\r\nimport { PreferenceContext } from '@bingads-webui-react/preference-context';\r\nimport { withControlErrorHandling, withUnvalidatedControlErrors } from '@bingads-webui-campaign-react/error-handling';\r\nimport { DefaultButton, ERROR_ENTITY, IconButton } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport { MediaEditorPanel } from '@bingads-webui-campaign-react/media-editor-panel';\r\nimport { PivotItemKey } from '@bingads-webui-campaign-react/media-editor';\r\nimport { isTestEnvironment } from '@bingads-webui-campaign/global-app-init';\r\nimport { MediaRepository } from '@bingads-webui-campaign/media-repository';\r\nimport { constants } from '@bingads-webui-campaign-react/image-experience';\r\nimport { ScenarioContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { AspectRatiosForDisplayAds } from '@bingads-webui-campaign-react/image-experience-model';\r\nimport { withServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { useImagePicker } from '@bingads-webui-campaign-react/add-image-hooks';\r\nimport { PreviewSingleRightRailWrapper } from '@bingads-webui-campaign-react/preview-right-rail-wrapper';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { CroppedImageView } from '@bingads-webui-campaign-react/cropped-image-view';\r\nimport { HelpPopupInline } from '@bingads-webui-react/help-popup';\r\nimport { useCopilotRepositoryContext } from '@bingads-webui/inline-copilot';\r\nimport { DisplayAdsEditorDrawer as DisplayAdsEditor } from '@bingads-webui-campaign-react/display-ads-editor';\r\nimport { InstrumentationContext } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { useBrandKitService } from '@bingads-webui-campaign-react/brandkit-data-service';\r\nimport { withComponentErrorLogging } from '@bingads-webui-campaign-react/global-error-options';\r\n\r\nimport { getTargetOptions, getStandardTargetOptions, getMobileTargetOptions, getAllStandardOptions, getAllMobileOptions } from './image-targets';\r\nimport { imageModelToViewModel, imagePlacementsToImage } from '../model/utl';\r\nimport { PopulateImages } from './populate-images';\r\nimport { CropPreview } from './cropped-preview';\r\nimport { placements, getPlacementFromTemplate } from '../model/constants';\r\n\r\nconst DisplayAdsEditorDrawer = withComponentErrorLogging(DisplayAdsEditor, 'DisplayAdsEditorDrawer');\r\n\r\nconst ImageContainerWidth = 170;\r\nconst ImageContainerHeight = 107;\r\n\r\nconst getStyles = () => ({\r\n rootContainer: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n columnGap: '20px',\r\n },\r\n imageContainer: {\r\n position: 'relative',\r\n height: `${ImageContainerHeight}px`,\r\n width: `${ImageContainerWidth}px`,\r\n overflow: 'hidden',\r\n borderRadius: '6px',\r\n backgroundColor: '#F3F2F1',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n },\r\n buttonContainerStyle: {\r\n display: 'flex',\r\n position: 'absolute',\r\n bottom: '5px',\r\n width: '100%',\r\n justifyContent: 'space-evenly',\r\n },\r\n choiceGroupStyles: {\r\n '& .ms-ChoiceField': {\r\n margin: '0',\r\n },\r\n '& label': {\r\n padding: '0 0 2px 0',\r\n fontWeight: 'normal',\r\n },\r\n },\r\n});\r\n\r\nconst dropdownStyles = {\r\n dropdown: { width: 250 },\r\n};\r\n\r\nconst editButtonStyle = {\r\n root: {\r\n borderRadius: '99px',\r\n height: 32,\r\n width: 32,\r\n backgroundColor: '#ffffffd4',\r\n },\r\n};\r\n\r\nexport const validateImage = (/* Image, i18n */) => {\r\n const messages = [];\r\n\r\n return messages;\r\n};\r\n\r\nconst entityIsAd = entityIs(ERROR_ENTITY.Ad);\r\nconst imageTypeFromImage = image => `Image${image.targetWidth}x${image.targetHeight}`;\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\r\nfunction getImageStyles(image) {\r\n const contentWidth = ImageContainerWidth;\r\n const contentHeight = ImageContainerHeight;\r\n let desiredCropWidth = contentWidth;\r\n let desiredCropHeight = contentHeight;\r\n\r\n const cropImageWidth = image.cropWidth;\r\n const cropImageHeight = image.cropHeight;\r\n\r\n const cropRatio = contentHeight / cropImageHeight > contentWidth / cropImageWidth ?\r\n contentHeight / cropImageHeight : contentWidth / cropImageWidth;\r\n\r\n desiredCropHeight = cropImageHeight * cropRatio;\r\n desiredCropWidth = cropImageWidth * cropRatio;\r\n\r\n const xScale = desiredCropWidth / image.cropWidth;\r\n const yScale = desiredCropHeight / image.cropHeight;\r\n\r\n const midPointOffsetX = desiredCropWidth > contentWidth ?\r\n Math.ceil(-(desiredCropWidth - contentWidth) / 2) : 0;\r\n const midPointOffsetY = desiredCropHeight > contentHeight ?\r\n Math.ceil(-(desiredCropHeight - contentHeight) / 2) : 0;\r\n\r\n return {\r\n image: {\r\n width: image.originalWidth * xScale,\r\n height: image.originalHeight * yScale,\r\n },\r\n container: {\r\n marginLeft: `${(-image.cropX * xScale) + midPointOffsetX}px`,\r\n marginTop: `${(-image.cropY * yScale) + midPointOffsetY}px`,\r\n },\r\n };\r\n}\r\n\r\nconst standardDeviceType = 'standard';\r\nconst mobileDeviceType = 'mobile';\r\nconst standardSizes = getAllStandardOptions();\r\nconst mobileSizes = getAllMobileOptions();\r\n\r\nconst getImageTypeFromSize = ((displayAd) => {\r\n if (!displayAd || !displayAd.image || !displayAd.image.targetHeight || !displayAd.image.targetWidth) {\r\n return standardDeviceType;\r\n }\r\n const { targetWidth, targetHeight } = displayAd.image;\r\n const findDeviceType = size => size.width === targetWidth && size.height === targetHeight;\r\n\r\n if (standardSizes.findIndex(findDeviceType) >=0) {\r\n return standardDeviceType;\r\n }\r\n\r\n if (mobileSizes.findIndex(findDeviceType) >=0) {\r\n return mobileDeviceType;\r\n }\r\n\r\n return standardDeviceType;\r\n});\r\n\r\nconst CustomComponent = (props) => {\r\n const {\r\n i18n,\r\n displayAd,\r\n updateValidation,\r\n oDataConfig,\r\n campaignId,\r\n cid,\r\n aid,\r\n permissions,\r\n serverContext,\r\n perfMarker,\r\n isLoadingImage,\r\n creativeEditorProps,\r\n onRenderCustomAddImageButton,\r\n } = props;\r\n\r\n const {\r\n displayImagePicker,\r\n setDisplayImagePicker,\r\n selectedMediaPanelSource,\r\n setSelectedMediaPanelSource,\r\n } = useImagePicker();\r\n\r\n const isDisplayImageRegroupEnabled = permissions && permissions.dynamic && permissions.dynamic.IsDisplayImageRegroupEnabled;\r\n const scenario = useContext(ScenarioContext);\r\n const instrumentation = useContext(InstrumentationContext);\r\n const [isImageEditDisplayed, setIsImageEditDisplayed] = useState(false);\r\n const [isDisplayTemplateEditorOpen, setIsDisplayTemplateEditorOpen] = useState(false);\r\n const classes = useDefaultStyles(getStyles);\r\n const preferenceService = useContext(PreferenceContext);\r\n\r\n const [deviceFormatType, setDeviceFormatType] = useState(standardDeviceType);\r\n const mediaRepository = useMemo(() => new MediaRepository({\r\n cid,\r\n aid,\r\n cmpId: campaignId,\r\n oDataConfig,\r\n }), [aid, campaignId, cid, oDataConfig]);\r\n\r\n const currentPlacementIndex = useMemo(() => {\r\n if (displayAd && displayAd.image && displayAd.image.targetWidth && displayAd.image.targetHeight) {\r\n const type = imageTypeFromImage(displayAd.image);\r\n const imagePlacementIndex = _.findIndex(displayAd.imagePlacements, placement => placement.type === type);\r\n return imagePlacementIndex;\r\n }\r\n return -1;\r\n }, [displayAd]);\r\n\r\n const copilotRepository = useCopilotRepositoryContext();\r\n const { brandKitDataService, brandkitApiState } = useBrandKitService();\r\n\r\n useEffect(() => {\r\n const shouldDirty = !(_.isUndefined(displayAd) || _.isNull(displayAd));\r\n if (isDisplayImageRegroupEnabled === true) {\r\n const deviceType = getImageTypeFromSize(displayAd);\r\n setDeviceFormatType(deviceType);\r\n }\r\n\r\n // update on mount.\r\n updateValidation(displayAd && (displayAd.image || isLoadingImage) ? validateImage(displayAd.image, i18n) : [i18n.getString(_TL_('Please add an image.'))], {\r\n image: displayAd ? displayAd.image : null,\r\n imagePlacements: displayAd ? displayAd.imagePlacements : null,\r\n creativeData: displayAd ? displayAd.creativeData : null,\r\n }, shouldDirty);\r\n }, [displayAd, i18n, isLoadingImage, updateValidation, isDisplayImageRegroupEnabled]);\r\n\r\n const onEdit = useCallback(() => {\r\n if (displayAd && displayAd.creativeData) {\r\n if (\r\n displayAd.creativeData.creativeMeta &&\r\n displayAd.creativeData.creativeMeta.template &&\r\n Number(displayAd.creativeData.creativeMeta.template.version) >= 1.2\r\n ) {\r\n setIsDisplayTemplateEditorOpen(true);\r\n } else {\r\n setDisplayImagePicker(true);\r\n }\r\n } else {\r\n setIsImageEditDisplayed(true);\r\n }\r\n }, [displayAd, setDisplayImagePicker]);\r\n\r\n const onRemoveImage = useCallback(() => {\r\n updateValidation([i18n.getString(_TL_('Please add an image.'))], {\r\n image: null,\r\n creativeData: null,\r\n });\r\n }, [i18n, updateValidation]);\r\n\r\n const dropdownOptions = useMemo(() => {\r\n if (isDisplayImageRegroupEnabled === true) {\r\n if (deviceFormatType === 'mobile') {\r\n return getMobileTargetOptions({\r\n i18n,\r\n sourceWidth: displayAd && displayAd.image ? displayAd.image.originalWidth : null,\r\n sourceHeight: displayAd && displayAd.image ? displayAd.image.originalHeight : null,\r\n });\r\n }\r\n\r\n return getStandardTargetOptions({\r\n i18n,\r\n sourceWidth: displayAd && displayAd.image ? displayAd.image.originalWidth : null,\r\n sourceHeight: displayAd && displayAd.image ? displayAd.image.originalHeight : null,\r\n });\r\n }\r\n\r\n return getTargetOptions({\r\n i18n,\r\n sourceWidth: displayAd && displayAd.image ? displayAd.image.originalWidth : null,\r\n sourceHeight: displayAd && displayAd.image ? displayAd.image.originalHeight : null,\r\n });\r\n }, [i18n, displayAd, deviceFormatType, isDisplayImageRegroupEnabled]);\r\n\r\n const deviceFormatOptions = useMemo(() => [\r\n {\r\n key: standardDeviceType,\r\n text: i18n.getString(_TL_('Standard')),\r\n }, {\r\n key: mobileDeviceType,\r\n text: i18n.getString(_TL_('Mobile')),\r\n },\r\n ], [i18n]);\r\n\r\n const onChangeTarget = useCallback((event, item, selectItem) => {\r\n const image = displayAd && displayAd.image ? displayAd.image : {};\r\n const currentItem = item || selectItem;\r\n if (image) {\r\n const imagePlacementIndex = _.findIndex(displayAd.imagePlacements, placement => placement.type === currentItem.key);\r\n if (imagePlacementIndex >=0) {\r\n const imageViewModel = imageModelToViewModel(displayAd.imagePlacements[imagePlacementIndex]);\r\n\r\n updateValidation([], {\r\n image: {\r\n ...imageViewModel,\r\n },\r\n imagePlacements: displayAd.imagePlacements,\r\n });\r\n }\r\n } else {\r\n updateValidation([i18n.getString(_TL_('Please add an image.'))], {\r\n image: {\r\n targetWidth: currentItem.width,\r\n targetHeight: currentItem.height,\r\n },\r\n });\r\n }\r\n }, [displayAd, i18n, updateValidation]);\r\n\r\n const selectedItem = useMemo(() => {\r\n if (displayAd && displayAd.image && displayAd.image.targetWidth && displayAd.image.targetHeight) {\r\n if (isDisplayImageRegroupEnabled === true) {\r\n const imageKey = imageTypeFromImage(displayAd.image);\r\n const target = dropdownOptions.find(option => option.key === imageKey);\r\n if (target) {\r\n return imageKey;\r\n }\r\n\r\n const firstItem = dropdownOptions.find(option => !option.itemType);\r\n if (firstItem) {\r\n firstItem.key;\r\n onChangeTarget(null, null, firstItem);\r\n }\r\n }\r\n\r\n return imageTypeFromImage(displayAd.image);\r\n }\r\n return undefined;\r\n }, [displayAd, dropdownOptions, onChangeTarget, isDisplayImageRegroupEnabled]);\r\n\r\n const minCropSize = useMemo(() => {\r\n if (displayAd && displayAd.imagePlacements && displayAd.imagePlacements[currentPlacementIndex]) {\r\n return constants.getMinimumSizeForImage(\r\n displayAd.imagePlacements[currentPlacementIndex].type,\r\n false,\r\n constants.defaultImageOption,\r\n false,\r\n false,\r\n true\r\n );\r\n }\r\n return null;\r\n }, [currentPlacementIndex, displayAd]);\r\n\r\n const baseImage = useMemo(() => {\r\n if (displayAd && displayAd.imagePlacements && displayAd.imagePlacements[currentPlacementIndex]) {\r\n const base = displayAd.imagePlacements[currentPlacementIndex];\r\n return {\r\n Type: base.type,\r\n Src: base.src,\r\n Width: base.width,\r\n Height: base.height,\r\n };\r\n }\r\n return null;\r\n }, [currentPlacementIndex, displayAd]);\r\n\r\n const onSaveEditImage = useCallback(({ cropSettings }) => {\r\n const base = displayAd.imagePlacements[currentPlacementIndex];\r\n\r\n base.cropSettings = cropSettings;\r\n\r\n updateValidation([], {\r\n image: {\r\n ...displayAd.image,\r\n cropWidth: cropSettings.SourceWidth,\r\n cropHeight: cropSettings.SourceHeight,\r\n cropX: cropSettings.SourceX,\r\n cropY: cropSettings.SourceY,\r\n },\r\n imagePlacements: displayAd.imagePlacements,\r\n creativeData: displayAd.creativeData,\r\n });\r\n\r\n setIsImageEditDisplayed(false);\r\n }, [currentPlacementIndex, displayAd, updateValidation]);\r\n\r\n const onNewImageSelected = useCallback((imagePlacements) => {\r\n if (imagePlacements && imagePlacements[0] && imagePlacements[0].creativeData) {\r\n updateValidation([], {\r\n ...imagePlacements[0],\r\n });\r\n } else {\r\n const newAdData = imagePlacementsToImage({ crops: imagePlacements[0] });\r\n updateValidation([], {\r\n ...newAdData.data,\r\n });\r\n }\r\n setDisplayImagePicker(false);\r\n }, [setDisplayImagePicker, updateValidation]);\r\n\r\n const placementTitle = useMemo(() => {\r\n if (!creativeEditorProps) {\r\n return '';\r\n }\r\n const { creativeData } = creativeEditorProps || {};\r\n\r\n const { creativeMeta } = creativeData || {};\r\n\r\n const { placement, template = {} } = creativeMeta || {};\r\n\r\n if (!placement) {\r\n const placementFromTemplate = getPlacementFromTemplate(template);\r\n\r\n return placements[placementFromTemplate].name;\r\n }\r\n return placements[placement].name;\r\n }, [creativeEditorProps]);\r\n\r\n const resizeImageHeightForThumbnail = useMemo(() => {\r\n if (displayAd && displayAd.image && displayAd.image.cropHeight && displayAd.image.cropWidth) {\r\n const aspectRatio = displayAd.image.cropWidth / displayAd.image.cropHeight;\r\n const maxWidth = 170;\r\n return Math.min(maxWidth / aspectRatio, 107);\r\n }\r\n return 0;\r\n }, [displayAd]);\r\n\r\n const imageControl = useMemo(() => {\r\n if (!displayAd) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {!isLoadingImage && displayAd.image &&\r\n (\r\n \r\n )\r\n }\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n {\r\n creativeEditorProps ?\r\n \r\n {i18n.getString(placementTitle)}\r\n \r\n :\r\n
\r\n {isDisplayImageRegroupEnabled ===true &&\r\n (\r\n
\r\n
\r\n \r\n
\r\n setDeviceFormatType(item.key)}\r\n selectedKey={deviceFormatType}\r\n className={classes.choiceGroupStyles}\r\n />\r\n
\r\n \r\n
\r\n
\r\n )\r\n }\r\n \r\n
\r\n }\r\n
\r\n );\r\n }, [classes.choiceGroupStyles, classes.buttonContainerStyle, classes.imageContainer, classes.rootContainer, isDisplayImageRegroupEnabled, deviceFormatType, deviceFormatOptions, creativeEditorProps, displayAd, dropdownOptions, i18n, isLoadingImage, onChangeTarget, onEdit, onRemoveImage, placementTitle, resizeImageHeightForThumbnail, selectedItem]);\r\n\r\n const AddImageButton = useMemo(() => {\r\n if (onRenderCustomAddImageButton) {\r\n return onRenderCustomAddImageButton({\r\n setDisplayImagePicker,\r\n });\r\n }\r\n\r\n return (\r\n setDisplayImagePicker(true)}\r\n />\r\n );\r\n }, [i18n, onRenderCustomAddImageButton, setDisplayImagePicker]);\r\n\r\n return (\r\n
\r\n
\r\n {displayAd && (displayAd.image || isLoadingImage) ?\r\n imageControl : AddImageButton\r\n }\r\n
\r\n 0 ? displayAd.FinalUrls[0] : null}\r\n creativeEditorProps={creativeEditorProps}\r\n />\r\n setIsImageEditDisplayed(false)}\r\n onApply={onSaveEditImage}\r\n mediaRepository={mediaRepository}\r\n aspectRatioConfig={AspectRatiosForDisplayAds}\r\n cropSettings={displayAd && displayAd.imagePlacements && displayAd.imagePlacements[currentPlacementIndex] ? displayAd.imagePlacements[currentPlacementIndex].cropSettings : null}\r\n minCropSize={minCropSize}\r\n baseImage={baseImage}\r\n hasRightRail\r\n onRenderRightRailContent={({\r\n previewImageUrl,\r\n cropSettings = {},\r\n }) => {\r\n const {\r\n SourceWidth, SourceX, SourceY,\r\n } = cropSettings || {};\r\n const aspectRatio = displayAd.image.cropWidth / displayAd.image.cropHeight;\r\n const maxWidth = 500;\r\n const resizeImageHeight = Math.min(maxWidth / aspectRatio, 600);\r\n\r\n return (\r\n \r\n );\r\n }}\r\n adCreatorScenario={{\r\n scenarioName: `${scenario.name}AdCreation`,\r\n scenarioValue: `${scenario.name}AdCreation`,\r\n }}\r\n isThumbsUpDownEnabled={serverContext.IsAADUser}\r\n isTestEnv={isTestEnvironment(document.domain)}\r\n disabledPivotItemKeys={[PivotItemKey.Effect]}\r\n customizedDefaultSelectedPivotItemKey={PivotItemKey.Crop}\r\n />\r\n {\r\n isDisplayTemplateEditorOpen &&\r\n 0 ? displayAd.FinalUrls[0] : null}\r\n showNavigation\r\n showSummaryBarControl\r\n preferenceService={preferenceService}\r\n displayTemplatesDataService={copilotRepository}\r\n isOpen={isDisplayTemplateEditorOpen}\r\n setIsOpen={setIsDisplayTemplateEditorOpen}\r\n imageData={{\r\n ...displayAd.image,\r\n metadata: displayAd.creativeData.creativeMeta,\r\n }}\r\n onApplyCreative={creativeEditorProps.onApplyCreative}\r\n scenario={scenario}\r\n aid={aid}\r\n cid={cid}\r\n sourceType={displayAd.image.originalSourceType}\r\n />\r\n }\r\n
\r\n );\r\n};\r\n\r\nCustomComponent.propTypes = {\r\n // onDataChange: PropTypes.func.isRequired,\r\n // idx: PropTypes.number.isRequired,\r\n displayAd: PropTypes.shape({\r\n FinalUrls: PropTypes.arrayOf(PropTypes.string),\r\n image: PropTypes.shape({\r\n src: PropTypes.string,\r\n originalWidth: PropTypes.number,\r\n originalHeight: PropTypes.number,\r\n cropWidth: PropTypes.number,\r\n cropHeight: PropTypes.number,\r\n cropX: PropTypes.number,\r\n cropY: PropTypes.number,\r\n targetHeight: PropTypes.number,\r\n targetWidth: PropTypes.number,\r\n }),\r\n imagePlacements: PropTypes.arrayOf(PropTypes.shape({\r\n src: PropTypes.string,\r\n width: PropTypes.number,\r\n height: PropTypes.number,\r\n type: PropTypes.string,\r\n cropSettings: PropTypes.shape({\r\n SourceX: PropTypes.number,\r\n SourceY: PropTypes.number,\r\n SourceWidth: PropTypes.number,\r\n SourceHeight: PropTypes.number,\r\n }),\r\n })),\r\n creativeData: PropTypes.shape({\r\n creativeMeta: PropTypes.shape({\r\n placement: PropTypes.string,\r\n template: PropTypes.shape({ version: PropTypes.string }),\r\n }),\r\n }),\r\n messages: PropTypes.arrayOf(PropTypes.string),\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n oDataConfig: PropTypes.shape({}).isRequired,\r\n campaignId: PropTypes.number.isRequired,\r\n cid: PropTypes.number.isRequired,\r\n aid: PropTypes.number.isRequired,\r\n perfMarker: PropTypes.shape({}).isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({\r\n IsDisplayImageRegroupEnabled: PropTypes.bool,\r\n BrandKitUI: PropTypes.bool,\r\n }).isRequired,\r\n }).isRequired,\r\n serverContext: PropTypes.shape({\r\n IsAADUser: PropTypes.bool,\r\n }).isRequired,\r\n isLoadingImage: PropTypes.bool.isRequired,\r\n creativeEditorProps: PropTypes.shape({\r\n onApplyCreative: PropTypes.func,\r\n }),\r\n onRenderCustomAddImageButton: PropTypes.func,\r\n useBrandKit: PropTypes.bool,\r\n};\r\n\r\nCustomComponent.defaultProps = {\r\n creativeEditorProps: undefined,\r\n onRenderCustomAddImageButton: undefined,\r\n};\r\n\r\nconst ImageExperienceWithValidation = withServerContext(withControlErrorHandling(withUnvalidatedControlErrors(withError(withCustomValidation(CustomComponent)))));\r\n\r\nexport const ValidatedImageExperience = (props) => {\r\n const {\r\n displayAd, idx, i18n, ...rest\r\n } = props;\r\n\r\n const ImageProp = andComp(entityIsAd, propertyIs(`Image.ImageMedia_${idx}`));\r\n\r\n const dataObj = {\r\n image: (displayAd && displayAd.image) || null,\r\n imagePlacements: (displayAd && displayAd.imagePlacements) || null,\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nValidatedImageExperience.propTypes = {\r\n displayAd: PropTypes.shape({\r\n image: PropTypes.shape({ }),\r\n imagePlacements: PropTypes.arrayOf(PropTypes.shape({})),\r\n messages: PropTypes.arrayOf(PropTypes.string),\r\n }).isRequired,\r\n idx: PropTypes.number.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n};\r\n","import React, { useMemo, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport _ from 'underscore';\r\nimport { Label, Stack } from '@bingads-webui-react/fabric-control';\r\nimport { ResponsiveAd } from '@bingads-webui/campaign-odata-schemas';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { mergeI18n } from '@bingads-webui-campaign-react/i18n-merger';\r\nimport { ValidationGroup, withCustomValidation, withError } from '@bingads-webui-react/validation';\r\nimport { withControlErrorHandling, withUnvalidatedControlErrors } from '@bingads-webui-campaign-react/error-handling';\r\nimport { ValidatedFinalUrl as UrlInput } from '@bingads-webui-campaign-react/validated-url-input';\r\nimport { IconButton } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport { ThirdPartyMeasurementContainerWithValidation } from '@bingads-webui-campaign-react/third-party-measurement';\r\nimport { HelpPopupInline } from '@bingads-webui-react/help-popup';\r\nimport { AdvancedSettings } from '@bingads-webui-campaign-react/display-plus-native-ads';\r\n\r\nimport { ValidatedImageExperience } from './validated-image-experience';\r\nimport { getAdsStepStyles } from './styles';\r\n\r\nconst ValidatedFinalUrl = withControlErrorHandling(withUnvalidatedControlErrors(withError(withCustomValidation(UrlInput))));\r\n\r\nexport const DisplayAdPanel = ({\r\n i18n,\r\n perfMarker,\r\n cid,\r\n aid,\r\n campaignId,\r\n onUpdate,\r\n onRemovePanel,\r\n removeCloseButton,\r\n permissions,\r\n displayAd,\r\n keyIndex,\r\n isSelectedPanel,\r\n oDataConfig,\r\n customStyleFunction,\r\n useCustomStyleFunction,\r\n isLoadingImage,\r\n}) => {\r\n const defaultClasses = useDefaultStyles(getAdsStepStyles);\r\n\r\n const customClasses = useDefaultStyles(customStyleFunction);\r\n\r\n const classes = useCustomStyleFunction ? customClasses : defaultClasses;\r\n\r\n const legacyI18n = useMemo(() => window.globalLegacyI18n.get('$/i18n!legacy/global'), []);\r\n const i18nMerged = useMemo(() => mergeI18n(legacyI18n, i18n), [legacyI18n, i18n]);\r\n const finalUrlsObj = { FinalUrls: displayAd && displayAd.FinalUrls };\r\n\r\n const verifiedTrackingSettingObj = {\r\n VerifiedTrackingSettings: displayAd && displayAd.VerifiedTrackingSettings,\r\n };\r\n\r\n const isIasTrackingEnable = _.result(permissions.dynamic, 'EnableDisplayAdsIasTracking', false);\r\n const isAdvancedURLOptionsForMSANDisplayEnabled =\r\n _.result(permissions.dynamic, 'AdvancedURLOptionsForDisplay', false) &&\r\n _.result(permissions.dynamic, 'EnableMSANDisplayCampaigns', false);\r\n\r\n const isImpressionTrackingForDisplayAndVideoEnabled =\r\n _.result(permissions, 'isImpressionTrackingForDisplayAndVideoEnabled', false);\r\n\r\n const IsMOATEnabled = _.result(permissions, 'IsMOATEnabled', false);\r\n\r\n const onValidationUpdate = useCallback((result) => {\r\n onUpdate(result);\r\n }, [onUpdate]);\r\n\r\n const advancedSettings = useMemo(() => (\r\n \r\n ), [verifiedTrackingSettingObj.VerifiedTrackingSettings, displayAd]);\r\n\r\n return (\r\n
\r\n \r\n \r\n { !removeCloseButton &&\r\n
\r\n \r\n
\r\n }\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n { !(isAdvancedURLOptionsForMSANDisplayEnabled || isImpressionTrackingForDisplayAndVideoEnabled)\r\n && isIasTrackingEnable && (\r\n \r\n )}\r\n { (isAdvancedURLOptionsForMSANDisplayEnabled || isImpressionTrackingForDisplayAndVideoEnabled) && (\r\n
\r\n {advancedSettings}\r\n
\r\n )}\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nDisplayAdPanel.propTypes = {\r\n perfMarker: PropTypes.shape({}).isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({\r\n EnableDisplayAdsIasTracking: PropTypes.bool,\r\n }),\r\n }).isRequired,\r\n cid: PropTypes.number.isRequired,\r\n aid: PropTypes.number.isRequired,\r\n campaignId: PropTypes.number.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n onUpdate: PropTypes.func.isRequired,\r\n onRemovePanel: PropTypes.func.isRequired,\r\n removeCloseButton: PropTypes.bool.isRequired,\r\n displayAd: PropTypes.shape([]).isRequired,\r\n keyIndex: PropTypes.number.isRequired,\r\n isSelectedPanel: PropTypes.bool.isRequired,\r\n oDataConfig: PropTypes.shape({}),\r\n customStyleFunction: PropTypes.func,\r\n useCustomStyleFunction: PropTypes.bool,\r\n isLoadingImage: PropTypes.bool.isRequired,\r\n};\r\n\r\nDisplayAdPanel.defaultProps = {\r\n oDataConfig: null,\r\n customStyleFunction: _.noop,\r\n useCustomStyleFunction: false,\r\n};\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React, { useState, useEffect, useContext, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { FontIcon } from '@bingads-webui-react/fabric-control';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\nimport { Link, usePageManager } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport { Pagination } from './pagination';\r\nimport { DisplayAdPanel } from './display-ad-panel';\r\nimport { getAdsStepStyles } from './styles';\r\n\r\nexport const DisplayAdsContainer = (props) => {\r\n const {\r\n aid,\r\n cid,\r\n i18n,\r\n perfMarker,\r\n onAdsValidation,\r\n currentImageIndex,\r\n ads = [],\r\n oDataConfig,\r\n disablePagination,\r\n permissions,\r\n customStyleFunction,\r\n useCustomStyleFunction,\r\n resetFields,\r\n isAdGridEditorMode,\r\n campaignId,\r\n isLoadingImage,\r\n initialAdsCount,\r\n } = props;\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const defaultClasses = useDefaultStyles(getAdsStepStyles);\r\n\r\n const customClasses = useDefaultStyles(customStyleFunction);\r\n\r\n const classes = useCustomStyleFunction ? customClasses : defaultClasses;\r\n\r\n const [DisplayAds, setDisplayAds] = useState(ads || []);\r\n\r\n const {\r\n goToNextPage,\r\n goToPrevPage,\r\n goToPage,\r\n getPageAdjustedIndex,\r\n currentPage,\r\n currentPageIndex,\r\n pages,\r\n onAddItem,\r\n removeItem,\r\n totalPages,\r\n maxItems,\r\n } = usePageManager(ads, initialAdsCount);\r\n\r\n const onAddAd = useCallback(() => {\r\n onAddItem();\r\n if (activity) {\r\n activity.signal(`Adding new ad panel - current total: ${currentPage.numberOfAdsInPage}`);\r\n }\r\n }, [activity, currentPage.numberOfAdsInPage, onAddItem]);\r\n\r\n const onImagePanelUpdate = (result, idx, uid) => {\r\n let itemAtIdx = DisplayAds[idx] || { image: null, FinalUrls: [], uid: null };\r\n\r\n if (!itemAtIdx.uid) {\r\n itemAtIdx = { ...result, uid, Id: itemAtIdx.Id };\r\n } else {\r\n itemAtIdx = { ...result, uid: itemAtIdx.uid, Id: itemAtIdx.Id };\r\n }\r\n\r\n const itemsBefore = DisplayAds.slice(0, idx);\r\n const itemsAfter = DisplayAds.slice(idx + 1, DisplayAds.length);\r\n setDisplayAds([...itemsBefore, { ...itemAtIdx }, ...itemsAfter]);\r\n };\r\n\r\n const onRemovePanel = (idx) => {\r\n if (activity) {\r\n activity.signal(`Removing ad panel at idx ${idx}`);\r\n }\r\n DisplayAds.splice(idx, 1);\r\n\r\n setDisplayAds([...DisplayAds]);\r\n\r\n removeItem();\r\n };\r\n\r\n const isAllValid = () => {\r\n let valid = true;\r\n // eslint-disable-next-line consistent-return\r\n _.each(DisplayAds, (ad) => {\r\n if (!ad.isValid) {\r\n valid = false;\r\n }\r\n });\r\n\r\n return valid;\r\n };\r\n\r\n const isAllDirty = () => {\r\n let dirty = false;\r\n // eslint-disable-next-line consistent-return\r\n _.each(DisplayAds, (ad) => {\r\n if (ad.isDirty) {\r\n dirty = true;\r\n }\r\n });\r\n\r\n return dirty;\r\n };\r\n\r\n useEffect(() => {\r\n const result = {\r\n data: [...DisplayAds], isValid: isAllValid(), isDirty: isAllDirty(), currentPageIndex,\r\n };\r\n onAdsValidation(result);\r\n if (activity) {\r\n activity.signal(`onDisplayAdsContainerValidated - ${JSON.stringify(result)}`);\r\n }\r\n // disabling exhaustive deps since the onAdsValidation value changes on each rerender.\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [currentPageIndex, DisplayAds]);\r\n\r\n useEffect(() => {\r\n if (resetFields) {\r\n setDisplayAds([]);\r\n }\r\n }, [resetFields]);\r\n\r\n useEffect(() => {\r\n setClarityTag('XandrDisplayAds', 'true');\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!_.isEqual(ads, DisplayAds) && !isAdGridEditorMode) {\r\n // check if ads has any ad that has id. (update scenario)\r\n let shouldUpdate = false;\r\n\r\n _.each(ads, (ad) => {\r\n const displayAd = _.filter(DisplayAds, vAd => vAd.uid === ad.uid);\r\n\r\n if (displayAd && displayAd[0] && _.isUndefined(displayAd[0].Id) && ad.Id) {\r\n shouldUpdate = true;\r\n }\r\n });\r\n\r\n if (shouldUpdate) {\r\n setDisplayAds(ads);\r\n }\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [ads]);\r\n\r\n return (\r\n
\r\n {\r\n _.map(pages, (page) => {\r\n const panels = _.map(_.range(page.numberOfAdsInPage), (idx) => {\r\n const displayAd = (DisplayAds[getPageAdjustedIndex(idx, page.pageNumber)] && DisplayAds[getPageAdjustedIndex(idx, page.pageNumber)].data);\r\n\r\n const uid = (DisplayAds[getPageAdjustedIndex(idx, page.pageNumber)] && DisplayAds[getPageAdjustedIndex(idx, page.pageNumber)].uid) || _.uniqueId('displayAd_');\r\n\r\n const isCurrentPage = page.id === currentPage.id;\r\n\r\n return (\r\n
\r\n onImagePanelUpdate(result, getPageAdjustedIndex(idx, page.pageNumber), uid)}\r\n onRemovePanel={() => onRemovePanel(getPageAdjustedIndex(idx, page.pageNumber), page)}\r\n removeCloseButton={page.numberOfAdsInPage === 1}\r\n keyIndex={uid}\r\n isSelectedPanel={currentImageIndex === idx}\r\n oDataConfig={oDataConfig}\r\n isLoadingImage={isLoadingImage}\r\n />\r\n
\r\n );\r\n });\r\n\r\n return panels;\r\n })\r\n }\r\n {\r\n (currentPage.numberOfAdsInPage < maxItems && !disablePagination && !_.isEmpty(DisplayAds)) &&\r\n
\r\n \r\n  {i18n.getString(_TL_('Create another ad'))}\r\n \r\n
\r\n }\r\n \r\n
\r\n );\r\n};\r\n\r\nDisplayAdsContainer.propTypes = {\r\n aid: PropTypes.number.isRequired,\r\n cid: PropTypes.number.isRequired,\r\n campaignId: PropTypes.number.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n perfMarker: PropTypes.shape({}).isRequired,\r\n permissions: PropTypes.shape({}).isRequired,\r\n onAdsValidation: PropTypes.func.isRequired,\r\n ads: PropTypes.shape({\r\n data: PropTypes.shape({}),\r\n }).isRequired,\r\n oDataConfig: PropTypes.shape({}),\r\n disablePagination: PropTypes.bool,\r\n customStyleFunction: PropTypes.func,\r\n useCustomStyleFunction: PropTypes.bool,\r\n resetFields: PropTypes.bool,\r\n currentImageIndex: PropTypes.number,\r\n isAdGridEditorMode: PropTypes.bool,\r\n isLoadingImage: PropTypes.bool,\r\n initialAdsCount: PropTypes.number,\r\n};\r\n\r\nDisplayAdsContainer.defaultProps = {\r\n oDataConfig: null,\r\n disablePagination: false,\r\n customStyleFunction: _.noop,\r\n useCustomStyleFunction: false,\r\n resetFields: false,\r\n currentImageIndex: 0,\r\n isAdGridEditorMode: false,\r\n isLoadingImage: false,\r\n initialAdsCount: 0,\r\n};\r\n","import React, { useContext } from 'react';\r\nimport { ValidationGroup } from '@bingads-webui-react/validation';\r\nimport { ValidatedLegacyCallToAction } from '@bingads-webui-campaign-react/legacy-call-to-action';\r\nimport { AssetGroup } from '@bingads-webui/campaign-odata-schemas';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { PermissionsContext } from '@bingads-webui-react/hoc-with-permissions';\r\n\r\nconst getStyles = () => ({\r\n container: {\r\n position: 'relative',\r\n },\r\n});\r\n\r\nexport const CTAInCreativeEditor = ({ newCTA, onValidate }) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const classes = useDefaultStyles(getStyles);\r\n\r\n const permissions = useContext(PermissionsContext);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n","import { useContext, useCallback, useState } from 'react';\r\nimport { RecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { useCopilotRepositoryContext } from '@bingads-webui/inline-copilot';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { PermissionsContext } from '@bingads-webui-react/hoc-with-permissions';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { useCopilotLoggers } from '@bingads-webui-campaign-react/copilot-loggers';\r\nimport { isCopilotRegionRestricted } from '@bingads-webui-react/copilot-utils';\r\nimport { useBrandKitDataService } from '@bingads-webui-campaign-react/brandkit-data-service';\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\n\r\nimport { processAndGroupAds, errors } from '../model/constants';\r\n\r\nconst formatReturnedSuggestions = suggestions => ({\r\n RecommendedAssets: {\r\n ImageAssets: suggestions.map(({ recommendationId }) =>\r\n ({ RecommendationId: recommendationId })),\r\n },\r\n});\r\n\r\nconst formatBrandkitForAPI = (obj) => {\r\n if (Array.isArray(obj)) {\r\n return obj.map(formatBrandkitForAPI);\r\n } else if (obj !== null && typeof obj === 'object') {\r\n const formattedObj = {};\r\n Object.keys(obj).forEach((key) => {\r\n if (key === 'Id') {\r\n formattedObj.Id = parseInt(obj[key], 10);\r\n } else if (key === 'SubType') {\r\n formattedObj.SubType = 'None';\r\n } else if (key !== 'Type') {\r\n formattedObj[key] = formatBrandkitForAPI(obj[key]);\r\n }\r\n });\r\n return formattedObj;\r\n }\r\n return obj;\r\n};\r\n\r\nexport const useDisplayAdsCopilot = () => {\r\n const [, setRecommendationContext] = useContext(RecommendationContext);\r\n const { logBannerGenerated } = useCopilotLoggers();\r\n const [isLoadingBrandKit, setIsLoadingBrandkit] = useState(false);\r\n const [brandkit, setBrandKit] = useState(null);\r\n const [isBrandKitEmpty, setIsBrandKitEmpty] = useState(true);\r\n const { scope } = useContext(ScopeContext) || {};\r\n\r\n const { aid } = scope.values;\r\n const permissions = useContext(PermissionsContext);\r\n const serverContext = useContext(ServerContext);\r\n const isBrandKitEnabled = permissions && permissions.dynamic && permissions.dynamic.BrandKitUI;\r\n\r\n const repository = useCopilotRepositoryContext();\r\n\r\n const {\r\n fetchDisplayAdsAssetRecommendations,\r\n fetchDisplayAdsTemplateDefinition,\r\n editDisplayAdsAssetRecommendations,\r\n finalUrl,\r\n } = repository;\r\n\r\n const { getBrandKitDataByAccId } = useBrandKitDataService();\r\n\r\n const fetchBrandKit = useCallback(async () => {\r\n if (isBrandKitEnabled) {\r\n const restrictionCall = isCopilotRegionRestricted({\r\n feature: 'Recommendations',\r\n permissions,\r\n serverContext,\r\n });\r\n setIsLoadingBrandkit(true);\r\n const response = await getBrandKitDataByAccId({ accId: aid });\r\n const isRestricted = await restrictionCall;\r\n if (!isRestricted) {\r\n const isBrandKitHavingData = response?.BrandKits?.[0] && Object.keys(response.BrandKits[0]).length > 0 && (response.BrandKits[0].Fonts?.length !== 0 ||\r\n response.BrandKits[0].Images?.length !== 0 ||\r\n response.BrandKits[0].LandscapeLogos?.length !== 0 ||\r\n response.BrandKits[0].Palettes?.length !== 0 ||\r\n response.BrandKits[0].SquareLogos?.length !== 0);\r\n if (isBrandKitHavingData) {\r\n setIsBrandKitEmpty(false);\r\n setClarityTag({ DisplayAdsWithBrandKit: 'true' });\r\n setBrandKit(formatBrandkitForAPI(response.BrandKits[0]));\r\n } else {\r\n setIsBrandKitEmpty(true);\r\n }\r\n setIsLoadingBrandkit(false);\r\n } else {\r\n setIsBrandKitEmpty(true);\r\n setIsLoadingBrandkit(false);\r\n }\r\n }\r\n }, [isBrandKitEnabled, getBrandKitDataByAccId, aid, serverContext, permissions, setBrandKit, setIsBrandKitEmpty]);\r\n\r\n const fetch = useCallback(async (count = 10, useBrandKit) => {\r\n if (!finalUrl) {\r\n return;\r\n }\r\n\r\n setRecommendationContext({\r\n isLoading: true,\r\n });\r\n\r\n if (!isLoadingBrandKit) {\r\n fetchDisplayAdsAssetRecommendations(count, (useBrandKit && brandkit) ? brandkit : null, isBrandKitEnabled ? '1.2' : '1.1').then((response) => {\r\n const { ImageAssets, Ads } = response;\r\n\r\n const {\r\n groupedAds,\r\n imagesToSuggest,\r\n } = processAndGroupAds(Ads);\r\n\r\n setRecommendationContext({\r\n ImageAssets,\r\n Ads,\r\n isLoading: false,\r\n finalUrl,\r\n groupedAds,\r\n imagesToSuggest,\r\n errorMessage: null,\r\n });\r\n\r\n logBannerGenerated(finalUrl, formatReturnedSuggestions(Ads));\r\n }).catch((e) => {\r\n if (e.message === 'NO_RECOMMENDATION') {\r\n setRecommendationContext({\r\n isLoading: false,\r\n finalUrl,\r\n imagesToSuggest: [],\r\n Ads: [],\r\n groupedAds: [],\r\n errorMessage: errors.NO_RECOMMENDATION,\r\n });\r\n }\r\n\r\n setRecommendationContext({\r\n isLoading: false,\r\n finalUrl,\r\n imagesToSuggest: [],\r\n Ads: [],\r\n groupedAds: [],\r\n errorMessage: (e && e.errors && e.errors[0] && errors[e.errors[0].target]) || errors.DEFAULT,\r\n });\r\n });\r\n }\r\n }, [fetchDisplayAdsAssetRecommendations, finalUrl, logBannerGenerated, brandkit, isLoadingBrandKit, setRecommendationContext, isBrandKitEnabled]);\r\n\r\n const fetchAigcTemplateDefinition = useCallback(templateId => fetchDisplayAdsTemplateDefinition(templateId)\r\n .then(response => response)\r\n .catch(err => ({ err })), [fetchDisplayAdsTemplateDefinition]);\r\n\r\n\r\n const generate = useCallback(ads => editDisplayAdsAssetRecommendations(ads).then((updatedCreative) => {\r\n const { Ads } = updatedCreative;\r\n\r\n return Ads && Ads[0];\r\n }), [editDisplayAdsAssetRecommendations]);\r\n\r\n return {\r\n fetch,\r\n fetchAigcTemplateDefinition,\r\n generate,\r\n finalUrlForCopilot: finalUrl,\r\n isBrandKitEmpty,\r\n fetchBrandKit,\r\n };\r\n};\r\n","import React, { useMemo, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport _ from 'underscore';\r\nimport { Label, Stack } from '@bingads-webui-react/fabric-control';\r\nimport { ResponsiveAd } from '@bingads-webui/campaign-odata-schemas';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { mergeI18n } from '@bingads-webui-campaign-react/i18n-merger';\r\nimport { ValidationGroup, withCustomValidation, withError } from '@bingads-webui-react/validation';\r\nimport { withControlErrorHandling, withUnvalidatedControlErrors } from '@bingads-webui-campaign-react/error-handling';\r\nimport { ValidatedFinalUrl as UrlInput } from '@bingads-webui-campaign-react/validated-url-input-fluent-v2';\r\nimport { IconButton } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport { ThirdPartyMeasurementContainerWithValidation } from '@bingads-webui-campaign-react/third-party-measurement';\r\nimport { HelpPopupInline } from '@bingads-webui-react/help-popup';\r\nimport { Button, makeStyles } from '@fluentui/react-components';\r\nimport { AddRegular } from '@fluentui/react-icons';\r\nimport { AdvancedSettings } from '@bingads-webui-campaign-react/display-plus-native-ads';\r\n\r\nimport { ValidatedImageExperience } from './validated-image-experience';\r\nimport { getAdsStepStyles } from './styles';\r\nimport { CTAInCreativeEditor } from './validated-legacy-call-to-action';\r\nimport { useDisplayAdsCopilot } from './use-display-ads-copilot';\r\n\r\nconst useFluentV2Styles = makeStyles({\r\n button: {\r\n display: 'flex',\r\n 'flex-flow': 'column',\r\n },\r\n addIcon: {\r\n color: '#0078D4',\r\n fontSize: '32px',\r\n },\r\n});\r\n\r\nconst ValidatedFinalUrl = withControlErrorHandling(withUnvalidatedControlErrors(withError(withCustomValidation(UrlInput))));\r\n\r\nexport const DisplayAdPanelWithCopilot = ({\r\n i18n,\r\n perfMarker,\r\n cid,\r\n aid,\r\n campaignId,\r\n onUpdate,\r\n onRemovePanel,\r\n removeCloseButton,\r\n permissions,\r\n displayAd,\r\n useBrandKit,\r\n keyIndex,\r\n isSelectedPanel,\r\n oDataConfig,\r\n customStyleFunction,\r\n useCustomStyleFunction,\r\n isLoadingImage,\r\n}) => {\r\n const defaultClasses = useDefaultStyles(getAdsStepStyles);\r\n\r\n const customClasses = useDefaultStyles(customStyleFunction);\r\n\r\n const classes = useCustomStyleFunction ? customClasses : defaultClasses;\r\n\r\n const { generate, fetchAigcTemplateDefinition } = useDisplayAdsCopilot();\r\n\r\n const fluentV2Styles = useFluentV2Styles();\r\n\r\n const legacyI18n = useMemo(() => window.globalLegacyI18n.get('$/i18n!legacy/global'), []);\r\n const i18nMerged = useMemo(() => mergeI18n(legacyI18n, i18n), [legacyI18n, i18n]);\r\n const finalUrlsObj = { FinalUrls: displayAd && displayAd.FinalUrls };\r\n\r\n const verifiedTrackingSettingObj = {\r\n VerifiedTrackingSettings: displayAd && displayAd.VerifiedTrackingSettings,\r\n };\r\n\r\n const isIasTrackingEnable = _.result(permissions.dynamic, 'EnableDisplayAdsIasTracking', false);\r\n const isAdvancedURLOptionsForMSANDisplayEnabled =\r\n _.result(permissions.dynamic, 'AdvancedURLOptionsForDisplay', false) &&\r\n _.result(permissions.dynamic, 'EnableMSANDisplayCampaigns', false);\r\n\r\n const isImpressionTrackingForDisplayAndVideoEnabled =\r\n _.result(permissions, 'isImpressionTrackingForDisplayAndVideoEnabled', false);\r\n\r\n\r\n const IsMOATEnabled = _.result(permissions, 'IsMOATEnabled', false);\r\n\r\n const onValidationUpdate = useCallback((result) => {\r\n onUpdate(result);\r\n }, [onUpdate]);\r\n\r\n const advancedSettings = useMemo(() => (\r\n \r\n ), [verifiedTrackingSettingObj.VerifiedTrackingSettings, displayAd, isAdvancedURLOptionsForMSANDisplayEnabled]);\r\n\r\n const onCTAUpdate = useCallback((data, setCTA) => {\r\n if (!_.isEmpty(data)) {\r\n setCTA(data);\r\n }\r\n }, []);\r\n\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n const creativeEditorProps = useMemo(() => ({\r\n onRenderCTA: (newCTA, setCTA) => { onCTAUpdate(result.data, setCTA); }} />,\r\n onApplyCreative: ({\r\n imageObj,\r\n creativeMeta,\r\n }) => {\r\n onUpdate({\r\n data: {\r\n ...displayAd,\r\n image: imageObj,\r\n creativeData: {\r\n creativeMeta,\r\n },\r\n },\r\n isValid: true,\r\n isDirty: true,\r\n });\r\n },\r\n finalUrl: displayAd && displayAd.FinalUrls && displayAd.FinalUrls[0],\r\n creativeData: displayAd && displayAd.creativeData,\r\n onGenerateCreative: creativeDataInner => generate({\r\n template: {\r\n ...creativeDataInner,\r\n },\r\n }),\r\n fetchAigcTemplateDefinition,\r\n }), [displayAd, generate, fetchAigcTemplateDefinition, onCTAUpdate, onUpdate]);\r\n\r\n const onRenderCustomAddImageButton = useCallback(({ setDisplayImagePicker }) => (\r\n
\r\n \r\n
\r\n\r\n ), [classes.addNewImageButton, fluentV2Styles.addIcon, fluentV2Styles.button]);\r\n\r\n return (\r\n
\r\n \r\n \r\n { !removeCloseButton &&\r\n
\r\n \r\n
\r\n }\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n { !(isAdvancedURLOptionsForMSANDisplayEnabled || isImpressionTrackingForDisplayAndVideoEnabled) && isIasTrackingEnable && (\r\n \r\n )}\r\n { (isAdvancedURLOptionsForMSANDisplayEnabled || isImpressionTrackingForDisplayAndVideoEnabled) && (\r\n
\r\n {advancedSettings}\r\n
\r\n )}\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nDisplayAdPanelWithCopilot.propTypes = {\r\n perfMarker: PropTypes.shape({}).isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({\r\n EnableDisplayAdsIasTracking: PropTypes.bool,\r\n }),\r\n }).isRequired,\r\n cid: PropTypes.number.isRequired,\r\n aid: PropTypes.number.isRequired,\r\n campaignId: PropTypes.number.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n onUpdate: PropTypes.func.isRequired,\r\n onRemovePanel: PropTypes.func.isRequired,\r\n removeCloseButton: PropTypes.bool.isRequired,\r\n displayAd: PropTypes.shape([]).isRequired,\r\n useBrandKit: PropTypes.bool,\r\n keyIndex: PropTypes.number.isRequired,\r\n isSelectedPanel: PropTypes.bool.isRequired,\r\n oDataConfig: PropTypes.shape({}),\r\n customStyleFunction: PropTypes.func,\r\n useCustomStyleFunction: PropTypes.bool,\r\n isLoadingImage: PropTypes.bool.isRequired,\r\n};\r\n\r\nDisplayAdPanelWithCopilot.defaultProps = {\r\n oDataConfig: null,\r\n customStyleFunction: _.noop,\r\n useCustomStyleFunction: false,\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Panel, PanelType } from '@fluentui/react';\r\nimport { FluentProvider, webLightTheme } from '@fluentui/react-components';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useCopilotRepositoryContext } from '@bingads-webui/inline-copilot';\r\nimport { ViewAllRecommendations } from '@bingads-webui/inline-copilot-ui';\r\nimport { RecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\n\r\nimport { getAdsInMatchingGroup, getItemsForListFromGroupedAds } from '../model/constants';\r\n\r\n\r\nexport const AllRecommendationsPanel = ({ isOpen, onDismiss, onSelectImageSuggestion }) => {\r\n const i18n = useContext(I18nContext);\r\n const activity = useContext(ActivityContext);\r\n\r\n const [{ isLoading, groupedAds } = {}] = useContext(RecommendationContext);\r\n const { finalUrl } = useCopilotRepositoryContext();\r\n\r\n const images = useMemo(() => getItemsForListFromGroupedAds(groupedAds), [groupedAds]);\r\n\r\n const handleDismiss = useCallback(() => {\r\n if (activity) {\r\n activity.signal('[All Recommendations Panel] - Closing panel');\r\n }\r\n\r\n onDismiss();\r\n }, [activity, onDismiss]);\r\n\r\n const handleSelectImageSuggestion = useCallback((id) => {\r\n if (activity) {\r\n activity.signal(`[All Recommendations Panel] - Selecting image ${id}`);\r\n }\r\n\r\n const matchingAds = getAdsInMatchingGroup(groupedAds, id);\r\n\r\n onSelectImageSuggestion(matchingAds);\r\n onDismiss();\r\n }, [activity, groupedAds, onSelectImageSuggestion, onDismiss]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nAllRecommendationsPanel.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onDismiss: PropTypes.func.isRequired,\r\n onSelectImageSuggestion: PropTypes.func.isRequired,\r\n};\r\n","const IMAGE_DIM = {\r\n width: 106,\r\n height: 76,\r\n marginRight: 8,\r\n};\r\n\r\nconst PaddleBottomValue = 18;\r\n\r\nexport const initialImageContainerLeftMargin = 10;\r\n\r\nexport const getFullyShownImagesCount = (width) => {\r\n if (!width) {\r\n return 0;\r\n }\r\n\r\n const itemWidth = IMAGE_DIM.width + IMAGE_DIM.marginRight;\r\n\r\n return Math.floor(width / itemWidth);\r\n};\r\n\r\nexport const getCarouselStyles = (components, { palette = {} } = {}, iconFontFamily = 'MsAds MDL2 Assets') => ({\r\n carouselParent: {\r\n position: 'relative',\r\n display: 'inline-flex',\r\n width: '100%',\r\n alignItems: 'end',\r\n },\r\n disabledCarouselParent: {\r\n pointerEvents: 'none',\r\n opacity: 0.4,\r\n },\r\n image: {\r\n ...IMAGE_DIM,\r\n boxShadow: '0px 0.3px 0.9px rgba(0, 0, 0, 0.1), 0px 1.6px 3.6px rgba(0, 0, 0, 0.13)',\r\n objectFit: 'cover',\r\n borderRadius: 6,\r\n },\r\n imageContainer: ({ imageContainerLeftMargin, isCollapsible }) => ({\r\n height: 80,\r\n overflowX: 'hidden',\r\n overflowY: 'hidden',\r\n display: 'flex',\r\n marginLeft: isCollapsible ? imageContainerLeftMargin : 0,\r\n flexGrow: 1,\r\n }),\r\n imageParentContainer: ({ imageParentLeftOffset, numberOfImages }) => ({\r\n width: (IMAGE_DIM.width + IMAGE_DIM.marginRight) * numberOfImages,\r\n position: 'relative',\r\n left: ((-1 * IMAGE_DIM.width) - IMAGE_DIM.marginRight) * imageParentLeftOffset,\r\n display: 'flex',\r\n columnGap: '10px',\r\n }),\r\n imageClickableContainer: {\r\n display: 'inline',\r\n width: 107,\r\n '& :hover': {\r\n cursor: 'pointer',\r\n },\r\n '& img': {\r\n verticalAlign: 'top',\r\n },\r\n },\r\n loadingMessageContainer: {\r\n marginTop: 16,\r\n marginLeft: 16,\r\n },\r\n loadingText: {\r\n display: 'inline-block',\r\n fontSize: '12px',\r\n lineHeight: '16px',\r\n verticalAlign: 'top',\r\n },\r\n panel: {},\r\n panelHeading: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n panelTitle: {\r\n flexGrow: 0,\r\n },\r\n panelIcon: {\r\n marginRight: 3,\r\n paddingBottom: 12,\r\n '&:before': {\r\n fontFamily: iconFontFamily,\r\n content: '\"\\\\E3AF\"',\r\n },\r\n },\r\n panelHelpButton: {\r\n display: 'flex',\r\n },\r\n imageHintRight: {\r\n display: 'inline-block',\r\n position: 'absolute',\r\n background: 'linear-gradient(270deg, #FFFFFF 0%, rgba(255, 255, 255, 0.927755) 18.23%, rgba(255, 255, 255, 0.776042) 48.44%, rgba(250, 249, 255, 0.5) 78.24%, rgba(255, 255, 255, 0) 100%)',\r\n width: 20,\r\n height: IMAGE_DIM.height,\r\n right: 32,\r\n },\r\n imageHintLeft: {\r\n display: 'inline-block',\r\n position: 'absolute',\r\n background: 'linear-gradient(270deg, #FFFFFF 0%, rgba(255, 255, 255, 0.927755) 18.23%, rgba(255, 255, 255, 0.776042) 48.44%, rgba(250, 249, 255, 0.5) 78.24%, rgba(255, 255, 255, 0) 100%)',\r\n width: 30,\r\n height: IMAGE_DIM.height,\r\n left: 34,\r\n transform: 'rotate(-180deg)',\r\n },\r\n paddleBtn: {\r\n bottom: PaddleBottomValue,\r\n },\r\n moreIcon: {\r\n fontSize: '18px',\r\n height: '60px',\r\n width: '33px',\r\n color: palette.themeDarkAlt,\r\n },\r\n seeAll: {\r\n display: 'inline-block',\r\n position: 'absolute',\r\n right: 0,\r\n bottom: 12,\r\n whiteSpace: 'nowrap',\r\n maxWidth: 50,\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n },\r\n seeAllInHeader: {\r\n marginLeft: 'auto',\r\n '& a': {\r\n position: 'static',\r\n color: palette.themePrimary,\r\n fontSize: 12,\r\n '&:hover, $:acitve, $:focus': {\r\n color: palette.themeDarkAlt,\r\n },\r\n '&:hover': {\r\n backgroundColor: 'transparent',\r\n },\r\n },\r\n },\r\n useBrandKitHeader: {\r\n float: 'right',\r\n },\r\n spinner: {\r\n ...components.getBlockerStyle(16, palette),\r\n display: 'inline-block',\r\n lineHeight: '16px',\r\n },\r\n parentContainer: {\r\n '& $panel': { // need more selector specificity to override styles applied to top of grid panels\r\n marginLeft: 0,\r\n marginTop: 12,\r\n },\r\n '& $panelHeading': {\r\n border: 'none',\r\n '& $panelTitle.collapsible-title': {\r\n fontSize: '12px',\r\n fontWeight: 600,\r\n lineHeight: '24px',\r\n '& > a': {\r\n '& .helpbutton': {\r\n fontSize: '14px',\r\n lineHeight: '24px',\r\n display: 'inline',\r\n verticalAlign: 'bottom',\r\n },\r\n },\r\n marginTop: 0,\r\n },\r\n },\r\n '& + .alert-info': {\r\n marginTop: 8,\r\n '& a': {\r\n color: palette.themeDarkAlt,\r\n },\r\n },\r\n },\r\n});\r\n","import React, { useContext, useCallback, useState, useMemo, useEffect } from 'react';\r\nimport _ from 'underscore';\r\nimport classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport { RecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { ImageSuggestionCarousel } from '@bingads-webui-campaign-react/image-suggestion-carousel';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { PermissionsContext } from '@bingads-webui-react/hoc-with-permissions';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { Spinner } from '@fluentui/react-components';\r\nimport { Shimmer, ShimmerElementsGroup, ShimmerElementType, MessageBar, MessageBarType } from '@fluentui/react';\r\nimport { CroppedImageView } from '@bingads-webui-campaign-react/cropped-image-view';\r\nimport { useCopilotLoggers } from '@bingads-webui-campaign-react/copilot-loggers';\r\nimport { isCopilotRegionRestricted } from '@bingads-webui-react/copilot-utils';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { AllRecommendationsPanel } from './view-all-recommendations-panel';\r\nimport { getCarouselStyles, getFullyShownImagesCount, initialImageContainerLeftMargin } from './carousel-style';\r\nimport { getImageSuggestionCarouselStyles } from './styles';\r\n\r\nconst SuggestionViewImageCount = 5;\r\nconst MaxSuggestionsInCarousel = 15;\r\n\r\nconst LoadingShimmer = () => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const shimmerElements = useMemo(() => {\r\n const shimmerElement = [];\r\n\r\n _.each(_.range(SuggestionViewImageCount), () => {\r\n shimmerElement.push({ type: ShimmerElementType.line, height: 76, width: 106 });\r\n shimmerElement.push({ type: ShimmerElementType.gap, width: 10, height: 76 });\r\n });\r\n\r\n return shimmerElement;\r\n }, []);\r\n\r\n return (\r\n
\r\n \r\n } />\r\n
\r\n );\r\n};\r\n\r\nconst getImageDimension = src => new Promise((resolve) => {\r\n const img = new Image();\r\n img.src = src;\r\n img.onload = () => {\r\n const width = img.naturalWidth;\r\n const height = img.naturalHeight;\r\n\r\n resolve({\r\n imgWidth: width, imgHeight: height,\r\n });\r\n };\r\n});\r\n\r\nconst ImageView = ({ src }) => {\r\n const [width, setWidth] = useState(0);\r\n const [height, setHeight] = useState(0);\r\n\r\n const aspectRatio = width / height;\r\n const maxWidth = 107;\r\n\r\n const resizeHeight = Math.min(maxWidth / aspectRatio, 76);\r\n\r\n useEffect(() => {\r\n getImageDimension(src).then(({ imgWidth, imgHeight }) => {\r\n setWidth(imgWidth);\r\n setHeight(imgHeight);\r\n });\r\n }, [src]);\r\n\r\n if (!width || !height) {\r\n return
;\r\n }\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nImageView.propTypes = {\r\n src: PropTypes.string.isRequired,\r\n};\r\n\r\nexport const DisplayAdsImageSuggestionCarousel = ({\r\n maxUploadNum = 5,\r\n onSelectImageSuggestion,\r\n useBrandKit = false,\r\n isBrandKitEmpty,\r\n setUseBrandKit,\r\n}) => {\r\n const [isSeeAllPanelOpen, setIsSeeAllPanelOpen] = useState(false);\r\n const [imagesToSuggest, setImagesToSuggest] = useState([]);\r\n const [isCopilotEnabled, setIsCopilotEnabled] = useState(false);\r\n const activity = useContext(ActivityContext);\r\n\r\n const [recommendationContext, , reportRecommendations] = useContext(RecommendationContext);\r\n const { logSuggestionsViewed } = useCopilotLoggers();\r\n const permissions = useContext(PermissionsContext);\r\n const serverContext = useContext(ServerContext);\r\n const isBrandKitEnabled = permissions && permissions.dynamic && permissions.dynamic.BrandKitUI;\r\n\r\n const {\r\n imagesToSuggest: imageSuggestions,\r\n isLoading,\r\n groupedAds,\r\n errorMessage,\r\n } = recommendationContext || {};\r\n\r\n const i18n = useContext(I18nContext);\r\n\r\n const classes = useDefaultStyles(getImageSuggestionCarouselStyles);\r\n\r\n const { carouselState } = useMemo(() => ({\r\n carouselState: {\r\n carousel: {\r\n isError: _.isEmpty(imageSuggestions),\r\n },\r\n suggestion: {\r\n images: imageSuggestions,\r\n },\r\n },\r\n panelState: {\r\n panelImages: imageSuggestions,\r\n hasMore: false,\r\n },\r\n }), [imageSuggestions]);\r\n\r\n\r\n const { suggestion, carousel } = carouselState || {};\r\n const { images: suggestionImages } = suggestion || {};\r\n\r\n const onOffsetChange = useCallback((offset) => {\r\n const viewedImages = imagesToSuggest.slice(offset, offset + SuggestionViewImageCount);\r\n const suggestionIds = _.pluck(viewedImages, 'suggestionId');\r\n reportRecommendations({ view: suggestionIds });\r\n logSuggestionsViewed(suggestionIds);\r\n }, [imagesToSuggest, reportRecommendations, logSuggestionsViewed]);\r\n\r\n const onSelectImage = useCallback((fullUrl, index) => {\r\n // get all the groups for this base image.\r\n const allGroupedAds = groupedAds[fullUrl];\r\n\r\n // get thumbnail url from index\r\n const { thumbnailUrl } = imagesToSuggest[index];\r\n\r\n // find which group this thumbnail url belongs to\r\n const ads = _.find(allGroupedAds, group => _.find(group, ad => ad.url === thumbnailUrl));\r\n\r\n onSelectImageSuggestion(ads);\r\n }, [groupedAds, imagesToSuggest, onSelectImageSuggestion]);\r\n\r\n const onSelectSeeAllImages = useCallback(() => {\r\n const suggestionIds = suggestionImages.map(({ suggestionId }) => suggestionId);\r\n\r\n setIsSeeAllPanelOpen(true);\r\n logSuggestionsViewed(suggestionIds);\r\n }, [logSuggestionsViewed, suggestionImages]);\r\n\r\n const onRenderImage = useCallback((src, classesProp) => (\r\n
\r\n \r\n
\r\n ), [classes.croppedImage]);\r\n\r\n const onBrandKitToggle = useCallback((value) => {\r\n if (activity) {\r\n activity.signal(`[DisplayAdsCopilot] - useBrandKitToggle changed to ${value}`);\r\n }\r\n setUseBrandKit(value);\r\n }, [activity, setUseBrandKit]);\r\n\r\n useEffect(() => {\r\n const truncatedImages = _.isArray(suggestionImages) && suggestionImages.slice(0, MaxSuggestionsInCarousel);\r\n setImagesToSuggest(truncatedImages || []);\r\n }, [suggestionImages]);\r\n\r\n useEffect(() => {\r\n if (isBrandKitEnabled) {\r\n isCopilotRegionRestricted({\r\n feature: 'Recommendations',\r\n permissions,\r\n serverContext,\r\n }).then(isRestricted => setIsCopilotEnabled(!isRestricted));\r\n } else {\r\n setIsCopilotEnabled(false);\r\n }\r\n }, [isBrandKitEnabled, permissions, serverContext]);\r\n\r\n return (\r\n
\r\n { isLoading ?\r\n : (\r\n 0 ? imagesToSuggest : []}\r\n i18n={i18n}\r\n isEmpty={carousel && carousel.isError}\r\n onSelectImage={onSelectImage}\r\n onSelectSeeAll={onSelectSeeAllImages}\r\n showEllipsisWhenNoMoreImages\r\n showViewAllInHeader\r\n enableBrandKit={isBrandKitEnabled && !isBrandKitEmpty && isCopilotEnabled}\r\n useBrandKit={useBrandKit}\r\n setUseBrandKit={onBrandKitToggle}\r\n stylingOverrides={{\r\n getCarouselStyles,\r\n getFullyShownImagesCount,\r\n initialImageContainerLeftMargin,\r\n seeAllLinkText: _TL_('View all'),\r\n }}\r\n onOffsetChange={onOffsetChange}\r\n onRenderImage={onRenderImage}\r\n />\r\n )}\r\n {isSeeAllPanelOpen && (\r\n setIsSeeAllPanelOpen(false)}\r\n onSelectImageSuggestion={onSelectImageSuggestion}\r\n />\r\n )}\r\n {\r\n errorMessage && (\r\n \r\n {i18n.getString(errorMessage)}\r\n \r\n )\r\n }\r\n
\r\n );\r\n};\r\n\r\nDisplayAdsImageSuggestionCarousel.propTypes = {\r\n maxUploadNum: PropTypes.number.isRequired,\r\n onSelectImageSuggestion: PropTypes.func.isRequired,\r\n useBrandKit: PropTypes.bool,\r\n isBrandKitEmpty: PropTypes.bool,\r\n setUseBrandKit: PropTypes.func,\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useContext, useState, useCallback, useEffect, useMemo } from 'react';\r\nimport {\r\n useId,\r\n Button,\r\n Toaster,\r\n useToastController,\r\n Toast,\r\n ToastTitle,\r\n ToastBody,\r\n Spinner,\r\n} from '@fluentui/react-components';\r\nimport { DismissRegular } from '@fluentui/react-icons';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ValidatedFinalUrl as UrlInput } from '@bingads-webui-campaign-react/validated-url-input-fluent-v2';\r\nimport { RecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { CopilotIcon } from '@bingads-webui-react/copilot-ui-base';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { useCopilotRepositoryContext } from '@bingads-webui/inline-copilot';\r\nimport { ValidationGroup, withCustomValidation, withError } from '@bingads-webui-react/validation';\r\nimport { getCreativeWorkbenchStyles } from './styles';\r\nimport { DisplayAdsImageSuggestionCarousel } from './display-ads-suggestion-carousel';\r\nimport { useDisplayAdsCopilot } from './use-display-ads-copilot';\r\n\r\n\r\nconst ValidatedFinalUrl = withError(withCustomValidation(UrlInput));\r\n\r\nexport const CreativeWorkbench = ({\r\n onFinalURLFocusOut,\r\n onCreateAds,\r\n isNewLogo,\r\n useBrandKit,\r\n setUseBrandKit,\r\n}) => {\r\n const [dataModel, setDataModel] = useState({\r\n data: {},\r\n });\r\n\r\n const toasterId = useId('toaster');\r\n const { dispatchToast, dismissToast, updateToast } = useToastController(toasterId);\r\n\r\n const classes = useDefaultStyles(getCreativeWorkbenchStyles);\r\n\r\n const [, setRecommendationContext] = useContext(RecommendationContext);\r\n const { finalUrl: finalUrlFromContext } = useCopilotRepositoryContext();\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const i18n = useContext(I18nContext);\r\n\r\n const FETCH_COUNT = 10;\r\n\r\n const { finalUrlForCopilot, fetch, isBrandKitEmpty, fetchBrandKit } = useDisplayAdsCopilot();\r\n\r\n const onValidate = (result) => {\r\n setDataModel(result);\r\n };\r\n\r\n const notifyFinalURLchange = () => {\r\n const isValid = _.result(dataModel, 'isValid', false);\r\n const finalUrls = _.result(dataModel, ['data', 'FinalUrls'], undefined);\r\n const finalUrl = _.first(finalUrls);\r\n\r\n if (isValid) {\r\n if (activity) {\r\n activity.signal(`[DisplayAdsCopilot] - Final URL changed to ${finalUrl}`);\r\n }\r\n\r\n onFinalURLFocusOut(finalUrl);\r\n }\r\n };\r\n\r\n const finalUrlValidationProps = {\r\n data: {\r\n FinalUrls: dataModel.data.FinalUrls,\r\n },\r\n initialValue: {\r\n FinalUrls: dataModel.data.FinalUrls,\r\n },\r\n };\r\n\r\n const addingRecommendationToast = useMemo(() => (\r\n \r\n }>\r\n {i18n.getString(_TL_('Adding recommendation'))}\r\n \r\n \r\n ), [i18n]);\r\n\r\n const errorOnCreateAdsToast = useMemo(() => (\r\n \r\n } onClick={() => dismissToast(toasterId)} />\r\n }\r\n >\r\n {i18n.getString(_TL_('Error adding recommendation'))}\r\n \r\n \r\n {i18n.getString(_TL_('An error occurred while adding the recommendation. Please try again later.'))}\r\n \r\n \r\n ), [dismissToast, i18n, toasterId]);\r\n\r\n const onSelectImageSuggestion = useCallback((ads) => {\r\n if (activity) {\r\n activity.signal(`[DisplayAdsCopilot] - User selected image suggestion - ${JSON.stringify(ads)}`);\r\n }\r\n\r\n if (ads && ads.length === 1) {\r\n dispatchToast(addingRecommendationToast, { toastId: toasterId, timeout: -1 });\r\n onCreateAds(ads)\r\n .then(() => dismissToast(toasterId))\r\n .catch((error) => {\r\n activity.error(`[DisplayAdsCopilot] - Error adding recommendation -- error: ${JSON.stringify(error)} -- ads: ${JSON.stringify(ads)}`);\r\n\r\n updateToast({\r\n content: errorOnCreateAdsToast,\r\n intent: 'error',\r\n toastId: toasterId,\r\n timeout: 5000,\r\n });\r\n });\r\n return;\r\n }\r\n\r\n setRecommendationContext({\r\n openRatioPicker: true,\r\n creatives: ads,\r\n });\r\n }, [activity, addingRecommendationToast, dismissToast, dispatchToast, errorOnCreateAdsToast, onCreateAds, setRecommendationContext, toasterId, updateToast]);\r\n\r\n useEffect(() => {\r\n if (finalUrlFromContext) {\r\n setDataModel({\r\n data: {\r\n FinalUrls: [finalUrlFromContext],\r\n },\r\n });\r\n }\r\n }, [finalUrlFromContext]);\r\n\r\n useEffect(() => {\r\n if (finalUrlForCopilot) {\r\n fetch(FETCH_COUNT, useBrandKit);\r\n }\r\n }, [fetch, finalUrlForCopilot, useBrandKit]);\r\n\r\n useEffect(() => {\r\n fetchBrandKit();\r\n }, []);\r\n\r\n return (\r\n
\r\n
\r\n \r\n {\r\n i18n.getString(_TL_('AI-generated creatives'))\r\n }\r\n
\r\n
\r\n {\r\n i18n.getString(_TL_('Our AI pulls text and images from your Final URL to automatically generate creatives for your ads.'))\r\n }\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nCreativeWorkbench.propTypes = {\r\n onFinalURLFocusOut: PropTypes.func.isRequired,\r\n onCreateAds: PropTypes.func.isRequired,\r\n isNewLogo: PropTypes.bool,\r\n useBrandKit: PropTypes.bool,\r\n setUseBrandKit: PropTypes.func,\r\n};\r\n\r\nCreativeWorkbench.defaultProps = {\r\n isNewLogo: false,\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React, { useContext, useCallback, useState, useEffect, useMemo } from 'react';\r\nimport _ from 'underscore';\r\nimport {\r\n Dialog, DialogSurface, DialogBody, DialogTitle, DialogTrigger, Button, DialogContent, DialogActions,\r\n Image, makeStyles, mergeClasses, shorthands, Badge, Checkbox, tokens, Spinner,\r\n} from '@fluentui/react-components';\r\nimport { Dismiss24Regular } from '@fluentui/react-icons';\r\nimport { RecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { useCopilotLoggers } from '@bingads-webui-campaign-react/copilot-loggers';\r\n\r\nimport { placements } from '../model/constants';\r\n\r\nconst useStyles = makeStyles({\r\n selectableImageContainer: {\r\n display: 'inline-block',\r\n position: 'relative',\r\n ...shorthands.padding('2px'),\r\n ...shorthands.border('2px', 'solid', tokens.colorTransparentBackground),\r\n },\r\n selectedImageContainer: {\r\n ...shorthands.border('2px', 'solid', tokens.colorPaletteBlueBorderActive),\r\n ...shorthands.borderRadius('4px'),\r\n },\r\n selectableImageList: {\r\n display: 'grid',\r\n gridTemplateColumns: '1fr 1fr',\r\n ...shorthands.gap('16px'),\r\n ...shorthands.margin('16px', '0px', '0px'),\r\n },\r\n ratioDescription: {\r\n position: 'absolute',\r\n bottom: '8px',\r\n left: '8px',\r\n },\r\n imageCheckbox: {\r\n position: 'absolute',\r\n top: '4px',\r\n right: '4px',\r\n },\r\n});\r\n\r\nconst SelectableImage = (props) => {\r\n const {\r\n id, src, description, size, onSelect, checked,\r\n } = props;\r\n\r\n const handleClick = useCallback(() => {\r\n onSelect(id);\r\n }, [id, onSelect]);\r\n\r\n const imageDimension = useMemo(() => {\r\n const dimensionList = size.split('x');\r\n const width = Number(dimensionList[0]);\r\n const height = Number(dimensionList[1]);\r\n\r\n // handle aspect ratio for portrait images\r\n if (height > width) {\r\n const maxHeightRatio = 500 / height;\r\n const maxWidthRatio = 250 / width;\r\n\r\n const ratio = Math.min(maxHeightRatio, maxWidthRatio);\r\n\r\n return {\r\n width: width * ratio,\r\n height: height * ratio,\r\n };\r\n }\r\n\r\n return null;\r\n }, [size]);\r\n\r\n const styles = useStyles();\r\n\r\n return (\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n {description}\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nSelectableImage.propTypes = {\r\n id: PropTypes.string.isRequired,\r\n src: PropTypes.string.isRequired,\r\n description: PropTypes.string.isRequired,\r\n size: PropTypes.string.isRequired,\r\n onSelect: PropTypes.func.isRequired,\r\n checked: PropTypes.bool.isRequired,\r\n};\r\n\r\nconst RatioPickerInternal = (props) => {\r\n const {\r\n open,\r\n creatives,\r\n onApply,\r\n onOpenChange,\r\n onApplyButtonText,\r\n } = props;\r\n const i18n = useContext(I18nContext);\r\n const [creativeSelections, setCreativeSelections] = useState(Array(creatives.length).fill(true));\r\n\r\n const [isApplying, setIsApplying] = useState(false);\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n // reset the selected creatives when the creatives change\r\n useEffect(() => {\r\n setCreativeSelections(creatives.map(() => true));\r\n }, [creatives]);\r\n\r\n const onRatioApply = useCallback(() => {\r\n const selectedCreatives = creatives.filter((creative, index) => creativeSelections[index]);\r\n\r\n setIsApplying(true);\r\n\r\n onApply(selectedCreatives).finally(() => {\r\n setIsApplying(false);\r\n if (activity) {\r\n activity.signal(`[DisplayAdsCopilot] - Successfully saved creatives - ${JSON.stringify(selectedCreatives)}`);\r\n }\r\n });\r\n }, [activity, creativeSelections, creatives, onApply]);\r\n\r\n const onImageSelect = useCallback((id) => {\r\n const index = creatives.findIndex(creative => creative.recommendationId === id);\r\n const newSelectedCreative = [...creativeSelections];\r\n newSelectedCreative[index] = !newSelectedCreative[index];\r\n\r\n setCreativeSelections(newSelectedCreative);\r\n }, [creatives, creativeSelections]);\r\n\r\n const styles = useStyles();\r\n\r\n return (\r\n {\r\n onOpenChange(data.open);\r\n }}\r\n >\r\n \r\n
\r\n \r\n \r\n }\r\n />\r\n \r\n }\r\n >\r\n {i18n.getString(_TL_('Which display placements do you want your creatives to serve in?'))}\r\n \r\n \r\n {i18n.getString(_TL_('Select the checkbox next to all the placements where you want your creatives to serve. Then, we\\'ll create your ads.'))}\r\n
\r\n {\r\n creatives.map((creative, index) => (\r\n \r\n ))\r\n }\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n selected) || isApplying}\r\n className=\"create-ads\"\r\n >\r\n {\r\n isApplying\r\n ? \r\n : onApplyButtonText || i18n.getString(_TL_('Create ads'))\r\n }\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nRatioPickerInternal.propTypes = {\r\n open: PropTypes.bool,\r\n creatives: PropTypes.arrayOf(PropTypes.shape({})),\r\n onApply: PropTypes.func.isRequired,\r\n onOpenChange: PropTypes.func.isRequired,\r\n onApplyButtonText: PropTypes.string,\r\n};\r\n\r\nRatioPickerInternal.defaultProps = {\r\n open: false,\r\n creatives: [],\r\n onApplyButtonText: undefined,\r\n};\r\n\r\nconst RatioPickerWithRecommendationContext = (props) => {\r\n const {\r\n onCreateAds,\r\n ...rest\r\n } = props;\r\n\r\n const [recommendationContext, setRecommendationContext] = useContext(RecommendationContext);\r\n const { logSuggestionsViewed } = useCopilotLoggers();\r\n\r\n const { openRatioPicker, creatives } = recommendationContext;\r\n\r\n const handleRatioPickerState = useCallback((state) => {\r\n setRecommendationContext({\r\n openRatioPicker: state,\r\n });\r\n }, [setRecommendationContext]);\r\n\r\n const onApply = useCallback(selectedCreatives => onCreateAds(selectedCreatives).then(() => handleRatioPickerState(false)), [onCreateAds, handleRatioPickerState]);\r\n\r\n useEffect(() => {\r\n if (_.isEmpty(creatives)) { return; }\r\n\r\n logSuggestionsViewed(creatives.map(creative => creative.recommendationId));\r\n }, [creatives, logSuggestionsViewed]);\r\n\r\n if (_.isEmpty(creatives)) {\r\n return null;\r\n }\r\n\r\n return (\r\n 0 ? creatives[0].recommendationId : 'empty'}\r\n creatives={creatives}\r\n open={openRatioPicker}\r\n onOpenChange={handleRatioPickerState}\r\n onApply={onApply}\r\n {...rest}\r\n />\r\n );\r\n};\r\n\r\nRatioPickerWithRecommendationContext.propTypes = {\r\n onCreateAds: PropTypes.func.isRequired,\r\n};\r\n\r\nexport const RatioPicker = RatioPickerWithRecommendationContext;\r\n","import React, { useCallback, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Button, Menu, MenuItem, MenuList, MenuPopover, MenuTrigger } from '@fluentui/react-components';\r\nimport { Add20Regular, Image20Regular, GlanceHorizontalSparkles20Regular } from '@fluentui/react-icons';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\n\r\nexport const CreateAnotherAdMenu = ({\r\n onCreateWithAI,\r\n onCreateFromExistingImage,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const activity = useContext(ActivityContext);\r\n\r\n const handleCreateWithAI = useCallback(() => {\r\n onCreateWithAI();\r\n\r\n if (activity) {\r\n activity.signal('[Creating another ad] - With AI');\r\n }\r\n }, [onCreateWithAI, activity]);\r\n\r\n const handleCreateFromExistingImage = useCallback(() => {\r\n onCreateFromExistingImage();\r\n\r\n if (activity) {\r\n activity.signal('[Creating another ad] - From existing image');\r\n }\r\n }, [onCreateFromExistingImage, activity]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n } onClick={handleCreateWithAI}>\r\n {i18n.getString(_TL_('Create with AI'))}\r\n \r\n } onClick={handleCreateFromExistingImage}>\r\n {i18n.getString(_TL_('Use existing image'))}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nCreateAnotherAdMenu.propTypes = {\r\n onCreateWithAI: PropTypes.func.isRequired,\r\n onCreateFromExistingImage: PropTypes.func.isRequired,\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useContext, useEffect, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { useCopilotRepositoryContext } from '@bingads-webui/inline-copilot';\r\nimport { CreateDisplayAdDialog } from '@bingads-webui/inline-copilot-ui';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { RecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\n\r\nimport { getAdsInMatchingGroup, getItemsForListFromGroupedAds } from '../model/constants';\r\n\r\nexport const CreateAdWithAiDialog = ({\r\n isOpen,\r\n onDismiss,\r\n onFinalURLFocusOut,\r\n onCreateAds,\r\n}) => {\r\n const activity = useContext(ActivityContext);\r\n\r\n const [{ isLoading, groupedAds } = {}] = useContext(RecommendationContext);\r\n const { finalUrl: initialFinalUrl = '' } = useCopilotRepositoryContext();\r\n\r\n const [finalUrl, setFinalUrl] = useState(initialFinalUrl);\r\n const [images, setImages] = useState([]);\r\n const [selectedImages, setSelectedImages] = useState([]);\r\n\r\n const handleFinalUrlUpdate = useCallback((url) => {\r\n if (url === finalUrl) { return; }\r\n\r\n if (activity) {\r\n activity.signal('[Create Ad with AI dialog] - Updating Final URL');\r\n }\r\n\r\n setFinalUrl(url);\r\n setImages([]);\r\n setSelectedImages([]);\r\n\r\n onFinalURLFocusOut(url);\r\n }, [finalUrl, onFinalURLFocusOut, activity]);\r\n\r\n useEffect(() => {\r\n setImages(getItemsForListFromGroupedAds(groupedAds));\r\n }, [groupedAds]);\r\n\r\n const handleSelectImages = useCallback((ids) => {\r\n if (activity) {\r\n // ids and selectedImage should differ by one element, the last the user clicked\r\n const lastId = _.difference(_.union(ids, selectedImages), _.intersection(ids, selectedImages))[0];\r\n\r\n if (ids.includes(lastId)) {\r\n activity.signal(`[Create Ad with AI dialog] - Selecting image ${lastId}`);\r\n } else {\r\n activity.signal(`[Create Ad with AI dialog] - Deselecting image ${lastId}`);\r\n }\r\n }\r\n\r\n setSelectedImages(ids);\r\n }, [selectedImages, activity]);\r\n\r\n const handleCreateAds = useCallback((ids) => {\r\n if (activity) {\r\n activity.signal('[Create Ad with AI dialog] - Creating ads');\r\n }\r\n\r\n const matchingAds = _.chain(ids)\r\n .map(id => getAdsInMatchingGroup(groupedAds, id))\r\n .flatten()\r\n .value();\r\n\r\n return onCreateAds(matchingAds).then(onDismiss);\r\n }, [groupedAds, onCreateAds, onDismiss, activity]);\r\n\r\n const handleDismiss = useCallback(() => {\r\n if (activity) {\r\n activity.signal('[Create Ad with AI dialog] - Closing dialog');\r\n }\r\n\r\n onDismiss();\r\n }, [onDismiss, activity]);\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nCreateAdWithAiDialog.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onDismiss: PropTypes.func.isRequired,\r\n onFinalURLFocusOut: PropTypes.func.isRequired,\r\n onCreateAds: PropTypes.func.isRequired,\r\n};\r\n","import _ from 'underscore';\r\nimport { useCallback, useContext } from 'react';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { RecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { useAssetLibraryImagePicker } from '@bingads-webui-campaign-react/add-image-hooks';\r\n\r\nconst getProcessedCreative = (finalUrl, image, creative) => ({\r\n data: {\r\n FinalUrls: [finalUrl],\r\n image,\r\n creativeData: {\r\n creativeId: image.id,\r\n creativeMeta: {\r\n ...creative,\r\n },\r\n },\r\n },\r\n});\r\n\r\nexport const useCreateAds = ({\r\n oDataConfig,\r\n permissions,\r\n aid,\r\n onCreateAds,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const serverContext = useContext(ServerContext);\r\n const [{ finalUrl }] = useContext(RecommendationContext);\r\n\r\n const advertiserCustomerId = _.get(serverContext, ['CurrentAccount', 'AdvertiserCustomerID']);\r\n\r\n const {\r\n addCreatives: addToAssetLibrary,\r\n } = useAssetLibraryImagePicker({\r\n cid: advertiserCustomerId.toString(),\r\n aid: aid.toString(),\r\n oDataConfig,\r\n onNewImageSelected: _.noop,\r\n i18n,\r\n permissions,\r\n isDisplayAds: true,\r\n });\r\n\r\n return useCallback(creativesToAdd => addToAssetLibrary({ creativeData: creativesToAdd })\r\n .then((savedImages) => {\r\n const creatives = savedImages.map((savedImage, index) => getProcessedCreative(finalUrl, savedImage, creativesToAdd[index]));\r\n onCreateAds(creatives);\r\n return creatives;\r\n }), [addToAssetLibrary, finalUrl, onCreateAds]);\r\n};\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React, { useState, useEffect, useContext, useCallback, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\nimport { usePageManager } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport { CopilotRepositoryProvider } from '@bingads-webui/inline-copilot';\r\nimport { CampaignFetchProvider } from '@bingads-webui-campaign-react/campaign-http';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { useCopilotLoggers, useInitCopilotLoggers } from '@bingads-webui-campaign-react/copilot-loggers';\r\nimport { DisplayAdPanelWithCopilot } from './display-ad-panel-with-copilot';\r\nimport { Pagination } from './pagination';\r\nimport { CreativeWorkbench } from './creative-workbench';\r\nimport { getAdsStepStyles } from './styles';\r\nimport { addCreativesToDisplayAds } from '../model/utl';\r\nimport { RatioPicker } from './ratio-picker';\r\nimport { CreateAnotherAdMenu } from './create-another-ad-menu';\r\nimport { CreateAdWithAiDialog } from './create-ad-with-ai-dialog';\r\nimport { useCreateAds } from './use-create-ads';\r\n\r\nexport const DisplayAdsContainerWithCopilot = (props) => {\r\n const {\r\n aid,\r\n cid,\r\n i18n,\r\n perfMarker,\r\n onAdsValidation,\r\n currentImageIndex,\r\n ads = [],\r\n oDataConfig,\r\n disablePagination,\r\n permissions,\r\n customStyleFunction,\r\n useCustomStyleFunction,\r\n resetFields,\r\n isAdGridEditorMode,\r\n campaignId,\r\n isLoadingImage,\r\n initialAdsCount,\r\n hideFooter,\r\n } = props;\r\n\r\n const isEditScenario = useMemo(() => isAdGridEditorMode && ads && ads[0] && !!ads[0].Id, [ads, isAdGridEditorMode]);\r\n\r\n useInitCopilotLoggers({ campaignId, isEditScenario });\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const defaultClasses = useDefaultStyles(getAdsStepStyles);\r\n\r\n const customClasses = useDefaultStyles(customStyleFunction);\r\n\r\n const serverContext = useContext(ServerContext);\r\n\r\n const { logEnterFlow } = useCopilotLoggers();\r\n\r\n const classes = useCustomStyleFunction ? customClasses : defaultClasses;\r\n\r\n const [DisplayAds, setDisplayAds] = useState(ads);\r\n const [copilotFinalUrl, setCopilotFinalUrl] = useState();\r\n const [isCreateAdDialogOpen, setIsCreateAdDialogOpen] = useState(false);\r\n const [useBrandKit, setUseBrandKit] = useState(true);\r\n\r\n const {\r\n goToNextPage,\r\n goToPrevPage,\r\n goToPage,\r\n getPageAdjustedIndex,\r\n currentPage,\r\n currentPageIndex,\r\n onAddItem,\r\n pages,\r\n onAddItemsToPage,\r\n removeItem,\r\n totalPages,\r\n maxItems,\r\n } = usePageManager(ads, initialAdsCount);\r\n\r\n const onAddAd = useCallback(() => {\r\n onAddItem();\r\n if (activity) {\r\n activity.signal(`Adding new ad panel - current total: ${currentPage.numberOfAdsInPage}`);\r\n }\r\n }, [activity, currentPage.numberOfAdsInPage, onAddItem]);\r\n\r\n const onImagePanelUpdate = useCallback((result, idx, uid) => {\r\n let itemAtIdx = DisplayAds[idx] || { image: null, FinalUrls: [], uid: null };\r\n\r\n if (!itemAtIdx.uid) {\r\n itemAtIdx = { ...result, uid, Id: itemAtIdx.Id };\r\n } else {\r\n itemAtIdx = { ...result, uid: itemAtIdx.uid, Id: itemAtIdx.Id };\r\n }\r\n\r\n const itemsBefore = DisplayAds.slice(0, idx);\r\n const itemsAfter = DisplayAds.slice(idx + 1, DisplayAds.length);\r\n setDisplayAds([...itemsBefore, { ...itemAtIdx }, ...itemsAfter]);\r\n }, [DisplayAds]);\r\n\r\n const onRemovePanel = useCallback((idx) => {\r\n if (activity) {\r\n activity.signal(`Removing ad panel at idx ${idx}`);\r\n }\r\n DisplayAds.splice(idx, 1);\r\n\r\n setDisplayAds([...DisplayAds]);\r\n\r\n removeItem();\r\n }, [DisplayAds, activity, removeItem]);\r\n\r\n const isAllValid = () => {\r\n let valid = true;\r\n // eslint-disable-next-line consistent-return\r\n _.each(DisplayAds, (ad) => {\r\n if (!ad.isValid) {\r\n valid = false;\r\n }\r\n });\r\n\r\n return valid;\r\n };\r\n\r\n const isAllDirty = () => {\r\n let dirty = false;\r\n // eslint-disable-next-line consistent-return\r\n _.each(DisplayAds, (ad) => {\r\n if (ad.isDirty) {\r\n dirty = true;\r\n }\r\n });\r\n\r\n return dirty;\r\n };\r\n\r\n // method to create ads in the wizard.\r\n // ads should be an array of ads with entire ad object.\r\n // ads should have the assets already saved to asset library and image experience object.\r\n // ads: [{ data: { image: {..}, FinalUrls: [..], creativeData: {..} }}]\r\n const onCreateAds = useCallback((creatives) => {\r\n const newAds = addCreativesToDisplayAds({ displayAds: DisplayAds, creatives });\r\n\r\n // get total numeber of ads possible\r\n const totalAdsExculudingLastPage = pages.length > 1 ? (pages.length - 1) * 10 : 0;\r\n\r\n // current number of items\r\n const currentItemCount = totalAdsExculudingLastPage + pages[pages.length - 1].numberOfAdsInPage;\r\n\r\n if (newAds.length > currentItemCount) {\r\n onAddItemsToPage(newAds.length - currentItemCount);\r\n }\r\n\r\n if (activity) {\r\n activity.signal(`[DisplayAdsCopilot] - Adding new copilot recommended ads - ${creatives.length}`);\r\n }\r\n setDisplayAds(newAds);\r\n }, [DisplayAds, onAddItemsToPage, pages, activity]);\r\n\r\n const createAds = useCreateAds({\r\n oDataConfig,\r\n permissions,\r\n aid,\r\n onCreateAds,\r\n });\r\n\r\n useEffect(() => logEnterFlow(), [logEnterFlow]);\r\n\r\n useEffect(() => {\r\n const result = {\r\n data: [...DisplayAds], isValid: isAllValid(), isDirty: isAllDirty(), currentPageIndex,\r\n };\r\n onAdsValidation(result);\r\n if (activity) {\r\n activity.signal(`onDisplayAdsContainerValidated - ${JSON.stringify(result)}`);\r\n }\r\n // disabling exhaustive deps since the onAdsValidation value changes on each rerender.\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [currentPageIndex, DisplayAds]);\r\n\r\n useEffect(() => {\r\n if (resetFields) {\r\n setDisplayAds([]);\r\n }\r\n }, [resetFields]);\r\n\r\n useEffect(() => {\r\n setClarityTag('XandrDisplayAds', 'true');\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!_.isEqual(ads, DisplayAds) && !isAdGridEditorMode) {\r\n // check if ads has any ad that has id. (update scenario)\r\n let shouldUpdate = false;\r\n\r\n _.each(ads, (ad) => {\r\n const displayAd = _.filter(DisplayAds, vAd => vAd.uid === ad.uid);\r\n\r\n if (displayAd && displayAd[0] && _.isUndefined(displayAd[0].Id) && ad.Id) {\r\n shouldUpdate = true;\r\n }\r\n\r\n // For reload scenario if we can't find any ad in local state, refresh state\r\n if (permissions.dynamic.MultiAdFormat && _.isEmpty(displayAd) && ad.Id) {\r\n shouldUpdate = true;\r\n }\r\n });\r\n\r\n if (shouldUpdate) {\r\n setDisplayAds(ads);\r\n }\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [ads]);\r\n\r\n const onFinalURLFocusOut = (finalUrl) => {\r\n setCopilotFinalUrl(finalUrl);\r\n };\r\n const isNewLogo = _.get(permissions, ['dynamic', 'AdsCopilotUxImprovements']);\r\n\r\n const pageComponent = useMemo(() => (\r\n _.map(_.range(currentPage.numberOfAdsInPage), (idx) => {\r\n const displayAd = (DisplayAds[getPageAdjustedIndex(idx, currentPage.pageNumber)] && DisplayAds[getPageAdjustedIndex(idx, currentPage.pageNumber)].data);\r\n\r\n const uid = (DisplayAds[getPageAdjustedIndex(idx, currentPage.pageNumber)] && DisplayAds[getPageAdjustedIndex(idx, currentPage.pageNumber)].uid) || _.uniqueId('displayAd_');\r\n\r\n return (\r\n
\r\n onImagePanelUpdate(result, getPageAdjustedIndex(idx, currentPage.pageNumber), uid)}\r\n onRemovePanel={() => onRemovePanel(getPageAdjustedIndex(idx, currentPage.pageNumber), currentPage)}\r\n removeCloseButton={currentPage.numberOfAdsInPage === 1}\r\n keyIndex={uid}\r\n isSelectedPanel={currentImageIndex === idx}\r\n oDataConfig={oDataConfig}\r\n isLoadingImage={isLoadingImage}\r\n />\r\n
\r\n );\r\n })\r\n ), [DisplayAds, aid, campaignId, cid, currentImageIndex, currentPage, getPageAdjustedIndex, i18n, isLoadingImage, oDataConfig, onImagePanelUpdate, onRemovePanel, perfMarker, permissions]);\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n

\r\n {i18n.getString(_TL_('Your ads'))}\r\n

\r\n

\r\n {\r\n i18n.getString(_TL_('We create ads for you based on your assets. You can choose to add your own images below.'))\r\n }\r\n

\r\n
\r\n {pageComponent}\r\n {\r\n !hideFooter && (currentPage.numberOfAdsInPage < maxItems && !disablePagination && !_.isEmpty(DisplayAds)) &&\r\n
\r\n setIsCreateAdDialogOpen(true)}\r\n />\r\n
\r\n }\r\n {isCreateAdDialogOpen && (\r\n setIsCreateAdDialogOpen(false)}\r\n onFinalURLFocusOut={onFinalURLFocusOut}\r\n />\r\n )}\r\n \r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nDisplayAdsContainerWithCopilot.propTypes = {\r\n aid: PropTypes.number.isRequired,\r\n cid: PropTypes.number.isRequired,\r\n campaignId: PropTypes.number.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n perfMarker: PropTypes.shape({}).isRequired,\r\n permissions: PropTypes.shape({}).isRequired,\r\n onAdsValidation: PropTypes.func.isRequired,\r\n ads: PropTypes.shape({\r\n data: PropTypes.shape({}),\r\n }).isRequired,\r\n oDataConfig: PropTypes.shape({}),\r\n disablePagination: PropTypes.bool,\r\n customStyleFunction: PropTypes.func,\r\n useCustomStyleFunction: PropTypes.bool,\r\n resetFields: PropTypes.bool,\r\n currentImageIndex: PropTypes.number,\r\n isAdGridEditorMode: PropTypes.bool,\r\n isLoadingImage: PropTypes.bool,\r\n hideFooter: PropTypes.bool,\r\n initialAdsCount: PropTypes.number,\r\n};\r\n\r\nDisplayAdsContainerWithCopilot.defaultProps = {\r\n oDataConfig: null,\r\n disablePagination: false,\r\n customStyleFunction: _.noop,\r\n useCustomStyleFunction: false,\r\n resetFields: false,\r\n currentImageIndex: 0,\r\n isAdGridEditorMode: false,\r\n isLoadingImage: false,\r\n hideFooter: false,\r\n initialAdsCount: 0,\r\n};\r\n","import React from 'react';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport { ErrorMessages } from '@bingads-webui-react/validation';\r\n// import { withComponentErrorLogging } from '@bingads-webui-campaign-react/global-error-options';\r\nimport { DisplayAdsContainer } from './display-ads-container';\r\nimport { AdPreview } from './ad-preview';\r\n\r\nconst getAdsStepStyles = (/* components, theme */) => ({\r\n displayAdPanelRoot: {\r\n marginTop: 20,\r\n width: 500,\r\n minHeight: 181,\r\n padding: 20,\r\n paddingBottom: 20,\r\n background: '#FFFFFF',\r\n boxShadow: '0px 2px 4px rgba(0, 0, 0, 0.1)',\r\n borderRadius: 6,\r\n '& .image-list-item-status-indicator': {\r\n background: 'linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, #000000 100%)',\r\n borderRadius: 6,\r\n width: '170px !important',\r\n height: '96px !important',\r\n paddingTop: '10px !important',\r\n '&:hover': {\r\n '& .edit-button': {\r\n display: 'none',\r\n },\r\n },\r\n '& .placeholder-content': {\r\n color: 'white !important',\r\n },\r\n },\r\n '& .error': {\r\n width: 400,\r\n marginTop: 20,\r\n float: 'left',\r\n },\r\n '& .image-experience-content': {\r\n width: 170,\r\n '& .col-sm-3': {\r\n background: 'linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, #000000 100%)',\r\n borderRadius: 6,\r\n width: '170px !important',\r\n height: '96px !important',\r\n paddingTop: '10px !important',\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n '&:hover': {\r\n '& .edit-button': {\r\n display: 'none',\r\n },\r\n },\r\n '& .placeholder-content': {\r\n color: 'white !important',\r\n },\r\n '& .ms-Button': {\r\n width: 56,\r\n height: 24,\r\n marginTop: 10,\r\n },\r\n '& .image-list-content': {\r\n width: '170px !important', // fixed for 16:9 aspect ratio\r\n border: 'none !important',\r\n padding: '0px !important',\r\n },\r\n },\r\n },\r\n '& .image-section-label': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n '& .image-list-label': {\r\n fontWeight: 600,\r\n },\r\n '& .image-list-content': {\r\n width: '170px !important', // fixed for 16:9 aspect ratio\r\n border: 'none !important',\r\n padding: '0px !important',\r\n },\r\n '& .image-list-item-video': {\r\n position: 'relative',\r\n width: '170px !important', // fixed for 16:9 aspect ratio\r\n '&:hover': {\r\n '& .edit-button': {\r\n display: 'flex',\r\n },\r\n },\r\n '& .placeholder-content': {\r\n color: 'black !important',\r\n },\r\n\r\n },\r\n '& .image-item-ratio-label': {\r\n paddingTop: 10,\r\n },\r\n '& .thumbnail-preview': {\r\n borderRadius: 6,\r\n filter: 'drop-shadow(0px 0.6px 1.8px rgba(0, 0, 0, 0.1)) drop-shadow(0px 3.2px 7.2px rgba(0, 0, 0, 0.13))',\r\n width: '170px !important',\r\n height: '96px !important',\r\n },\r\n },\r\n selectedPanel: {\r\n border: '1px solid #0078D4',\r\n },\r\n displayAdPanelHeader: {\r\n display: 'flex',\r\n width: '100%',\r\n justifyContent: 'space-between',\r\n },\r\n displayAdPanelButton: {\r\n justifyContent: 'flex-end',\r\n display: 'none',\r\n cursor: 'pointer',\r\n borderRadius: 99,\r\n background: '#FFFFFF',\r\n width: 32,\r\n height: 32,\r\n },\r\n displayAdPanelButtonContainer: {\r\n position: 'absolute',\r\n left: '50%',\r\n top: '50%',\r\n transform: 'translate(-50%, -50%)',\r\n columnGap: '2px',\r\n display: 'flex',\r\n },\r\n adPreviewSizeTitle: {\r\n fontSize: 18,\r\n fontWeight: 600,\r\n },\r\n previewContainer: {\r\n height: 280,\r\n width: 498,\r\n },\r\n adPreviewSizeHeader: {\r\n height: 40,\r\n },\r\n adPreviewPanel: {\r\n width: 540,\r\n padding: 20,\r\n paddingBottom: 20,\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n justifyContent: 'center',\r\n },\r\n displayAd: {\r\n borderRadius: '6px',\r\n filter: 'drop-shadow(0px 0.6px 1.8px rgba(0, 0, 0, 0.1)) drop-shadow(0px 3.2px 7.2px rgba(0, 0, 0, 0.13))',\r\n },\r\n previewTag: {\r\n marginTop: 10,\r\n },\r\n emptyPreview: {\r\n width: '100%',\r\n height: '100%',\r\n backgroundColor: '#F3F2F1',\r\n borderRadius: 6,\r\n },\r\n pagination: {\r\n paddingTop: 10,\r\n width: '100%',\r\n },\r\n pageControls: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n columnGap: '10px',\r\n },\r\n paginationIndicatorDot: {\r\n height: 8,\r\n width: 8,\r\n borderRadius: '50%',\r\n display: 'inline-block',\r\n cursor: 'pointer',\r\n },\r\n paginationButton: {\r\n height: 8,\r\n width: 8,\r\n opacity: 0,\r\n },\r\n paginationIndicator: {\r\n display: 'flex',\r\n columnGap: '2px',\r\n },\r\n displayAdPanelContent: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n },\r\n placementInfoTile: {\r\n paddingTop: 20,\r\n marginLeft: 10,\r\n },\r\n});\r\n\r\nconst containerStyle = {\r\n display: 'flex',\r\n '& .image-list-content': {\r\n border: 'none !important',\r\n padding: '0px !important',\r\n },\r\n};\r\n\r\nexport const AdEditor = ({\r\n aid,\r\n cid,\r\n i18n,\r\n perfMarker,\r\n permissions,\r\n adsModel,\r\n onAdsValidation,\r\n oDataConfig,\r\n resetFields,\r\n serverErrors,\r\n isLoadingImage,\r\n}) => (\r\n
\r\n
\r\n \r\n error.message) : []} />\r\n
\r\n _.noop}\r\n ads={adsModel}\r\n disablePagination\r\n customStyleFunction={getAdsStepStyles}\r\n useCustomStyleFunction\r\n />\r\n
);\r\n\r\nAdEditor.propTypes = {\r\n containerStyle: PropTypes.shape({}).isRequired,\r\n permissions: PropTypes.shape({}).isRequired,\r\n aid: PropTypes.string.isRequired,\r\n cid: PropTypes.string.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n perfMarker: PropTypes.shape({}).isRequired,\r\n adsModel: PropTypes.shape({\r\n data: PropTypes.shape({}),\r\n }).isRequired,\r\n onAdsValidation: PropTypes.func.isRequired,\r\n oDataConfig: PropTypes.shape({}).isRequired,\r\n resetFields: PropTypes.bool.isRequired,\r\n serverErrors: PropTypes.shape({}),\r\n isLoadingImage: PropTypes.bool.isRequired,\r\n};\r\n\r\nAdEditor.defaultProps = {\r\n serverErrors: null,\r\n};\r\n\r\n/*\r\nconst AdEditorWithErrorLogging = withComponentErrorLogging(\r\n AdEditor,\r\n 'XandrVideoAdsAdEditing'\r\n);\r\n\r\nexport { AdEditorWithErrorLogging as AdEditor };\r\n*/\r\n","import React, { useState, useCallback, useContext, useMemo, useEffect } from 'react';\r\nimport classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { Stack } from '@fluentui/react';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { PerformanceMarkerContext } from '@bingads-webui-campaign-react/performance-marker-provider';\r\nimport { useFormService } from '@bingads-webui-react/form-core';\r\nimport { useWizardService, matchStepState, STEP_STATES } from '@bingads-webui-react/wizard';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { FormErrorGroup, UnmappedFormErrors } from '@bingads-webui-campaign-react/form-error';\r\nimport { AttentionBeaconGroup } from '@bingads-webui-campaign-react/attention-beacon';\r\nimport { ActuationGroup } from '@bingads-webui-campaign-react/actuator';\r\nimport { getODataConfig } from '../model/constants';\r\nimport { getDisplayAdStepBaseStyles } from './styles';\r\nimport { DisplayAdsContainerWithCopilot, AdPreview } from './index';\r\n\r\nconst StepHeader = ({\r\n title,\r\n description,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n return (\r\n \r\n

\r\n {i18n.getString(title)}\r\n

\r\n {description &&\r\n

\r\n {i18n.getString(description)}\r\n

\r\n }\r\n
\r\n );\r\n};\r\n\r\nStepHeader.propTypes = {\r\n title: PropTypes.string.isRequired,\r\n description: PropTypes.string.isRequired,\r\n};\r\n\r\nexport const DisplayAdsWithCopilot = ({\r\n data = {},\r\n onDataChange,\r\n error,\r\n isAdGridEditorMode,\r\n hideFooter,\r\n}) => {\r\n const {\r\n errors = [],\r\n } = error || {};\r\n\r\n const { scope } = useContext(ScopeContext) || {};\r\n const { cid, aid } = scope.values;\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const { state } = useWizardService();\r\n\r\n const classes = useDefaultStyles(getDisplayAdStepBaseStyles);\r\n\r\n const { campaign = {}, editingAdId } = state.context.wizardData;\r\n\r\n const { Id: campaignId } = campaign;\r\n\r\n const currentStates = state.toStrings()[1];\r\n\r\n const i18n = useContext(I18nContext);\r\n\r\n const serverContext = useContext(ServerContext);\r\n const { Permissions, DynamicPermissions } = serverContext || {};\r\n const permissions = useMemo(() => ({ dynamic: { ...DynamicPermissions }, ...Permissions }), [DynamicPermissions, Permissions]);\r\n\r\n const perfMarker = useContext(PerformanceMarkerContext);\r\n\r\n const [currentImageIndex, setCurrentImageIndex] = useState(0);\r\n\r\n const oDataConfig = useMemo(() => getODataConfig(serverContext), [serverContext]);\r\n\r\n const { state: { context: { saveFailed } } } = useFormService();\r\n\r\n\r\n const removeEmptyAds = newAdsData => newAdsData.filter(ad => !_.isEmpty(ad.data));\r\n\r\n const onAdsValidation = useCallback((results) => {\r\n const { data: newAdsData, ...restResults } = results;\r\n\r\n const newAds = removeEmptyAds(newAdsData);\r\n\r\n const dataPatch = {\r\n data: [\r\n ...newAds,\r\n ],\r\n ...restResults,\r\n };\r\n onDataChange({ data: dataPatch, isValid: dataPatch.isValid });\r\n }, [onDataChange]);\r\n\r\n useEffect(() => {\r\n if (activity && matchStepState(state, STEP_STATES.LOADING)) {\r\n activity.signal(`onDisplayAdsStepLoading - ${currentStates}`);\r\n }\r\n\r\n if (activity && matchStepState(state, STEP_STATES.SAVING)) {\r\n activity.signal(`onDisplayAdsStepSaving - ${currentStates}`);\r\n }\r\n }, [activity, currentStates, state]);\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n {\r\n data && data.data ? (\r\n \r\n ) : null\r\n }\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n );\r\n};\r\n\r\nDisplayAdsWithCopilot.propTypes = {\r\n data: PropTypes.shape({\r\n data: PropTypes.shape({}),\r\n }),\r\n onDataChange: PropTypes.func.isRequired,\r\n error: PropTypes.shape({\r\n errors: PropTypes.arrayOf(PropTypes.shape({})),\r\n }),\r\n isAdGridEditorMode: PropTypes.bool,\r\n hideFooter: PropTypes.bool,\r\n};\r\n\r\nDisplayAdsWithCopilot.defaultProps = {\r\n data: {},\r\n error: {},\r\n isAdGridEditorMode: false,\r\n hideFooter: false,\r\n};\r\n\r\n","import _ from 'underscore';\r\n\r\nexport function getVerifiedTrackingSettings(model) {\r\n const verifiedTrackingSettings = _.get(model, 'VerifiedTrackingSettings');\r\n\r\n if (!verifiedTrackingSettings || verifiedTrackingSettings.length === 0) {\r\n return {};\r\n }\r\n const results = [];\r\n\r\n verifiedTrackingSettings.forEach((setting) => {\r\n const vendor = _.get(setting, 'VerifiedTrackingVendor');\r\n\r\n if (!_.isString(vendor)) {\r\n return;\r\n }\r\n\r\n if (!_.isEqual(vendor, 'IAS') && !_.isEqual(vendor, 'MOAT')) {\r\n return;\r\n }\r\n\r\n const result = {};\r\n\r\n result.vendorName = vendor;\r\n if (_.isEqual(vendor, 'MOAT')) {\r\n results.push(result);\r\n return;\r\n }\r\n\r\n const data = _.get(setting, 'VerifiedTrackingData[0].Data');\r\n\r\n if (!_.isObject(data) || _.isEmpty(data)) {\r\n return;\r\n }\r\n\r\n const keys = _.get(data, 'Keys');\r\n\r\n if (!_.isArray(keys) || _.isEmpty(keys)) {\r\n return;\r\n }\r\n\r\n const values = _.get(data, 'Values');\r\n\r\n if (!_.isArray(values) || _.isEmpty(values)) {\r\n return;\r\n }\r\n\r\n const keyMap = { IAS_advertiserEntityId: 'advertiserEntityId', IAS_publisherEntityId: 'publisherEntityId' };\r\n\r\n\r\n _.each(keys, (key, index) => {\r\n if (keyMap[key]) {\r\n result[keyMap[key]] = values[index];\r\n }\r\n });\r\n results.push(result);\r\n });\r\n\r\n return { VerifiedTrackingSettings: results };\r\n}\r\n","import { useContext } from 'react';\r\nimport _ from 'underscore';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { saveAds } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { ActivityContext, ScenarioContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { useWizardService } from '@bingads-webui-react/wizard';\r\nimport { ImageRepository } from '@bingads-webui-campaign-react/image-experience';\r\nimport { constants, newImageFromMTObject } from '@bingads-webui-campaign-react/image-experience-model';\r\nimport { useCopilotLoggers } from '@bingads-webui-campaign-react/copilot-loggers';\r\nimport { getAutoCroppedImages } from '@bingads-webui-campaign/image-experience-utils';\r\nimport { parseSync } from '@bingads-webui/safe-json';\r\nimport { getODataConfig } from '../model/constants';\r\nimport { imagePlacementsToImage } from '../model/utl';\r\nimport { getVerifiedTrackingSettings } from '../model/verified-tracking-setting';\r\n\r\nexport const useDisplayAdsRepository = () => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const serverContext = useContext(ServerContext);\r\n const scenarioContext = useContext(ScenarioContext);\r\n\r\n const activity = useContext(ActivityContext);\r\n const { scope } = useContext(ScopeContext);\r\n const { state } = useWizardService();\r\n const { logSuggestionsApplied } = useCopilotLoggers();\r\n\r\n const advertiserCustomerId = _.get(serverContext, ['CurrentAccount', 'AdvertiserCustomerID']);\r\n\r\n const imageRepository = new ImageRepository(advertiserCustomerId, scope.values.aid, getODataConfig(serverContext));\r\n\r\n const load = () => {\r\n const initialAds = state.context.wizardData.savedAdModel;\r\n\r\n if (!initialAds) {\r\n return Promise.resolve({\r\n data: [\r\n {\r\n uid: Math.random(),\r\n data: {\r\n FinalUrls: [],\r\n image: null,\r\n },\r\n },\r\n ],\r\n });\r\n }\r\n const imageAsset = initialAds.Images[0].Asset;\r\n\r\n const verifiedTrackingSetting = getVerifiedTrackingSettings(initialAds);\r\n\r\n const imagePromise = imageRepository.getImageByIdAsync(imageAsset.IdString)\r\n .then((imgObjMT) => {\r\n const imageObject = newImageFromMTObject(imgObjMT, constants.imageSources.Existing);\r\n const croppedImagePlacements = getAutoCroppedImages({\r\n originalImageToCrop: imageObject,\r\n isMultimediaAd: false,\r\n isMultimediaAdinMSANEnabled: false,\r\n imageOption: constants.defaultImageOption,\r\n aspectRatioOption: constants.defaultAspectRatioOption,\r\n isDisplayAds: true,\r\n });\r\n const imageData = imagePlacementsToImage({\r\n crops: croppedImagePlacements,\r\n selected: {\r\n TargetWidth: imageAsset.TargetWidth,\r\n TargetHeight: imageAsset.TargetHeight,\r\n CropWidth: imageAsset.CropWidth,\r\n CropHeight: imageAsset.CropHeight,\r\n CropX: imageAsset.CropX,\r\n CropY: imageAsset.CropY,\r\n },\r\n });\r\n\r\n const metaData = imageObject.metadata;\r\n let uriDecodedMetaData = metaData;\r\n\r\n // while saving we only replace the ',' symbol with %2C. So we need to replace it back to ','\r\n if (metaData) {\r\n uriDecodedMetaData = metaData.replace(/%2C/g, ',');\r\n }\r\n\r\n const decodedMetadata = parseSync(uriDecodedMetaData);\r\n\r\n const creativeData = decodedMetadata ? {\r\n creativeId: imageAsset.IdString,\r\n creativeMeta: decodedMetadata,\r\n } : null;\r\n\r\n const { TrackingUrlTemplate, FinalUrlSuffix, UrlCustomParameters, ImpressionTrackingUrls } = initialAds;\r\n\r\n const savedAd = {\r\n data: [{\r\n uid: Math.random(),\r\n Id: initialAds.Id ? initialAds.Id : null,\r\n data: {\r\n FinalUrls: initialAds.Id ? initialAds && initialAds.FinalUrls : [],\r\n creativeData,\r\n ...imageData.data,\r\n ...verifiedTrackingSetting,\r\n TrackingUrlTemplate,\r\n FinalUrlSuffix,\r\n UrlCustomParameters,\r\n ImpressionTrackingUrls,\r\n },\r\n }],\r\n };\r\n\r\n return savedAd;\r\n });\r\n\r\n return imagePromise;\r\n };\r\n\r\n const save = ({ data }) => {\r\n const {\r\n isCreateAnother,\r\n onSave,\r\n onSaveAndCreateAnother,\r\n isMultiAdFormatAd,\r\n } = state.context.wizardData;\r\n\r\n return new Promise((resolve, reject) => {\r\n saveAds({\r\n ads: isMultiAdFormatAd ? { ...data, adSubType: 'Display' } : data,\r\n campaign: { Id: scope.values.campaignId },\r\n adGroup: { Id: scope.values.adGroupId },\r\n activity,\r\n }, { scenario: scenarioContext.name, i18n, activityLogger: activity }).then((result) => {\r\n if (isCreateAnother) {\r\n onSaveAndCreateAnother(result);\r\n } else {\r\n onSave(result);\r\n }\r\n\r\n const suggestionIds = _.chain(data.data)\r\n .map(ad => _.get(ad, 'data.creativeData.creativeMeta.recommendationId'))\r\n .compact()\r\n .value();\r\n\r\n logSuggestionsApplied(\r\n scope.values.campaignId,\r\n scope.values.adGroupId,\r\n undefined /* textSuggestions */,\r\n suggestionIds\r\n );\r\n\r\n resolve();\r\n }).catch(() => {\r\n reject();\r\n });\r\n });\r\n };\r\n\r\n return {\r\n load,\r\n save,\r\n };\r\n};\r\n","import React, { useContext, useCallback, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { Stack, PrimaryButton, DefaultButton } from '@fluentui/react';\r\nimport {\r\n useWizardService,\r\n matchStepState,\r\n STEP_STATES,\r\n WIZARD_EVENTS,\r\n} from '@bingads-webui-react/wizard';\r\nimport { CancelButton } from '@bingads-webui-react/wizard-ui-library';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\n\r\nconst Save = () => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const { state, send } = useWizardService();\r\n const isBlocking = matchStepState(state, STEP_STATES.FETCHING) || matchStepState(state, STEP_STATES.LOADING) || matchStepState(state, STEP_STATES.SAVING);\r\n\r\n const onNextClicked = useCallback(() => {\r\n if (activity) {\r\n activity.signal('onSaveAndPublishClicked');\r\n }\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { isCreateAnother: false });\r\n send(WIZARD_EVENTS.SAVE_AND_EXIT);\r\n }, [activity, send]);\r\n\r\n const buttonText = useMemo(() => i18n.getString(_TL_('Save ad')), [i18n]);\r\n\r\n return (\r\n \r\n {buttonText}\r\n \r\n );\r\n};\r\n\r\nexport const SaveAndCreateAnother = () => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const { state, send } = useWizardService();\r\n const isBlocking = matchStepState(state, STEP_STATES.FETCHING) || matchStepState(state, STEP_STATES.LOADING) || matchStepState(state, STEP_STATES.SAVING);\r\n\r\n const onNextClicked = useCallback(() => {\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { isCreateAnother: true });\r\n send(WIZARD_EVENTS.SAVE_AND_NEXT);\r\n }, [send]);\r\n\r\n return (\r\n \r\n {i18n.getString(_TL_('Save & create another ad'))}\r\n \r\n );\r\n};\r\n\r\n\r\nexport const EditAdFooter = ({\r\n cancelButtonText,\r\n}) => (\r\n \r\n \r\n \r\n \r\n \r\n);\r\nEditAdFooter.propTypes = {\r\n cancelButtonText: PropTypes.string,\r\n};\r\nEditAdFooter.defaultProps = {\r\n cancelButtonText: undefined,\r\n};\r\n","import React, { useMemo, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { PerformanceMarkerProvider } from '@bingads-webui-campaign-react/performance-marker-provider';\r\nimport { Scenario, Activity } from '@bingads-webui-react/hoc-with-signal';\r\nimport { WizardPerfMarker } from '@bingads-webui-campaign/wizard-performance-marker';\r\nimport { InstrumentationContext } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport {\r\n Wizard,\r\n LayoutContainer,\r\n Layout,\r\n StepContainer,\r\n} from '@bingads-webui-react/wizard';\r\nimport {\r\n BusyBlocker,\r\n CancelWizardDialog,\r\n DefaultTemplate,\r\n} from '@bingads-webui-react/wizard-ui-library';\r\nimport { withLoggingContext } from '@bingads-webui-campaign-react/copilot-loggers';\r\nimport { withRecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { FluentProvider, webLightTheme } from '@fluentui/react-components';\r\nimport { DisplayAdsWithCopilot } from '../ad-components';\r\nimport { useDisplayAdsRepository } from './use-display-ads-repository';\r\nimport { EditAdFooter } from './edit-ad-footer';\r\n\r\nconst DISPLAY_AD = 'Display Ad';\r\n\r\nconst StepConfig = [{\r\n id: DISPLAY_AD,\r\n view: props => (\r\n \r\n \r\n \r\n ),\r\n repository: useDisplayAdsRepository,\r\n}];\r\n\r\nconst EditDisplayAdWizardInternal = ({\r\n gridData,\r\n perfMarker,\r\n onCancel,\r\n onSave,\r\n onSaveAndCreateAnother,\r\n isMultiAdFormatAd,\r\n}) => {\r\n const instrumentation = useContext(InstrumentationContext);\r\n\r\n const wizardPerfMarker = useMemo(() => (\r\n perfMarker.createChild('DisplayAdEditAdWizard')\r\n ), [perfMarker]);\r\n\r\n const config = useMemo(() => ({\r\n id: 'display-plus-wizard',\r\n initialStep: DISPLAY_AD,\r\n steps: StepConfig,\r\n actions: {\r\n onDone: () => { },\r\n onExited: () => onCancel(),\r\n },\r\n initialWizardData: {\r\n savedAdModel: gridData,\r\n onSave,\r\n onSaveAndCreateAnother,\r\n isMultiAdFormatAd,\r\n },\r\n attachStepActivities: false,\r\n }), [gridData, onCancel, onSave, onSaveAndCreateAnother, isMultiAdFormatAd]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nEditDisplayAdWizardInternal.propTypes = {\r\n gridData: PropTypes.object.isRequired,\r\n perfMarker: PropTypes.object.isRequired,\r\n onCancel: PropTypes.func.isRequired,\r\n onSave: PropTypes.func.isRequired,\r\n onSaveAndCreateAnother: PropTypes.func.isRequired,\r\n isMultiAdFormatAd: PropTypes.bool,\r\n};\r\n\r\nEditDisplayAdWizardInternal.defaultProps = {\r\n isMultiAdFormatAd: false,\r\n};\r\n\r\nexport const EditDisplayAdWizard = withLoggingContext(withRecommendationContext(EditDisplayAdWizardInternal));\r\n","import { useCallback, useEffect, useMemo, useContext, useState } from 'react';\r\nimport _ from 'underscore';\r\nimport { useSelector } from '@xstate/react';\r\nimport { isCanceling, stateLoggingListener, StepEvents, isSaving } from '@bingads-webui-campaign-react/step-wizard-machine';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { buildLegacyI18n } from '@bingads-webui/build-legacy-i18n';\r\nimport { ValidationStringMap } from '@bingads-webui/validation-string-map';\r\nimport { useExitWithoutSavingConfirmation } from '@bingads-webui-campaign-react/step-wizard';\r\nimport { useImpulse, usePrevProp } from '@bingads-webui-campaign-react/step-wizard-controls';\r\nimport { serverErrorsCompare } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\n\r\nimport { needsSaving } from './step-wizard-config';\r\n\r\nconst doesNeedSavingSelector = state => !isCanceling(state) && needsSaving(state.context) && !isSaving(state);\r\nconst hideStepHeaderSelector = state => state.context.stepInfo.hideStepHeader;\r\nconst adsSelector = state => state.context.data.ads;\r\nconst adsErrorsSelector = state => state.context.data.adsErrors;\r\nconst serverErrorsSelector = state => state.context.data.serverErrors;\r\nconst otherErrorsSelector = state => state.context.data.otherErrors;\r\nconst systemErrorsSelector = state => state.context.data.systemErrors;\r\nconst invalidSaveAttemptSelector = state => state.context.invalidSaveAttempt;\r\nconst serverContextSelector = state => state.context.stepsData.serverContext;\r\nconst permissionsSelector = state => _.get(state, 'context.stepsData.permissions');\r\n\r\nexport const useStepAdsSettingsState = (stepService, activity) => {\r\n const i18n = useContext(I18nContext);\r\n const legacyI18n = useMemo(() => buildLegacyI18n(i18n, [ValidationStringMap]), [i18n]);\r\n\r\n useEffect(() => {\r\n const subscription = stepService.subscribe(stateLoggingListener);\r\n return subscription.unsubscribe;\r\n }, [stepService]);\r\n\r\n const hideStepHeader = useSelector(stepService, hideStepHeaderSelector);\r\n\r\n const ads = useSelector(stepService, adsSelector);\r\n const serverContext = useSelector(stepService, serverContextSelector);\r\n const doesNeedSaving = useSelector(stepService, doesNeedSavingSelector);\r\n const adsErrors = useSelector(stepService, adsErrorsSelector);\r\n const otherErrors = useSelector(stepService, otherErrorsSelector);\r\n const systemErrors = useSelector(stepService, systemErrorsSelector);\r\n const serverErrors = useSelector(stepService, serverErrorsSelector);\r\n const invalidSaveAttempt = useSelector(stepService, invalidSaveAttemptSelector);\r\n const permissions = useSelector(stepService, permissionsSelector);\r\n\r\n const [navigationConfirmationPrompt] = useExitWithoutSavingConfirmation(doesNeedSaving, stepService, i18n);\r\n\r\n const removeEmptyAds = newAdsData => newAdsData.filter(ad => !_.isEmpty(ad.data));\r\n\r\n const onAdsValidation = useCallback((results) => {\r\n const { data: newAdsData, ...restResults } = results;\r\n\r\n const newAds = removeEmptyAds(newAdsData);\r\n\r\n const dataPatch = {\r\n ads: {\r\n ...ads,\r\n data: [\r\n ...newAds,\r\n ],\r\n ...restResults,\r\n },\r\n activity,\r\n };\r\n stepService.send({ type: StepEvents.UPDATE_VALIDATION, data: dataPatch });\r\n }, [stepService, ads, activity]);\r\n\r\n // eslint-disable-next-line no-bitwise\r\n const [, hasInvalidSaveAttemptChanged] = usePrevProp(invalidSaveAttempt | 0);\r\n const [, hasServerErrorsChanged] = usePrevProp(serverErrors, serverErrorsCompare);\r\n const areBeaconsActive = useImpulse(hasInvalidSaveAttemptChanged || hasServerErrorsChanged);\r\n\r\n const [showAllValidationErrors, setShowAllValidationErrors] = useState(false);\r\n if (hasInvalidSaveAttemptChanged) {\r\n setShowAllValidationErrors(true);\r\n }\r\n\r\n const state = {\r\n ads,\r\n i18n,\r\n legacyI18n,\r\n serverContext,\r\n hideStepHeader,\r\n adsErrors,\r\n otherErrors,\r\n systemErrors,\r\n navigationConfirmationPrompt,\r\n showAllValidationErrors,\r\n areBeaconsActive,\r\n serverErrors,\r\n permissions,\r\n };\r\n const api = { onAdsValidation };\r\n\r\n return [state, api];\r\n};\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\n/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React, { useCallback, useContext, useState, useMemo } from 'react';\r\nimport _, { get } from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { useSelector } from '@xstate/react';\r\n\r\nimport { FormErrorGroup, UnmappedFormErrors } from '@bingads-webui-campaign-react/form-error';\r\nimport { AttentionBeaconGroup } from '@bingads-webui-campaign-react/attention-beacon';\r\nimport { ActuationGroup } from '@bingads-webui-campaign-react/actuator';\r\nimport { withPerformanceMarker } from '@bingads-webui-campaign-react/performance-marker-provider';\r\nimport { ErrorMessages } from '@bingads-webui-react/validation';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { AdPreview, DisplayAdsContainer, PopulateImages, imagePlacementsToImage } from '@bingads-webui-campaign-react/xandr-display-ads-campaign-shared-components';\r\nimport { useImagePicker } from '@bingads-webui-campaign-react/add-image-hooks';\r\n\r\nimport { useStepAdsSettingsState } from './use-step-ads-state';\r\n\r\nconst permissionsSelector = state => get(state, 'context.stepsData.permissions');\r\n\r\nexport const getODataConfig = (serverContext) => {\r\n const isLocal = () => {\r\n const hostname = document.location.hostname.toLowerCase();\r\n return hostname.indexOf('ads.microsoft.com') === -1 &&\r\n hostname.indexOf('ads-int.microsoft.com') === -1;\r\n };\r\n\r\n const odataPath = isLocal() ? 'Advertiser/V2' : 'Campaign/V2';\r\n\r\n const oDataConfig = {\r\n odataToken: serverContext.Token,\r\n oDataToken: serverContext.Token,\r\n odataPath: `${serverContext.ServicesEndpoints.CampaignAPI}${odataPath}`,\r\n oDataPath: `${serverContext.ServicesEndpoints.CampaignAPI}${odataPath}`,\r\n };\r\n\r\n return oDataConfig;\r\n};\r\n\r\nconst StepAdsSettingsInternal = (props) => {\r\n const {\r\n stepService,\r\n perfMarker,\r\n scope,\r\n } = props;\r\n\r\n const { aid, cid, campaignId } = scope.values;\r\n const activity = useContext(ActivityContext);\r\n const [stepState, stepApi] = useStepAdsSettingsState(stepService, activity);\r\n const permissions = useSelector(stepService, permissionsSelector);\r\n const [currentImageIndex, setCurrentImageIndex] = useState(0);\r\n const { onAdsValidation } = stepApi;\r\n const {\r\n i18n,\r\n hideStepHeader,\r\n ads,\r\n adsErrors, otherErrors,\r\n navigationConfirmationPrompt,\r\n systemErrors,\r\n areBeaconsActive,\r\n serverErrors,\r\n showAllValidationErrors,\r\n serverContext,\r\n } = stepState;\r\n const oDataConfig = useMemo(() => getODataConfig(serverContext), [serverContext]);\r\n\r\n const {\r\n displayImagePicker,\r\n setDisplayImagePicker,\r\n selectedMediaPanelSource,\r\n setSelectedMediaPanelSource,\r\n } = useImagePicker();\r\n\r\n const onNewImageSelected = useCallback((imagePlacements) => {\r\n const newAds = imagePlacements.map(imagePlacement => (imagePlacementsToImage({\r\n crops: imagePlacement,\r\n defaults: {\r\n FinalUrls: [],\r\n isValid: false,\r\n isDirty: false,\r\n },\r\n })));\r\n const result = {\r\n data: [...newAds],\r\n isValid: false,\r\n isDirty: true,\r\n };\r\n onAdsValidation(result);\r\n setDisplayImagePicker(false);\r\n }, [onAdsValidation, setDisplayImagePicker]);\r\n\r\n const getBasicSettingsSection = useCallback(() => (\r\n
\r\n\r\n
\r\n
\r\n {i18n.getString(_TL_('Now that you\\'ve created your ad group, you can create your ads. Add your images and the Final URL, and we\\'ll show you a preview of how your ads might look like.'))}\r\n {_.isEmpty(ads.data) &&\r\n \r\n }\r\n { !_.isEmpty(ads.data) &&\r\n \r\n }\r\n
\r\n {\r\n !_.isEmpty(ads.data) &&\r\n
\r\n \r\n
\r\n }\r\n
\r\n
), [i18n, stepService, perfMarker, cid, aid, ads, currentImageIndex, oDataConfig, permissions, displayImagePicker, selectedMediaPanelSource, setSelectedMediaPanelSource, onNewImageSelected, serverContext]);\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n {!hideStepHeader &&\r\n <>\r\n

{i18n.getString(_TL_('Ads'))}

\r\n {i18n.getString(_TL_(''))}\r\n \r\n }\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n {getBasicSettingsSection()}\r\n {navigationConfirmationPrompt}\r\n
\r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nStepAdsSettingsInternal.propTypes = {\r\n stepService: PropTypes.shape({}).isRequired,\r\n perfMarker: PropTypes.shape({}).isRequired,\r\n instrumentation: PropTypes.shape({}).isRequired,\r\n scope: PropTypes.shape({\r\n values: PropTypes.shape({\r\n aid: PropTypes.number,\r\n cid: PropTypes.number,\r\n campaignId: PropTypes.number,\r\n }),\r\n }).isRequired,\r\n};\r\n\r\nexport const StepAdsSettings = withPerformanceMarker(StepAdsSettingsInternal);\r\n","import { isEmpty, result } from 'underscore';\r\nimport { assign } from 'xstate';\r\nimport Promise from 'bluebird';\r\nimport { withScope } from '@bingads-webui-react/scope-service';\r\nimport { stepStateMachine } from '@bingads-webui-campaign-react/step-wizard-machine';\r\nimport { saveAds, modelToViewModelForAd, getErrorsPlaceholders } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\n\r\nimport { STEP_PATHS, viewModelToModelForCampaign } from '@bingads-webui-campaign-react/xandr-campaign';\r\n\r\nimport { StepAdsSettings } from './step-ads-settings';\r\n\r\n\r\nconst needsLoading = () => true;\r\nconst hasCampaignData = context =>\r\n Boolean(result(context, ['stepsData', 'campaign', 'Id']));\r\n\r\n/**\r\n * Loads step data asynchronously. The returned promise must resolve\r\n * into a single object, opaque to the step, which will be saved\r\n * in the context under the `data` property.\r\n *\r\n * The function is called when the wizard enters the step.\r\n * The step will be blocked until the promise resolves.\r\n * @param {Object} context - the current context\r\n * @returns {Promise} a promise that must resolve\r\n * into a single object, opaque to the step, which will be saved\r\n * in the context under the `data` property.\r\n */\r\nconst loadData = (context) => {\r\n const loadPromises = {\r\n ads: Promise.resolve(context.data.ads),\r\n };\r\n\r\n return Promise.props(loadPromises).then(({\r\n ads,\r\n }) => {\r\n const { deal } = context.stepsData.adGroup;\r\n const adsModel = modelToViewModelForAd({ adsModel: ads });\r\n\r\n const results = {\r\n ads: adsModel, oldAdsModel: adsModel, deal, ...getErrorsPlaceholders(),\r\n };\r\n\r\n return results;\r\n });\r\n};\r\n\r\n// must return `Promise.resolve(data)` or `Promise.reject(error)`\r\n// the payload will be available in `onDone` and `onError` in event's `data` prop.\r\nconst saveData = context =>\r\n saveAds({\r\n ads: context.data.ads,\r\n oldAdsModel: context.data.oldAdsModel,\r\n campaign: context.stepsData.campaign,\r\n adGroup: context.stepsData.adGroup,\r\n activity: context.data.activity,\r\n }, {\r\n scenario: context.stepsData.scenarioName,\r\n activityLogger: context.stepsData.scenario.createActivity('saveAds'),\r\n i18n: context.stepsData.i18n,\r\n });\r\n\r\nconst isValid = context => context.data.ads.isValid;\r\nconst isDirty = context => context.data.ads.isDirty;\r\nconst hasServerErrors = context => !isEmpty(context.data.serverErrors) || !isEmpty(context.data.systemErrors);\r\nexport const needsSaving = context => isDirty(context) || hasServerErrors(context);\r\n\r\nconst patchStepsData = assign({\r\n stepsData: (context/* , event */) => ({\r\n ...context.stepsData,\r\n ads: context.data.ads,\r\n ...hasCampaignData(context) ? {} :\r\n { campaign: viewModelToModelForCampaign(context.data.campaign) },\r\n }),\r\n});\r\nconst clearErrors = assign({\r\n data: context => ({\r\n ...context.data,\r\n ...getErrorsPlaceholders(),\r\n }),\r\n});\r\n\r\nexport const stepAdsWizardConfig = {\r\n id: STEP_PATHS.ADS,\r\n title: _TL_('Ads'),\r\n StepMachine: stepStateMachine,\r\n StepMachineOptions: (stepInfo, initialStepsData) => ({\r\n machineId: STEP_PATHS.ADS,\r\n initialContext: {\r\n id: stepInfo.id,\r\n stepInfo,\r\n stepsData: initialStepsData,\r\n data: {\r\n ads: [],\r\n ...getErrorsPlaceholders(),\r\n },\r\n },\r\n actions: {\r\n patchStepsData,\r\n clearErrors,\r\n },\r\n guards: {\r\n needsLoading,\r\n needsSaving,\r\n isValid,\r\n isDirty,\r\n },\r\n }),\r\n StepComponent: withScope(StepAdsSettings),\r\n canNavigateBackWithoutSaving: true,\r\n stepRepositoryConfig: {\r\n saveData,\r\n loadData,\r\n },\r\n};\r\n","import {\r\n stepAdGroupWizardConfig,\r\n stepCampaignSettingsWizardConfig,\r\n STEP_PATHS,\r\n} from '@bingads-webui-campaign-react/xandr-campaign';\r\n\r\nimport { stepAdsWizardConfig } from './steps';\r\n\r\nconst ScenarioName = {\r\n XandrDisplayAdsCampaignCreation: 'XandrDisplayAdsCampaignCreation',\r\n XandrDisplayAdsAdGroupCreation: 'XandrDisplayAdsAdGroupCreation',\r\n XandrDisplayAdsCampaignSettings: 'XandrDisplayAdsCampaignSettings',\r\n XandrDisplayAdsAdGroupSettings: 'XandrDisplayAdsAdGroupSettings',\r\n XandrDisplayAdsCreation: 'XandrDisplayAdsCreation',\r\n};\r\n\r\nconst STEP_INFOS = {\r\n [STEP_PATHS.CAMPAIGN_SETTINGS]: stepCampaignSettingsWizardConfig,\r\n [STEP_PATHS.AD_GROUP]: stepAdGroupWizardConfig,\r\n [STEP_PATHS.ADS]: stepAdsWizardConfig,\r\n};\r\n\r\nconst applyCommonSettingsPageSettings = stepInfo => ({\r\n ...stepInfo,\r\n hideStepHeader: true,\r\n});\r\n\r\n// Scenarios\r\n// I. Creation\r\n// 1. Campaign creation\r\n// 2. Ad group\r\n// ...\r\n// II. Settings\r\n// 1. Campaign settings\r\n// 2. Ad group settings\r\n\r\nconst XANDR_DISPLAY_ADS_CAMPAIGN_CREATION = {\r\n scenarioName: ScenarioName.XandrDisplayAdsCampaignCreation,\r\n isEditing: false,\r\n stepList: [\r\n STEP_INFOS[STEP_PATHS.CAMPAIGN_SETTINGS],\r\n STEP_INFOS[STEP_PATHS.AD_GROUP],\r\n STEP_INFOS[STEP_PATHS.ADS],\r\n ],\r\n};\r\n\r\nconst XANDR_DISPLAY_ADS_AD_GROUP_CREATION = {\r\n scenarioName: ScenarioName.XandrDisplayAdsAdGroupCreation,\r\n isEditing: false,\r\n withContentFooter: false,\r\n stepList: [\r\n STEP_INFOS[STEP_PATHS.AD_GROUP],\r\n STEP_INFOS[STEP_PATHS.ADS],\r\n ],\r\n};\r\n\r\nconst XANDR_DISPLAY_ADS_CAMPAIGN_SETTINGS = {\r\n scenarioName: ScenarioName.XandrDisplayAdsCampaignSettings,\r\n isEditing: true,\r\n stepList: [\r\n applyCommonSettingsPageSettings(STEP_INFOS[STEP_PATHS.CAMPAIGN_SETTINGS]),\r\n ],\r\n};\r\n\r\nconst XANDR_DISPLAY_ADS_AD_GROUP_SETTINGS = {\r\n scenarioName: ScenarioName.XandrDisplayAdsAdGroupSettings,\r\n isEditing: true,\r\n stepList: [\r\n applyCommonSettingsPageSettings(STEP_INFOS[STEP_PATHS.AD_GROUP]),\r\n ],\r\n};\r\n\r\nexport const XANDR_DISPLAY_ADS_CAMPAIGN_CRUD_SCENARIOS = {\r\n XANDR_DISPLAY_ADS_CAMPAIGN_CREATION,\r\n XANDR_DISPLAY_ADS_AD_GROUP_CREATION,\r\n XANDR_DISPLAY_ADS_CAMPAIGN_SETTINGS,\r\n XANDR_DISPLAY_ADS_AD_GROUP_SETTINGS,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withTheme } from 'react-jss';\r\nimport { PerformanceMarkerProvider } from '@bingads-webui-campaign-react/performance-marker-provider';\r\nimport { withComponentErrorLogging } from '@bingads-webui-campaign-react/global-error-options';\r\nimport { withSiteMap, getRoutePathById } from '@bingads-webui-campaign-react/with-site-map';\r\nimport { StepWizard } from '@bingads-webui-campaign-react/step-wizard';\r\nimport { MmpFetchProvider } from '@bingads-webui-campaign-react/xandr-campaign';\r\nimport { XANDR_DISPLAY_ADS_CAMPAIGN_CRUD_SCENARIOS } from '../xandr-display-ads-campaign-crud-scenarios';\r\n\r\n\r\nconst XandrDisplayAdsCampaignCreationPageImpl = ((props) => {\r\n const routeToNavigateToWhenDone = getRoutePathById(props.siteMap, 'campaigns');\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n});\r\n\r\nXandrDisplayAdsCampaignCreationPageImpl.propTypes = {\r\n siteMap: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n permissions: PropTypes.shape({}).isRequired,\r\n theme: PropTypes.shape({}).isRequired,\r\n scope: PropTypes.shape({\r\n save: PropTypes.func.isRequired,\r\n }).isRequired,\r\n instrumentation: PropTypes.shape({}).isRequired,\r\n i18n: PropTypes.shape({}).isRequired,\r\n};\r\n\r\nexport const XandrDisplayAdsCampaignCreationPage = withSiteMap(withTheme(withComponentErrorLogging(\r\n XandrDisplayAdsCampaignCreationPageImpl,\r\n XANDR_DISPLAY_ADS_CAMPAIGN_CRUD_SCENARIOS.XANDR_DISPLAY_ADS_CAMPAIGN_CREATION.scenarioName\r\n)));\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withTheme } from 'react-jss';\r\nimport { PerformanceMarkerProvider } from '@bingads-webui-campaign-react/performance-marker-provider';\r\nimport { withComponentErrorLogging } from '@bingads-webui-campaign-react/global-error-options';\r\nimport { withSiteMap, getRoutePathById } from '@bingads-webui-campaign-react/with-site-map';\r\nimport { StepWizard } from '@bingads-webui-campaign-react/step-wizard';\r\nimport { MmpFetchProvider } from '@bingads-webui-campaign-react/xandr-campaign';\r\n\r\nimport { XANDR_DISPLAY_ADS_CAMPAIGN_CRUD_SCENARIOS } from '../xandr-display-ads-campaign-crud-scenarios';\r\n\r\nconst XandrDisplayAdsCampaignSettingsPageImpl = ((props) => {\r\n const routeToNavigateToWhenDone = getRoutePathById(props.siteMap, 'adgroups');\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n});\r\n\r\nXandrDisplayAdsCampaignSettingsPageImpl.propTypes = {\r\n siteMap: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n permissions: PropTypes.shape({}).isRequired,\r\n theme: PropTypes.shape({}).isRequired,\r\n scope: PropTypes.shape({\r\n save: PropTypes.func.isRequired,\r\n }).isRequired,\r\n instrumentation: PropTypes.shape({}).isRequired,\r\n i18n: PropTypes.shape({}).isRequired,\r\n currentAdGroup: PropTypes.shape({}),\r\n currentCampaign: PropTypes.shape({}),\r\n};\r\n\r\nXandrDisplayAdsCampaignSettingsPageImpl.defaultProps = {\r\n currentAdGroup: null,\r\n currentCampaign: null,\r\n};\r\n\r\nexport const XandrDisplayAdsCampaignSettingsPage = withSiteMap(withTheme(withComponentErrorLogging(\r\n XandrDisplayAdsCampaignSettingsPageImpl,\r\n XANDR_DISPLAY_ADS_CAMPAIGN_CRUD_SCENARIOS.XANDR_DISPLAY_ADS_CAMPAIGN_SETTINGS.scenarioName\r\n)));\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withTheme } from 'react-jss';\r\nimport { withComponentErrorLogging } from '@bingads-webui-campaign-react/global-error-options';\r\nimport { PerformanceMarkerProvider } from '@bingads-webui-campaign-react/performance-marker-provider';\r\nimport { withSiteMap, getRoutePathById } from '@bingads-webui-campaign-react/with-site-map';\r\nimport { StepWizard } from '@bingads-webui-campaign-react/step-wizard';\r\nimport { MmpFetchProvider } from '@bingads-webui-campaign-react/xandr-campaign';\r\nimport { XANDR_DISPLAY_ADS_CAMPAIGN_CRUD_SCENARIOS } from '../xandr-display-ads-campaign-crud-scenarios';\r\n\r\nconst XandrDisplayAdsAdGroupSettingsPageImpl = ((props) => {\r\n const routeToNavigateToWhenDone = getRoutePathById(props.siteMap, 'ads');\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n});\r\n\r\nXandrDisplayAdsAdGroupSettingsPageImpl.propTypes = {\r\n siteMap: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n permissions: PropTypes.shape({}).isRequired,\r\n theme: PropTypes.shape({}).isRequired,\r\n scope: PropTypes.shape({\r\n save: PropTypes.func.isRequired,\r\n }).isRequired,\r\n instrumentation: PropTypes.shape({}).isRequired,\r\n i18n: PropTypes.shape({}).isRequired,\r\n};\r\n\r\nexport const XandrDisplayAdsAdGroupSettingsPage = withSiteMap(withTheme(withComponentErrorLogging(\r\n XandrDisplayAdsAdGroupSettingsPageImpl,\r\n XANDR_DISPLAY_ADS_CAMPAIGN_CRUD_SCENARIOS.XANDR_DISPLAY_ADS_AD_GROUP_SETTINGS.scenarioName\r\n)));\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withTheme } from 'react-jss';\r\nimport { PerformanceMarkerProvider } from '@bingads-webui-campaign-react/performance-marker-provider';\r\nimport { withComponentErrorLogging } from '@bingads-webui-campaign-react/global-error-options';\r\nimport { withSiteMap, getRoutePathById } from '@bingads-webui-campaign-react/with-site-map';\r\nimport { StepWizard } from '@bingads-webui-campaign-react/step-wizard';\r\nimport { withInstrumentation } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { MmpFetchProvider } from '@bingads-webui-campaign-react/xandr-campaign';\r\nimport { XANDR_DISPLAY_ADS_CAMPAIGN_CRUD_SCENARIOS } from '../xandr-display-ads-campaign-crud-scenarios';\r\n\r\nconst getStyles = () => ({\r\n '@global': {\r\n '.app-shell .app-content-body': {\r\n // need to override the style since ad-group creation page shell inserts footer.\r\n overflow: 'hidden',\r\n flexShrink: '1!important',\r\n },\r\n },\r\n});\r\n\r\nconst XandrDisplayAdsAdGroupCreationPageImpl = ((props) => {\r\n const routeToNavigateToWhenDone = getRoutePathById(props.siteMap, 'adgroups');\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n});\r\n\r\nXandrDisplayAdsAdGroupCreationPageImpl.propTypes = {\r\n siteMap: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n permissions: PropTypes.shape({}).isRequired,\r\n theme: PropTypes.shape({}).isRequired,\r\n scope: PropTypes.shape({\r\n save: PropTypes.func.isRequired,\r\n }).isRequired,\r\n instrumentation: PropTypes.shape({}).isRequired,\r\n i18n: PropTypes.shape({}).isRequired,\r\n};\r\n\r\nexport const XandrDisplayAdsAdGroupCreationPage = withSiteMap(withTheme(withInstrumentation(withComponentErrorLogging(\r\n withDefaultStyles(XandrDisplayAdsAdGroupCreationPageImpl, getStyles),\r\n XANDR_DISPLAY_ADS_CAMPAIGN_CRUD_SCENARIOS.XANDR_DISPLAY_ADS_AD_GROUP_CREATION.scenarioName\r\n))));\r\n","import { withSignal, CommonEventParser } from '@bingads-webui-react/hoc-with-signal';\r\nimport {\r\n PrimaryButton as FabricPrimaryButton,\r\n DefaultButton as FabricDefaultButton,\r\n Link as FabricLink,\r\n TextField as FabricTextField,\r\n IconButton as FabricIconButton,\r\n} from '@bingads-webui-react/fabric-control';\r\n\r\nexport const PrimaryButton = withSignal(FabricPrimaryButton, {\r\n onClick: CommonEventParser,\r\n});\r\n\r\nexport const DefaultButton = withSignal(FabricDefaultButton, {\r\n onClick: CommonEventParser,\r\n});\r\n\r\nexport const Link = withSignal(FabricLink, {\r\n onClick: CommonEventParser,\r\n});\r\n\r\nexport const TextField = withSignal(FabricTextField, {\r\n onChange: CommonEventParser,\r\n});\r\n\r\nexport const IconButton = withSignal(FabricIconButton, {\r\n onClick: CommonEventParser,\r\n});\r\n","export const getAdsStepStyles = (/* components, theme */) => ({\r\n videoPanelRoot: {\r\n marginTop: 20,\r\n width: 500,\r\n minHeight: 181,\r\n padding: 20,\r\n paddingBottom: 20,\r\n paddingTop: 10,\r\n background: '#FFFFFF',\r\n boxShadow: '0px 2px 4px rgba(0, 0, 0, 0.1)',\r\n borderRadius: 6,\r\n '& .image-list-item-status-indicator': {\r\n background: 'linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, #000000 100%)',\r\n borderRadius: 6,\r\n width: '170px !important',\r\n height: '96px !important',\r\n paddingTop: '10px !important',\r\n '&:hover': {\r\n '& .edit-button': {\r\n display: 'none',\r\n },\r\n },\r\n '& .placeholder-content': {\r\n color: 'white !important',\r\n },\r\n },\r\n '& .error': {\r\n marginTop: 20,\r\n },\r\n '& .image-experience-content': {\r\n width: 170,\r\n '& .col-sm-3': {\r\n background: 'linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, #000000 100%)',\r\n borderRadius: 6,\r\n width: '170px !important',\r\n height: '96px !important',\r\n paddingTop: '10px !important',\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n '&:hover': {\r\n '& .edit-button': {\r\n display: 'none',\r\n },\r\n },\r\n '& .placeholder-content': {\r\n color: 'white !important',\r\n },\r\n '& .ms-Button': {\r\n width: 56,\r\n height: 24,\r\n marginTop: 10,\r\n },\r\n },\r\n '& .add-image-button': {\r\n border: '1px solid #8a8886',\r\n background: '#FFFFFF !important',\r\n fontWeight: 600,\r\n borderRadius: 2,\r\n '&:before': {\r\n content: '\"\\\\E710\"',\r\n color: '#0078D4',\r\n marginRight: 8,\r\n fontFamily: 'MsAds MDL2 Assets',\r\n },\r\n },\r\n },\r\n '& .image-section-label': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n '& .image-list-label': {\r\n fontWeight: 600,\r\n },\r\n '& .image-list-content': {\r\n width: '170px !important', // fixed for 16:9 aspect ratio\r\n border: 'none !important',\r\n padding: '0px !important',\r\n },\r\n '& .image-list-item-video': {\r\n position: 'relative',\r\n backgroundColor: 'none !important',\r\n width: '170px !important', // fixed for 16:9 aspect ratio\r\n '&:hover': {\r\n '& .edit-button': {\r\n display: 'flex',\r\n },\r\n },\r\n '& .placeholder-content': {\r\n color: 'black !important',\r\n },\r\n\r\n },\r\n '& .image-item-ratio-label': {\r\n paddingTop: 10,\r\n },\r\n '& .thumbnail-preview': {\r\n borderRadius: 6,\r\n filter: 'drop-shadow(0px 0.6px 1.8px rgba(0, 0, 0, 0.1)) drop-shadow(0px 3.2px 7.2px rgba(0, 0, 0, 0.13))',\r\n width: '170px !important',\r\n height: '96px !important',\r\n },\r\n },\r\n videoRepairPanelRoot: {\r\n marginTop: 20,\r\n width: 800,\r\n minHeight: 181,\r\n padding: 20,\r\n paddingBottom: 20,\r\n paddingTop: 10,\r\n background: '#FFFFFF',\r\n boxShadow: '0px 2px 4px rgba(0, 0, 0, 0.1)',\r\n borderRadius: 6,\r\n '& .image-list-item-status-indicator': {\r\n background: 'linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, #000000 100%)',\r\n borderRadius: 6,\r\n width: '170px !important',\r\n height: '96px !important',\r\n paddingTop: '10px !important',\r\n '&:hover': {\r\n '& .edit-button': {\r\n display: 'none',\r\n },\r\n },\r\n '& .placeholder-content': {\r\n color: 'white !important',\r\n },\r\n },\r\n '& .error': {\r\n marginTop: 20,\r\n },\r\n '& .image-experience-content': {\r\n width: 170,\r\n '& .col-sm-3': {\r\n background: 'linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, #000000 100%)',\r\n borderRadius: 6,\r\n width: '170px !important',\r\n height: '96px !important',\r\n paddingTop: '10px !important',\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n '&:hover': {\r\n '& .edit-button': {\r\n display: 'none',\r\n },\r\n },\r\n '& .placeholder-content': {\r\n color: 'white !important',\r\n },\r\n '& .ms-Button': {\r\n width: 56,\r\n height: 24,\r\n marginTop: 10,\r\n },\r\n },\r\n '& .add-image-button': {\r\n border: '1px solid #8a8886',\r\n background: '#FFFFFF !important',\r\n fontWeight: 600,\r\n borderRadius: 2,\r\n '&:before': {\r\n content: '\"\\\\E710\"',\r\n color: '#0078D4',\r\n marginRight: 8,\r\n fontFamily: 'MsAds MDL2 Assets',\r\n },\r\n },\r\n },\r\n '& .image-section-label': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n '& .image-list-label': {\r\n fontWeight: 600,\r\n },\r\n '& .image-list-content': {\r\n width: '170px !important', // fixed for 16:9 aspect ratio\r\n border: 'none !important',\r\n padding: '0px !important',\r\n },\r\n '& .image-list-item-video': {\r\n position: 'relative',\r\n backgroundColor: 'none !important',\r\n width: '170px !important', // fixed for 16:9 aspect ratio\r\n '&:hover': {\r\n '& .edit-button': {\r\n display: 'flex',\r\n },\r\n },\r\n '& .placeholder-content': {\r\n color: 'black !important',\r\n },\r\n\r\n },\r\n '& .image-item-ratio-label': {\r\n paddingTop: 10,\r\n },\r\n '& .thumbnail-preview': {\r\n borderRadius: 6,\r\n filter: 'drop-shadow(0px 0.6px 1.8px rgba(0, 0, 0, 0.1)) drop-shadow(0px 3.2px 7.2px rgba(0, 0, 0, 0.13))',\r\n width: '170px !important',\r\n height: '96px !important',\r\n },\r\n },\r\n selectedPanel: {\r\n border: '1px solid #0078D4',\r\n },\r\n videoPanelHeader: {\r\n display: 'flex',\r\n width: '100%',\r\n justifyContent: 'flex-end',\r\n height: 5,\r\n },\r\n adPreviewTitle: {\r\n fontSize: 18,\r\n fontWeight: 600,\r\n },\r\n previewContainer: {\r\n width: '100%',\r\n },\r\n adPreviewHeader: {\r\n height: 40,\r\n },\r\n adPreviewRoot: {\r\n maxWidth: '540px',\r\n width: '100%',\r\n padding: 20,\r\n paddingBottom: 20,\r\n position: 'sticky',\r\n top: '0px',\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n },\r\n video: {\r\n borderRadius: '6px',\r\n filter: 'drop-shadow(0px 0.6px 1.8px rgba(0, 0, 0, 0.1)) drop-shadow(0px 3.2px 7.2px rgba(0, 0, 0, 0.13))',\r\n },\r\n previewTag: {\r\n marginTop: 10,\r\n },\r\n pagination: {\r\n paddingTop: 10,\r\n width: '100%',\r\n },\r\n pageControls: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n columnGap: '10px',\r\n },\r\n paginationIndicatorDot: {\r\n height: 8,\r\n width: 8,\r\n borderRadius: '50%',\r\n display: 'inline-block',\r\n cursor: 'pointer',\r\n },\r\n paginationButton: {\r\n height: 8,\r\n width: 8,\r\n opacity: 0,\r\n },\r\n paginationIndicator: {\r\n display: 'flex',\r\n columnGap: '2px',\r\n },\r\n videoPanelContent: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n },\r\n placementInfoTile: {\r\n paddingTop: 20,\r\n marginLeft: 10,\r\n },\r\n placementInfos: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n columnGap: 10,\r\n rowGap: '5px',\r\n alignItems: 'center',\r\n },\r\n enabledPlacement: {\r\n backgroundColor: '#DFF6DD',\r\n padding: '3px 5px',\r\n borderRadius: 4,\r\n },\r\n enabledText: {\r\n color: '#0C5E0C',\r\n fontWeight: 600,\r\n display: 'flex',\r\n alignItems: 'center',\r\n columnGap: 5,\r\n },\r\n disabledPlacement: {\r\n backgroundColor: '#F3F2F1',\r\n padding: '3px 5px',\r\n borderRadius: 4,\r\n },\r\n disabledText: {\r\n color: '#605E5C',\r\n fontWeight: 600,\r\n display: 'flex',\r\n alignItems: 'center',\r\n columnGap: 5,\r\n },\r\n fontStyle: {\r\n fontSize: 14,\r\n fontWeight: 600,\r\n },\r\n placementLabel: {\r\n paddingTop: 0,\r\n paddingBottom: 0,\r\n },\r\n placmentResolution: {\r\n paddingTop: 5,\r\n paddingBottom: 5,\r\n },\r\n videoPanelFinalUrlContainer: {\r\n width: 45,\r\n },\r\n starStyle: {\r\n fontSize: 20,\r\n },\r\n});\r\n\r\nexport const getImageSuggestionCarouselStyles = () => ({\r\n imageSuggestionCarouselRoot: {\r\n '& .image-suggestion-carousel-root': {\r\n '& .panel': {\r\n backgroundColor: 'transparent',\r\n\r\n '& .helpbutton': {\r\n margin: '4px 0px',\r\n },\r\n },\r\n },\r\n marginTop: 10,\r\n },\r\n croppedImage: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n width: '107px',\r\n height: '76px',\r\n background: '#F3F2F1',\r\n },\r\n});\r\n","/* eslint-disable jsx-a11y/no-static-element-interactions */\r\n/* eslint-disable jsx-a11y/anchor-is-valid */\r\n/* eslint-disable jsx-a11y/media-has-caption */\r\nimport React, { useRef, useEffect, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { Text, FontIcon } from '@bingads-webui-react/fabric-control';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { ClipchampPlayer } from '@bingads-webui-campaign-react/clipchamp-player';\r\nimport { Link } from '../common/shared-components';\r\nimport { getAdsStepStyles } from './styles';\r\n\r\nconst ITEMS_PER_PAGE = 10;\r\n\r\nexport const AdPreview = (props) => {\r\n const {\r\n i18n,\r\n ads,\r\n onUpdateCurrentVideoIndex,\r\n disablePagination,\r\n customStyleFunction,\r\n useCustomStyleFunction,\r\n permissions,\r\n loadClipchampPlayer,\r\n } = props;\r\n\r\n const videos = (ads && ads.data && _.isArray(ads.data)) ? ads.data : [];\r\n\r\n const videoRef = useRef();\r\n\r\n const defaultClasses = useDefaultStyles(getAdsStepStyles);\r\n\r\n const customClasses = useDefaultStyles(customStyleFunction);\r\n\r\n const classes = useCustomStyleFunction ? customClasses : defaultClasses;\r\n\r\n const { currentPageIndex } = ads;\r\n\r\n const [currentVideoIdx, setCurrentVideoIdx] = useState(0);\r\n\r\n const [videoHeight, setVideoHeight] = useState('280'); // default 280 height for horizontal videos\r\n const videoTemplateUIEnabled = permissions && permissions.dynamic && permissions.dynamic.VideoTemplateUI;\r\n\r\n const getPageAdjustedIndex = (idx, pageNumber = null) => {\r\n const page = pageNumber || currentPageIndex;\r\n\r\n const val = (((page - 1) * ITEMS_PER_PAGE) + idx);\r\n\r\n return val;\r\n };\r\n\r\n const goToPrevVideo = () => {\r\n setCurrentVideoIdx(currentVideoIdx - 1);\r\n };\r\n\r\n const goToNextVideo = () => {\r\n setCurrentVideoIdx(currentVideoIdx + 1);\r\n };\r\n\r\n const goToVideoIndex = (idx) => {\r\n setCurrentVideoIdx(idx);\r\n };\r\n\r\n const videosInPage = videos.slice(getPageAdjustedIndex(0), getPageAdjustedIndex(9) + 1);\r\n\r\n const currentVideo = videos[getPageAdjustedIndex(currentVideoIdx)] || videos[0];\r\n\r\n useEffect(() => {\r\n setCurrentVideoIdx(0);\r\n }, [currentPageIndex]);\r\n\r\n useEffect(() => {\r\n if (currentVideoIdx > videosInPage.length - 1) {\r\n setCurrentVideoIdx(0);\r\n }\r\n onUpdateCurrentVideoIndex(currentVideoIdx);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [currentVideoIdx, videosInPage.length]);\r\n\r\n const source = (currentVideo && currentVideo.data && currentVideo.data.video && currentVideo.data.video.src) || '';\r\n\r\n useEffect(() => {\r\n if (videoRef.current) {\r\n videoRef.current.load();\r\n }\r\n }, [source]);\r\n\r\n\r\n useEffect(() => {\r\n if (currentVideo?.data?.video) {\r\n const { height, width } = currentVideo.data.video;\r\n const isVertical = height > width;\r\n\r\n if (isVertical) {\r\n setVideoHeight('420');\r\n } else {\r\n setVideoHeight('280');\r\n }\r\n }\r\n }, [currentVideo]);\r\n\r\n return (\r\n
\r\n
\r\n {i18n.getString(_TL_('Ad preview'))} \r\n
\r\n
\r\n {videoTemplateUIEnabled ? (\r\n \r\n ) : (\r\n \r\n )}\r\n
\r\n {\r\n !disablePagination && videosInPage.length > 1 && (\r\n
\r\n
\r\n \r\n {i18n.getString(_TL_('Previous ad'))} \r\n \r\n
\r\n {\r\n videosInPage.map((video, idx) => (\r\n
\r\n goToVideoIndex(idx)} onClick={() => goToVideoIndex(idx)} className={classes.paginationIndicatorDot} style={{ backgroundColor: getPageAdjustedIndex(idx) === getPageAdjustedIndex(currentVideoIdx) ? '#0078d4' : '#c8c6c4' }} />\r\n
\r\n ))\r\n }\r\n
\r\n \r\n {i18n.getString(_TL_('Next ad'))} \r\n \r\n
\r\n
\r\n )\r\n }\r\n
\r\n \r\n {i18n.getString(_TL_('This is an example of what your video ad might look like. Depending on placement, the actual ad shown may appear differently.'))}\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nAdPreview.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n ads: PropTypes.shape({\r\n data: PropTypes.instanceOf(Array),\r\n currentPageIndex: PropTypes.number,\r\n }).isRequired,\r\n disablePagination: PropTypes.bool,\r\n onUpdateCurrentVideoIndex: PropTypes.func.isRequired,\r\n customStyleFunction: PropTypes.func,\r\n useCustomStyleFunction: PropTypes.bool,\r\n loadClipchampPlayer: PropTypes.func,\r\n};\r\n\r\nAdPreview.defaultProps = {\r\n disablePagination: false,\r\n customStyleFunction: _.noop,\r\n useCustomStyleFunction: false,\r\n loadClipchampPlayer: _.noop,\r\n};\r\n","\r\nimport React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Button, makeStyles, mergeClasses, shorthands } from '@fluentui/react-components';\r\nimport { AddRegular } from '@fluentui/react-icons';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\n\r\nconst useStyles = makeStyles({\r\n buttonContainer: {\r\n width: '170px',\r\n ...shorthands.border('1px', 'dashed', '#c8c6c4'),\r\n height: '96px',\r\n display: 'flex',\r\n ...shorthands.borderRadius('6px'),\r\n },\r\n buttonContainerMultiple: {\r\n width: '112px',\r\n height: '99px',\r\n },\r\n button: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n flexGrow: 1,\r\n },\r\n addIcon: {\r\n color: '#0078D4',\r\n fontSize: '32px',\r\n },\r\n addIconMultiple: {\r\n fontSize: '22px',\r\n },\r\n});\r\n\r\nexport const AddVideoButton = ({ onClick, multiVideoMode }) => {\r\n const classes = useStyles();\r\n const i18n = useContext(I18nContext);\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nAddVideoButton.propTypes = {\r\n onClick: PropTypes.func.isRequired,\r\n multiVideoMode: PropTypes.bool,\r\n};\r\n\r\nAddVideoButton.defaultProps = {\r\n multiVideoMode: false,\r\n};\r\n","export const overrideClasses = {\r\n image: {\r\n borderRadius: 6,\r\n },\r\n imageContainer: {\r\n height: 80,\r\n display: 'flex',\r\n },\r\n imageParentContainer: {\r\n display: 'flex',\r\n columnGap: '10px',\r\n },\r\n imageClickableContainer: {\r\n width: 107,\r\n '& img': {\r\n verticalAlign: 'top',\r\n },\r\n },\r\n seeAll: {\r\n bottom: 12,\r\n maxWidth: 'initial',\r\n },\r\n parentContainer: {\r\n '& $panelHeading': {\r\n display: 'flex',\r\n border: 'none',\r\n '& $panelTitle.collapsible-title': {\r\n flexGrow: 0,\r\n fontSize: '12px',\r\n fontWeight: 600,\r\n lineHeight: '24px',\r\n '& > a': {\r\n '& .helpbutton': {\r\n fontSize: '14px',\r\n lineHeight: '24px',\r\n display: 'inline',\r\n verticalAlign: 'bottom',\r\n },\r\n },\r\n marginTop: 0,\r\n },\r\n },\r\n },\r\n};\r\n","/* eslint-disable jsx-a11y/media-has-caption */\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { CroppedImageView } from '@bingads-webui-campaign-react/cropped-image-view';\r\nimport { PlacementQualityToText } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport { submitEvent } from '@bingads-webui-universal/accessibility-helper';\r\nimport {\r\n makeStyles,\r\n mergeClasses,\r\n shorthands,\r\n tokens,\r\n Badge,\r\n} from '@fluentui/react-components';\r\nimport { TimerRegular } from '@fluentui/react-icons';\r\nimport { curlyTemplate } from '@bingads-webui-universal/primitive-utilities';\r\nimport { Label } from '@bingads-webui-react/primitive';\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n position: 'relative',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n boxShadow: '0px 0.6px 1.8px 0px rgba(0, 0, 0, 0.10), 0px 3.2px 7.2px 0px rgba(0, 0, 0, 0.13)',\r\n ...shorthands.borderRadius(tokens.borderRadiusLarge),\r\n ...shorthands.overflow('hidden'),\r\n },\r\n overlay: {\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n fontSize: tokens.fontSizeBase200,\r\n },\r\n qualityContainer: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n columnGap: '5px',\r\n marginTop: '5px',\r\n },\r\n info: {\r\n position: 'absolute',\r\n top: '210px',\r\n left: tokens.spacingHorizontalS,\r\n backgroundColor: 'black',\r\n color: 'white',\r\n width: '52px',\r\n fontSize: tokens.fontSizeBase200,\r\n height: tokens.spacingVerticalXXL,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n ...shorthands.borderRadius(tokens.borderRadiusMedium),\r\n ...shorthands.overflow('hidden'),\r\n },\r\n icon: {\r\n fontSize: tokens.fontSizeBase400,\r\n },\r\n videoContainer: {\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n },\r\n video: {\r\n width: '100%',\r\n height: '100%',\r\n },\r\n});\r\n\r\n// create a description for the video from text in the scenes\r\nconst getVideoDescription = ({ videoAsset, i18n }) => {\r\n const { duration } = videoAsset.template;\r\n const texts = videoAsset.template.scenes.map(scene => scene.text.join(' '));\r\n return curlyTemplate(i18n.getString(_TL_('video recommendation with duration {{duration}} seconds. Description: {{description}}')))({\r\n duration,\r\n description: texts.join(' '),\r\n });\r\n};\r\n\r\nexport const VideoSuggestionCard = ({\r\n videoAsset, resizeHeight, onSelectVideoSuggestion, i18n, showQuality,\r\n}) => {\r\n const classes = useStyles();\r\n const [showVideo, setShowVideo] = React.useState(false);\r\n const src = videoAsset.thumbnailUrl;\r\n const { width } = videoAsset.template;\r\n const { height } = videoAsset.template;\r\n const aspectRatio = width / height;\r\n\r\n // convert seconds to mm:ss\r\n const { duration } = videoAsset.template;\r\n const totalSeconds = duration / 1000;\r\n const minutes = Math.floor((totalSeconds) / 60);\r\n const seconds = Math.floor((totalSeconds) % 60);\r\n const durationString = `${minutes < 10 ? '0' : ''}${minutes}:${seconds < 10 ? '0' : ''}${seconds}`;\r\n const description = getVideoDescription({ videoAsset, i18n });\r\n\r\n return (\r\n
\r\n setShowVideo(true)}\r\n onMouseOut={() => setShowVideo(false)}\r\n onFocus={() => setShowVideo(true)}\r\n onBlur={() => setShowVideo(false)}\r\n aria-label={description}\r\n >\r\n \r\n {showVideo && (\r\n
\r\n \r\n \r\n \r\n
\r\n )}\r\n
\r\n
\r\n \r\n {durationString}\r\n
\r\n
\r\n
\r\n {\r\n showQuality && (\r\n
\r\n \r\n {i18n.getString(PlacementQualityToText[videoAsset.quality])}\r\n
\r\n )\r\n }\r\n \r\n );\r\n};\r\n\r\nVideoSuggestionCard.propTypes = {\r\n videoAsset: PropTypes.shape({\r\n url: PropTypes.string,\r\n thumbnailUrl: PropTypes.string,\r\n template: PropTypes.shape({\r\n width: PropTypes.number,\r\n height: PropTypes.number,\r\n duration: PropTypes.number,\r\n scenes: PropTypes.arrayOf(PropTypes.shape({\r\n text: PropTypes.arrayOf(PropTypes.string),\r\n })),\r\n }),\r\n }).isRequired,\r\n resizeHeight: PropTypes.number.isRequired,\r\n onSelectVideoSuggestion: PropTypes.func.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n showQuality: PropTypes.bool,\r\n};\r\n","/* eslint-disable jsx-a11y/media-has-caption */\r\nimport React, { useRef, useCallback, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport { useCopilotRepositoryContext } from '@bingads-webui/inline-copilot';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { Panel, PanelType, DefaultButton } from '@bingads-webui-react/fabric-control';\r\nimport { RecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { FluentProvider, webLightTheme } from '@fluentui/react-components';\r\nimport { ReactTemplate } from '@bingads-webui-react/react-template';\r\n\r\nimport { VideoSuggestionCard } from './video-suggestion-card';\r\n\r\nconst getPanelStyles = (components, { palette = {} } = {}) => ({\r\n panel: {\r\n top: 60,\r\n },\r\n subtitle: {\r\n paddingTop: 22,\r\n color: palette.neutralDark,\r\n },\r\n panelHeader: {\r\n paddingLeft: 24,\r\n paddingRight: 24,\r\n alignSelf: 'justify-start',\r\n flexGrow: 1,\r\n },\r\n panelTitle: {\r\n fontSize: 20,\r\n fontWeight: 600,\r\n display: 'inline-block',\r\n lineHeight: '27px',\r\n },\r\n contentHeading: {\r\n paddingTop: 17,\r\n fontSize: '12px',\r\n paddingBottom: 20,\r\n },\r\n gridContainer: {\r\n display: 'grid',\r\n columnGap: '16px',\r\n rowGap: '16px',\r\n gridTemplateColumns: '430px 430px',\r\n },\r\n});\r\n\r\nexport const VideoRecommendationsPanel = ({\r\n i18n, isOpen, close, onSelectVideoSuggestion, permissions,\r\n}) => {\r\n const classes = useDefaultStyles(getPanelStyles);\r\n const contentRef = useRef(null);\r\n const { finalUrl } = useCopilotRepositoryContext();\r\n const [recommendationContext] = useContext(RecommendationContext);\r\n const {\r\n videoAssets,\r\n } = recommendationContext || {};\r\n const isVideoAsAnAssetEnabled = permissions.dynamic.VideoAsAnAsset && !permissions.isAmplifyEnabled;\r\n\r\n const onDismiss = useCallback((evt) => {\r\n const target = evt && evt.currentTarget;\r\n if (evt.key === 'Escape' || (contentRef.current && contentRef.current.closest(`.${classes.panel}`).contains(target))) {\r\n close();\r\n }\r\n }, [classes.panel, close]);\r\n\r\n const onRenderFooterContent = () => (\r\n close()}\r\n text={i18n.getString(_TL_('Cancel'))}\r\n />\r\n );\r\n\r\n const onSelection = (index) => {\r\n onSelectVideoSuggestion(index);\r\n close();\r\n };\r\n\r\n return (\r\n \r\n \r\n
\r\n {text},\r\n finalUrl,\r\n }}\r\n template={i18n.getString(_TL_('{{strong}}Final URL:{{/strong}} {{finalUrl}}'))}\r\n />\r\n
\r\n
\r\n {videoAssets &&\r\n videoAssets.map((videoAsset, index) => ( onSelection(index)}\r\n resizeHeight={242}\r\n i18n={i18n}\r\n showQuality={isVideoAsAnAssetEnabled}\r\n />))\r\n }\r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nVideoRecommendationsPanel.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n isOpen: PropTypes.bool.isRequired,\r\n close: PropTypes.func.isRequired,\r\n onSelectVideoSuggestion: PropTypes.func.isRequired,\r\n permissions: PropTypes.shape({}).isRequired,\r\n};\r\n","import React, { useContext, useCallback, useState, useMemo, useEffect } from 'react';\r\nimport _ from 'underscore';\r\nimport classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport { RecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { ImageSuggestionCarousel } from '@bingads-webui-campaign-react/image-suggestion-carousel';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { Spinner } from '@fluentui/react-components';\r\nimport { Shimmer, ShimmerElementsGroup, ShimmerElementType, MessageBar, MessageBarType } from '@fluentui/react';\r\nimport { CroppedImageView } from '@bingads-webui-campaign-react/cropped-image-view';\r\nimport { useCopilotLoggers } from '@bingads-webui-campaign-react/copilot-loggers';\r\nimport { overrideClasses } from './carousel-style';\r\nimport { getImageSuggestionCarouselStyles } from './styles';\r\nimport { VideoRecommendationsPanel } from './video-recommendations-panel';\r\n\r\nconst IMAGE_DIM = {\r\n width: 106,\r\n height: 76,\r\n marginRight: 8,\r\n};\r\n\r\nconst initialImageContainerLeftMargin = 10;\r\nconst SuggestionViewImageCount = 5;\r\nconst MaxSuggestionsInCarousel = 15;\r\n\r\nconst LoadingShimmer = ({ i18n }) => {\r\n const shimmerElements = useMemo(() => {\r\n const shimmerElement = [];\r\n\r\n _.each(_.range(SuggestionViewImageCount), () => {\r\n shimmerElement.push({ type: ShimmerElementType.line, height: 76, width: 106 });\r\n shimmerElement.push({ type: ShimmerElementType.gap, width: 10, height: 76 });\r\n });\r\n\r\n return shimmerElement;\r\n }, []);\r\n\r\n return (\r\n
\r\n \r\n } />\r\n
\r\n );\r\n};\r\n\r\nLoadingShimmer.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n};\r\n\r\nconst getImageDimension = src => new Promise((resolve) => {\r\n const img = new Image();\r\n img.src = src;\r\n img.onload = () => {\r\n const width = img.naturalWidth;\r\n const height = img.naturalHeight;\r\n\r\n resolve({\r\n imgWidth: width, imgHeight: height,\r\n });\r\n };\r\n});\r\n\r\nconst ImageView = ({ src }) => {\r\n const [width, setWidth] = useState(0);\r\n const [height, setHeight] = useState(0);\r\n\r\n const aspectRatio = width / height;\r\n const maxWidth = 107;\r\n\r\n const resizeHeight = Math.min(maxWidth / aspectRatio, 76);\r\n\r\n useEffect(() => {\r\n getImageDimension(src).then(({ imgWidth, imgHeight }) => {\r\n setWidth(imgWidth);\r\n setHeight(imgHeight);\r\n });\r\n }, [src]);\r\n\r\n if (!width || !height) {\r\n return
;\r\n }\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nImageView.propTypes = {\r\n src: PropTypes.string.isRequired,\r\n};\r\n\r\nexport const VideoAdsSuggestionCarousel = ({\r\n onSelectVideoSuggestion,\r\n i18n,\r\n permissions,\r\n useBrandKit = false,\r\n isBrandKitEmpty,\r\n setUseBrandKit,\r\n}) => {\r\n // For Video BK will only work with new templates\r\n const isBrandKitEnabled = permissions && permissions.dynamic && (permissions.dynamic.BrandKitUI && permissions.dynamic.VideoTemplateUI);\r\n const [isSeeAllPanelOpen, setIsSeeAllPanelOpen] = useState(false);\r\n const [videosToSuggest, setVideosToSuggest] = useState([]);\r\n\r\n const [recommendationContext, , reportRecommendations] = useContext(RecommendationContext);\r\n const { logSuggestionsViewed } = useCopilotLoggers();\r\n\r\n const {\r\n videoAssets: videoSuggestions,\r\n isLoading,\r\n errorMessage,\r\n } = recommendationContext || {};\r\n\r\n const classes = useDefaultStyles(getImageSuggestionCarouselStyles);\r\n\r\n const { carouselState } = useMemo(() => ({\r\n carouselState: {\r\n carousel: {\r\n isError: _.isEmpty(videoSuggestions),\r\n },\r\n suggestion: {\r\n images: videoSuggestions,\r\n },\r\n },\r\n panelState: {\r\n panelImages: videoSuggestions,\r\n hasMore: false,\r\n },\r\n }), [videoSuggestions]);\r\n\r\n const { suggestion, carousel } = carouselState || {};\r\n const { images: suggestionImages } = suggestion || {};\r\n\r\n const onOffsetChange = useCallback((offset) => {\r\n const viewedImages = videosToSuggest.slice(offset, offset + SuggestionViewImageCount);\r\n const suggestionIds = _.pluck(viewedImages, 'suggestionId');\r\n reportRecommendations({ view: suggestionIds });\r\n logSuggestionsViewed(undefined /* imageSuggestionIds */, suggestionIds);\r\n }, [videosToSuggest, reportRecommendations, logSuggestionsViewed]);\r\n\r\n const onSelectIndex = useCallback((index) => {\r\n onSelectVideoSuggestion(videosToSuggest[index]);\r\n }, [videosToSuggest, onSelectVideoSuggestion]);\r\n\r\n const onSelectImage = useCallback((__, index) => {\r\n onSelectIndex(index);\r\n }, [onSelectIndex]);\r\n\r\n const onSelectSeeAllImages = useCallback(() => {\r\n const suggestionIds = suggestionImages.map(({ suggestionId }) => suggestionId);\r\n\r\n setIsSeeAllPanelOpen(true);\r\n logSuggestionsViewed(undefined /* imageSuggestionIds */, suggestionIds);\r\n }, [logSuggestionsViewed, suggestionImages]);\r\n\r\n const onRenderImage = useCallback((src, classesProp) => (\r\n
\r\n \r\n
\r\n ), [classes.croppedImage]);\r\n\r\n useEffect(() => {\r\n const truncatedImages = _.isArray(suggestionImages) && suggestionImages.slice(0, MaxSuggestionsInCarousel);\r\n setVideosToSuggest(truncatedImages || []);\r\n }, [suggestionImages]);\r\n\r\n return (\r\n
\r\n {isLoading ?\r\n : (\r\n )}\r\n {isSeeAllPanelOpen && (\r\n setIsSeeAllPanelOpen(false)}\r\n onSelectVideoSuggestion={onSelectIndex}\r\n permissions={permissions}\r\n />)}\r\n {errorMessage && (\r\n \r\n {i18n.getString(errorMessage)}\r\n )}\r\n
\r\n );\r\n};\r\n\r\nVideoAdsSuggestionCarousel.propTypes = {\r\n onSelectVideoSuggestion: PropTypes.func.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n permissions: PropTypes.shape({}).isRequired,\r\n useBrandKit: PropTypes.bool,\r\n isBrandKitEmpty: PropTypes.bool,\r\n setUseBrandKit: PropTypes.func,\r\n};\r\n","import { useContext, useCallback, useState } from 'react';\r\nimport _ from 'underscore';\r\nimport { RecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { useCopilotRepositoryContext } from '@bingads-webui/inline-copilot';\r\nimport { useCopilotLoggers } from '@bingads-webui-campaign-react/copilot-loggers';\r\nimport { getLocalStorage } from '@bingads-webui/storage';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { PermissionsContext } from '@bingads-webui-react/hoc-with-permissions';\r\nimport { useBrandKitDataService } from '@bingads-webui-campaign-react/brandkit-data-service';\r\nimport { formatBrandkitForAPI } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nconst FetchCount = 10;\r\n\r\nexport const useVideoAdsCopilot = () => {\r\n const [, setRecommendationContext] = useContext(RecommendationContext);\r\n\r\n const repository = useCopilotRepositoryContext();\r\n\r\n const { logBannerGenerated } = useCopilotLoggers();\r\n\r\n const { fetchVideoAdsAssetRecommendations, finalUrl } = repository;\r\n const [isLoadingBrandKit, setIsLoadingBrandkit] = useState(false);\r\n const [brandkit, setBrandKit] = useState(null);\r\n const [isBrandKitEmpty, setIsBrandKitEmpty] = useState(true);\r\n const { scope } = useContext(ScopeContext) || {};\r\n\r\n const { aid } = scope.values;\r\n const permissions = useContext(PermissionsContext);\r\n // For Video BK will only work with new templates\r\n const isBrandKitEnabled = permissions && permissions.dynamic && (permissions.dynamic.BrandKitUI && permissions.dynamic.VideoTemplateUI);\r\n\r\n const { getBrandKitDataByAccId } = useBrandKitDataService();\r\n\r\n const fetchBrandKit = useCallback(async () => {\r\n if (isBrandKitEnabled) {\r\n setIsLoadingBrandkit(true);\r\n const response = await getBrandKitDataByAccId({ accId: aid });\r\n setIsLoadingBrandkit(false);\r\n const isBrandKitHavingData = response && response.BrandKits && response.BrandKits[0] && (!_.isEmpty(response.BrandKits[0].Fonts) ||\r\n !_.isEmpty(response.BrandKits[0].Images) ||\r\n !_.isEmpty(response.BrandKits[0].LandscapeLogos) ||\r\n !_.isEmpty(response.BrandKits[0].Palettes) ||\r\n !_.isEmpty(response.BrandKits[0].SquareLogos));\r\n if (isBrandKitHavingData) {\r\n setIsBrandKitEmpty(false);\r\n const updatedResponse = {\r\n ...response.BrandKits[0],\r\n };\r\n setBrandKit(formatBrandkitForAPI(updatedResponse));\r\n } else {\r\n setIsBrandKitEmpty(true);\r\n }\r\n }\r\n }, [isBrandKitEnabled, getBrandKitDataByAccId, aid, setBrandKit, setIsBrandKitEmpty]);\r\n\r\n const fetch = useCallback((taskManager, useBrandKit) => {\r\n if (!finalUrl || isLoadingBrandKit) {\r\n return;\r\n }\r\n\r\n setRecommendationContext({\r\n isLoading: true,\r\n errorMessage: undefined,\r\n });\r\n\r\n taskManager.addTask({\r\n taskId: isBrandKitEnabled ? `${finalUrl}-brandkit-${useBrandKit}` : finalUrl,\r\n taskFn: () => {\r\n setRecommendationContext({ isLoading: true });\r\n const localStorage = getLocalStorage();\r\n const campaignObjective = localStorage.get('CampaignObjective');\r\n const recommendationType = campaignObjective === 'Awareness' ? 'OLV' : 'CTV';\r\n return fetchVideoAdsAssetRecommendations(FetchCount, false, recommendationType, null, (useBrandKit && brandkit) ? brandkit : null);\r\n },\r\n }).then((response) => {\r\n const { ads } = response.data;\r\n\r\n const videoAssets = ads.map((ad) => {\r\n const {\r\n url, thumbnailUrl, recommendationId, template, videoMetadata,\r\n } = ad;\r\n\r\n return {\r\n url,\r\n thumbnailUrl,\r\n quality: videoMetadata.quality,\r\n width: videoMetadata.width,\r\n height: videoMetadata.height,\r\n sourceVideoBitRate: videoMetadata.sourceVideoBitRate,\r\n suggestionId: recommendationId,\r\n RecommendationId: recommendationId,\r\n template,\r\n };\r\n });\r\n\r\n logBannerGenerated(finalUrl, {\r\n RecommendedAssets: {\r\n VideoAssets: videoAssets,\r\n },\r\n });\r\n\r\n setRecommendationContext({\r\n isLoading: false,\r\n finalUrl,\r\n videoAssets,\r\n });\r\n }).catch(() => {\r\n setRecommendationContext({\r\n isLoading: false,\r\n finalUrl,\r\n videoAssets: [],\r\n errorMessage: _TL_('Unable to generate recommendations for this Final URL'),\r\n });\r\n });\r\n }, [fetchVideoAdsAssetRecommendations, finalUrl, logBannerGenerated, setRecommendationContext, isLoadingBrandKit, brandkit]);\r\n\r\n return {\r\n fetch,\r\n finalUrlForCopilot: finalUrl,\r\n isBrandKitEmpty,\r\n fetchBrandKit,\r\n };\r\n};\r\n","import React from 'react';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { Label, Icon } from '@bingads-webui-react/fabric-control';\r\nimport { HelpPopupInline } from '@bingads-webui-react/help-popup';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { getAdsStepStyles } from './styles';\r\n\r\nconst convertBpsToKbps = (bps) => {\r\n // Divide bps by 1,000\r\n const Kbps = bps / (10 ** 3);\r\n\r\n return Math.floor(Kbps);\r\n};\r\n\r\nconst Placements = {\r\n AUDIENCE_NETWORK: _TL_('Microsoft Advertising Network'),\r\n GENERAL_CTV: _TL_('General CTV'),\r\n NETFLIX: _TL_('Premium CTV'),\r\n};\r\n\r\nexport const PlacementQualities = {\r\n PERFECT: 7,\r\n EXCELLENT_AND_PERFECT: 6,\r\n PERFECT_AND_GOOD: 5,\r\n ONLY_PERFECT: 4,\r\n EXCELLENT: 3,\r\n ONLY_EXCELLENT: 2,\r\n GOOD: 1,\r\n NONE: 0,\r\n};\r\n\r\n// recently changed wording for each quality label\r\n// perfect -> excellent\r\n// excellent -> good\r\n// good -> fair\r\nexport const PlacementQualityToText = {\r\n [PlacementQualities.PERFECT]: _TL_('Excellent'),\r\n [PlacementQualities.EXCELLENT]: _TL_('Good'),\r\n [PlacementQualities.GOOD]: _TL_('Fair'),\r\n [PlacementQualities.NONE]: _TL_('Poor'),\r\n [PlacementQualities.PERFECT_AND_GOOD]: _TL_('Excellent'),\r\n [PlacementQualities.EXCELLENT_AND_PERFECT]: _TL_('Excellent'),\r\n [PlacementQualities.ONLY_PERFECT]: _TL_('Excellent'),\r\n [PlacementQualities.ONLY_EXCELLENT]: _TL_('Good'),\r\n};\r\n\r\nconst QualityToPlacements = {\r\n [PlacementQualities.PERFECT]: { enabled: [Placements.AUDIENCE_NETWORK, Placements.GENERAL_CTV, Placements.NETFLIX], disabled: [] },\r\n [PlacementQualities.EXCELLENT]: { enabled: [Placements.AUDIENCE_NETWORK, Placements.GENERAL_CTV], disabled: [Placements.NETFLIX] },\r\n [PlacementQualities.GOOD]: { enabled: [Placements.AUDIENCE_NETWORK], disabled: [Placements.GENERAL_CTV, Placements.NETFLIX] },\r\n [PlacementQualities.NONE]: { enabled: [], disabled: [Placements.AUDIENCE_NETWORK, Placements.GENERAL_CTV, Placements.NETFLIX] },\r\n [PlacementQualities.PERFECT_AND_GOOD]: { enabled: [Placements.AUDIENCE_NETWORK, Placements.GENERAL_CTV], disabled: [Placements.NETFLIX] },\r\n [PlacementQualities.EXCELLENT_AND_PERFECT]: { enabled: [Placements.GENERAL_CTV, Placements.NETFLIX], disabled: [Placements.AUDIENCE_NETWORK] },\r\n [PlacementQualities.ONLY_PERFECT]: { enabled: [Placements.NETFLIX], disabled: [Placements.AUDIENCE_NETWORK, Placements.GENERAL_CTV] },\r\n [PlacementQualities.ONLY_EXCELLENT]: { enabled: [Placements.GENERAL_CTV], disabled: [Placements.AUDIENCE_NETWORK, Placements.NETFLIX] },\r\n};\r\n\r\nconst StarsToQuality = {\r\n [PlacementQualities.PERFECT]: 3,\r\n [PlacementQualities.EXCELLENT_AND_PERFECT]: 3,\r\n [PlacementQualities.PERFECT_AND_GOOD]: 3,\r\n [PlacementQualities.ONLY_PERFECT]: 3,\r\n [PlacementQualities.EXCELLENT]: 2,\r\n [PlacementQualities.ONLY_EXCELLENT]: 2,\r\n [PlacementQualities.GOOD]: 1,\r\n [PlacementQualities.NONE]: 0,\r\n};\r\n\r\nexport const PlacementTitle = ({ i18n, classes, titleText }) => (\r\n
\r\n \r\n \r\n
\r\n);\r\n\r\nPlacementTitle.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n classes: PropTypes.shape({\r\n placementLabel: PropTypes.string.isRequired,\r\n }).isRequired,\r\n titleText: PropTypes.string.isRequired,\r\n};\r\n\r\n\r\nexport const PlacementInfo = (props) => {\r\n const {\r\n i18n,\r\n videoAd,\r\n } = props;\r\n\r\n const defaultClasses = useDefaultStyles(getAdsStepStyles);\r\n\r\n const classes = defaultClasses;\r\n\r\n if (videoAd && videoAd.video) {\r\n const {\r\n width, height, quality = 0, sourceVideoBitRate,\r\n } = videoAd.video;\r\n\r\n return (\r\n
\r\n \r\n
{width}px x {height}px, {`${convertBpsToKbps(sourceVideoBitRate)} ${_TL_('Kbps')}`} ({PlacementQualityToText[quality]} {i18n.getString(_TL_('quality'))})
\r\n
\r\n {QualityToPlacements[quality].enabled.map(placement => (\r\n
{i18n.getString(placement)}
\r\n ))}\r\n {QualityToPlacements[quality].disabled.map(placement => (\r\n
{i18n.getString(placement)}
\r\n ))}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return null;\r\n};\r\n\r\nPlacementInfo.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n videoAd: PropTypes.shape({\r\n video: PropTypes.shape({\r\n width: PropTypes.number,\r\n height: PropTypes.number,\r\n quality: PropTypes.number,\r\n sourceVideoBitRate: PropTypes.number,\r\n }),\r\n }).isRequired,\r\n};\r\n\r\n\r\nexport const PlacementInfoWithStars = (props) => {\r\n const {\r\n i18n,\r\n videoAd,\r\n } = props;\r\n\r\n const defaultClasses = useDefaultStyles(getAdsStepStyles);\r\n\r\n const classes = defaultClasses;\r\n\r\n if (videoAd && videoAd.video) {\r\n const {\r\n width, height, quality = 0, sourceVideoBitRate,\r\n } = videoAd.video;\r\n\r\n const numberOfStars = StarsToQuality[quality] || 0;\r\n\r\n const numberOfDisabledStars = 3 - numberOfStars;\r\n\r\n return (\r\n
\r\n \r\n
\r\n {\r\n _.range(numberOfStars).map(idx => (\r\n \r\n ))\r\n }\r\n {\r\n numberOfDisabledStars > 0 && _.range(numberOfDisabledStars).map(idx => (\r\n \r\n ))\r\n }\r\n ({PlacementQualityToText[quality]} {i18n.getString(_TL_('quality'))})\r\n
\r\n
{width}px x {height}px, {`${convertBpsToKbps(sourceVideoBitRate)} ${_TL_('Kbps')}`}
\r\n
\r\n );\r\n }\r\n\r\n return null;\r\n};\r\n\r\n\r\nPlacementInfoWithStars.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n videoAd: PropTypes.shape({\r\n video: PropTypes.shape({\r\n width: PropTypes.number,\r\n height: PropTypes.number,\r\n quality: PropTypes.number,\r\n sourceVideoBitRate: PropTypes.number,\r\n }),\r\n }).isRequired,\r\n};\r\n","import { has } from 'underscore';\r\n\r\nexport const isBulkWrappedResponse = bulkResult => has(bulkResult, 'entity'); // && has(bulkResult, 'errors');\r\n","import { identity, contains, isEmpty, isEqual } from 'underscore';\r\nimport { mapBulkUpsertErrors } from './map-bulk-upsert-errors';\r\n\r\nexport const ERROR_ENTITY = {\r\n Campaign: 'campaign',\r\n AdGroup: 'adGroup',\r\n AssetGroup: 'assetGroup',\r\n Ad: 'ad',\r\n CampaignLocation: 'campaignLocation',\r\n CampaignRadius: 'campaignRadius',\r\n CampaignNegativeLocation: 'campaignNegativeLocation',\r\n CampaignLocationIntent: 'campaignLocationIntent',\r\n CampaignDayTimeCriterion: 'campaignDayTimeCriterion',\r\n CampaignNegativeWebpage: 'campaignNegativeWebpage',\r\n};\r\n\r\nexport const serverErrorsCompare = (prev, curr) => !(!isEmpty(curr) && !isEqual(prev, curr));\r\n\r\nconst getBulkUploadEntityType = entitySchema =>\r\n (entitySchema.properties['bulk-upload-type'] || {}).value ||\r\n entitySchema.name;\r\n\r\nexport const getBulkUploadErrorType = entitySchema =>\r\n `${getBulkUploadEntityType(entitySchema)} Error`;\r\n\r\nexport const modelToViewModelForBulkErrors = (errors, bulkUpsertEntityErrorMap, scenario, i18n, activityLogger) =>\r\n mapBulkUpsertErrors(errors, bulkUpsertEntityErrorMap, /* errorProcessor */ identity, scenario, i18n, activityLogger);\r\n\r\nconst ReferencedEntityInvalidIdErrors = ['CampaignServiceInvalidCampaignId', 'CampaignServiceFutureFeatureCode', 'CampaignServiceInvalidAdGroupId'];\r\nexport const removeReferencedEntityInvalidIdErrors = bulkErrors =>\r\n bulkErrors.filter(({ Error }) => !contains(ReferencedEntityInvalidIdErrors, Error));\r\n\r\nexport const getPanelErrorProps = ({ needsAttention }) => (needsAttention ? {\r\n error: _TL_(\"* Something's wrong\"),\r\n} : {});\r\n","import { identity, result } from 'underscore';\r\nimport { getBulkApiErrors } from '@bingads-webui-campaign/api-errors';\r\n\r\nexport const mapBulkUpsertErrors = (errors, bulkUpsertEntityErrorMap, errorProcessor = identity, scenario, i18n, activityLogger) =>\r\n getBulkApiErrors(errors, scenario, i18n, activityLogger).map((error) => {\r\n const errorType = error.type;\r\n const mappedErrorType = result(bulkUpsertEntityErrorMap, errorType, errorType);\r\n // eslint-disable-next-line no-param-reassign\r\n error.type = mappedErrorType;\r\n return errorProcessor(error);\r\n });\r\n","/* istanbul ignore file */\r\n\r\nexport const getDealDetailsStyle = () => ({\r\n dealDetails: {\r\n width: 313,\r\n '& h5': {\r\n fontSize: 14,\r\n },\r\n '& .option-wrapper': {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n fontSize: 12,\r\n marginBottom: 8,\r\n '& .option-name': {\r\n flex: 2,\r\n color: '#605E5C',\r\n },\r\n '& .option-value': {\r\n color: '#323130',\r\n },\r\n },\r\n },\r\n});\r\n","/* istanbul ignore file */\r\n\r\nexport const DeviceKeys = {\r\n Computers: 'Computers',\r\n Tablets: 'Tablets',\r\n Smartphones: 'Smartphones',\r\n ConnectedTVs: 'ConnectedTVs',\r\n};\r\n","/* istanbul ignore file */\r\n\r\nimport _, { difference, each, get } from 'underscore';\r\nimport { edmCampaign } from '@bingads-webui/edm-campaign';\r\nimport odata from '@bingads-webui-component-legacy/http/channel/odata';\r\nimport * as locationTargetConverter from '@bingads-webui-campaign-legacy/location-targets/util/locationTargetConverter';\r\nimport { DeviceKeys } from '../target-constants';\r\n\r\nexport function getCountriesLocations(locationIds, lcid, cid, aid) {\r\n if (_.size(locationIds) === 0) {\r\n return Promise.resolve([]);\r\n }\r\n const reqs = _.map(locationIds, id => ({\r\n type: 'GET',\r\n url: `${edmCampaign.Customers.$withKey(cid).Accounts.$withKey(aid).Locations.$withKey(id).path}?%24expand=ParentLocations`,\r\n headers: lcid ? {\r\n lcid,\r\n } : undefined,\r\n }));\r\n\r\n return odata.batch({ reqs, needContentType: true });\r\n}\r\n\r\nconst targetTypes = {\r\n Device: 'Device',\r\n Age: 'Age',\r\n Gender: 'Gender',\r\n Location: 'Location',\r\n Audience: 'Audience',\r\n};\r\n\r\nexport function getTargetConstraints(deal, targetType) {\r\n const ret = {\r\n mandatory: [],\r\n isRestricted: deal.Type === 'Restricted',\r\n };\r\n\r\n if (!deal || !deal.DealTargetConstraints) { return ret; }\r\n\r\n const devicesConstraints = deal.DealTargetConstraints.find(target => target.TargetType === targetType);\r\n\r\n if (!devicesConstraints) {\r\n return ret;\r\n }\r\n\r\n ret.mandatory = devicesConstraints.Mandatory || [];\r\n ret.isRestricted = devicesConstraints.DealTargetRestrictionLevel === 'Restricted';\r\n\r\n return ret;\r\n}\r\n\r\nasync function getLocationCritetions({\r\n serverContext, countries,\r\n}) {\r\n const cid = serverContext.CurrentCustomer.Id;\r\n const aid = serverContext.CurrentAccount.Id;\r\n const lcid = serverContext ? serverContext.CurrentUser.LocaleID : '1033';\r\n\r\n const response = await getCountriesLocations(countries, lcid, cid, aid);\r\n const locationCriterions = [];\r\n\r\n each(response, (location) => {\r\n const criterion = locationTargetConverter.buildLocationCriterionFromSearchResult(\r\n location.data,\r\n { mode: 'location', status: 'Included' }\r\n );\r\n criterion.location = get(criterion, 'Criterion.LocationCriterion.NameTypeCombo');\r\n locationCriterions.push(criterion);\r\n });\r\n\r\n return locationCriterions;\r\n}\r\n\r\nexport async function modelConstraints(deal, adGroup, serverContext) {\r\n if (!deal || !adGroup) { return adGroup; }\r\n\r\n const isCreating = !adGroup.Id;\r\n\r\n const deviceConstraints = getTargetConstraints(deal, targetTypes.Device);\r\n const locationConstraints = getTargetConstraints(deal, targetTypes.Location);\r\n const ageConstraints = getTargetConstraints(deal, targetTypes.Age);\r\n const genderConstraints = getTargetConstraints(deal, targetTypes.Gender);\r\n const audienceConstraints = getTargetConstraints(deal, targetTypes.Audience);\r\n\r\n const dealLocationTargets = adGroup.locationTargets;\r\n if (isCreating && locationConstraints && locationConstraints.isRestricted === false && dealLocationTargets && dealLocationTargets.currentLevelSettings) {\r\n dealLocationTargets.currentLevelSettings.targetOption = 'everywhere';\r\n dealLocationTargets.currentLevelSettings.currentLocations = [];\r\n } else if (get(adGroup, ['locationTargets', 'currentLevelSettings', 'initLocations'], []).length === 0) {\r\n // locations\r\n const locations = await getLocationCritetions({\r\n serverContext,\r\n countries: locationConstraints.mandatory,\r\n });\r\n\r\n if (locations.length !== 0) {\r\n dealLocationTargets.currentLevelSettings.currentLocations = locations;\r\n dealLocationTargets.currentLevelSettings.initLocations = [];\r\n dealLocationTargets.currentLevelSettings.targetOption = 'specific';\r\n dealLocationTargets.useParentLevel = false;\r\n }\r\n }\r\n const adGroupModel = {};\r\n if (ageConstraints.isRestricted) {\r\n adGroupModel.ageRanges = [];\r\n adGroupModel.initialAgeRanges = [];\r\n adGroupModel.negativeAgeRanges = [];\r\n }\r\n\r\n if (genderConstraints.isRestricted) {\r\n adGroupModel.initialGenderTypes = [];\r\n adGroupModel.negativeGenderTYpes = [];\r\n adGroupModel.genderTypes = [];\r\n }\r\n\r\n if (audienceConstraints.isRestricted) {\r\n adGroupModel.audiences = [];\r\n }\r\n\r\n return {\r\n ...adGroup,\r\n ...adGroupModel,\r\n deal,\r\n locationTargets: dealLocationTargets,\r\n dealLocationList: locationConstraints.mandatory,\r\n deviceTypes: isCreating ? deviceConstraints.mandatory : adGroup.deviceTypes,\r\n deviceRestrictions: deviceConstraints.isRestricted ? Object.keys(DeviceKeys) : difference(Object.keys(DeviceKeys), deviceConstraints.mandatory),\r\n deviceRestricted: deviceConstraints.isRestricted,\r\n locationRestricted: locationConstraints.isRestricted,\r\n // locationRestricted: false,\r\n ageRestricted: ageConstraints.isRestricted,\r\n genderRestricted: genderConstraints.isRestricted,\r\n audienceRestricted: audienceConstraints.isRestricted,\r\n genreRestricted: true,\r\n };\r\n}\r\n","/* istanbul ignore file */\r\nimport { find, get } from 'underscore';\r\nimport { ceil } from 'lodash';\r\n\r\n// ref: /private/Campaign/MT/Source/Interface/Entity/CurrencyType.cs\r\n\r\nexport const CurrencyCode2CurrencyId = {\r\n AUD: 1,\r\n BRL: 2,\r\n ARS: 15,\r\n CAD: 3,\r\n CLP: 16,\r\n COP: 18,\r\n DKK: 5,\r\n EUR: 6,\r\n HKD: 30,\r\n INR: 36,\r\n JPY: 8,\r\n MXN: 57,\r\n NOK: 9,\r\n NZD: 10,\r\n PEN: 64,\r\n SGD: 74,\r\n ZAR: 13,\r\n SEK: 11,\r\n CHF: 4,\r\n USD: 12,\r\n GBP: 7,\r\n VEF: 87,\r\n TWD: 82,\r\n MYR: 58,\r\n PHP: 65,\r\n VND: 88,\r\n THB: 78,\r\n IDR: 34,\r\n DZD: 23,\r\n BHD: 42,\r\n EGP: 25,\r\n IQD: 37,\r\n JOD: 41,\r\n KWD: 46,\r\n LBP: 48,\r\n MAD: 52,\r\n QAR: 69,\r\n OMR: 62,\r\n SAR: 72,\r\n TND: 79,\r\n CNY: 17,\r\n TRY: 93,\r\n PLN: 67,\r\n AED: 21,\r\n ILS: 35,\r\n NGN: 99,\r\n KRW: 45,\r\n};\r\n\r\nexport const MTCurrencyConvertor = {\r\n AustralianDollar: 'AUD',\r\n BrazilianReal: 'BRL',\r\n CanadianDollar: 'CAD',\r\n SwissFranc: 'CHF',\r\n DanishKrone: 'DKK',\r\n EURO: 'EUR',\r\n UKPound: 'GBP',\r\n JapaneseYen: 'JPY',\r\n NorwegianKrone: 'NOK',\r\n NewZealandDollar: 'NZD',\r\n SwedishKrona: 'SEK',\r\n USDollar: 'USD',\r\n SouthAfricanRand: 'ZAR',\r\n ArgentinePeso: 'ARS',\r\n ChileanPeso: 'CLP',\r\n YuanRenminbi: 'CNY',\r\n ColombianPeso: 'COP',\r\n UAEDirham: 'AED',\r\n AlgerianDinar: 'DZD',\r\n EgyptianPound: 'EGP',\r\n HongKongDollar: 'HKD',\r\n IndonesianRupiah: 'IDR',\r\n IsraeliSheqel: 'ILS',\r\n IndianRupee: 'INR',\r\n LebanesePound: 'LBP',\r\n MoroccanDirham: 'MAD',\r\n MexicanPeso: 'MXN',\r\n MalaysianRinggit: 'MYR',\r\n PeruvianNuevoSol: 'PEN',\r\n PhilippinePeso: 'PHP',\r\n Zloty: 'PLN',\r\n QatariRial: 'QAR',\r\n SaudiRiyal: 'SAR',\r\n SingaporeDollar: 'SGD',\r\n ThaiBaht: 'THB',\r\n NewTaiwanDollar: 'TWD',\r\n VenezuelanBolivar: 'VEF',\r\n VietnamDong: 'VND',\r\n NewTurkishLira: 'TRY',\r\n NigerianNaira: 'NGN',\r\n Won: 'KRW',\r\n};\r\n\r\nexport const getConvertedCurrencyDealMinimumBid = (minimumBid, dealCurrency, accountCurrency, exchangeRateMapping) => {\r\n if (minimumBid && accountCurrency && exchangeRateMapping) {\r\n const dealCurrencyId = CurrencyCode2CurrencyId[MTCurrencyConvertor[dealCurrency] || 'USD'] || 12;\r\n const dealCurrencyToUSD = get(find(exchangeRateMapping, item => item.CurrencyId === dealCurrencyId), 'ExchangeRateValue', 1);\r\n\r\n const accountCurrencyId = CurrencyCode2CurrencyId[accountCurrency] || 12;\r\n const accountCurrencyToUSD = get(find(exchangeRateMapping, item => item.CurrencyId === accountCurrencyId), 'ExchangeRateValue', 1);\r\n\r\n return ceil((minimumBid * dealCurrencyToUSD) / accountCurrencyToUSD, 2);\r\n }\r\n return minimumBid;\r\n};\r\n","/* istanbul ignore file */\r\n\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { get, isNumber, uniq, chain, sortBy, compact } from 'underscore';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport decimal from '@bingads-webui-component-legacy/humanize/decimal';\r\nimport { getDealDetailsStyle } from './deal-detils-style';\r\nimport { getTargetConstraints } from './deal-constraints';\r\nimport { MTCurrencyConvertor } from './account-currency-daily-exchange-rate';\r\n\r\nexport function getVideoConstraintDuration(dealDetails, i18n) {\r\n const minimumDuration = get(dealDetails, 'DealAdQualityConstraints[0].MinimumDuration');\r\n if (minimumDuration && isNumber(minimumDuration)) {\r\n return `${Math.round(minimumDuration/1000, 1)} ${i18n.getString(_TL_('seconds'))}`;\r\n }\r\n return i18n.getString(_TL_('Unavailable'));\r\n}\r\n\r\nexport function isNetflixDeal(deal) {\r\n return deal.Seller && deal.Seller.toLowerCase().indexOf('netflix') > -1;\r\n}\r\n\r\nexport function isDealDeleted(deal) {\r\n return deal.Error && deal.Error === 'InvalidId';\r\n}\r\n\r\nconst AgeRanges = {\r\n EighteenToTwentyFive: _TL_('18-24'),\r\n TwentyFiveToThirtyFive: _TL_('25-34'),\r\n ThirtyFiveToFifty: _TL_('35-49'),\r\n FiftyToSixtyFive: _TL_('50-64'),\r\n SixtyFiveAndAbove: _TL_('65+'),\r\n Unknown: _TL_('Unknown'),\r\n};\r\n\r\nconst sortAgeRanges = ageRanges => sortBy(ageRanges, ageRange => AgeRanges[ageRange]);\r\n\r\nconst formatAgeRange = (ageRange, i18n) => (AgeRanges[ageRange] ? i18n.getString(AgeRanges[ageRange]) : ageRange);\r\n\r\nconst formatAgeRanges = (ageRanges, i18n) => {\r\n return chain(sortAgeRanges(ageRanges))\r\n .map(ageRange => formatAgeRange(ageRange, i18n))\r\n .join(i18n.getString(_TL_(', ')))\r\n .value();\r\n};\r\n\r\nexport function targetConstraintsToText(dealDetails, targetType, i18n, locationMap = {}) {\r\n const { mandatory, isRestricted } = getTargetConstraints(dealDetails, targetType);\r\n\r\n if (mandatory.length === 0) {\r\n if (isRestricted) {\r\n if (isNetflixDeal(dealDetails)) {\r\n return i18n.getString(_TL_('Unavailable'));\r\n }\r\n return i18n.getString(_TL_('Restricted'));\r\n }\r\n return i18n.getString(_TL_('No Restrictions'));\r\n }\r\n\r\n if (targetType === 'Location') {\r\n return uniq(mandatory.map((location) => {\r\n const locationName = locationMap[location];\r\n return locationName;\r\n })).join(', ');\r\n } else if (targetType === 'Age') {\r\n return formatAgeRanges(mandatory, i18n);\r\n }\r\n return mandatory.join(', ');\r\n}\r\n\r\nexport const DealDetails = (props) => {\r\n const { i18n, dealDetails, style, shouldShowGenre } = props;\r\n const classes = useDefaultStyles(getDealDetailsStyle);\r\n const dealOptions = compact([{\r\n name: i18n.getString(_TL_('Publisher')),\r\n value: dealDetails.Seller,\r\n }, {\r\n name: i18n.getString(_TL_('Minimum bid ')),\r\n value: dealDetails.MinimumBid ?\r\n `${decimal.fromFloatToString(dealDetails.MinimumBid, 2)} ${MTCurrencyConvertor[dealDetails.Currency] || 'USD'}` : `${i18n.getString(_TL_('Unavailable'))}`,\r\n }, {\r\n name: i18n.getString(_TL_('Duration ')),\r\n value: `${getVideoConstraintDuration(dealDetails, i18n)}`,\r\n }, {\r\n name: i18n.getString(_TL_('Country')),\r\n value: dealDetails.CountryName || i18n.getString(_TL_('Everywhere')),\r\n }, {\r\n name: i18n.getString(_TL_('Device targeting')),\r\n value: targetConstraintsToText(dealDetails, 'Device', i18n),\r\n }, {\r\n name: i18n.getString(_TL_('Gender targeting')),\r\n value: targetConstraintsToText(dealDetails, 'Gender', i18n),\r\n }, {\r\n name: i18n.getString(_TL_('Age targeting')),\r\n value: dealDetails.AgeRange || targetConstraintsToText(dealDetails, 'Age', i18n),\r\n }, {\r\n name: i18n.getString(_TL_('Audience targeting')),\r\n value: targetConstraintsToText(dealDetails, 'Audience', i18n),\r\n }, shouldShowGenre && {\r\n name: i18n.getString(_TL_('Genre targeting')),\r\n value: dealDetails.Genre ? _TL_('Available') : _TL_('Unavailable'),\r\n }]);\r\n\r\n return (\r\n
\r\n
\r\n
{i18n.getString(_TL_('Media deal details'))}
\r\n
\r\n {dealOptions.map(option => (\r\n
\r\n
{option.name}
\r\n
{option.value}
\r\n
\r\n ))}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nDealDetails.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n dealDetails: PropTypes.shape({\r\n Seller: PropTypes.string,\r\n StartDate: PropTypes.string,\r\n EndDate: PropTypes.string,\r\n Genre: PropTypes.string,\r\n Currency: PropTypes.string,\r\n Duration: PropTypes.string,\r\n CountryName: PropTypes.string,\r\n MinimumBid: PropTypes.number,\r\n AskPrice: PropTypes.number,\r\n }).isRequired,\r\n style: PropTypes.shape({}),\r\n};\r\n\r\nDealDetails.defaultProps = {\r\n style: {},\r\n};\r\n","/* istanbul ignore file */\r\n\r\nexport function bytesForHuman(bytes) {\r\n if (!bytes) {\r\n return '';\r\n }\r\n let num = bytes;\r\n const units = ['', 'K', 'M', 'B', 'T', 'P'];\r\n\r\n let i = 0;\r\n\r\n for (i; num > 1000; i += 1) {\r\n num /= 1000;\r\n }\r\n\r\n return `${num.toFixed(1)} ${units[i]}`;\r\n}\r\n","import { pick, each, values, filter, extend, isUndefined, isNull, isEmpty, mapObject } from 'underscore';\r\n\r\nconst verifiedTrackingSettingAttachment = (ad) => {\r\n const verifiedTrackingSettings = ad.data.VerifiedTrackingSettings;\r\n if (isUndefined(verifiedTrackingSettings) || isNull(verifiedTrackingSettings)) {\r\n return {};\r\n }\r\n\r\n if (isEmpty(verifiedTrackingSettings)) {\r\n return { VerifiedTrackingData: '' };\r\n }\r\n const results = [];\r\n\r\n each(verifiedTrackingSettings, (setting) => {\r\n const result = [];\r\n mapObject(setting, (value, key) => {\r\n result.push({ Key: key, Value: value });\r\n });\r\n results.push(result);\r\n });\r\n\r\n return { VerifiedTrackingData: JSON.stringify(results) };\r\n};\r\n\r\nexport const viewModelToModelForAd = ({ adsViewModel, campaign, adGroup }, isDeletedEntities = false) => {\r\n // parse the ads\r\n const adViewModel = [];\r\n\r\n each(adsViewModel, (ad) => {\r\n const finalUrl = ad.data.FinalUrls;\r\n const trackingUrlTemplate = ad.data.TrackingUrlTemplate;\r\n const finalUrlSuffix = ad.data.FinalUrlSuffix;\r\n const urlCustomParameters = ad.data.UrlCustomParameters;\r\n\r\n const video = ad.data.video ? JSON.stringify([{ id: ad.data.video.id, idString: ad.data.video.idString, subType: ad.data.video.type }]) : undefined;\r\n const image = ad.data.image ? JSON.stringify([{\r\n id: ad.data.image.id,\r\n subType: 'DisplayCreativeImage',\r\n targetWidth: ad.data.image.targetWidth,\r\n targetHeight: ad.data.image.targetHeight,\r\n cropX: ad.data.image.cropX,\r\n cropY: ad.data.image.cropY,\r\n cropWidth: ad.data.image.cropWidth,\r\n cropHeight: ad.data.image.cropHeight,\r\n }]) : undefined;\r\n\r\n const verifiedTrackingSettingAttachmentObj = verifiedTrackingSettingAttachment(ad);\r\n const impressionTrackingUrls = ad.data.ImpressionTrackingUrls ? { ImpressionTrackingUrls: ad.data.ImpressionTrackingUrls } : {};\r\n\r\n const fields = {\r\n 'Client Id': `${ad.uid}`,\r\n FinalUrls: finalUrl,\r\n TrackingUrlTemplate: trackingUrlTemplate,\r\n FinalUrlSuffix: finalUrlSuffix,\r\n UrlCustomParameters: urlCustomParameters,\r\n Campaign: pick(campaign, 'Id'),\r\n AdGroup: pick(adGroup, 'Id'),\r\n ...verifiedTrackingSettingAttachmentObj,\r\n ...impressionTrackingUrls,\r\n };\r\n\r\n if (image) {\r\n extend(fields, { Images: image });\r\n }\r\n if (video) {\r\n extend(fields, { Videos: video });\r\n }\r\n\r\n if (ad.Id) {\r\n fields.Id = ad.Id;\r\n }\r\n\r\n if (isDeletedEntities) {\r\n fields.Status = 'Deleted';\r\n }\r\n\r\n if (ad.adSubType) {\r\n fields.AdSubType = ad.adSubType;\r\n }\r\n\r\n adViewModel.push(fields);\r\n });\r\n\r\n return adViewModel;\r\n};\r\n\r\nconst adsWithIdsAttached = (savedAdsData, oldAdsData) => {\r\n const ads = [];\r\n\r\n each(oldAdsData, (ad, idx) => {\r\n // From API find the saved Item that has the client id same as the view model uid.\r\n // Once we have this item we try to patch the Id into the data model, so next time we know this will be an update scenario.\r\n const savedAdItem = filter(savedAdsData, sAd => sAd['Client Id'] === `${ad.uid}`);\r\n\r\n if (savedAdItem && savedAdItem[0] && savedAdItem[0].Id) {\r\n ads[idx] = { ...ad, Id: savedAdItem[0].Id };\r\n } else {\r\n ads[idx] = { ...ad, Id: undefined };\r\n }\r\n });\r\n\r\n return ads;\r\n};\r\n\r\nexport const bulkModelToViewModelForAd = ({\r\n adsModel,\r\n originalAdsModel,\r\n}) => {\r\n const processedAds = adsWithIdsAttached(adsModel, originalAdsModel.data);\r\n\r\n const adViewModel = {\r\n data: processedAds,\r\n isValid: true,\r\n isDirty: false,\r\n currentPageIndex: 1,\r\n };\r\n\r\n return adViewModel;\r\n};\r\n\r\n\r\nexport const modelToViewModelForAd = ({\r\n adsModel,\r\n}) => {\r\n const adsVideoModel = { ...adsModel };\r\n\r\n return adsVideoModel;\r\n};\r\n\r\nexport const splitUpdateAndCreateAds = ({\r\n adsViewModel, oldAdsModel, campaign, adGroup,\r\n}) => {\r\n const adIds = [];\r\n\r\n const adsToCreate = [];\r\n const adsToUpdate = [];\r\n const adsToDelete = [];\r\n\r\n each(values(adsViewModel.data), (ad) => {\r\n if (ad.data && (ad.data.video || ad.data.image)) {\r\n const adToSave = { ...ad };\r\n if (adsViewModel.adSubType) {\r\n adToSave.adSubType = adsViewModel.adSubType;\r\n }\r\n\r\n // check if the ad has ID\r\n if (adToSave.Id) {\r\n adsToUpdate.push(adToSave);\r\n\r\n // add the Ids of Ads that have already been saved to API\r\n // so that we can delete if the oldAdsModel contains more Ids\r\n adIds.push(adToSave.Id);\r\n } else {\r\n adsToCreate.push(adToSave);\r\n }\r\n }\r\n });\r\n\r\n if (oldAdsModel) {\r\n // get ids of the ads that are deleted (missing in adIds array)\r\n each(values(oldAdsModel.data), (oldAd) => {\r\n if (oldAd.Id && !adIds.includes(oldAd.Id)) {\r\n adsToDelete.push(oldAd);\r\n }\r\n });\r\n }\r\n\r\n const adsNeededToCreate = viewModelToModelForAd({ adsViewModel: adsToCreate, campaign, adGroup });\r\n\r\n const adsNeededToUpdate = [\r\n ...viewModelToModelForAd({ adsViewModel: adsToUpdate, campaign, adGroup }),\r\n ...viewModelToModelForAd({ adsViewModel: adsToDelete, campaign, adGroup }, true),\r\n ];\r\n\r\n return { adsNeededToCreate, adsNeededToUpdate };\r\n};\r\n","import Promise from 'bluebird';\r\nimport _ from 'underscore';\r\nimport { ResponsiveAd } from '@bingads-webui/campaign-odata-schemas';\r\nimport { newVideoFromMTObject } from '@bingads-webui-campaign-react/image-experience-video-part';\r\nimport { edmCampaign, getEntityFromScope } from '@bingads-webui/edm-campaign';\r\nimport { QueryParam } from '@bingads-webui-react/scope-service';\r\n\r\nimport { isBulkWrappedResponse, getBulkUploadErrorType, modelToViewModelForBulkErrors, ERROR_ENTITY } from '../common';\r\nimport { bulkModelToViewModelForAd, splitUpdateAndCreateAds } from './ad';\r\n\r\nconst attachUidToErrorProperty = errors => _.map(errors, (error) => {\r\n // eslint-disable-next-line no-param-reassign\r\n error.Property = `${error.Property}_${error['Client Id']}`;\r\n\r\n return error;\r\n});\r\n\r\nconst GENERIC_ERROR_MESSAGE_KEY = _TL_(\"We've encountered an error and can't continue. Please contact support for further assistance.\");\r\n\r\nconst adEDM = edmCampaign.types.resolve('Model.ResponsiveAd');\r\nconst adResource = new adEDM.ResourceIdentifier();\r\n\r\n\r\nconst createData = data => adResource.bulkCreate.bind(adResource)(data);\r\n\r\nconst updateData = data => adResource.bulkUpdate.bind(adResource)(data);\r\n\r\nconst bulkUpsertAdSettingsEntityErrorMap = {\r\n [getBulkUploadErrorType(ResponsiveAd)]: ERROR_ENTITY.Ad,\r\n};\r\n\r\nexport const getODataConfig = (serverContext) => {\r\n const isLocal = () => {\r\n const hostname = document.location.hostname.toLowerCase();\r\n return hostname.indexOf('ads.microsoft.com') === -1 &&\r\n hostname.indexOf('ads-int.microsoft.com') === -1;\r\n };\r\n\r\n const odataPath = isLocal() ? 'Advertiser/V2' : 'Campaign/V2';\r\n\r\n const oDataConfig = {\r\n odataToken: serverContext.Token,\r\n oDataToken: serverContext.Token,\r\n odataPath: `${serverContext.ServicesEndpoints.CampaignAPI}${odataPath}`,\r\n oDataPath: `${serverContext.ServicesEndpoints.CampaignAPI}${odataPath}`,\r\n };\r\n\r\n return oDataConfig;\r\n};\r\n\r\nexport const getErrorsPlaceholders = () => ({\r\n systemErrors: [],\r\n serverErrors: [],\r\n});\r\n\r\nconst postVideoByUrl = ({ videoUrl }) => {\r\n const queryParam = new QueryParam(window.location);\r\n\r\n queryParam.remove(['adGroupId', 'campaignId']);\r\n const { currentEntity } = getEntityFromScope(queryParam);\r\n\r\n return currentEntity\r\n .Videos['Default.CreateVideo']\r\n .$makeCall({\r\n functionParams: {},\r\n payload: {\r\n videoUrl,\r\n description: '',\r\n },\r\n })\r\n .toPromise();\r\n};\r\n\r\nconst uploadVideo = ({ ad }) => postVideoByUrl({ videoUrl: ad.data.video.url }).then((res) => {\r\n _.extend(ad.data.video, newVideoFromMTObject({ SubType: 'VideoMedia16X9', Status: 'Draft', Id: res.value }));\r\n});\r\n\r\nconst uploadVideoIfNeeded = ({ ads }) => {\r\n const videoPromises = [];\r\n ads.data.forEach((ad) => {\r\n if (ad.data && ad.data.video && !ad.data.video.id) {\r\n videoPromises.push(uploadVideo({ ad }));\r\n }\r\n });\r\n\r\n if (_.isEmpty(videoPromises)) {\r\n return Promise.resolve(ads);\r\n }\r\n\r\n return Promise.all(videoPromises).then(() => ads);\r\n};\r\n\r\nexport const saveAds = ({\r\n ads,\r\n oldAdsModel,\r\n campaign,\r\n adGroup,\r\n activity = null,\r\n}, { scenario, i18n }) => uploadVideoIfNeeded({ ads }).then((adsViewModel) => {\r\n const { adsNeededToCreate, adsNeededToUpdate } = splitUpdateAndCreateAds({\r\n adsViewModel, oldAdsModel, campaign, adGroup,\r\n });\r\n\r\n const promises = {};\r\n\r\n if (adsNeededToCreate.length > 0) {\r\n promises.createAds = createData(adsNeededToCreate);\r\n }\r\n\r\n if (adsNeededToUpdate.length > 0) {\r\n promises.updateAds = updateData(adsNeededToUpdate);\r\n }\r\n\r\n return Promise.props(promises).then((results) => {\r\n const updatedAds = results.updateAds || [];\r\n const createdAds = results.createAds || [];\r\n\r\n const result = [...updatedAds, ...createdAds];\r\n\r\n const data = {\r\n ads: bulkModelToViewModelForAd({\r\n adsModel: result,\r\n originalAdsModel: adsViewModel,\r\n }),\r\n ...getErrorsPlaceholders(),\r\n };\r\n\r\n\r\n if (activity) {\r\n activity.signal(`onAdsSavedSuccessfully, redirecting to campaign grid page - adCount: ${result.length}`);\r\n }\r\n return data;\r\n }, (bulkOrSystemError) => {\r\n if (isBulkWrappedResponse(bulkOrSystemError)) {\r\n const { entity, errors } = bulkOrSystemError;\r\n\r\n // we need to attach uid to each error to identify which video panel has an error.\r\n // the uid is stored in the clientid of the error.\r\n const errorsWithPropertyIdsAttached = attachUidToErrorProperty(errors);\r\n\r\n const entities = entity ?\r\n bulkModelToViewModelForAd({\r\n adsModel: entity,\r\n originalAdsModel: adsViewModel,\r\n }) :\r\n adsViewModel;\r\n\r\n const serverErrors = modelToViewModelForBulkErrors(\r\n errorsWithPropertyIdsAttached,\r\n bulkUpsertAdSettingsEntityErrorMap,\r\n scenario,\r\n i18n,\r\n activity\r\n );\r\n\r\n if (activity) {\r\n activity.signal(`onAdsSavedUnsuccessfully, ${JSON.stringify(serverErrors)}`);\r\n }\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n return Promise.reject({\r\n ads: { ...entities },\r\n serverErrors,\r\n });\r\n }\r\n\r\n // Activity\r\n // eslint-disable-next-line no-console\r\n console.warn(`Campaign bulk upsert system error: ${bulkOrSystemError.stack || bulkOrSystemError.message || bulkOrSystemError}`);\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n return Promise.reject({\r\n ads: adsViewModel,\r\n systemErrors: [i18n.getString(GENERIC_ERROR_MESSAGE_KEY)],\r\n // TODO: We would want to return the criterions with Ids, but UI's bulk drops them\r\n });\r\n });\r\n});\r\n","import { odata } from '@bingads-webui/http-util';\r\nimport { getODataConfig } from '../model/ad-bulk';\r\n\r\nconst expireTimeDefault = 86400 * 1000; // 1 day\r\n\r\n\r\nexport function setLocalStorageWithExpire(key, data, expire) {\r\n const obj = {\r\n data,\r\n time: Date.now(),\r\n expire,\r\n };\r\n localStorage.setItem(key, JSON.stringify(obj));\r\n}\r\n\r\nfunction getLocalStorageWithExpire(key) {\r\n let val = localStorage.getItem(key);\r\n if (!val) {\r\n return null;\r\n }\r\n try {\r\n val = JSON.parse(val);\r\n } catch (error) {\r\n console.error('Error during JSON parse:', error);\r\n return null;\r\n }\r\n if (Date.now() - val.time > val.expire) {\r\n localStorage.removeItem(key);\r\n return { val: val.data, expired: true };\r\n }\r\n return { val: val.data, expired: false };\r\n}\r\n\r\nexport function getKey() {\r\n const date = new Date();\r\n return `${date.getFullYear}/${date.getMonth}/${date.getDay}`;\r\n}\r\n\r\nexport async function fetchExchangeRateMapping(serverContext) {\r\n const oDataConfig = getODataConfig(serverContext);\r\n const baseURL = `${oDataConfig.oDataPath}/Customers(${serverContext.CurrentCustomer.Id})/Accounts(${serverContext.CurrentAccount.Id})/`;\r\n const url = `${baseURL}/Default.GetExchangeRate`;\r\n\r\n try {\r\n const result = await odata.get(url, oDataConfig);\r\n if (result && result.value) {\r\n setLocalStorageWithExpire(getKey(), result.value, expireTimeDefault);\r\n return result.value;\r\n }\r\n } catch (error) {\r\n console.error(error + url);\r\n }\r\n return Promise.resolve();\r\n}\r\n\r\nexport function getAccountExchangeRateFromLocalStorage(serverContext) {\r\n let exchangeRateMapping = getLocalStorageWithExpire(getKey());\r\n\r\n if (!exchangeRateMapping || exchangeRateMapping.expired) {\r\n exchangeRateMapping = fetchExchangeRateMapping(serverContext);\r\n }\r\n\r\n return exchangeRateMapping;\r\n}\r\n","import config from '@bingads-webui-component-legacy/config/index';\r\nimport localStorage from '@bingads-webui-component-legacy/storage/localStorage';\r\n\r\nexport const isDealCampaign = () => location.pathname.includes('awarenessmediadeal');\r\nexport const isCTVCampaign = () => location.pathname.includes('awareness') && !isDealCampaign();\r\n\r\nexport const getVideoDeal = () => {\r\n if (!isDealCampaign()) {\r\n return null;\r\n }\r\n let videoDeal = config.get('VideoMediaDeal');\r\n if (!videoDeal) {\r\n if (localStorage.supportsStorage()) {\r\n videoDeal = localStorage.get('VideoMediaDeal');\r\n config.set('VideoMediaDeal', videoDeal);\r\n }\r\n }\r\n\r\n return videoDeal;\r\n};\r\n","import React, { useEffect, useState, useContext, useCallback, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport _ from 'underscore';\r\nimport { withCustomValidation, withError } from '@bingads-webui-react/validation';\r\nimport { VideoExperience, newVideoFromMTObject, ImageExperienceVideo } from '@bingads-webui-campaign-react/image-experience-video-part';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { entityIs, propertyIs, andComp } from '@bingads-webui-campaign-react/form-error';\r\nimport { Stack } from '@bingads-webui-react/fabric-control';\r\nimport { withControlErrorHandling, withUnvalidatedControlErrors } from '@bingads-webui-campaign-react/error-handling';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { withPreference } from '@bingads-webui-react/preference-context';\r\nimport { CopilotVideoEditor } from '@bingads-webui-campaign-react/edit-video-ads-view';\r\nimport { withAssetLibraryServicesLoaded } from '@bingads-webui-campaign-react/asset-library-services';\r\nimport { UiBlocker } from '@bingads-webui-react/ui-blocker';\r\nimport { TaskManager } from '@bingads-webui-universal/task-manager';\r\nimport { VideoTemplateEditorContextWrapper } from '@bingads-webui-campaign-react/video-ads-editor';\r\n\r\nimport { AddVideoButton } from './add-video-button';\r\nimport { IconButton } from '../common/shared-components';\r\nimport { VideoAdsSuggestionCarousel } from './video-ads-suggestion-carousel';\r\nimport { useVideoAdsCopilot } from './use-video-ads-copilot';\r\nimport { PlacementInfoWithStars } from './video-metadata';\r\nimport { ERROR_ENTITY } from '../common';\r\n\r\nconst entityIsAd = entityIs(ERROR_ENTITY.Ad);\r\n\r\n\r\nexport const validateVideo = (video, i18n, videoRequirementForDeal, skipQualityValidation) => {\r\n const messages = [];\r\n\r\n if (!video) {\r\n messages.push(i18n.getString(_TL_('Please add a video.')));\r\n return messages;\r\n }\r\n\r\n if (video.Status !== 'Active') {\r\n return [];\r\n }\r\n\r\n /* istanbul ignore next */\r\n if (video.quality === 0 && !skipQualityValidation) {\r\n messages.push(i18n.getString(_TL_('Your video is low quality and doesn\\'t meet our requirements to serve on eligible networks. Please upload another file and try again.')));\r\n }\r\n\r\n if ((video.height < 720 || video.width < 960) && !skipQualityValidation) {\r\n messages.push(i18n.getString(_TL_('Your video must be at least 960x720 pixels. Please upload another file and try again.')));\r\n }\r\n\r\n /* istanbul ignore next */\r\n if (videoRequirementForDeal && video.quality < videoRequirementForDeal) {\r\n if (videoRequirementForDeal === 2) {\r\n messages.push(i18n.getString(_TL_('For this deal your asset must meet the General CTV requirements.')));\r\n } else if (videoRequirementForDeal === 4) {\r\n messages.push(i18n.getString(_TL_('For this deal your asset must meet the Premium Video requirements.')));\r\n }\r\n }\r\n\r\n if (messages.length > 1) {\r\n return video.Status === 'Active' ? [_.first(messages)] : [];\r\n }\r\n\r\n // for draft video, we only show processing error message.\r\n return messages;\r\n};\r\n\r\nconst getStyles = (/* components, theme */) => ({\r\n videoPanelButton: {\r\n justifyContent: 'flex-end',\r\n display: 'none',\r\n cursor: 'pointer',\r\n borderRadius: 99,\r\n background: '#FFFFFF',\r\n width: 32,\r\n height: 32,\r\n },\r\n videoPanelButtonContainer: {\r\n position: 'absolute',\r\n left: '50%',\r\n top: '50%',\r\n transform: 'translate(-50%, -50%)',\r\n columnGap: '10px',\r\n display: 'flex',\r\n },\r\n});\r\n\r\nconst CustomComponent = (props) => {\r\n const {\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n onDataChange,\r\n idx,\r\n i18n,\r\n videoAd,\r\n updateValidation,\r\n videoRequirementForDeal,\r\n permissions,\r\n renderError,\r\n assetLibraryConfig,\r\n dataService,\r\n copilotEnabled,\r\n isCTV,\r\n multiVideoMode,\r\n isVideoRequired,\r\n skipQualityValidation,\r\n loadClipchampPlayer,\r\n useBrandKit,\r\n setUseBrandKit,\r\n isBrandKitEmpty,\r\n ...rest\r\n } = props;\r\n const {\r\n getVideo,\r\n } = dataService;\r\n const {\r\n cid, aid, perfMarker, serverContext,\r\n } = rest;\r\n\r\n const video = videoAd && videoAd.video ? videoAd.video : null;\r\n\r\n const videoTemplateUIEnabled = permissions && permissions.dynamic && permissions.dynamic.VideoTemplateUI;\r\n const isGoogleImportVideoAdNeedsRepair = permissions && permissions.IsGoogleImportVideoAdsEnabled\r\n && _.get(videoAd, 'video.sourceType') === 'GoogleImported'\r\n && _.get(videoAd, 'video.status') === 'Failed';\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const classes = useDefaultStyles(getStyles);\r\n\r\n const [isUploading, setIsUploading] = useState(false);\r\n const [showVideoEditor, setShowVideoEditor] = useState(false);\r\n const [isFetchingVideo, setIsFetchingVideo] = useState(false);\r\n const [multiVideoList, setMultiVideoList] = useState(() => (videoAd && videoAd.videos ? [...videoAd.videos] : []));\r\n const [showMultiVideoCopilotEditor, setShowMultiVideoCopilotEditor] = useState({\r\n isOpen: false,\r\n });\r\n const [isVideoFetched, setIsVideoFetched] = useState(false);\r\n\r\n const enableEdit = video && video.template;\r\n\r\n const onErrorsUpdated = (errors) => {\r\n // already converted using i18n;\r\n\r\n if (errors) {\r\n updateValidation(errors, { video: null });\r\n }\r\n };\r\n\r\n const onUpdateVideoList = (list) => {\r\n if (list.length > 0) {\r\n const validationMessage = validateVideo(list[0], i18n, videoRequirementForDeal, skipQualityValidation);\r\n updateValidation(validationMessage, { video: list[0] });\r\n if (activity) {\r\n activity.signal(`onVideoValidated - messages: ${validationMessage} - isValid: ${validationMessage.length === 0}`);\r\n }\r\n } else {\r\n updateValidation([i18n.getString(_TL_('Please add a video.'))], { video: null });\r\n }\r\n };\r\n\r\n const onUpdateMultiAdVideoList = useCallback((list) => {\r\n const validVideos = list.filter(multiVideo => multiVideo !== undefined);\r\n setMultiVideoList(validVideos);\r\n\r\n let validationMessages = [];\r\n if (validVideos.length > 0) {\r\n validationMessages = validVideos.map(valVideo => validateVideo(valVideo, i18n, videoRequirementForDeal, skipQualityValidation));\r\n }\r\n\r\n const aggregatedMessages = validationMessages.flat();\r\n\r\n updateValidation(aggregatedMessages, { videos: validVideos });\r\n if (activity) {\r\n activity.signal(`onVideoValidated - messages: ${aggregatedMessages} - isValid: ${aggregatedMessages.length === 0}`);\r\n }\r\n }, [i18n, updateValidation, videoRequirementForDeal, activity, skipQualityValidation]);\r\n\r\n useEffect(() => {\r\n if (isUploading) {\r\n updateValidation([i18n.getString(_TL_('Please wait while we upload your video.'))], { video: null });\r\n\r\n if (activity) {\r\n activity.signal('video is uploading');\r\n }\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [isUploading]);\r\n\r\n useEffect(() => {\r\n const shouldDirty = !(_.isUndefined(videoAd) || _.isNull(videoAd));\r\n ((multiVideoMode === false) && updateValidation(\r\n videoAd ? validateVideo(videoAd.video, i18n, videoRequirementForDeal, skipQualityValidation) : [i18n.getString(_TL_('Please add a video.'))],\r\n { video: videoAd && videoAd.video ? videoAd.video : null },\r\n shouldDirty\r\n ));\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n const onRenderItemDropdown = (values, videoAsset) => {\r\n if (values.uploadVideo !== null) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n values.onReplace(videoAsset.Type)}\r\n iconProps={{ iconName: 'Edit' }}\r\n className=\"edit-icon-button\"\r\n styles={{ root: { borderRadius: '99px', height: 32, width: 32 } }}\r\n />\r\n
\r\n
\r\n );\r\n };\r\n\r\n const onRenderItemDropdownCoPilot = (values) => {\r\n if (values.uploadVideo !== null) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n {enableEdit &&\r\n
\r\n setShowVideoEditor(true)}\r\n iconProps={{ iconName: 'Edit' }}\r\n className=\"edit-icon-button\"\r\n styles={{ root: { borderRadius: '99px', height: 32, width: 32 } }}\r\n />\r\n
\r\n }\r\n
\r\n {\r\n const validationMessage = validateVideo(null, i18n, videoRequirementForDeal, skipQualityValidation);\r\n updateValidation(validationMessage, { video: null });\r\n }}\r\n iconProps={{ iconName: 'Cancel' }}\r\n className=\"remove-icon-button\"\r\n styles={{ root: { borderRadius: '99px', height: 32, width: 32 } }}\r\n />\r\n
\r\n
\r\n );\r\n };\r\n\r\n const onRenderItemDropDownForMultiModeWithCopilot = useCallback((selectedVideo, selectedIdx) => {\r\n const selectedMultiVideo = multiVideoList[selectedIdx];\r\n\r\n\r\n return (\r\n
\r\n {\r\n selectedVideo.template && (\r\n
\r\n setShowMultiVideoCopilotEditor({\r\n isOpen: true,\r\n video: selectedMultiVideo,\r\n idx: selectedIdx,\r\n })}\r\n iconProps={{ iconName: 'Edit' }}\r\n className=\"edit-icon-button\"\r\n styles={{ root: { borderRadius: '99px', height: 32, width: 32 } }}\r\n />\r\n
\r\n )\r\n }\r\n
\r\n {\r\n // remove only the selected video\r\n const updatedVideos = [...multiVideoList];\r\n updatedVideos.splice(selectedIdx, 1);\r\n onUpdateMultiAdVideoList(updatedVideos);\r\n }}\r\n\r\n iconProps={{ iconName: 'Cancel' }}\r\n className=\"remove-icon-button\"\r\n styles={{ root: { borderRadius: '99px', height: 32, width: 32 } }}\r\n />\r\n
\r\n
\r\n );\r\n }, [multiVideoList, classes.videoPanelButton, onUpdateMultiAdVideoList]);\r\n\r\n const getNewVideoObject = useCallback((newVideo) => {\r\n const validationMessage = validateVideo(newVideo, i18n, videoRequirementForDeal, skipQualityValidation);\r\n const videoObject = new ImageExperienceVideo({\r\n ...newVideo,\r\n width: newVideo.template.width,\r\n height: newVideo.template.height,\r\n src: newVideo.src || newVideo.url,\r\n type: 'VideoMedia16X9',\r\n thumbnailUrl: newVideo.thumbnailUrl,\r\n });\r\n videoObject.url = newVideo.url;\r\n if (!videoObject.recommendationId) {\r\n videoObject.recommendationId = newVideo.recommendationId || newVideo.suggestionId;\r\n }\r\n\r\n return { videoObject, validationMessage };\r\n }, [i18n, videoRequirementForDeal, skipQualityValidation]);\r\n\r\n const updateWithNewVideo = useCallback((newVideo) => {\r\n const { videoObject, validationMessage } = getNewVideoObject(newVideo);\r\n\r\n if (multiVideoMode) {\r\n const isDuplicate = multiVideoList.find(v => v.recommendationId === videoObject.recommendationId);\r\n if (!isDuplicate) {\r\n onUpdateMultiAdVideoList([...multiVideoList, videoObject]);\r\n }\r\n } else {\r\n updateValidation(validationMessage, {\r\n video: videoObject,\r\n });\r\n }\r\n }, [getNewVideoObject, multiVideoMode, multiVideoList, onUpdateMultiAdVideoList, updateValidation]);\r\n\r\n const updateWithNewVideoAtIdx = useCallback((newVideo, newVideoIdx) => {\r\n const videoObject = new ImageExperienceVideo({\r\n ...newVideo,\r\n width: newVideo.template.width,\r\n height: newVideo.template.height,\r\n src: newVideo.src || newVideo.url,\r\n type: 'VideoMedia16X9',\r\n thumbnailUrl: newVideo.thumbnailUrl,\r\n });\r\n videoObject.url = newVideo.url || newVideo.src;\r\n if (!videoObject.recommendationId) {\r\n videoObject.recommendationId = newVideo.recommendationId || newVideo.suggestionId;\r\n }\r\n\r\n const updatedVideos = [...multiVideoList];\r\n updatedVideos[newVideoIdx] = videoObject;\r\n onUpdateMultiAdVideoList(updatedVideos);\r\n }, [multiVideoList, onUpdateMultiAdVideoList]);\r\n\r\n const onChangeVideo = useCallback((newVideo) => {\r\n updateWithNewVideo({ ...newVideo, status: 'Active' });\r\n }, [updateWithNewVideo]);\r\n\r\n const onChangeMultiVideo = useCallback((newVideo, newVideoIdx) => {\r\n updateWithNewVideoAtIdx({ ...newVideo, status: 'Active' }, newVideoIdx);\r\n }, [updateWithNewVideoAtIdx]);\r\n\r\n useEffect(() => {\r\n if (!multiVideoMode && video && video.id && video.metadata && !video.template) {\r\n setIsFetchingVideo(true);\r\n getVideo({ id: video.id, fetchMetadata: true }).then((newVideo) => {\r\n updateWithNewVideo(newVideoFromMTObject(newVideo));\r\n }).finally(() => {\r\n setIsFetchingVideo(false);\r\n });\r\n }\r\n }, [getVideo, updateWithNewVideo, video, multiVideoMode]);\r\n\r\n useEffect(() => {\r\n if (!isFetchingVideo & !isVideoFetched && copilotEnabled && multiVideoMode && multiVideoList.length > 0 && multiVideoList.some(v => v && v.id && v.metadata && !v.template)) {\r\n setIsFetchingVideo(true);\r\n const getVideoPromises = [];\r\n const updatedVideos = [];\r\n multiVideoList.forEach((v, index) => {\r\n if (v && v.id && v.metadata && !v.template) {\r\n getVideoPromises.push(getVideo({ id: v.id, fetchMetadata: true }).then((newVideo) => {\r\n const { videoObject } = getNewVideoObject(newVideoFromMTObject(newVideo));\r\n updatedVideos.push([videoObject, index]);\r\n }));\r\n } else {\r\n updatedVideos.push([v, index]);\r\n }\r\n });\r\n\r\n Promise.all(getVideoPromises).finally(() => {\r\n const existingVideos = [...multiVideoList];\r\n updatedVideos.forEach(([newVideo, index]) => {\r\n existingVideos[index] = newVideo;\r\n });\r\n\r\n onUpdateMultiAdVideoList(existingVideos);\r\n setIsFetchingVideo(false);\r\n setIsVideoFetched(true);\r\n });\r\n }\r\n }, [getVideo, updateWithNewVideo, multiVideoMode, multiVideoList, isFetchingVideo, onUpdateMultiAdVideoList, copilotEnabled, isVideoFetched, getNewVideoObject]);\r\n\r\n useEffect(() => {\r\n if (multiVideoMode && isVideoRequired && _.isEmpty(videoAd.videos)) {\r\n updateValidation([i18n.getString(_TL_('Please add a video.'))], { video: null }, false);\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n const { finalUrlForCopilot } = useVideoAdsCopilot();\r\n\r\n return (\r\n <>\r\n \r\n {(multiVideoMode === false) ? (\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n {!isGoogleImportVideoAdNeedsRepair && videoAd && videoAd.video && videoAd.video.quality !== undefined && (\r\n )}\r\n
) : (\r\n
\r\n \r\n
)}\r\n {renderError}\r\n {copilotEnabled && (!multiVideoMode || (multiVideoMode && multiVideoList.length < 5)) &&\r\n \r\n }\r\n \r\n {\r\n copilotEnabled && video && video.template && (\r\n videoTemplateUIEnabled ? (\r\n {\r\n setShowVideoEditor(newOpen);\r\n }}\r\n isCTV={isCTV}\r\n cid={cid}\r\n aid={aid}\r\n finalUrl={finalUrlForCopilot}\r\n assetLibraryConfig={assetLibraryConfig}\r\n permissions={permissions}\r\n isAADUser={serverContext && serverContext.IsAADUser}\r\n serverContext={serverContext}\r\n perfMarker={perfMarker.createChild('VideoTemplateEditor')}\r\n isDialog\r\n loadClipchampPlayer={loadClipchampPlayer}\r\n />\r\n ) : (\r\n {\r\n setShowVideoEditor(newOpen);\r\n }}\r\n onApply={onChangeVideo}\r\n cid={cid}\r\n aid={aid}\r\n finalUrl={finalUrlForCopilot}\r\n assetLibraryConfig={assetLibraryConfig}\r\n permissions={permissions}\r\n isAADUser={serverContext && serverContext.IsAADUser}\r\n i18n={i18n}\r\n perfMarker={perfMarker.createChild('CopilotVideoEditor')}\r\n isCTV={isCTV}\r\n />\r\n )\r\n )\r\n }\r\n {\r\n copilotEnabled && multiVideoMode && (\r\n videoTemplateUIEnabled ? (\r\n onChangeMultiVideo(newVideo, showMultiVideoCopilotEditor.idx)}\r\n setIsOpen={(newOpen) => {\r\n setShowMultiVideoCopilotEditor({ isOpen: newOpen });\r\n }}\r\n isCTV={isCTV}\r\n cid={cid}\r\n aid={aid}\r\n finalUrl={finalUrlForCopilot}\r\n assetLibraryConfig={assetLibraryConfig}\r\n permissions={permissions}\r\n isAADUser={serverContext && serverContext.IsAADUser}\r\n serverContext={serverContext}\r\n perfMarker={perfMarker.createChild('VideoTemplateEditor')}\r\n isDialog\r\n loadClipchampPlayer={loadClipchampPlayer}\r\n />\r\n ) : (\r\n {\r\n setShowMultiVideoCopilotEditor({ isOpen: newOpen });\r\n }}\r\n onApply={newVideo => onChangeMultiVideo(newVideo, showMultiVideoCopilotEditor.idx)}\r\n cid={cid}\r\n aid={aid}\r\n finalUrl={finalUrlForCopilot}\r\n assetLibraryConfig={assetLibraryConfig}\r\n permissions={permissions}\r\n isAADUser={serverContext && serverContext.IsAADUser}\r\n i18n={i18n}\r\n perfMarker={perfMarker.createChild('CopilotVideoEditor')}\r\n isCTV={isCTV}\r\n />\r\n )\r\n )\r\n }\r\n \r\n );\r\n};\r\n\r\n\r\nCustomComponent.propTypes = {\r\n onDataChange: PropTypes.func.isRequired,\r\n idx: PropTypes.number.isRequired,\r\n videoAd: PropTypes.shape({\r\n video: PropTypes.shape({\r\n Status: PropTypes.string,\r\n VideoTemplateUI: PropTypes.bool,\r\n }),\r\n messages: PropTypes.arrayOf(PropTypes.string),\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n videoRequirementForDeal: PropTypes.number.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({\r\n VideoCopilotGeneration: PropTypes.bool,\r\n }),\r\n }).isRequired,\r\n renderError: PropTypes.node.isRequired,\r\n cid: PropTypes.string.isRequired,\r\n aid: PropTypes.string.isRequired,\r\n oDataConfig: PropTypes.shape({}).isRequired,\r\n perfMarker: PropTypes.shape({\r\n createChild: PropTypes.func,\r\n }).isRequired,\r\n serverContext: PropTypes.shape({\r\n IsAADUser: PropTypes.bool,\r\n }).isRequired,\r\n preferenceService: PropTypes.shape({}).isRequired,\r\n copilotEnabled: PropTypes.bool.isRequired,\r\n isVideoRequired: PropTypes.bool.isRequired,\r\n};\r\n\r\nconst VideoExperienceWithValidation = _.compose(\r\n withControlErrorHandling,\r\n withUnvalidatedControlErrors,\r\n withError,\r\n withCustomValidation,\r\n withAssetLibraryServicesLoaded\r\n)(CustomComponent);\r\n\r\nconst ValidatedVideoExperience = (props) => {\r\n const {\r\n videoAd, idx, i18n, multiVideoMode, isCTV, isVideoRequired, ...rest\r\n } = props;\r\n\r\n const {\r\n serverContext, preferenceService, cid, aid, oDataConfig,\r\n } = rest;\r\n\r\n const videoProp = andComp(entityIsAd, propertyIs(`Video.VideoMedia16X9_${idx}`));\r\n\r\n const validVideos = videoAd && Array.isArray(videoAd.videos) ? videoAd.videos.filter(video => video !== undefined) : [];\r\n\r\n const multiAdDataObj = { videos: validVideos };\r\n\r\n const dataObj = { video: videoAd ? videoAd.video : null };\r\n\r\n const processingMessage = i18n.getString(_TL_('We\\'re processing your video and reviewing its quality, which may take some time to complete. Please provide your Final URL and select Save. Then, you can check your video\\'s status from the ad grid.'));\r\n\r\n const passiveMessages = videoAd && videoAd.video && videoAd.video.Status === 'Draft' ? [processingMessage] : [];\r\n\r\n const updatedVideoAd = multiVideoMode ? { videos: validVideos } : videoAd;\r\n\r\n const activityLogger = useContext(ActivityContext);\r\n\r\n const assetLibraryConfig = {\r\n cid,\r\n aid,\r\n oDataConfig,\r\n dateFormat: _.get(serverContext, ['CurrentUser', 'CultureDateTimeFormat', 'ShortDatePattern']),\r\n timeZone: _.get(serverContext, ['CurrentAccount', 'TimeZone']),\r\n preferencesService: preferenceService,\r\n activityLogger,\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nValidatedVideoExperience.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n videoAd: PropTypes.shape({\r\n video: PropTypes.shape({\r\n Status: PropTypes.string,\r\n }),\r\n }).isRequired,\r\n idx: PropTypes.number.isRequired,\r\n multiVideoMode: PropTypes.bool,\r\n isCTV: PropTypes.bool,\r\n isVideoRequired: PropTypes.bool.isRequired,\r\n skipQualityValidation: PropTypes.bool,\r\n};\r\n\r\nValidatedVideoExperience.defaultProps = {\r\n multiVideoMode: false,\r\n isCTV: false,\r\n skipQualityValidation: false,\r\n};\r\n\r\nconst VideoExperienceWithPreference = withPreference(ValidatedVideoExperience);\r\n\r\nconst VideoExperienceWithPreferenceRecommendationFetch = (props) => {\r\n const copilotFetchTaskManager = useMemo(() => new TaskManager(), []);\r\n const { fetch, isBrandKitEmpty, fetchBrandKit } = useVideoAdsCopilot();\r\n const { useBrandKit } = props;\r\n\r\n useEffect(() => {\r\n fetchBrandKit();\r\n }, [fetchBrandKit]);\r\n\r\n useEffect(() => {\r\n if (props.copilotEnabled) {\r\n fetch(copilotFetchTaskManager, useBrandKit);\r\n }\r\n }, [props, copilotFetchTaskManager, fetch]);\r\n\r\n return ;\r\n};\r\n\r\nexport { VideoExperienceWithPreference as ValidatedVideoExperience };\r\nexport { VideoExperienceWithPreferenceRecommendationFetch as ValidatedVideoExperienceWithRecommendationFetch };\r\n","import React, { useContext, useEffect, useMemo, useState, useCallback } from 'react';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { withCustomValidation, withError, ValidationGroup } from '@bingads-webui-react/validation';\r\nimport { withControlErrorHandling, withUnvalidatedControlErrors } from '@bingads-webui-campaign-react/error-handling';\r\nimport { ValidatedFinalUrl as UrlInput } from '@bingads-webui-campaign-react/validated-url-input';\r\n\r\n\r\nconst ValidatedFinalUrl = withControlErrorHandling(withUnvalidatedControlErrors(withError(withCustomValidation(UrlInput))));\r\n\r\nexport const FinalUrl = ({\r\n i18n,\r\n finalUrlsObj,\r\n containerClassName,\r\n setCopilotFinalUrl,\r\n isAdGridEditorMode,\r\n}) => {\r\n const activity = useContext(ActivityContext);\r\n const [validationState, setValidationState] = useState({});\r\n const [updatedCopilotFinalUrl, setUpdatedCopilotFinalUrl] = useState(false);\r\n\r\n const updateValidationState = (result) => {\r\n setValidationState(result);\r\n };\r\n\r\n const notifyCopilotFinalURLchange = useCallback(() => {\r\n const isValid = _.result(validationState, 'isValid', false);\r\n const finalUrls = _.result(validationState, ['data', 'FinalUrls'], undefined);\r\n const finalUrl = _.first(finalUrls);\r\n\r\n if (isValid) {\r\n if (activity) {\r\n activity.signal(`[VideoAdsCopilot] - Final URL changed to ${finalUrl}`);\r\n }\r\n\r\n setCopilotFinalUrl(finalUrl);\r\n setUpdatedCopilotFinalUrl(true);\r\n }\r\n }, [activity, validationState, setCopilotFinalUrl]);\r\n\r\n const handleKeyUp = useCallback((e) => {\r\n const { key } = e;\r\n if (key === 'Enter') {\r\n notifyCopilotFinalURLchange();\r\n }\r\n }, [notifyCopilotFinalURLchange]);\r\n\r\n const additionalProperties = useMemo(() => ({ onBlur: notifyCopilotFinalURLchange, onKeyUp: handleKeyUp }), [notifyCopilotFinalURLchange, handleKeyUp]);\r\n\r\n useEffect(() => {\r\n // for editor notify final url to trigger copilot on editor open\r\n if (isAdGridEditorMode && !updatedCopilotFinalUrl) {\r\n notifyCopilotFinalURLchange();\r\n }\r\n }, [isAdGridEditorMode, notifyCopilotFinalURLchange, updatedCopilotFinalUrl]);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nFinalUrl.propTypes = {\r\n i18n: PropTypes.shape({}).isRequired,\r\n finalUrlsObj: PropTypes.shape({}).isRequired,\r\n containerClassName: PropTypes.string,\r\n setCopilotFinalUrl: PropTypes.func.isRequired,\r\n validationProps: PropTypes.shape({}).isRequired,\r\n isAdGridEditorMode: PropTypes.bool,\r\n};\r\n\r\nFinalUrl.defaultProps = {\r\n containerClassName: '',\r\n isAdGridEditorMode: false,\r\n};\r\n","import React, { useContext, useMemo, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport _ from 'underscore';\r\nimport { Stack } from '@bingads-webui-react/fabric-control';\r\nimport { ResponsiveAd } from '@bingads-webui/campaign-odata-schemas';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { mergeI18n } from '@bingads-webui-campaign-react/i18n-merger';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { ValidationGroup } from '@bingads-webui-react/validation';\r\nimport { ThirdPartyMeasurementContainerWithValidation } from '@bingads-webui-campaign-react/third-party-measurement';\r\nimport { CopilotRepositoryProvider } from '@bingads-webui/inline-copilot';\r\nimport { withRecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { AdvancedSettings } from '@bingads-webui-campaign-react/display-plus-native-ads';\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\nimport { CampaignFetchProvider } from '@bingads-webui-campaign-react/campaign-http';\r\n\r\nimport { ValidatedVideoExperience } from './validated-video-experience';\r\nimport { getAdsStepStyles } from './styles';\r\nimport { IconButton } from '../common/shared-components';\r\nimport { FinalUrl } from './final-url';\r\nimport { useVideoAdsCopilot } from './use-video-ads-copilot';\r\nimport { getODataConfig } from '../model/ad-bulk';\r\n\r\nconst VideoPanel = ({\r\n i18n,\r\n perfMarker,\r\n cid,\r\n aid,\r\n onUpdate,\r\n onRemovePanel,\r\n removeCloseButton,\r\n permissions,\r\n videoAd,\r\n keyIndex,\r\n isSelectedPanel,\r\n videoRequirementForDeal,\r\n oDataConfig: oDataConfigProp,\r\n customStyleFunction,\r\n useCustomStyleFunction,\r\n biddingScheme,\r\n isForDeal,\r\n isXandrServingCampaign,\r\n dealLoaded,\r\n setCopilotFinalUrl,\r\n isAdGridEditorMode,\r\n copilotFetchTaskManager,\r\n copilotEnabled,\r\n loadClipchampPlayer,\r\n useBrandKit,\r\n setUseBrandKit,\r\n}) => {\r\n const defaultClasses = useDefaultStyles(getAdsStepStyles);\r\n\r\n const customClasses = useDefaultStyles(customStyleFunction);\r\n\r\n const classes = useCustomStyleFunction ? customClasses : defaultClasses;\r\n\r\n const videoTypesWithOrder = ['VideoMedia16X9'];\r\n\r\n const serverContext = useContext(ServerContext);\r\n\r\n const {\r\n DynamicPermissions: {\r\n EnableMSANVideoCampaigns,\r\n },\r\n } = serverContext;\r\n\r\n const oDataConfig = oDataConfigProp || getODataConfig(serverContext);\r\n\r\n const isBiddingStrategyCPV = _.get(biddingScheme, 'Type') === 'ManualCpv';\r\n\r\n const legacyI18n = useMemo(() => window.globalLegacyI18n.get('$/i18n!legacy/global'), []);\r\n\r\n const i18nMerged = useMemo(() => mergeI18n(legacyI18n, i18n), [legacyI18n, i18n]);\r\n\r\n const finalUrlsObj = { FinalUrls: videoAd && videoAd.FinalUrls };\r\n\r\n const { fetch, isBrandKitEmpty, fetchBrandKit } = useVideoAdsCopilot();\r\n\r\n const verifiedTrackingSettingObj = useMemo(() => ({\r\n VerifiedTrackingSettings: videoAd && videoAd.VerifiedTrackingSettings,\r\n }), [videoAd]);\r\n\r\n const shouldRepairGoogleImportVideoAd = permissions && permissions.IsGoogleImportVideoAdsEnabled\r\n && _.get(videoAd, 'video.sourceType') === 'GoogleImported'\r\n && _.get(videoAd, 'video.status') === 'Failed';\r\n\r\n const onValidationUpdate = (result) => {\r\n onUpdate(result);\r\n };\r\n\r\n useEffect(() => {\r\n fetchBrandKit();\r\n }, [fetchBrandKit]);\r\n\r\n useEffect(() => {\r\n if (copilotEnabled) {\r\n fetch(copilotFetchTaskManager, useBrandKit);\r\n setClarityTag({ VideoCopilotGeneration: true });\r\n }\r\n }, [copilotEnabled, copilotFetchTaskManager, fetch, useBrandKit]);\r\n\r\n const advancedSettings = useMemo(() => (\r\n \r\n ), [biddingScheme, verifiedTrackingSettingObj.VerifiedTrackingSettings, videoAd]);\r\n\r\n return (\r\n
\r\n \r\n \r\n {!removeCloseButton &&\r\n
\r\n \r\n
\r\n }\r\n \r\n
\r\n \r\n
\r\n {\r\n // If Xandr serving campaign\r\n // and\r\n // CPM and enable IAS\r\n isXandrServingCampaign &&\r\n permissions.EnableIASVerifiedImpressionTrackingURLsForBrandAwarenessCampaign && !isBiddingStrategyCPV\r\n && (\r\n \r\n )}\r\n {\r\n // Hide when Deal or CTV or EditMode Xandr Serving\r\n EnableMSANVideoCampaigns &&\r\n !isForDeal && !isBiddingStrategyCPV && !(isAdGridEditorMode && isXandrServingCampaign) &&\r\n
\r\n {advancedSettings}\r\n
\r\n }\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nVideoPanel.propTypes = {\r\n perfMarker: PropTypes.shape({}).isRequired,\r\n permissions: PropTypes.shape({\r\n EnableIASVerifiedImpressionTrackingURLsForBrandAwarenessCampaign: PropTypes.bool,\r\n IsMOATEnabled: PropTypes.bool,\r\n IsGoogleImportVideoAdsEnabled: PropTypes.bool,\r\n dynamic: PropTypes.shape({\r\n VideoCopilotGeneration: PropTypes.bool,\r\n }),\r\n }).isRequired,\r\n cid: PropTypes.number.isRequired,\r\n aid: PropTypes.number.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n getLocale: PropTypes.func.isRequired,\r\n }).isRequired,\r\n biddingScheme: PropTypes.shape({}).isRequired,\r\n onUpdate: PropTypes.func.isRequired,\r\n onRemovePanel: PropTypes.func.isRequired,\r\n removeCloseButton: PropTypes.bool.isRequired,\r\n videoAd: PropTypes.shape([]).isRequired,\r\n keyIndex: PropTypes.number.isRequired,\r\n isSelectedPanel: PropTypes.bool.isRequired,\r\n oDataConfig: PropTypes.shape({}),\r\n customStyleFunction: PropTypes.func,\r\n useCustomStyleFunction: PropTypes.bool,\r\n videoRequirementForDeal: PropTypes.number,\r\n isForDeal: PropTypes.bool,\r\n dealLoaded: PropTypes.bool,\r\n setCopilotFinalUrl: PropTypes.func.isRequired,\r\n isAdGridEditorMode: PropTypes.bool,\r\n copilotFetchTaskManager: PropTypes.shape({}).isRequired,\r\n copilotEnabled: PropTypes.bool.isRequired,\r\n isXandrServingCampaign: PropTypes.bool,\r\n};\r\n\r\nVideoPanel.defaultProps = {\r\n oDataConfig: null,\r\n customStyleFunction: _.noop,\r\n videoRequirementForDeal: null,\r\n useCustomStyleFunction: false,\r\n isForDeal: false,\r\n dealLoaded: null,\r\n isAdGridEditorMode: false,\r\n isXandrServingCampaign: false,\r\n};\r\n\r\nconst VideoPanelWithContexts = ({ ...props }) => {\r\n const [copilotFinalUrl, setCopilotFinalUrl] = React.useState('');\r\n const serverContext = useContext(ServerContext);\r\n const { permissions } = props;\r\n const isUsingVideoTemplates = permissions && permissions.dynamic && permissions.dynamic.VideoTemplateUI;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nVideoPanelWithContexts.propTypes = {\r\n i18n: PropTypes.shape({\r\n getLocale: PropTypes.func.isRequired,\r\n }).isRequired,\r\n campaignId: PropTypes.number.isRequired,\r\n};\r\n\r\nconst WrappedComponent = withRecommendationContext(VideoPanelWithContexts);\r\n\r\nexport { WrappedComponent as VideoPanel };\r\n\r\n","import { useState, useCallback } from 'react';\r\nimport _ from 'underscore';\r\n\r\nconst ITEMS_PER_PAGE = 10;\r\n\r\nconst MAX_ITEMS = 10;\r\n\r\nconst addItemsToPages = (pages, lastPage, lastPageIndex, count) => {\r\n const page = lastPage;\r\n\r\n if (page.numberOfAdsInPage + count > ITEMS_PER_PAGE) {\r\n const remaining = count - (ITEMS_PER_PAGE - page.numberOfAdsInPage);\r\n const itemsBefore = pages.slice(0, lastPageIndex - 1);\r\n const itemsAfter = pages.slice(lastPageIndex, pages.length);\r\n\r\n const newPageItem = { numberOfAdsInPage: ITEMS_PER_PAGE, pageNumber: page.pageNumber, id: page.id };\r\n\r\n const nextPageItem = { numberOfAdsInPage: 0, pageNumber: page.pageNumber + 1, id: Math.random() };\r\n\r\n return addItemsToPages([...itemsBefore, newPageItem, ...itemsAfter], nextPageItem, lastPageIndex + 1, remaining);\r\n }\r\n\r\n const itemsBefore = pages.slice(0, lastPageIndex - 1);\r\n const itemsAfter = pages.slice(lastPageIndex, pages.length);\r\n\r\n const newPageItem = { numberOfAdsInPage: page.numberOfAdsInPage + count, pageNumber: page.pageNumber, id: page.id };\r\n\r\n return {\r\n currentPage: newPageItem,\r\n pages: [...itemsBefore, newPageItem, ...itemsAfter],\r\n };\r\n};\r\n\r\nexport const usePageManager = (ads, initialAdsCount = 1) => {\r\n const calculateTotalPages = () => {\r\n if (_.isUndefined(ads)) {\r\n return 1;\r\n }\r\n const totalPages = Math.ceil(ads.length / ITEMS_PER_PAGE);\r\n\r\n return totalPages;\r\n };\r\n\r\n const [totalPages, setTotalPages] = useState(calculateTotalPages());\r\n\r\n const maxItems = MAX_ITEMS;\r\n\r\n const createPages = () => {\r\n if (_.isUndefined(ads)) {\r\n return [{ numberOfAdsInPage: initialAdsCount, pageNumber: 1, id: Math.random() }];\r\n }\r\n\r\n if (ads.length === 0) {\r\n return [{ numberOfAdsInPage: initialAdsCount, pageNumber: 1, id: Math.random() }];\r\n }\r\n\r\n let totalAds = ads.length;\r\n\r\n return _.map(_.range(totalPages), (idx) => {\r\n const numberOfAdsInPage = totalAds > ITEMS_PER_PAGE ? ITEMS_PER_PAGE : totalAds;\r\n\r\n totalAds -= ITEMS_PER_PAGE;\r\n return { numberOfAdsInPage, pageNumber: idx + 1, id: Math.random() };\r\n });\r\n };\r\n\r\n const [currentPageIndex, setCurrentPageIndex] = useState(1);\r\n\r\n const [pages, setPages] = useState(createPages());\r\n\r\n const [currentPage, setCurrentPage] = useState(pages[0]);\r\n\r\n const getPageAdjustedIndex = (idx, pageNumber = null) => {\r\n const page = pageNumber || currentPageIndex;\r\n\r\n const val = (((page - 1) * ITEMS_PER_PAGE) + idx);\r\n\r\n return val;\r\n };\r\n\r\n const onAddPage = useCallback(() => {\r\n const newPage = { numberOfAdsInPage: 1, pageNumber: currentPageIndex + 1, id: Math.random() };\r\n\r\n setPages([...pages.concat(newPage)]);\r\n setCurrentPage(newPage);\r\n setCurrentPageIndex(currentPageIndex + 1);\r\n setTotalPages(totalPages + 1);\r\n }, [currentPageIndex, pages, totalPages]);\r\n\r\n const onAddItem = () => {\r\n const page = currentPage;\r\n\r\n if (page.numberOfAdsInPage === ITEMS_PER_PAGE) {\r\n onAddPage();\r\n } else {\r\n const itemsBefore = pages.slice(0, currentPageIndex - 1);\r\n const itemsAfter = pages.slice(currentPageIndex, pages.length);\r\n\r\n const newPageItem = { numberOfAdsInPage: page.numberOfAdsInPage + 1, pageNumber: page.pageNumber, id: page.id };\r\n setCurrentPage(newPageItem);\r\n setPages([...itemsBefore, newPageItem, ...itemsAfter]);\r\n }\r\n };\r\n\r\n const onAddItemsToPage = (count) => {\r\n const lastPage = pages[pages.length - 1];\r\n\r\n const lastPageIndex = pages.length;\r\n\r\n const {\r\n pages: newPages,\r\n } = addItemsToPages(pages, lastPage, lastPageIndex, count);\r\n\r\n setPages(newPages);\r\n setTotalPages(newPages.length);\r\n setCurrentPage(newPages[newPages.length - 1]);\r\n setCurrentPageIndex(newPages.length);\r\n };\r\n\r\n const goToNextPage = () => {\r\n setCurrentPageIndex(currentPageIndex + 1);\r\n setCurrentPage({ ...pages[(currentPageIndex - 1) + 1] });\r\n };\r\n\r\n const goToPrevPage = () => {\r\n setCurrentPageIndex(currentPageIndex - 1);\r\n setCurrentPage({ ...pages[(currentPageIndex - 1) - 1] });\r\n };\r\n\r\n const goToPage = (val) => {\r\n const valInt = parseInt(val, 10);\r\n if (valInt > 0 && valInt <= totalPages) {\r\n _.debounce(setCurrentPageIndex(parseInt(valInt, 10)), 100);\r\n setCurrentPage(pages[valInt - 1]);\r\n }\r\n };\r\n\r\n const removeLastPage = () => {\r\n setCurrentPage({ ...pages[(currentPageIndex - 1) - 1] });\r\n setPages([...pages.splice(0, pages.length - 1)]);\r\n setCurrentPageIndex(currentPageIndex - 1);\r\n setTotalPages(totalPages - 1);\r\n };\r\n\r\n const removeItemFromLastPage = () => {\r\n const lastPage = pages[pages.length - 1];\r\n\r\n if (lastPage.numberOfAdsInPage === 1) {\r\n removeLastPage();\r\n } else {\r\n const newPage = { id: lastPage.id, numberOfAdsInPage: lastPage.numberOfAdsInPage - 1, pageNumber: lastPage.pageNumber };\r\n\r\n const itemsBefore = pages.slice(0, pages.length - 1);\r\n\r\n setCurrentPage({ ...newPage });\r\n setPages([...itemsBefore, newPage]);\r\n }\r\n };\r\n\r\n const removeItem = () => {\r\n if (currentPage.numberOfAdsInPage === 1) {\r\n removeLastPage();\r\n } else if (pages.length === 1) {\r\n const newPage = { id: currentPage.id, numberOfAdsInPage: currentPage.numberOfAdsInPage - 1, pageNumber: currentPage.pageNumber };\r\n\r\n setCurrentPage({ ...newPage });\r\n setPages([newPage]);\r\n } else {\r\n removeItemFromLastPage();\r\n }\r\n };\r\n\r\n return {\r\n currentPage,\r\n currentPageIndex,\r\n pages,\r\n getPageAdjustedIndex,\r\n goToPrevPage,\r\n goToNextPage,\r\n goToPage,\r\n onAddPage,\r\n onAddItem,\r\n onAddItemsToPage,\r\n removeItem,\r\n totalPages,\r\n maxItems,\r\n };\r\n};\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React, { useState, useEffect, useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { MessageBar } from '@fluentui/react';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { FontIcon, Text } from '@bingads-webui-react/fabric-control';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\nimport { TaskManager } from '@bingads-webui-universal/task-manager';\r\nimport { useCopilotLoggers, useInitCopilotLoggers } from '@bingads-webui-campaign-react/copilot-loggers';\r\nimport { isCopilotRegionRestricted } from '@bingads-webui-react/copilot-utils';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { VideoPanel } from './video-panel';\r\nimport { PlacementQualities } from '../ad-components';\r\nimport { Link, TextField } from '../common/shared-components';\r\nimport { getAdsStepStyles } from './styles';\r\nimport { usePageManager } from './page-manager';\r\n\r\n// TODO: Upload video styling for smaller videos.\r\n// TODO: Upload video styling for larger videos.\r\n// TODO: Add background of video while uploading.\r\n// TODO: Add label for processing.\r\n// TODO: Add progress video background\r\n// TODO: Add suggested placements component next to the video.\r\n\r\n\r\n// TODO: Add dots for Ad Preview pagination - DONE\r\n\r\n\r\nexport const VideoAdsContainer = (props) => {\r\n const {\r\n aid,\r\n cid,\r\n i18n,\r\n perfMarker,\r\n onAdsValidation,\r\n currentVideoIndex,\r\n ads = [],\r\n oDataConfig,\r\n disablePagination,\r\n permissions,\r\n deal,\r\n dealLoaded,\r\n customStyleFunction,\r\n useCustomStyleFunction,\r\n resetFields,\r\n isAdGridEditorMode,\r\n allowCopilotVideoGeneration,\r\n biddingScheme = {},\r\n campaignId,\r\n hideFooter,\r\n isXandrServingCampaign,\r\n loadClipchampPlayer,\r\n } = props;\r\n\r\n const videoRequirementForDeal = _.get(deal, ['DealAdQualityConstraints', '0', 'VideoQuality']);\r\n\r\n const isForDeal = !_.isEmpty(deal);\r\n\r\n let dealVideoRequirementText;\r\n if (videoRequirementForDeal === PlacementQualities.ONLY_PERFECT) {\r\n dealVideoRequirementText = i18n.getString(_TL_('Your campaign\\'s media deal requires that your video is of excellent quality (three stars). For more information about the technical requirements, see '));\r\n } else if (videoRequirementForDeal === PlacementQualities.ONLY_EXCELLENT) {\r\n dealVideoRequirementText = i18n.getString(_TL_('For this deal your asset must meet the General Video requirements.'));\r\n }\r\n\r\n const isEditScenario = useMemo(() => isAdGridEditorMode && ads && ads[0] && ads[0].Id, [ads, isAdGridEditorMode]);\r\n\r\n useInitCopilotLoggers({ campaignId, feature: 'VideoAds', isEditScenario });\r\n\r\n const { logEnterFlow } = useCopilotLoggers();\r\n\r\n const defaultClasses = useDefaultStyles(getAdsStepStyles);\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const customClasses = useDefaultStyles(customStyleFunction);\r\n\r\n const classes = useCustomStyleFunction ? customClasses : defaultClasses;\r\n\r\n const [videoAds, setVideoAds] = useState(ads || []);\r\n\r\n const [useBrandKit, setUseBrandKit] = useState(true);\r\n\r\n const copilotFetchTaskManager = useMemo(() => new TaskManager(), []);\r\n\r\n const serverContext = useContext(ServerContext);\r\n const [isAdsCopilotRegionRestricted, setIsAdsCopilotRegionRestricted] = useState(true);\r\n useEffect(() => {\r\n isCopilotRegionRestricted({\r\n feature: 'Recommendations',\r\n permissions,\r\n serverContext,\r\n }).then(setIsAdsCopilotRegionRestricted);\r\n }, [permissions, serverContext]);\r\n\r\n const copilotEnabled = allowCopilotVideoGeneration &&\r\n permissions.dynamic.VideoCopilotGeneration &&\r\n !isAdsCopilotRegionRestricted &&\r\n (!videoRequirementForDeal || videoRequirementForDeal < PlacementQualities.ONLY_PERFECT);\r\n\r\n const {\r\n goToNextPage,\r\n goToPrevPage,\r\n goToPage,\r\n getPageAdjustedIndex,\r\n currentPage,\r\n currentPageIndex,\r\n pages,\r\n onAddItem,\r\n removeItem,\r\n totalPages,\r\n maxItems,\r\n } = usePageManager(ads);\r\n\r\n const onAddAd = () => {\r\n onAddItem();\r\n if (activity) {\r\n activity.signal(`Adding new ad panel - current total: ${currentPage.numberOfAdsInPage}`);\r\n }\r\n };\r\n\r\n const onVideoPanelUpdate = (result, idx, uid) => {\r\n let itemAtIdx = videoAds[idx] || { video: null, FinalUrls: [], uid: null };\r\n\r\n if (itemAtIdx.uid === null) {\r\n itemAtIdx = { ...result, uid, Id: itemAtIdx.Id };\r\n } else {\r\n itemAtIdx = { ...result, uid: itemAtIdx.uid, Id: itemAtIdx.Id };\r\n }\r\n\r\n const itemsBefore = videoAds.slice(0, idx);\r\n const itemsAfter = videoAds.slice(idx + 1, videoAds.length);\r\n setVideoAds([...itemsBefore, { ...itemAtIdx }, ...itemsAfter]);\r\n };\r\n\r\n const onRemovePanel = (idx) => {\r\n if (activity) {\r\n activity.signal(`Removing ad panel at idx ${idx}`);\r\n }\r\n videoAds.splice(idx, 1);\r\n\r\n setVideoAds([...videoAds]);\r\n\r\n removeItem();\r\n };\r\n\r\n const isAllValid = () => {\r\n let valid = true;\r\n // eslint-disable-next-line consistent-return\r\n _.each(videoAds, (ad) => {\r\n if (!ad.isValid) {\r\n valid = false;\r\n }\r\n });\r\n\r\n return valid;\r\n };\r\n\r\n const isAllDirty = () => {\r\n let dirty = false;\r\n // eslint-disable-next-line consistent-return\r\n _.each(videoAds, (ad) => {\r\n if (ad.isDirty) {\r\n dirty = true;\r\n }\r\n });\r\n\r\n return dirty;\r\n };\r\n\r\n useEffect(() => {\r\n if (activity) {\r\n activity.signal(`[VideoAdsCopilot] - useBrandKitToggle changed to ${useBrandKit}`);\r\n }\r\n }, [useBrandKit, activity]);\r\n\r\n useEffect(() => {\r\n const result = {\r\n data: [...videoAds], isValid: isAllValid(), isDirty: isAllDirty(), currentPageIndex,\r\n };\r\n onAdsValidation(result);\r\n if (activity) {\r\n activity.signal(`onVideoAdsContainerValidated - ${JSON.stringify(result)}`);\r\n }\r\n // disabling exhaustive deps since the onAdsValidation value changes on each rerender.\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [currentPageIndex, videoAds]);\r\n\r\n useEffect(() => {\r\n if (resetFields) {\r\n setVideoAds([]);\r\n }\r\n }, [resetFields]);\r\n\r\n useEffect(() => {\r\n setClarityTag('XandrVideoAds', 'true');\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!_.isEqual(ads, videoAds) && !isAdGridEditorMode) {\r\n // check if ads has any ad that has id. (update scenario)\r\n let shouldUpdate = false;\r\n\r\n _.each(ads, (ad) => {\r\n const videoAd = _.filter(videoAds, vAd => vAd.uid === ad.uid);\r\n\r\n if (videoAd && videoAd[0] && _.isUndefined(videoAd[0].Id) && ad.Id) {\r\n shouldUpdate = true;\r\n }\r\n\r\n // For reload scenario if we can't find any ad in local state, refresh state\r\n if (permissions.dynamic.MultiAdFormat && _.isEmpty(videoAd) && ad.Id) {\r\n shouldUpdate = true;\r\n }\r\n });\r\n\r\n if (shouldUpdate) {\r\n setVideoAds(ads);\r\n }\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [ads]);\r\n\r\n useEffect(() => {\r\n if (copilotEnabled) {\r\n logEnterFlow();\r\n }\r\n }, [copilotEnabled, logEnterFlow]);\r\n\r\n return (\r\n
\r\n {\r\n dealVideoRequirementText &&\r\n \r\n {dealVideoRequirementText}\r\n {(videoRequirementForDeal === PlacementQualities.ONLY_PERFECT) &&\r\n \r\n {i18n.getString(_TL_('About video ads'))}.\r\n }\r\n \r\n }\r\n {\r\n _.map(pages, (page) => {\r\n const panels = _.map(_.range(page.numberOfAdsInPage), (idx) => {\r\n const videoAd = (videoAds[getPageAdjustedIndex(idx, page.pageNumber)] && videoAds[getPageAdjustedIndex(idx, page.pageNumber)].data);\r\n\r\n const uid = (videoAds[getPageAdjustedIndex(idx, page.pageNumber)] && videoAds[getPageAdjustedIndex(idx, page.pageNumber)].uid) || Math.random();\r\n\r\n const isCurrentPage = page.id === currentPage.id;\r\n\r\n return (\r\n
\r\n onVideoPanelUpdate(result, getPageAdjustedIndex(idx, page.pageNumber), uid)}\r\n onRemovePanel={() => onRemovePanel(getPageAdjustedIndex(idx, page.pageNumber), page)}\r\n removeCloseButton={page.numberOfAdsInPage === 1}\r\n keyIndex={uid}\r\n videoRequirementForDeal={videoRequirementForDeal}\r\n isSelectedPanel={currentVideoIndex === idx}\r\n oDataConfig={oDataConfig}\r\n biddingScheme={biddingScheme}\r\n isXandrServingCampaign={isXandrServingCampaign}\r\n isForDeal={isForDeal}\r\n dealLoaded={dealLoaded}\r\n isAdGridEditorMode={isAdGridEditorMode}\r\n copilotEnabled={copilotEnabled}\r\n loadClipchampPlayer={loadClipchampPlayer}\r\n useBrandKit={useBrandKit}\r\n setUseBrandKit={setUseBrandKit}\r\n />\r\n
\r\n );\r\n });\r\n\r\n return panels;\r\n })\r\n }\r\n
\r\n {\r\n (!hideFooter && (currentPage.numberOfAdsInPage < maxItems && !disablePagination)) && (\r\n \r\n  {i18n.getString(_TL_('Create another ad'))}\r\n \r\n )\r\n }\r\n
\r\n {totalPages > 1 && !disablePagination && (\r\n
\r\n
\r\n \r\n Prev \r\n \r\n goToPage(val)}\r\n />\r\n of {totalPages} \r\n \r\n Next \r\n \r\n
\r\n
\r\n )}\r\n
\r\n );\r\n};\r\n\r\n\r\nVideoAdsContainer.propTypes = {\r\n aid: PropTypes.string.isRequired,\r\n cid: PropTypes.string.isRequired,\r\n biddingScheme: PropTypes.shape({}).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n perfMarker: PropTypes.shape({}).isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({\r\n VideoCopilotGeneration: PropTypes.bool,\r\n }),\r\n }).isRequired,\r\n onAdsValidation: PropTypes.func.isRequired,\r\n ads: PropTypes.shape({\r\n data: PropTypes.shape({}),\r\n }).isRequired,\r\n oDataConfig: PropTypes.shape({}),\r\n disablePagination: PropTypes.bool,\r\n customStyleFunction: PropTypes.func,\r\n useCustomStyleFunction: PropTypes.bool,\r\n resetFields: PropTypes.bool,\r\n currentVideoIndex: PropTypes.number,\r\n isAdGridEditorMode: PropTypes.bool,\r\n hideFooter: PropTypes.bool,\r\n deal: PropTypes.shape({}),\r\n dealLoaded: PropTypes.bool,\r\n allowCopilotVideoGeneration: PropTypes.bool,\r\n campaignId: PropTypes.number,\r\n isXandrServingCampaign: PropTypes.bool,\r\n};\r\n\r\nVideoAdsContainer.defaultProps = {\r\n oDataConfig: null,\r\n disablePagination: false,\r\n customStyleFunction: _.noop,\r\n useCustomStyleFunction: false,\r\n deal: null,\r\n dealLoaded: false,\r\n resetFields: false,\r\n hideFooter: false,\r\n currentVideoIndex: 0,\r\n isAdGridEditorMode: false,\r\n allowCopilotVideoGeneration: false,\r\n campaignId: -1,\r\n isXandrServingCampaign: false,\r\n};\r\n","/* istanbul ignore file */\r\n\r\nimport { get, uniq, isEmpty } from 'underscore';\r\nimport { edmCampaign } from '@bingads-webui/edm-campaign';\r\nimport { getTargetConstraints, getCountriesLocations } from '../common/deal-constraints';\r\n\r\nexport const fillLocationForDeal = async (deal, serverContext) => {\r\n if (!deal) {\r\n return Promise.resolve();\r\n }\r\n const locationIds = getTargetConstraints(deal, 'Location').mandatory;\r\n\r\n const cid = serverContext.CurrentCustomer.Id;\r\n const aid = serverContext.CurrentAccount.Id;\r\n const lcid = serverContext ? serverContext.CurrentUser.LocaleID : '1033';\r\n\r\n const responses = await getCountriesLocations(locationIds, lcid, cid, aid);\r\n const CountryName = uniq(responses.map(res => res.data.EnglishName)).join(',');\r\n return {\r\n ...deal,\r\n CountryName,\r\n };\r\n};\r\n\r\nexport const getDealDetails = async (cid, aid, campaignId, serverContext) => {\r\n try {\r\n const targets = await edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Campaigns.$withKey(campaignId)\r\n .CampaignCriterions.$cast('Model.CampaignCriterion')\r\n .get({\r\n filter: {\r\n where: \"isof(Criterion,'Model.DealCriterion')\",\r\n },\r\n })\r\n .toPromise();\r\n\r\n const dealId = get(targets, 'value[0].Criterion.DealId');\r\n\r\n if (!dealId) {\r\n return Promise.resolve();\r\n }\r\n\r\n try {\r\n const dealDetail = await edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Deals.$withKey(targets.value[0].Criterion.DealId)\r\n .get()\r\n .toPromise();\r\n\r\n if (serverContext) {\r\n const filledDeal = await fillLocationForDeal(dealDetail, serverContext);\r\n return filledDeal;\r\n }\r\n return dealDetail;\r\n } catch (error) {\r\n console.error(error);\r\n // If we get an error with errorCode InvalidId,\r\n // we will return the dealId and the error code as it is deleted by Xandr.\r\n const errorCodeTarget = GetDealErrorCode(error, 'InvalidId');\r\n if (errorCodeTarget) {\r\n return Promise.resolve({\r\n Id: dealId,\r\n Error: errorCodeTarget,\r\n });\r\n }\r\n return Promise.resolve();\r\n }\r\n } catch (error) {\r\n console.error(error);\r\n return Promise.resolve();\r\n }\r\n};\r\n\r\nconst GetDealErrorCode = (error, expectedError) => {\r\n if (error.status !== 400) {\r\n return null;\r\n }\r\n\r\n const responseErrArray = get(error, ['responseJSON', 'value']);\r\n if (isEmpty(responseErrArray)) {\r\n return null;\r\n }\r\n\r\n if (get(responseErrArray, [0, 'Code']) === expectedError) {\r\n return expectedError;\r\n }\r\n return null;\r\n};\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Button, makeStyles, mergeClasses, tokens } from '@fluentui/react-components';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\n\r\nconst useStyles = makeStyles({\r\n buttonStyle: {\r\n marginRight: tokens.spacingHorizontalS,\r\n marginTop: tokens.spacingVerticalL,\r\n },\r\n});\r\n\r\nexport const AdEditorFooter = ({\r\n cancel,\r\n save,\r\n saveAndCreateAnother,\r\n}) => {\r\n const classes = useStyles();\r\n const i18n = useContext(I18nContext);\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nAdEditorFooter.propTypes = {\r\n cancel: PropTypes.func.isRequired,\r\n save: PropTypes.func.isRequired,\r\n saveAndCreateAnother: PropTypes.func.isRequired,\r\n};\r\n","import React, { useEffect, useState, useContext } from 'react';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport { FluentProvider, webLightTheme, Divider } from '@fluentui/react-components';\r\nimport { ErrorMessages } from '@bingads-webui-react/validation';\r\nimport { withComponentErrorLogging } from '@bingads-webui-campaign-react/global-error-options';\r\nimport { withLoggingContext, useCopilotLoggers } from '@bingads-webui-campaign-react/copilot-loggers';\r\nimport { InstrumentationContext } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { getLogVersion } from '@bingads-webui-campaign-react/asset-library-model';\r\nimport {\r\n getLoggerWithoutPageInfo,\r\n createVideoRepository,\r\n createImageRepository,\r\n createFolderRepository,\r\n uploadVideoMetadata,\r\n} from '@bingads-webui-campaign-react/asset-library-services';\r\nimport { newVideoFromMTObject } from '@bingads-webui-campaign-react/image-experience-video-part';\r\nimport { UiBlocker } from '@bingads-webui-react/ui-blocker';\r\n\r\n\r\nimport { saveAds, getDealDetails } from '../model';\r\nimport { VideoAdsContainer } from './video-ads-container';\r\nimport { AdPreview } from './ad-preview';\r\nimport { AdEditorFooter } from './ad-editor-footer';\r\n\r\nconst getAdsStepStyles = (/* components, theme */) => ({\r\n videoPanelRoot: {\r\n marginTop: 20,\r\n width: 500,\r\n minHeight: 181,\r\n padding: 20,\r\n paddingBottom: 20,\r\n background: '#FFFFFF',\r\n boxShadow: '0px 2px 4px rgba(0, 0, 0, 0.1)',\r\n borderRadius: 6,\r\n '& .image-list-item-status-indicator': {\r\n background: 'linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, #000000 100%)',\r\n borderRadius: 6,\r\n width: '170px !important',\r\n height: '96px !important',\r\n paddingTop: '10px !important',\r\n '&:hover': {\r\n '& .edit-button': {\r\n display: 'none',\r\n },\r\n },\r\n '& .placeholder-content': {\r\n color: 'white !important',\r\n },\r\n },\r\n '& .error': {\r\n marginTop: 20,\r\n },\r\n '& .image-experience-content': {\r\n width: 170,\r\n '& .col-sm-3': {\r\n background: 'linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, #000000 100%)',\r\n borderRadius: 6,\r\n width: '170px !important',\r\n height: '96px !important',\r\n paddingTop: '10px !important',\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n '&:hover': {\r\n '& .edit-button': {\r\n display: 'none',\r\n },\r\n },\r\n '& .placeholder-content': {\r\n color: 'white !important',\r\n },\r\n '& .ms-Button': {\r\n width: 56,\r\n height: 24,\r\n marginTop: 10,\r\n },\r\n '& .image-list-content': {\r\n width: '170px !important', // fixed for 16:9 aspect ratio\r\n border: 'none !important',\r\n padding: '0px !important',\r\n },\r\n },\r\n },\r\n '& .image-section-label': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n '& .image-list-label': {\r\n fontWeight: 600,\r\n },\r\n '& .image-list-content': {\r\n width: '170px !important', // fixed for 16:9 aspect ratio\r\n border: 'none !important',\r\n padding: '0px !important',\r\n },\r\n '& .image-list-item-video': {\r\n position: 'relative',\r\n width: '170px !important', // fixed for 16:9 aspect ratio\r\n '&:hover': {\r\n '& .edit-button': {\r\n display: 'flex',\r\n },\r\n },\r\n '& .placeholder-content': {\r\n color: 'black !important',\r\n },\r\n\r\n },\r\n '& .image-item-ratio-label': {\r\n paddingTop: 10,\r\n },\r\n '& .thumbnail-preview': {\r\n borderRadius: 6,\r\n filter: 'drop-shadow(0px 0.6px 1.8px rgba(0, 0, 0, 0.1)) drop-shadow(0px 3.2px 7.2px rgba(0, 0, 0, 0.13))',\r\n width: '170px !important',\r\n height: '96px !important',\r\n },\r\n },\r\n selectedPanel: {\r\n border: '1px solid #0078D4',\r\n },\r\n videoPanelHeader: {\r\n display: 'flex',\r\n width: '100%',\r\n justifyContent: 'flex-end',\r\n },\r\n adPreviewTitle: {\r\n fontSize: 18,\r\n fontWeight: 600,\r\n },\r\n previewContainer: {\r\n height: 280,\r\n width: 498,\r\n },\r\n adPreviewHeader: {\r\n height: 40,\r\n },\r\n adPreviewRoot: {\r\n width: 540,\r\n padding: 20,\r\n paddingBottom: 20,\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n },\r\n video: {\r\n borderRadius: '6px',\r\n filter: 'drop-shadow(0px 0.6px 1.8px rgba(0, 0, 0, 0.1)) drop-shadow(0px 3.2px 7.2px rgba(0, 0, 0, 0.13))',\r\n },\r\n previewTag: {\r\n marginTop: 10,\r\n },\r\n pagination: {\r\n paddingTop: 10,\r\n width: '100%',\r\n },\r\n pageControls: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n columnGap: '10px',\r\n },\r\n paginationIndicatorDot: {\r\n height: 8,\r\n width: 8,\r\n borderRadius: '50%',\r\n display: 'inline-block',\r\n cursor: 'pointer',\r\n },\r\n paginationButton: {\r\n height: 8,\r\n width: 8,\r\n opacity: 0,\r\n },\r\n paginationIndicator: {\r\n display: 'flex',\r\n columnGap: '2px',\r\n },\r\n videoPanelContent: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n },\r\n placementInfoTile: {\r\n paddingTop: 20,\r\n marginLeft: 10,\r\n },\r\n});\r\n\r\nconst containerStyle = {\r\n display: 'flex',\r\n '& .image-list-content': {\r\n border: 'none !important',\r\n padding: '0px !important',\r\n },\r\n};\r\n\r\nconst AdEditor = ({\r\n aid,\r\n cid,\r\n i18n,\r\n perfMarker,\r\n permissions,\r\n adsModel,\r\n campaignId,\r\n adGroupId,\r\n onAdsValidation,\r\n oDataConfig,\r\n resetFields,\r\n biddingScheme,\r\n isXandrServingCampaign,\r\n onCancel,\r\n onSave,\r\n onSaveAndCreateAnother,\r\n isMultiAdFormatAd,\r\n}) => {\r\n const [deal, setDeal] = useState(null);\r\n const [dealLoaded, setDealLoaded] = useState(false);\r\n const [serverErrors, setServerErrors] = useState(null);\r\n const [blocking, setBlocking] = useState(false);\r\n const instrumentation = useContext(InstrumentationContext);\r\n const { logSuggestionsApplied } = useCopilotLoggers();\r\n\r\n useEffect(() => {\r\n const fetchDeal = async () => {\r\n const dealDetail = await getDealDetails(cid, aid, campaignId);\r\n setDeal(dealDetail);\r\n setDealLoaded(true);\r\n };\r\n\r\n fetchDeal();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n const scenario = instrumentation.createScenario('XandrVideoAdsAdEditing');\r\n const activity = scenario.createActivity('Ad');\r\n const versionForLog = getLogVersion(permissions);\r\n const logger = getLoggerWithoutPageInfo(activity, versionForLog, 'XandrVideoAdsAdEditing');\r\n\r\n const videoRepository = createVideoRepository({\r\n oDataConfig,\r\n aid,\r\n cid,\r\n });\r\n const folderRepository = createFolderRepository({\r\n i18n,\r\n logger,\r\n oDataConfig,\r\n aid,\r\n cid,\r\n });\r\n const imageRepository = createImageRepository({\r\n oDataConfig,\r\n aid,\r\n cid,\r\n logger,\r\n i18n,\r\n activity,\r\n });\r\n\r\n const saveAd = () => saveAds({\r\n ads: isMultiAdFormatAd ? { ...adsModel, adSubType: 'Video' } : adsModel,\r\n campaign: { Id: campaignId },\r\n adGroup: { Id: adGroupId },\r\n activity,\r\n }, { scenario, i18n }).then((adData) => {\r\n const suggestionIds = _.chain(adsModel.data)\r\n .map(ad => ad.data.video.recommendationId).compact().value();\r\n\r\n logSuggestionsApplied(\r\n campaignId,\r\n adGroupId,\r\n undefined /* textSuggestions */,\r\n undefined /* imageSuggestionIds */,\r\n suggestionIds\r\n );\r\n return adData;\r\n }).finally(() => setBlocking(false));\r\n\r\n const saveVideoAd = () => {\r\n setBlocking(true);\r\n\r\n if (adsModel.data[0].data.video.id) {\r\n return saveAd();\r\n }\r\n\r\n const videoMetaData = _.omit(adsModel.data[0].data.video, 'savedMaterial');\r\n const { savedImages, savedLogo } = adsModel.data[0].data.video.savedMaterial || {};\r\n\r\n return uploadVideoMetadata({\r\n videoMetadata: videoMetaData,\r\n newVideoFromMTObject,\r\n savedImages,\r\n savedLogo,\r\n folderRepository,\r\n imageRepository,\r\n videoRepository,\r\n }).then((uploadedVideo) => {\r\n // eslint-disable-next-line no-param-reassign\r\n adsModel.data[0].data.video = uploadedVideo;\r\n return saveAd();\r\n });\r\n };\r\n\r\n const save = (saveAnother) => {\r\n setServerErrors(null);\r\n\r\n if (!adsModel.isValid) {\r\n return Promise.resolve(false);\r\n }\r\n\r\n return saveVideoAd().then((result) => {\r\n if (result && result.ads && result.ads.data) {\r\n if (saveAnother) {\r\n onSaveAndCreateAnother(result);\r\n } else {\r\n onSave(result);\r\n }\r\n }\r\n }).catch((result) => {\r\n setServerErrors(result.serverErrors);\r\n });\r\n };\r\n\r\n const cancel = () => {\r\n onCancel();\r\n };\r\n\r\n return (\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n error.message) : []} />\r\n
\r\n _.noop}\r\n ads={adsModel}\r\n disablePagination\r\n customStyleFunction={getAdsStepStyles}\r\n useCustomStyleFunction\r\n />\r\n
\r\n \r\n save(false)}\r\n saveAndCreateAnother={() => save(true)}\r\n />\r\n
\r\n \r\n
);\r\n};\r\nAdEditor.propTypes = {\r\n containerStyle: PropTypes.shape({}).isRequired,\r\n permissions: PropTypes.shape({}).isRequired,\r\n aid: PropTypes.string.isRequired,\r\n cid: PropTypes.string.isRequired,\r\n campaignId: PropTypes.string.isRequired,\r\n adGroupId: PropTypes.string.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n perfMarker: PropTypes.shape({}).isRequired,\r\n adsModel: PropTypes.shape({\r\n data: PropTypes.shape({}),\r\n isValid: PropTypes.bool.isRequired,\r\n }).isRequired,\r\n onAdsValidation: PropTypes.func.isRequired,\r\n oDataConfig: PropTypes.shape({}).isRequired,\r\n resetFields: PropTypes.bool.isRequired,\r\n serverErrors: PropTypes.shape({}),\r\n biddingScheme: PropTypes.shape({}),\r\n isXandrServingCampaign: PropTypes.bool,\r\n isMultiAdFormatAd: PropTypes.bool,\r\n onCancel: PropTypes.func.isRequired,\r\n onSave: PropTypes.func.isRequired,\r\n onSaveAndCreateAnother: PropTypes.func.isRequired,\r\n};\r\n\r\nAdEditor.defaultProps = {\r\n serverErrors: null,\r\n biddingScheme: {},\r\n isXandrServingCampaign: false,\r\n isMultiAdFormatAd: false,\r\n};\r\n\r\n\r\nconst AdEditorWithErrorLogging = withLoggingContext(withComponentErrorLogging(\r\n AdEditor,\r\n 'XandrVideoAdsAdEditing'\r\n));\r\n\r\nexport { AdEditorWithErrorLogging as AdEditor };\r\n\r\n","import { useCallback, useEffect, useMemo, useContext, useState } from 'react';\r\nimport _ from 'underscore';\r\nimport { useSelector } from '@xstate/react';\r\nimport { isCanceling, stateLoggingListener, StepEvents, isSaving } from '@bingads-webui-campaign-react/step-wizard-machine';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { buildLegacyI18n } from '@bingads-webui/build-legacy-i18n';\r\nimport { ValidationStringMap } from '@bingads-webui/validation-string-map';\r\nimport { useExitWithoutSavingConfirmation } from '@bingads-webui-campaign-react/step-wizard';\r\nimport { useImpulse, usePrevProp } from '@bingads-webui-campaign-react/step-wizard-controls';\r\nimport { serverErrorsCompare } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\n\r\nimport { needsSaving } from './step-wizard-config';\r\n\r\nconst doesNeedSavingSelector = state => !isCanceling(state) && needsSaving(state.context) && !isSaving(state);\r\nconst hideStepHeaderSelector = state => state.context.stepInfo.hideStepHeader;\r\nconst adsSelector = state => state.context.data.ads;\r\nconst adsErrorsSelector = state => state.context.data.adsErrors;\r\nconst serverErrorsSelector = state => state.context.data.serverErrors;\r\nconst otherErrorsSelector = state => state.context.data.otherErrors;\r\nconst systemErrorsSelector = state => state.context.data.systemErrors;\r\nconst invalidSaveAttemptSelector = state => state.context.invalidSaveAttempt;\r\nconst dealSelector = state => state.context.data.deal;\r\nconst biddngSchemeSelector = state => state.context.data.biddingScheme;\r\n\r\nexport const useStepAdsSettingsState = (stepService, activity) => {\r\n const i18n = useContext(I18nContext);\r\n const legacyI18n = useMemo(() => buildLegacyI18n(i18n, [ValidationStringMap]), [i18n]);\r\n\r\n useEffect(() => {\r\n const subscription = stepService.subscribe(stateLoggingListener);\r\n return subscription.unsubscribe;\r\n }, [stepService]);\r\n\r\n const hideStepHeader = useSelector(stepService, hideStepHeaderSelector);\r\n\r\n const ads = useSelector(stepService, adsSelector);\r\n\r\n const doesNeedSaving = useSelector(stepService, doesNeedSavingSelector);\r\n const adsErrors = useSelector(stepService, adsErrorsSelector);\r\n const otherErrors = useSelector(stepService, otherErrorsSelector);\r\n const systemErrors = useSelector(stepService, systemErrorsSelector);\r\n const serverErrors = useSelector(stepService, serverErrorsSelector);\r\n const invalidSaveAttempt = useSelector(stepService, invalidSaveAttemptSelector);\r\n const deal = useSelector(stepService, dealSelector);\r\n const biddingScheme = useSelector(stepService, biddngSchemeSelector);\r\n\r\n const [navigationConfirmationPrompt] = useExitWithoutSavingConfirmation(doesNeedSaving, stepService, i18n);\r\n\r\n const removeEmptyAds = newAdsData => newAdsData.filter(ad => !_.isEmpty(ad.data));\r\n\r\n const onAdsValidation = useCallback((results) => {\r\n const { data: newAdsData, ...restResults } = results;\r\n\r\n const newAds = removeEmptyAds(newAdsData);\r\n\r\n const dataPatch = {\r\n ads: {\r\n ...ads,\r\n data: [\r\n ...newAds,\r\n ],\r\n ...restResults,\r\n },\r\n activity,\r\n };\r\n stepService.send({ type: StepEvents.UPDATE_VALIDATION, data: dataPatch });\r\n }, [stepService, ads, activity]);\r\n\r\n // eslint-disable-next-line no-bitwise\r\n const [, hasInvalidSaveAttemptChanged] = usePrevProp(invalidSaveAttempt | 0);\r\n const [, hasServerErrorsChanged] = usePrevProp(serverErrors, serverErrorsCompare);\r\n const areBeaconsActive = useImpulse(hasInvalidSaveAttemptChanged || hasServerErrorsChanged);\r\n\r\n const [showAllValidationErrors, setShowAllValidationErrors] = useState(false);\r\n if (hasInvalidSaveAttemptChanged) {\r\n setShowAllValidationErrors(true);\r\n }\r\n\r\n const state = {\r\n ads,\r\n i18n,\r\n legacyI18n,\r\n hideStepHeader,\r\n adsErrors,\r\n otherErrors,\r\n systemErrors,\r\n navigationConfirmationPrompt,\r\n showAllValidationErrors,\r\n areBeaconsActive,\r\n serverErrors,\r\n deal,\r\n biddingScheme,\r\n };\r\n const api = { onAdsValidation };\r\n\r\n return [state, api];\r\n};\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\n/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React, { useCallback, useState, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { get } from 'underscore';\r\nimport { useSelector } from '@xstate/react';\r\nimport { FormErrorGroup, UnmappedFormErrors } from '@bingads-webui-campaign-react/form-error';\r\nimport { AttentionBeaconGroup } from '@bingads-webui-campaign-react/attention-beacon';\r\nimport { ActuationGroup } from '@bingads-webui-campaign-react/actuator';\r\nimport { withPerformanceMarker } from '@bingads-webui-campaign-react/performance-marker-provider';\r\nimport { AdPreview, VideoAdsContainer } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport { ErrorMessages } from '@bingads-webui-react/validation';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { useStepAdsSettingsState } from './use-step-ads-state';\r\n\r\nconst permissionsSelector = state => get(state, 'context.stepsData.permissions');\r\n\r\nconst StepAdsSettingsInternal = (props) => {\r\n const {\r\n stepService,\r\n perfMarker,\r\n scope,\r\n } = props;\r\n\r\n const { aid, cid } = scope.values;\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const [stepState, stepApi] = useStepAdsSettingsState(stepService, activity);\r\n const permissions = useSelector(stepService, permissionsSelector);\r\n const isCTVCopilotVideoGenerationEnabled = permissions && permissions.dynamic && permissions.dynamic.CTVCopilotVideoGeneration;\r\n\r\n const [currentVideoIndex, setCurrentVideoIndex] = useState(0);\r\n\r\n const { onAdsValidation } = stepApi;\r\n\r\n const {\r\n i18n,\r\n legacyI18n,\r\n hideStepHeader,\r\n ads,\r\n adsErrors, otherErrors,\r\n navigationConfirmationPrompt,\r\n systemErrors,\r\n areBeaconsActive,\r\n serverErrors,\r\n deal,\r\n biddingScheme,\r\n showAllValidationErrors,\r\n } = stepState;\r\n\r\n const getBasicSettingsSection = useCallback(() => (\r\n
\r\n {i18n.getString(_TL_('Now that you\\'ve created your ad group, you can create your ads. Add your videos and the Final URL, and we\\'ll show a preview of what your ads might look like.'))}\r\n\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
), [i18n, stepService, legacyI18n, perfMarker, cid, aid, ads, currentVideoIndex]);\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n {!hideStepHeader &&\r\n <>\r\n

{i18n.getString(_TL_('Ads'))}

\r\n {i18n.getString(_TL_(''))}\r\n \r\n }\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n {getBasicSettingsSection()}\r\n {navigationConfirmationPrompt}\r\n
\r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nStepAdsSettingsInternal.propTypes = {\r\n stepService: PropTypes.shape({}).isRequired,\r\n perfMarker: PropTypes.shape({}).isRequired,\r\n scope: PropTypes.shape({\r\n values: PropTypes.shape({\r\n aid: PropTypes.string,\r\n cid: PropTypes.string,\r\n }),\r\n }).isRequired,\r\n};\r\n\r\nexport const StepAdsSettings = withPerformanceMarker(StepAdsSettingsInternal);\r\n","import { isEmpty, result } from 'underscore';\r\nimport { assign } from 'xstate';\r\nimport Promise from 'bluebird';\r\nimport { withScope } from '@bingads-webui-react/scope-service';\r\nimport { stepStateMachine } from '@bingads-webui-campaign-react/step-wizard-machine';\r\nimport { saveAds, modelToViewModelForAd, getErrorsPlaceholders } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\n\r\nimport { STEP_PATHS, viewModelToModelForCampaign } from '@bingads-webui-campaign-react/xandr-campaign';\r\n\r\nimport { StepAdsSettings } from './step-ads-settings';\r\n\r\n\r\nconst needsLoading = () => true;\r\nconst hasCampaignData = context =>\r\n Boolean(result(context, ['stepsData', 'campaign', 'Id']));\r\n\r\n/**\r\n * Loads step data asynchronously. The returned promise must resolve\r\n * into a single object, opaque to the step, which will be saved\r\n * in the context under the `data` property.\r\n *\r\n * The function is called when the wizard enters the step.\r\n * The step will be blocked until the promise resolves.\r\n * @param {Object} context - the current context\r\n * @returns {Promise} a promise that must resolve\r\n * into a single object, opaque to the step, which will be saved\r\n * in the context under the `data` property.\r\n */\r\nconst loadData = (context) => {\r\n const loadPromises = {\r\n ads: Promise.resolve(context.data.ads),\r\n };\r\n\r\n return Promise.props(loadPromises).then(({\r\n ads,\r\n }) => {\r\n const { deal } = context.stepsData.adGroup;\r\n const biddingScheme = context.stepsData.campaign.BiddingScheme;\r\n const adsModel = modelToViewModelForAd({ adsModel: ads });\r\n\r\n const results = {\r\n ads: adsModel, oldAdsModel: adsModel, deal, biddingScheme, ...getErrorsPlaceholders(),\r\n };\r\n\r\n return results;\r\n });\r\n};\r\n\r\n// must return `Promise.resolve(data)` or `Promise.reject(error)`\r\n// the payload will be available in `onDone` and `onError` in event's `data` prop.\r\nconst saveData = context =>\r\n saveAds({\r\n ads: context.data.ads,\r\n oldAdsModel: context.data.oldAdsModel,\r\n campaign: context.stepsData.campaign,\r\n adGroup: context.stepsData.adGroup,\r\n activity: context.data.activity,\r\n }, {\r\n scenario: context.stepsData.scenarioName,\r\n activityLogger: context.stepsData.scenario.createActivity('saveAds'),\r\n i18n: context.stepsData.i18n,\r\n });\r\n\r\nconst isValid = context => context.data.ads.isValid;\r\nconst isDirty = context => context.data.ads.isDirty;\r\nconst hasServerErrors = context => !isEmpty(context.data.serverErrors) || !isEmpty(context.data.systemErrors);\r\nexport const needsSaving = context => isDirty(context) || hasServerErrors(context);\r\n\r\nconst patchStepsData = assign({\r\n stepsData: (context/* , event */) => ({\r\n ...context.stepsData,\r\n ads: context.data.ads,\r\n ...hasCampaignData(context) ? {} :\r\n { campaign: viewModelToModelForCampaign(context.data.campaign) },\r\n }),\r\n});\r\nconst clearErrors = assign({\r\n data: context => ({\r\n ...context.data,\r\n ...getErrorsPlaceholders(),\r\n }),\r\n});\r\n\r\nexport const stepAdsWizardConfig = {\r\n id: STEP_PATHS.ADS,\r\n title: _TL_('Ads'),\r\n StepMachine: stepStateMachine,\r\n StepMachineOptions: (stepInfo, initialStepsData) => ({\r\n machineId: STEP_PATHS.ADS,\r\n initialContext: {\r\n id: stepInfo.id,\r\n stepInfo,\r\n stepsData: initialStepsData,\r\n data: {\r\n ads: [],\r\n ...getErrorsPlaceholders(),\r\n },\r\n },\r\n actions: {\r\n patchStepsData,\r\n clearErrors,\r\n },\r\n guards: {\r\n needsLoading,\r\n needsSaving,\r\n isValid,\r\n isDirty,\r\n },\r\n }),\r\n StepComponent: withScope(StepAdsSettings),\r\n canNavigateBackWithoutSaving: true,\r\n stepRepositoryConfig: {\r\n saveData,\r\n loadData,\r\n },\r\n};\r\n","import {\r\n stepAdGroupWizardConfig,\r\n stepCampaignSettingsWizardConfig,\r\n STEP_PATHS,\r\n} from '@bingads-webui-campaign-react/xandr-campaign';\r\n\r\nimport { stepAdsWizardConfig } from './steps';\r\n\r\nconst ScenarioName = {\r\n XandrVideoCampaignCreation: 'XandrVideoCampaignCreation',\r\n XandrVideoAdGroupCreation: 'XandrVideoAdGroupCreation',\r\n XandrVideoCampaignSettings: 'XandrVideoCampaignSettings',\r\n XandrVideoAdGroupSettings: 'XandrVideoAdGroupSettings',\r\n XandrVideoAdsCreation: 'XandrVideoAdsCreation',\r\n};\r\n\r\nconst STEP_INFOS = {\r\n [STEP_PATHS.CAMPAIGN_SETTINGS]: stepCampaignSettingsWizardConfig,\r\n [STEP_PATHS.AD_GROUP]: stepAdGroupWizardConfig,\r\n [STEP_PATHS.ADS]: stepAdsWizardConfig,\r\n};\r\n\r\nconst applyCommonSettingsPageSettings = stepInfo => ({\r\n ...stepInfo,\r\n hideStepHeader: true,\r\n});\r\n\r\n// Scenarios\r\n// I. Creation\r\n// 1. Campaign creation\r\n// 2. Ad group\r\n// ...\r\n// II. Settings\r\n// 1. Campaign settings\r\n// 2. Ad group settings\r\n\r\nconst XANDR_VIDEO_CAMPAIGN_CREATION = {\r\n scenarioName: ScenarioName.XandrVideoCampaignCreation,\r\n isEditing: false,\r\n stepList: [\r\n STEP_INFOS[STEP_PATHS.CAMPAIGN_SETTINGS],\r\n STEP_INFOS[STEP_PATHS.AD_GROUP],\r\n STEP_INFOS[STEP_PATHS.ADS],\r\n ],\r\n};\r\n\r\nconst XANDR_VIDEO_AD_GROUP_CREATION = {\r\n scenarioName: ScenarioName.XandrVideoAdGroupCreation,\r\n isEditing: false,\r\n withContentFooter: false,\r\n stepList: [\r\n STEP_INFOS[STEP_PATHS.AD_GROUP],\r\n STEP_INFOS[STEP_PATHS.ADS],\r\n ],\r\n};\r\n\r\nconst XANDR_VIDEO_CAMPAIGN_SETTINGS = {\r\n scenarioName: ScenarioName.XandrVideoCampaignSettings,\r\n isEditing: true,\r\n stepList: [\r\n applyCommonSettingsPageSettings(STEP_INFOS[STEP_PATHS.CAMPAIGN_SETTINGS]),\r\n ],\r\n};\r\n\r\nconst XANDR_VIDEO_AD_GROUP_SETTINGS = {\r\n scenarioName: ScenarioName.XandrVideoAdGroupSettings,\r\n isEditing: true,\r\n stepList: [\r\n applyCommonSettingsPageSettings(STEP_INFOS[STEP_PATHS.AD_GROUP]),\r\n ],\r\n};\r\n\r\nexport const XANDR_VIDEO_CAMPAIGN_CRUD_SCENARIOS = {\r\n XANDR_VIDEO_CAMPAIGN_CREATION,\r\n XANDR_VIDEO_AD_GROUP_CREATION,\r\n XANDR_VIDEO_CAMPAIGN_SETTINGS,\r\n XANDR_VIDEO_AD_GROUP_SETTINGS,\r\n};\r\n","import React, { useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withTheme } from 'react-jss';\r\nimport { PerformanceMarkerProvider } from '@bingads-webui-campaign-react/performance-marker-provider';\r\nimport { withComponentErrorLogging } from '@bingads-webui-campaign-react/global-error-options';\r\nimport { withSiteMap, getRoutePathById } from '@bingads-webui-campaign-react/with-site-map';\r\nimport { StepWizard } from '@bingads-webui-campaign-react/step-wizard';\r\nimport config from '@bingads-webui-component-legacy/config/index';\r\nimport { getVideoDeal, isDealCampaign } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport localStorage from '@bingads-webui-component-legacy/storage/localStorage';\r\nimport { MmpFetchProvider } from '@bingads-webui-campaign-react/xandr-campaign';\r\nimport { XANDR_VIDEO_CAMPAIGN_CRUD_SCENARIOS } from '../xandr-video-campaign-crud-scenarios';\r\n\r\nconst getXandrVideoCampaignType = () => {\r\n let xandrVideoCampaignType = config.get('XandrVideoCampaignType');\r\n if (!xandrVideoCampaignType) {\r\n if (localStorage.supportsStorage()) {\r\n xandrVideoCampaignType = localStorage.get('XandrVideoCampaignType');\r\n config.set('XandrVideoCampaignType', xandrVideoCampaignType);\r\n }\r\n }\r\n\r\n return xandrVideoCampaignType;\r\n};\r\n\r\nconst XandrVideoCampaignCreationPageImpl = ((props) => {\r\n const routeToNavigateToWhenDone = getRoutePathById(props.siteMap, 'campaigns');\r\n const xandrVideoCampaignType = getXandrVideoCampaignType();\r\n const xandrVideoDeal = getVideoDeal();\r\n useEffect(() => {\r\n if (isDealCampaign()) {\r\n // return to objective page if user navigates to this page directly\r\n if (!xandrVideoDeal) {\r\n props.scope.save('/campaign/vnext/createcampaign/objective');\r\n }\r\n } else {\r\n // eslint-disable-next-line no-lonely-if\r\n if (!xandrVideoCampaignType) {\r\n props.scope.save('/campaign/vnext/createcampaign/objective');\r\n }\r\n }\r\n\r\n return () => {\r\n if (localStorage.supportsStorage()) {\r\n localStorage.invalidate('XandrVideoCampaignType');\r\n }\r\n };\r\n }, [props.scope, xandrVideoCampaignType, xandrVideoDeal]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n});\r\n\r\nXandrVideoCampaignCreationPageImpl.propTypes = {\r\n siteMap: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n permissions: PropTypes.shape({}).isRequired,\r\n theme: PropTypes.shape({}).isRequired,\r\n scope: PropTypes.shape({\r\n save: PropTypes.func.isRequired,\r\n }).isRequired,\r\n instrumentation: PropTypes.shape({}).isRequired,\r\n i18n: PropTypes.shape({}).isRequired,\r\n};\r\n\r\nexport const XandrVideoCampaignCreationPage = withSiteMap(withTheme(withComponentErrorLogging(\r\n XandrVideoCampaignCreationPageImpl,\r\n XANDR_VIDEO_CAMPAIGN_CRUD_SCENARIOS.XANDR_VIDEO_CAMPAIGN_CREATION.scenarioName\r\n)));\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withTheme } from 'react-jss';\r\nimport { PerformanceMarkerProvider } from '@bingads-webui-campaign-react/performance-marker-provider';\r\nimport { withComponentErrorLogging } from '@bingads-webui-campaign-react/global-error-options';\r\nimport { withSiteMap, getRoutePathById } from '@bingads-webui-campaign-react/with-site-map';\r\nimport { StepWizard } from '@bingads-webui-campaign-react/step-wizard';\r\nimport { MmpFetchProvider } from '@bingads-webui-campaign-react/xandr-campaign';\r\n\r\nimport { XANDR_VIDEO_CAMPAIGN_CRUD_SCENARIOS } from '../xandr-video-campaign-crud-scenarios';\r\n\r\nconst XandrVideoCampaignSettingsPageImpl = ((props) => {\r\n const routeToNavigateToWhenDone = getRoutePathById(props.siteMap, 'adgroups');\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n});\r\n\r\nXandrVideoCampaignSettingsPageImpl.propTypes = {\r\n siteMap: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n permissions: PropTypes.shape({}).isRequired,\r\n theme: PropTypes.shape({}).isRequired,\r\n scope: PropTypes.shape({\r\n save: PropTypes.func.isRequired,\r\n }).isRequired,\r\n instrumentation: PropTypes.shape({}).isRequired,\r\n i18n: PropTypes.shape({}).isRequired,\r\n currentAdGroup: PropTypes.shape({}),\r\n currentCampaign: PropTypes.shape({}),\r\n};\r\n\r\nXandrVideoCampaignSettingsPageImpl.defaultProps = {\r\n currentAdGroup: null,\r\n currentCampaign: null,\r\n};\r\n\r\nexport const XandrVideoCampaignSettingsPage = withSiteMap(withTheme(withComponentErrorLogging(\r\n XandrVideoCampaignSettingsPageImpl,\r\n XANDR_VIDEO_CAMPAIGN_CRUD_SCENARIOS.XANDR_VIDEO_CAMPAIGN_SETTINGS.scenarioName\r\n)));\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withTheme } from 'react-jss';\r\nimport { withComponentErrorLogging } from '@bingads-webui-campaign-react/global-error-options';\r\nimport { PerformanceMarkerProvider } from '@bingads-webui-campaign-react/performance-marker-provider';\r\nimport { withSiteMap, getRoutePathById } from '@bingads-webui-campaign-react/with-site-map';\r\nimport { StepWizard } from '@bingads-webui-campaign-react/step-wizard';\r\nimport { MmpFetchProvider } from '@bingads-webui-campaign-react/xandr-campaign';\r\nimport { XANDR_VIDEO_CAMPAIGN_CRUD_SCENARIOS } from '../xandr-video-campaign-crud-scenarios';\r\n\r\nconst XandrVideoAdGroupSettingsPageImpl = ((props) => {\r\n const routeToNavigateToWhenDone = getRoutePathById(props.siteMap, 'ads');\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n});\r\n\r\nXandrVideoAdGroupSettingsPageImpl.propTypes = {\r\n siteMap: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n permissions: PropTypes.shape({}).isRequired,\r\n theme: PropTypes.shape({}).isRequired,\r\n scope: PropTypes.shape({\r\n save: PropTypes.func.isRequired,\r\n }).isRequired,\r\n instrumentation: PropTypes.shape({}).isRequired,\r\n i18n: PropTypes.shape({}).isRequired,\r\n};\r\n\r\nexport const XandrVideoAdGroupSettingsPage = withSiteMap(withTheme(withComponentErrorLogging(\r\n XandrVideoAdGroupSettingsPageImpl,\r\n XANDR_VIDEO_CAMPAIGN_CRUD_SCENARIOS.XANDR_VIDEO_AD_GROUP_SETTINGS.scenarioName\r\n)));\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withTheme } from 'react-jss';\r\nimport { PerformanceMarkerProvider } from '@bingads-webui-campaign-react/performance-marker-provider';\r\nimport { withComponentErrorLogging } from '@bingads-webui-campaign-react/global-error-options';\r\nimport { withSiteMap, getRoutePathById } from '@bingads-webui-campaign-react/with-site-map';\r\nimport { StepWizard } from '@bingads-webui-campaign-react/step-wizard';\r\nimport { withInstrumentation } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { MmpFetchProvider } from '@bingads-webui-campaign-react/xandr-campaign';\r\nimport { XANDR_VIDEO_CAMPAIGN_CRUD_SCENARIOS } from '../xandr-video-campaign-crud-scenarios';\r\n\r\nconst getStyles = () => ({\r\n '@global': {\r\n '.app-shell .app-content-body': {\r\n // need to override the style since ad-group creation page shell inserts footer.\r\n overflow: 'hidden',\r\n flexShrink: '1!important',\r\n },\r\n },\r\n});\r\n\r\nconst XandrVideoAdGroupCreationPageImpl = ((props) => {\r\n const routeToNavigateToWhenDone = getRoutePathById(props.siteMap, 'adgroups');\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n});\r\n\r\nXandrVideoAdGroupCreationPageImpl.propTypes = {\r\n siteMap: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n permissions: PropTypes.shape({}).isRequired,\r\n theme: PropTypes.shape({}).isRequired,\r\n scope: PropTypes.shape({\r\n save: PropTypes.func.isRequired,\r\n }).isRequired,\r\n instrumentation: PropTypes.shape({}).isRequired,\r\n i18n: PropTypes.shape({}).isRequired,\r\n};\r\n\r\nexport const XandrVideoAdGroupCreationPage = withSiteMap(withTheme(withInstrumentation(withComponentErrorLogging(\r\n withDefaultStyles(XandrVideoAdGroupCreationPageImpl, getStyles),\r\n XANDR_VIDEO_CAMPAIGN_CRUD_SCENARIOS.XANDR_VIDEO_AD_GROUP_CREATION.scenarioName\r\n))));\r\n","export const getAdCreatorSchema = (scenarioName = 'adCreatorScenario', scenarioValue = 'Ad Creator Scenario') => ({\r\n scenario: [{\r\n name: scenarioName,\r\n value: scenarioValue,\r\n activity: [{\r\n name: 'fileUpload',\r\n value: 'FileUpload',\r\n }, {\r\n name: 'websiteSuggestion',\r\n value: 'WebsiteSuggestion',\r\n }, {\r\n name: 'websiteSuggestionCarousel',\r\n value: 'WebsiteSuggestionCarousel',\r\n }, {\r\n name: 'smartEffect',\r\n value: 'SmartEffect',\r\n }, {\r\n name: 'editImage',\r\n value: 'EditImage',\r\n }, {\r\n name: 'editPlacement',\r\n value: 'EditPlacement',\r\n }, {\r\n name: 'saveAd',\r\n value: 'SaveAd',\r\n }, {\r\n name: 'smartCrop',\r\n value: 'SmartCrop',\r\n }, {\r\n name: 'manualCrop',\r\n value: 'ManualCrop',\r\n }, {\r\n name: 'teachingBubble',\r\n value: 'TeachingBubble',\r\n }, {\r\n name: 'viewAllPlacements',\r\n value: 'ViewAllPlacements',\r\n }, {\r\n name: 'feedback',\r\n value: 'Feedback',\r\n }, {\r\n name: 'addLogo',\r\n value: 'AddLogo',\r\n }],\r\n }],\r\n});\r\n\r\nexport const instrumentationScenarios = {\r\n MMAConversion: {\r\n scenarioName: 'mmaConversionScenario',\r\n scenarioValue: 'MMA Conversion Scenario',\r\n },\r\n RSA: {\r\n scenarioName: 'rsaAdCreatorScenario',\r\n scenarioValue: 'RSA Ad Creator Scenario',\r\n },\r\n MMA: {\r\n scenarioName: 'adCreatorScenario',\r\n scenarioValue: 'Ad Creator Scenario',\r\n },\r\n MSAN: {\r\n scenarioName: 'msanAdCreatorScenario',\r\n scenarioValue: 'MSAN Ad Creator Scenario',\r\n },\r\n MSANImage: {\r\n scenarioName: 'msanImageCrawlerScenario',\r\n scenarioValue: 'MSAN Image Crawler Scenario',\r\n },\r\n CopilotDisplayAd: {\r\n scenarioName: 'copilotDisplayAdCreatorScenario',\r\n scenarioValue: 'Copilot Display Ad Creator Scenario',\r\n },\r\n CopilotVideoAd: {\r\n scenarioName: 'copilotVideoAdCreatorScenario',\r\n scenarioValue: 'Copilot Video Ad Creator Scenario',\r\n },\r\n default: {\r\n scenarioName: 'defaultAdCreatorScenario',\r\n scenarioValue: 'Default Ad Creator Scenario',\r\n },\r\n};\r\n","import { noop } from 'underscore';\r\nimport { getAdCreatorSchema, instrumentationScenarios } from './instrumentation-schema';\r\n\r\nconst adCreatorScenarios = {};\r\nconst mockTrace = {\r\n trace: noop,\r\n startSignal: noop,\r\n stopSignal: noop,\r\n signal: noop,\r\n};\r\n\r\nexport function getAdCreatorInstrumentation(instrumentation, scenarioConfig) {\r\n const { scenarioName, scenarioValue } = scenarioConfig || instrumentationScenarios.default;\r\n\r\n const schema = getAdCreatorSchema(scenarioName, scenarioValue);\r\n\r\n if (!instrumentation[scenarioName]) {\r\n instrumentation.addScenario(schema);\r\n }\r\n\r\n if (!adCreatorScenarios[scenarioName] && instrumentation[scenarioName]) {\r\n adCreatorScenarios[scenarioName] = instrumentation[scenarioName].create();\r\n }\r\n\r\n const scenario = adCreatorScenarios[scenarioName];\r\n\r\n return scenario ? {\r\n fileUploadActivity: scenario.fileUpload.create(),\r\n smartEffectActivity: scenario.smartEffect.create(),\r\n editImageActivity: scenario.editImage.create(),\r\n editPlacementActivity: scenario.editPlacement.create(),\r\n saveAdActivity: scenario.saveAd.create(),\r\n websiteSuggestionActivity: scenario.websiteSuggestion.create(),\r\n websiteSuggestionCarouselActivity: scenario.websiteSuggestionCarousel.create(),\r\n smartCropActivity: scenario.smartCrop.create(),\r\n manualCropActivity: scenario.manualCrop.create(),\r\n teachingBubbleActivity: scenario.teachingBubble.create(),\r\n viewAllPlacementsActivity: scenario.viewAllPlacements.create(),\r\n feedbackActivity: scenario.feedback.create(),\r\n addLogoActivity: scenario.addLogo.create(),\r\n adCreatorScenario: scenario,\r\n } : {\r\n fileUploadActivity: mockTrace,\r\n smartEffectActivity: mockTrace,\r\n editImageActivity: mockTrace,\r\n editPlacementActivity: mockTrace,\r\n saveAdActivity: mockTrace,\r\n websiteSuggestionActivity: mockTrace,\r\n websiteSuggestionCarouselActivity: mockTrace,\r\n smartCropActivity: mockTrace,\r\n manualCropActivity: mockTrace,\r\n teachingBubbleActivity: mockTrace,\r\n viewAllPlacementsActivity: mockTrace,\r\n feedbackActivity: mockTrace,\r\n addLogoActivity: mockTrace,\r\n adCreatorScenario: scenario,\r\n };\r\n}\r\n","/* eslint-disable no-param-reassign */\r\nimport { any, reduce, isEmpty, keys } from 'underscore';\r\nimport { stringifySync } from '@bingads-webui/safe-json';\r\nimport { EffectChoiceKey } from '@bingads-webui-campaign/media-common-utils';\r\n\r\nexport function getListOfEffectSettings(flattenedImageList) {\r\n return keys(reduce(flattenedImageList, (effectList, { effectSettings }) => {\r\n if (effectSettings) {\r\n const { effectKey } = effectSettings;\r\n\r\n if (effectKey && effectKey !== EffectChoiceKey.None && !effectList[effectKey]) {\r\n effectList[effectKey] = true;\r\n }\r\n }\r\n return effectList;\r\n }, {}));\r\n}\r\n\r\nexport function serializeEffectSettingsForInstrumentation(flattenedImageList) {\r\n if (any(\r\n flattenedImageList,\r\n ({ effectSettings }) => effectSettings && (effectSettings.effectKey !== EffectChoiceKey.None)\r\n )) {\r\n const serializedSmartEffects = {};\r\n\r\n return reduce(flattenedImageList, (string, { effectSettings }) => {\r\n if (effectSettings) {\r\n const { effectKey, effectOptions } = effectSettings;\r\n\r\n if (effectKey !== EffectChoiceKey.None) {\r\n const serializedOptions = stringifySync(effectOptions);\r\n\r\n if (\r\n serializedSmartEffects[effectKey]\r\n && serializedSmartEffects[effectKey][serializedOptions]\r\n ) {\r\n return string;\r\n }\r\n serializedSmartEffects[effectKey] = serializedSmartEffects[effectKey] || {};\r\n serializedSmartEffects[effectKey][serializedOptions] = true;\r\n\r\n return `${string} effectKey=${effectKey};effectOptions=${effectOptions && !isEmpty(effectOptions) ? serializedOptions : 'none'}`;\r\n }\r\n }\r\n\r\n return string;\r\n }, 'effects used:');\r\n }\r\n return `effectKey=${EffectChoiceKey.None}`;\r\n}\r\n","/* eslint-disable no-script-url */\r\n/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport AdDistributionView from '@bingads-webui-campaign-legacy/advanced-settings/view/ad-distribution';\r\nimport classnames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React, { useCallback } from 'react';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { useBackboneView } from './use-backbone-view';\r\n\r\nconst getStyles = (_, { palette = {} }) => ({\r\n adDistributionContainer: {\r\n marginBottom: '16px',\r\n backgroundColor: `${palette.white}`,\r\n '& .infomark': {\r\n display: 'none',\r\n },\r\n '& .radio a.HelpTopic': {\r\n textDecoration: 'underline',\r\n },\r\n '& .radio > div': {\r\n marginLeft: '28px',\r\n },\r\n '& .expandedImage:before, .expanderImage:before': {\r\n marginRight: '4px',\r\n },\r\n '& .icon-marker': { // private/ui-next/packages/common-styles/src/advanced-settings-section-style.js\r\n textDecoration: 'none',\r\n outline: 'none',\r\n border: 'none',\r\n color: palette.themePrimary,\r\n lineHeight: '24px',\r\n fontSize: 14,\r\n borderBottom: '1px transparent',\r\n\r\n '&:hover': {\r\n color: palette.themeDarker,\r\n borderBottom: `1px solid ${palette.neutralSecondary}`,\r\n },\r\n\r\n '&:focus': {\r\n color: palette.themeDarker,\r\n border: `1px solid ${palette.neutralSecondary}`,\r\n },\r\n },\r\n },\r\n});\r\n\r\n// reference: private/campaign-legacy/packages/advanced-settings/view/advancedSettings.js\r\nexport const AdDistribution = React.memo((props) => {\r\n const { setAdDistributionView, options } = props;\r\n const adDistributionReactWrapper = useBackboneView(useCallback(() => new AdDistributionView({\r\n ...options,\r\n }).render(), [options]), setAdDistributionView);\r\n\r\n const classes = useDefaultStyles(getStyles);\r\n\r\n return (\r\n
\r\n {adDistributionReactWrapper}\r\n
\r\n );\r\n});\r\n\r\nAdDistribution.propTypes = {\r\n setAdDistributionView: PropTypes.func.isRequired,\r\n options: PropTypes.shape({}),\r\n};\r\n\r\nAdDistribution.defaultProps = {\r\n options: {\r\n },\r\n};\r\n","import React, { useState, useEffect } from 'react';\r\nimport { BackboneInstanceWrapper } from '@bingads-webui-react/backbone-instance-wrapper';\r\n\r\nexport function useBackboneView(viewFactory, onViewCreated, { managed = false, onViewRemoved, getCreatedView } = {}) {\r\n const [backboneView, setBackboneView] = useState(null);\r\n\r\n useEffect(() => {\r\n let view = getCreatedView != null ? getCreatedView() : undefined;\r\n if (view == null) {\r\n view = viewFactory();\r\n onViewCreated(view);\r\n }\r\n setBackboneView(view);\r\n return () => {\r\n if (onViewRemoved != null) {\r\n onViewRemoved();\r\n }\r\n };\r\n }, [onViewCreated, viewFactory, onViewRemoved, getCreatedView]);\r\n\r\n if (backboneView) {\r\n return ();\r\n }\r\n\r\n return null;\r\n}\r\n","import React, { useCallback, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { withCustomValidation, withError } from '@bingads-webui-react/validation';\r\nimport classnames from 'classnames';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { andComp, entityIs, propertyIs } from '@bingads-webui-campaign-react/form-error';\r\nimport { withControlErrorHandling, withUnvalidatedControlErrors } from '@bingads-webui-campaign-react/error-handling';\r\nimport { syndEnum } from '@bingads-webui-campaign-react/constants';\r\nimport { TextTitle, ValidatedPanel, getPanelErrorProps } from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { AdGroup } from '@bingads-webui/campaign-odata-schemas';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { AdDistribution } from './ad-distribution';\r\n\r\nconst getExtraStyles = () => ({\r\n adDistribution: {\r\n '& [role=\"radiogroup\"] .radio label': {\r\n fontWeight: 600,\r\n outline: 'none !important',\r\n '& input[type=\"radio\"]': {\r\n outline: 'none !important',\r\n },\r\n },\r\n },\r\n});\r\n\r\nconst LegacyAdDistributionWithValidation = (props) => {\r\n const {\r\n setAdDistributionView, options, getStyles, updateValidation,\r\n } = props;\r\n const classes = useDefaultStyles(getStyles);\r\n const activity = useContext(ActivityContext);\r\n const onChange = useCallback((newData) => {\r\n updateValidation([], { AdDistribution: newData });\r\n\r\n if (activity) {\r\n // signal activity to parent\r\n activity.signal(`onLegacyAdDistributionChange - ${JSON.stringify(newData)}`);\r\n }\r\n }, [activity, updateValidation]);\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nLegacyAdDistributionWithValidation.propTypes = {\r\n updateValidation: PropTypes.func.isRequired,\r\n setAdDistributionView: PropTypes.func,\r\n options: PropTypes.shape({}).isRequired,\r\n getStyles: PropTypes.func,\r\n};\r\n\r\nLegacyAdDistributionWithValidation.defaultProps = {\r\n setAdDistributionView: _.noop,\r\n getStyles: getExtraStyles,\r\n};\r\n\r\nexport const ValidatedAdDistribution = withCustomValidation(LegacyAdDistributionWithValidation);\r\n\r\nconst entityIsAdGroup = entityIs('adGroup');\r\nexport const ServerValidatedAdDistribution = withControlErrorHandling(withUnvalidatedControlErrors(withError(ValidatedAdDistribution, { filter: andComp(entityIsAdGroup, propertyIs('adDistribution')) })));\r\n\r\nconst getLocalizationMapping = (adDistribution) => {\r\n switch (adDistribution) {\r\n case syndEnum.BingYahooOnly:\r\n return _TL_('Microsoft sites and select traffic');\r\n case syndEnum.SearchPartnersOnly:\r\n return _TL_('Only partner traffic');\r\n case syndEnum.BingYahooAndSearchPartners:\r\n default:\r\n return _TL_('The entire Microsoft Advertising Network (recommended)');\r\n }\r\n};\r\n\r\nexport const AdDistributionWithValidationSection = ({\r\n data, onValidate, i18n, icon, ...rest\r\n}) => (\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n {...rest}\r\n >\r\n \r\n \r\n);\r\n\r\nAdDistributionWithValidationSection.propTypes = {\r\n onValidate: PropTypes.func.isRequired,\r\n data: PropTypes.shape({\r\n AdDistribution: PropTypes.string,\r\n Medium: PropTypes.string,\r\n }).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n icon: PropTypes.string,\r\n};\r\n\r\nAdDistributionWithValidationSection.defaultProps = {\r\n icon: null,\r\n};\r\n","export const legacySchedulingPanelStyles = (/* components, theme */) => ({\r\n '& .row': {\r\n marginLeft: 0,\r\n },\r\n '& label.accordion': {\r\n '& a': {\r\n '& span.expandedImage, span.expanderImage': {\r\n marginLeft: 0,\r\n marginRight: 8,\r\n },\r\n },\r\n },\r\n});\r\n","import _ from 'underscore';\r\nimport { CustomParametersView } from '@bingads-webui-campaign/upgrade-url';\r\n\r\n/**\r\n * This CustomParametersView subclass extends the base view\r\n * by subscribing to updates and triggering 'change:customParameters'\r\n * every time user changes them.\r\n * Note there are many places creating similar classes, due to apparent\r\n * broken logic in the base view. See:\r\n * - private\\ui-legacy\\Assets\\component\\form\\view\\control\\custom-params.es\r\n * - private\\ui-legacy\\Assets\\campaignui\\feature\\auto-targets\\view\\dynamic-target\r\n * \\custom-params-adapter.es\r\n * This class, hovewer, makes updates propagated\r\n * as Backbone events instead of Knockout observable changes.\r\n */\r\nexport class CustomParametersRealtimeView extends CustomParametersView {\r\n initialize(options = {}) {\r\n super.initialize(options);\r\n\r\n this.viewModel.parameterArray.subscribe((val) => {\r\n const newVal = _.filter(val, item => !_.isEmpty(item.Key) || !_.isEmpty(item.Value));\r\n\r\n this.trigger('change:customParameters', { isValid: this.isValid(), customParameters: newVal });\r\n });\r\n }\r\n}\r\n","import React, { useCallback, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { CustomParametersRealtimeView } from './custom-params-realtime-view';\r\n\r\nexport function CustomParameters({\r\n id, value, onChange, legacyI18n, permissions, forceUseIncreasedCount,\r\n}) {\r\n let container;\r\n\r\n const onCustomParametersUpdated = useCallback(({\r\n isValid, customParameters: newCustomParameters,\r\n }) => {\r\n onChange({ isValid, value: newCustomParameters });\r\n }, [onChange]);\r\n\r\n useEffect(() => {\r\n const view = new CustomParametersRealtimeView({\r\n i18n: legacyI18n,\r\n customParameters: value,\r\n permissions,\r\n forceUseIncreasedCount,\r\n });\r\n view.on('change:customParameters', onCustomParametersUpdated);\r\n view.render().$el.appendTo(container);\r\n\r\n return () => {\r\n view.remove();\r\n };\r\n // We want the view to be created only once,\r\n // hence ignoring all dependencies of this \"effect\".\r\n // This means that view will ignore changes to all props.\r\n // If need be to make view pick props updates, the view\r\n // need to provide a way to communicate such update to it.\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n return (\r\n
{ container = ref; }} />\r\n );\r\n}\r\n\r\nCustomParameters.propTypes = {\r\n id: PropTypes.string.isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n value: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n legacyI18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n permissions: PropTypes.shape({}).isRequired,\r\n forceUseIncreasedCount: PropTypes.bool,\r\n};\r\n\r\nCustomParameters.defaultProps = {\r\n forceUseIncreasedCount: false,\r\n};\r\n","import React from 'react';\r\n\r\nexport const ErrorsContext = React.createContext();\r\n","import { isString } from 'underscore';\r\nimport { include, endsWith } from 'underscore.string';\r\n\r\nexport const propertyIs = propertyName => error => error && (error.property === propertyName);\r\nexport const propertySuffixIs = propertySuffix =>\r\n error => error && endsWith(error.property, propertySuffix);\r\nexport const codeContains = text => error => error && include(error.code, text);\r\nexport const or = (f1, f2) => arg0 => f1(arg0) || f2(arg0);\r\nexport const and = (f1, f2) => arg0 => f1(arg0) && f2(arg0);\r\n\r\nexport const uniqueErrorTransform = (err = {}) => (isString(err) ?\r\n err :\r\n `${err.message}|${err.code}|${err.property}`);\r\n\r\nexport const errorMessage = campaignApiError => (campaignApiError &&\r\n (campaignApiError.isHtmlMessage ?\r\n { DangerousHtmlMessage: campaignApiError.message } :\r\n campaignApiError.message || campaignApiError.code || campaignApiError.toString())) || '';\r\n\r\nexport const isSchedulingError = or(codeContains('Schedule'), propertyIs('Scheduling'));\r\nexport const unmappedError = error => error && !error.property && !isSchedulingError(error);\r\n","import { isEmpty, chain } from 'underscore';\r\nimport React, { useEffect, useRef, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { ErrorMessages } from '@bingads-webui-react/validation';\r\nimport { ErrorsContext } from './error-context';\r\nimport { errorMessage, uniqueErrorTransform } from '../rules/errors';\r\n\r\nconst ErrorItem = React.memo(({ errors, errorFilter, children }) => {\r\n const focusElementRef = useRef();\r\n\r\n const filteredErrors = useMemo(\r\n () => chain(errors)\r\n .uniq(uniqueErrorTransform)\r\n .filter(errorFilter)\r\n .map(errorMessage)\r\n .value(),\r\n [errors, errorFilter]\r\n );\r\n\r\n useEffect(() => {\r\n if (errors && !errors.isHandled && !isEmpty(filteredErrors)) {\r\n // eslint-disable-next-line no-param-reassign\r\n errors.isHandled = true;\r\n focusElementRef.current.scrollIntoView({\r\n behavior: 'smooth',\r\n });\r\n }\r\n }, [filteredErrors, errors]);\r\n\r\n return (\r\n \r\n
\r\n {children}\r\n \r\n \r\n );\r\n});\r\n\r\nErrorItem.propTypes = {\r\n children: PropTypes.node,\r\n errors: PropTypes.arrayOf(PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.shape({}),\r\n ])),\r\n errorFilter: PropTypes.func.isRequired,\r\n};\r\n\r\nErrorItem.defaultProps = {\r\n children: undefined,\r\n errors: [],\r\n};\r\n\r\nexport const Errors = React.memo(({ filter: errorFilter, children }) => (\r\n \r\n {errors => (\r\n \r\n {children}\r\n \r\n )}\r\n \r\n));\r\n\r\nErrors.propTypes = {\r\n children: PropTypes.node,\r\n filter: PropTypes.func.isRequired,\r\n};\r\n\r\nErrors.defaultProps = {\r\n children: undefined,\r\n // filter: constant(true), // TODO: decide on the best default value\r\n};\r\n","import React, { useCallback, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { FinalUrlSuffixView } from '@bingads-webui-campaign/upgrade-url';\r\n\r\nexport function FinalUrlSuffix({\r\n id, value, onChange, legacyI18n,\r\n}) {\r\n let container;\r\n\r\n const onFinalUrlSuffixUpdated = useCallback(({\r\n isValid, finalUrlSuffix: newFinalUrlSuffix,\r\n }) => {\r\n onChange({ isValid, value: newFinalUrlSuffix });\r\n }, [onChange]);\r\n\r\n useEffect(() => {\r\n const view = new FinalUrlSuffixView({\r\n i18n: legacyI18n,\r\n editMode: true,\r\n finalUrlSuffix: value,\r\n showPlaceholder: true,\r\n });\r\n view.on('finalUrlSuffix:updated', onFinalUrlSuffixUpdated);\r\n view.render().$el.appendTo(container);\r\n\r\n return () => {\r\n view.remove();\r\n };\r\n // We want the view to be created only once,\r\n // hence ignoring all dependencies of this \"effect\".\r\n // This means that view will ignore changes to all props.\r\n // If need be to make view pick props updates, the view\r\n // need to provide a way to communicate such update to it.\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n return (\r\n
{ container = ref; }} />\r\n );\r\n}\r\n\r\nFinalUrlSuffix.propTypes = {\r\n id: PropTypes.string.isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n value: PropTypes.string,\r\n legacyI18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n};\r\n\r\nFinalUrlSuffix.defaultProps = {\r\n value: '',\r\n};\r\n","import _ from 'underscore';\r\nimport React from 'react';\r\nimport { withError } from '@bingads-webui-react/validation';\r\nimport { InputLite } from '@bingads-webui-react/primitive-validation';\r\n\r\nexport const InputWithExtra = withError(props => (\r\n
\r\n \r\n {props.extra()}\r\n
\r\n));\r\n","import { extend } from 'underscore';\r\nimport { withProps } from '@bingads-webui-react/with-props';\r\nimport { LanguageSelect as LanguageSelectControl } from '@bingads-webui-campaign-react/language-select';\r\nimport { globalizationModelSetup } from '@bingads-webui-campaign/ads-globalization';\r\n\r\nexport const LanguageSelect =\r\n withProps((props) => {\r\n const {\r\n LANGUAGES: enabledLanguageList,\r\n } = globalizationModelSetup({\r\n permissions: props.permissions,\r\n culture: props.i18n.getLocale(),\r\n });\r\n return extend(\r\n {},\r\n props,\r\n { enabledLanguageList }\r\n );\r\n }, LanguageSelectControl);\r\n","import _ from 'underscore';\r\n\r\nconst subscribeToDayTimeViewModel = callback => (dayTimeViewModel) => {\r\n dayTimeViewModel.startHour.subscribe(callback);\r\n dayTimeViewModel.startMinute.subscribe(callback);\r\n dayTimeViewModel.endHour.subscribe(callback);\r\n dayTimeViewModel.endMinute.subscribe(callback);\r\n};\r\n\r\nconst validateDayTimeRange = callback => (changes) => {\r\n callback();\r\n _.each(changes, ({ status, value: dayTimeViewModel }) => {\r\n if (status === 'added') {\r\n subscribeToDayTimeViewModel(callback)(dayTimeViewModel);\r\n }\r\n });\r\n};\r\n\r\nexport const subscribeToSchedulingViewLiveUpdates = (view, callback) => {\r\n const { ko_model: viewModel } = view;\r\n viewModel.startDate.subscribe(callback);\r\n viewModel.endDate.subscribe(callback);\r\n viewModel.flattenedDayTimeRanges.subscribe(callback);\r\n viewModel.dayTimeRanges.subscribe(validateDayTimeRange(callback), undefined, 'arrayChange');\r\n _.each(viewModel.dayTimeRanges(), subscribeToDayTimeViewModel(callback));\r\n viewModel.useSearcherTimeZone.subscribe(callback);\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useEffect, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withProps } from '@bingads-webui-react/with-props';\r\nimport { subscribeToSchedulingViewLiveUpdates } from './scheduling-view-realtime-subscription';\r\n\r\nfunction Scheduling({\r\n id, LegacySchedulingView, value, onChange, hideStartAndEndDate,\r\n}) {\r\n const view = useRef();\r\n let container;\r\n\r\n const validate = useCallback(() => {\r\n onChange({\r\n isValid: view.current.validate(),\r\n value: view.current.toObject(),\r\n });\r\n }, [onChange, view]);\r\n\r\n useEffect(() => {\r\n view.current = new LegacySchedulingView(_.extend(\r\n {},\r\n {\r\n labelClass: 'scheduling__label',\r\n controlClass: 'scheduling__control',\r\n model: value || {},\r\n hideStartAndEndDate,\r\n }\r\n ), [hideStartAndEndDate]);\r\n\r\n subscribeToSchedulingViewLiveUpdates(view.current, validate);\r\n\r\n view.current.render();\r\n view.current.$el.appendTo(container);\r\n\r\n return () => { view.current.remove(); };\r\n // We want the view to be created only once,\r\n // hence ignoring all dependencies of this \"effect\".\r\n // This means that view will ignore changes to all props.\r\n // If need be to make view pick props updates, the view\r\n // need to provide a way to communicate such update to it.\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n return (\r\n { container = ref; }}\r\n />\r\n );\r\n}\r\n\r\nScheduling.propTypes = {\r\n id: PropTypes.string.isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n value: PropTypes.shape({}),\r\n LegacySchedulingView: PropTypes.func.isRequired,\r\n hideStartAndEndDate: PropTypes.bool,\r\n};\r\n\r\nScheduling.defaultProps = {\r\n value: undefined,\r\n hideStartAndEndDate: false,\r\n};\r\n\r\nexport function buildSchedulingView(LegacySchedulingView) {\r\n return withProps({ LegacySchedulingView }, Scheduling);\r\n}\r\n","import _ from 'underscore';\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { InputWithExtra } from './input-with-extra';\r\n\r\nexport function TrackingTemplate(props) {\r\n return (\r\n \r\n {props.i18n.getString(_TL_('Example: http://www.trackingtool.com/tracking?url={lpurl}&type=1'))}}\r\n />\r\n \r\n );\r\n}\r\n\r\nTrackingTemplate.propTypes = {\r\n inputExtraClass: PropTypes.string,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n};\r\n\r\nTrackingTemplate.defaultProps = {\r\n inputExtraClass: '',\r\n};\r\n","import { constant, contains, result } from 'underscore';\r\n\r\nconst allExtensions = [\r\n 'action',\r\n 'app',\r\n 'call',\r\n 'callout',\r\n 'image',\r\n 'location',\r\n 'price',\r\n 'review',\r\n 'sitelink',\r\n 'structuredsnippet',\r\n 'promotion',\r\n 'filterlink',\r\n 'flyer',\r\n 'video',\r\n 'leadform',\r\n 'logo',\r\n];\r\n\r\nconst pmaxSupportedExtentions = [\r\n 'action',\r\n 'app',\r\n 'call',\r\n 'callout',\r\n 'image',\r\n 'location',\r\n 'price',\r\n 'review',\r\n 'sitelink',\r\n 'structuredsnippet',\r\n 'promotion',\r\n 'filterlink',\r\n 'flyer',\r\n 'video',\r\n 'leadform',\r\n 'logo',\r\n];\r\n\r\nconst appSupportedExtensions = [\r\n 'action',\r\n 'call',\r\n 'callout',\r\n 'image',\r\n 'location',\r\n 'price',\r\n 'review',\r\n 'sitelink',\r\n 'structuredsnippet',\r\n 'promotion',\r\n 'filterlink',\r\n 'flyer',\r\n 'video',\r\n 'leadform',\r\n 'logo',\r\n 'businessinfo',\r\n];\r\n\r\nconst hotelSupportedExtentions = [\r\n 'callout',\r\n];\r\n\r\nconst campaignType2SupportedExtensions = {\r\n PerformanceMax: pmaxSupportedExtentions,\r\n Hotel: hotelSupportedExtentions,\r\n App: appSupportedExtensions,\r\n};\r\n\r\nconst DomesticSimplifiedChineseSupportedExtentions = [\r\n 'action',\r\n 'filterlink',\r\n 'image',\r\n 'businessinfo',\r\n 'promotion',\r\n 'sitelink',\r\n];\r\n\r\nconst campaignTypeSupportedExtensions = campaignType => result(campaignType2SupportedExtensions, campaignType);\r\n\r\nexport const campaignTypeExtensionTypeFilter = (campaignType) => {\r\n const supportedExtensions = campaignTypeSupportedExtensions(campaignType);\r\n const filter = supportedExtensions ?\r\n extensionType => contains(supportedExtensions, extensionType.toLowerCase()) :\r\n constant(true);\r\n return filter;\r\n};\r\n\r\nexport const extensionCampaignTypeCheck = {\r\n allExtensions,\r\n pmaxSupportedExtentions,\r\n hotelSupportedExtentions,\r\n appSupportedExtensions,\r\n DomesticSimplifiedChineseSupportedExtentions,\r\n};\r\n","import { map, result, compose } from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport { getODataErrors } from '@bingads-webui-campaign/api-errors';\r\n\r\n/* eslint-disable no-param-reassign */\r\n// Maps single OData error to another error code and remaps the property to the\r\n// specified in `propertyName` property. The error code map is Code -> Code.\r\nconst mapErrorCodeForProperty = (errorCodeMap, propertyName) => (error) => {\r\n error.Code = result(errorCodeMap, error.Code, error.Code);\r\n error.Property = propertyName;\r\n return error;\r\n};\r\n\r\n// Maps a single OData error to another error code based on property specific\r\n// error codes mappings. The error code map is Property -> Code -> Code.\r\nconst mapErrorCode = errorCodeMap => (error) => {\r\n const propertySpecificMap = result(errorCodeMap, error.Property, {});\r\n\r\n error.Code = result(propertySpecificMap, error.Code, error.Code);\r\n return error;\r\n};\r\n\r\n// Maps a single OData error to another property. The error to property map is\r\n// Code -> Property.\r\n// This is usefull when MT doesn't include property information, but the error code\r\n// is applicable to a single property.\r\nconst mapErrorProperty = errorCodePropertyMap => (error) => {\r\n error.Property = result(errorCodePropertyMap, error.Code, error.Property);\r\n return error;\r\n};\r\n/* eslint-enable no-param-reassign */\r\n\r\n/**\r\n * Used on OData error response to a direct OData request promise, based on a single\r\n * model property. Remaps all errors to the specified in `propertyName` property,\r\n * first remapping properties based on error codes specified in the optional `errorCodePropertyMap`\r\n * @param {Object} i18n - the i18n instance\r\n * @param {Object} logger - the optional logger instance\r\n * @param {ErrorCodeMap} errorCodeMap - the error code to erro code map\r\n * @param {*} propertyName - the property to set all errors to\r\n * @returns {mapODataErrorsForPropertyFunc} - the mapping function\r\n */\r\nexport const mapODataErrorsForProperty =\r\n (i18n, logger, errorCodeMap = {}, propertyName) => (response) => {\r\n if (response.errors) {\r\n return getODataErrors(\r\n map(\r\n response.errors,\r\n mapErrorCodeForProperty(errorCodeMap, propertyName)\r\n ),\r\n i18n,\r\n logger\r\n );\r\n }\r\n\r\n return response;\r\n };\r\n\r\n/**\r\n * Used in legacy repository. Used on OData error response. Remaps all errors to the\r\n * specified in `propertyName` property, first remapping properties based on error\r\n * codes specified in the optional `errorCodePropertyMap`\r\n * @param {Object} i18n - the i18n instance\r\n * @param {Object} logger - the optional logger instance\r\n * @param {ErrorCodeMap} errorCodeMap - the error code to erro code map\r\n * @param {ErrorCodePropertyMap} errorCodePropertyMap - the error code to property map\r\n * @returns {mapODataErrorsFunc} - the mapping function\r\n */\r\nexport const mapODataErrors =\r\n (i18n, logger, errorCodeMap = {}, errorCodePropertyMap = {}) => (response) => {\r\n if (response.errors) {\r\n return getODataErrors(\r\n map(\r\n response.errors,\r\n compose(\r\n mapErrorCode(errorCodeMap),\r\n mapErrorProperty(errorCodePropertyMap)\r\n )\r\n ),\r\n i18n,\r\n logger\r\n );\r\n }\r\n\r\n return response;\r\n };\r\n\r\nconst throwReturn = func => (arg0) => { throw func(arg0); };\r\n\r\n// Used to wrap and process direct OData request promise based on single model property\r\nexport const withAsyncOdataErrorForProperty =\r\n (i18n, logger, errorCodeMap = {}, propertyName, promise) =>\r\n Promise\r\n .resolve(promise)\r\n .catch(throwReturn(mapODataErrorsForProperty(i18n, logger, errorCodeMap, propertyName)));\r\n","export const stringifyUnexpectedError = error =>\r\n (error instanceof Error ? error : JSON.stringify(error));\r\n"],"names":["TEXT_CONTENT","description","block","allow","listLabel","ariaLabel","useTagContentStyles","Text","fontWeight","tokens","fontWeightSemibold","List","alignItems","display","columnGap","spacingHorizontalXS","marginBottom","spacingVerticalL","ListItem","justifyContent","Container","flexDirection","ButtonContainer","spacingHorizontalL","width","MessageBar","PopoverContentBefore","paddingLeft","spacingHorizontalS","EntitySelector","maxWidth","marginTop","spacingVerticalS","useStaticStyles","CustomWebsiteListTagItemRenderer","content","classes","className","callMT","async","url","method","body","headers","response","fetch","JSON","stringify","ok","Error","json","getHeadersRequestByServerContext","serverContext","lcid","CurrentUser","Locale","PageTrackingId","Authorization","Token","CustomerAccountId","CurrentAccount","Id","CustomerId","AdvertiserCustomerID","RequestMethod","repository","getListsByAccountId","SharedEntityScope","SharedEntityType","SharedEntityId","ServicesEndpoints","CmAPI","Post","associateListsToCampaign","lists","campaignId","previousAssociations","this","getListsByCampaignId","previousSet","Set","map","newSet","removedAssociations","Array","from","filter","id","has","newAssociations","deleteListAssociationsByAccountId","length","Associations","EntityId","EntityType","Delete","payload","EntityIds","associated","queryBody","entities","item","SharedEntities","find","entity","WebsiteListSelector","listType","selected","onChange","i18n","useContext","I18nContext","isUnderlineLink","isGreyBackground","linkType","topic","text","getString","linkText","Label","_TL_","size","ServerEntitySelectorInline","fetchData","then","count","items","value","Name","customFilter","search","toLowerCase","includes","selectionMode","onRenderTagContent","onRenderItemContent","flatItem","ItemCount","popOverContentBefore","defaultProps","flatten","_","isCustomer","unAuthorized","children","withRecommendationServices","_ref","currentScenario","currentActivity","odataPath","WrappedComponent","HoC","props","_props$deps","deps","appConfig","permissions","pageContext","odata","cacheManager","getODataErrors","errI18n","customerService","ClientCenterCustomerService","ccBaseUrl","get","accountIdsPromise","isMCC","AccountIdListCache","getRecommendationCache","getCustomerHierarchy","cid","scope","customerId","uid","userId","returnOnlyDirectlyLinkedEntities","limit","MCC_ACCOUNTS_CAPPING","data","customerHierarchyEntities","flattenedAccounts","result","account","setRecommendationCache","Promise","source","urlUtil","dataService","downloadService","RecommendationService","showAlertHandler","oldAlertCenterAdapter","show","bind","CultureLcid","ccJsData","asyncScheduler","alertCenter","newI18n","vnextDeps","channel","RecommendationDownloadService","recommendationService","_jsx","_objectSpread","displayName","concat","getDisplayName","undefined","hoistNonReactStatics","getStyles","withStoreLoadingContainer","minHeight","paddingTop","withStoreErrorContainer","padding","lineHeight","flexGrow","marginLeft","UrlContainer","MobileUrlContainer","storeFormattedText","providerId","getStoreResponse","isStoreNotFoundFetchError","storeFetchError","isArray","raw","some","ErrorCode","createStoreDetails","name","storeUrl","DestinationUrl","withStoreFromProviderId","HOC","updateValidation","_useState","useState","fetchComplete","storeDetails","_useState2","_slicedToArray","storeFetchState","setStoreFetchState","activity","ActivityContext","storeQueries","useMemo","getStoreQueriesWithLocalMock","useEffect","getStore","getStoreError","trace","error","useDefaultStyles","loadingSpinner","Loading","isVisible","loadingError","Alert","message","level","icon","dismissible","React","noop","getTopLevelDomainFromUrl","hostNameParts","URL","hostname","split","partCount","isFinalUrlAlignedWithStoreDomain","finalUrl","storeDomain","finalUrlDomain","withStoreUrl","validationProps","storeDetailsInternal","useRef","current","domain","validationOnUrlChange","useCallback","finalUrlValidatorError","storeUrlText","_jsxs","classNames","prepopulateUrl","radiusShimmerElement","type","ShimmerElementType","line","height","gap","SectionShimmer","Shimmer","shimmerElements","__","core","placementTargetSettingContainer","creationCommonStyle","advancedSettingsSectionStyle","toggleButtonStyle","listStyle","margin","position","top","fontSize","RadioGroupOption","titleString","descriptionString","updateSelection","isSelected","setIsSelected","titleStyle","color","style","PlacementTargetingSettingsInternal","mobilePlacementsTitleString","mobilePlacementsDescriptionString","gamingPlacementsTitleString","gamingPlacementsDescriptionString","setActiveKey","intentOptions","activeKey","placementTarget","intentOptionsKeys","option","intentOptionsKeysMap","_defineProperty","onIntentOptionChanged","key","required","role","RadioGroup","renderItem","checked","getItemId","PlacementTargetSettings","withCustomValidation","PlacementTargetPanel","_useState3","_useState4","isLoading","expand","rest","_objectWithoutProperties","_excluded","ValidatedPanel","title","TextTitle","titleKey","topicKey","details","PlacementImg","attentionBeaconProps","getExtraProps","getPanelErrorProps","actuationProps","expandKey","PANEL_KEYS","PLACEMENT_TARGET","ErrorString","Fragment","variant","nowrap","styles","root","Errors","_ref2","errors","SpanWithComponent","_ref3","SpanText","Component","withVerticalAlignCenterSpan","defaultRender","Stack","horizontal","verticalAlign","nameErrorCode","getNameErrorMsg","_ref4","code","maxLength","number","validateName","_ref5","checkShouldShowError","attribute","isInvalid","isDirty","checkShouldShowErrors","isCampaignNameValid","defaultName","CampaignName","setName","campaingNameText","shouldShowError","classnames","TextField","label","placeholder","onRenderLabel","HelpPopup","e","fieldGroup","x","locationTargetsOptionKeys","everywhere","specific","bundleOrDefaultMarket","getLocationsString","settings","isAdGroupLevel","arguments","bidStrategyType","hideBid","targetOption","_settings$currentLoca","currentLocations","isTargetEverywhere","includedLocations","SelectionStatus","excludedLocations","forEach","target","index","location","LocalizationKeys","bidAdjustmentDropdown","bidAdjustmentInput","getLocationTargetTitleDetails","parentLevelSettings","currentLevelSettings","useParentLevel","BING_MAPS_API_KEY","toasterId","SpecificLocationTargetsEditor","setData","edmCampaign","allowPositiveLocationTargeting","allowNegativeLocationTargeting","showSearchTypeOptions","strings","defaultSelectedSearchType","isBrandAwarenessCampaignScenario","showBulkLocations","mapRef","mapBulkLocationsRef","isDrawerOpen","setIsBulkLocationsSearchDrawerOpen","_useToastController","useToastController","dispatchToast","dismissToast","ServerContext","makeLocationsCall","_scope$values","values","aid","Customers","$withKey","Accounts","Locations","select","IsBrandAwarenessCampaignScenario","toPromise","catch","console","log","makeBulkLocationsCall","searchTerms","countryCode","_scope$values2","signal","$makeCall","query","where","servingChannel","renderToaster","toastId","intent","toastTitle","toastMessage","Toast","ToastTitle","action","ToastTrigger","Button","appearance","Dismiss24Regular","onClick","ToastBody","pauseOnHover","timeout","handleBulkLocationsSearchDrawerOpen","searchOptions","getLocations","skipBingMapAPISearch","getIsRadiusTarget","targetingType","defaultGetIsRadiusTarget","TARGETING_TYPE","Included","setBulkLocationsData","targetedLocations","conflictingCount","duplicateCount","includedLocationIds","loc","excludedLocationIds","newIncludedLocations","newExcludedLocations","locId","push","_toConsumableArray","mergeLocations","Toaster","BulkLocationsSearchProvider","onBulkLocationsSearch","onAddLocations","setIsDrawerOpen","campaignApiToken","bingMapsApiKey","campaignApiServiceRoot","CampaignAPI","CampaignAPIPath","BulkLocationsSearchDrawer","BingMapsContextProvider","BingMapsLocationTargetsEditor","onBulkLocationButtonClick","locationTargets","negativeLocationTargets","isRadiusExcludeEnabled","maxLocationTargets","maxNegativeLocationTargets","onLocationTargetsChange","bingMapLocations","onNegativeLocationTargetsChange","customizedLocationEqual","isLegacyLocationAndRadiusEqual","singleLineShimmer","SingleLineShimmer","wrapperClass","mergeStyles","selectors","border","shimmerWithElementFirstRow","shimmerWithElementSecondRow","circle","RadiusShimmer","audienceShimmerElement","AudienceSignalShimmer","withShimmer","ShimmerWrapper","showShimmer","ERROR_ENTITY","Campaign","AdGroup","AssetGroup","CampaignLocation","CampaignRadius","CampaignNegativeLocation","CampaignLocationIntent","CampaignDayTimeCriterion","CampaignNegativeWebpage","AudienceGroupAssetGroupAssociation","BrandListAssociation","CnDefaultLocationTargetsViewModel","bidMode","Criterion","BidAdjustment","LocationCriterion","CountryCode","Latitude","LesLocationType","LocationId","LocationType","Longitude","NameTypeCombo","Type","OriginalBidAdjustment","OriginalCashbackPercent","CriterionType","Status","initLocations","peopleInLocation","peopleSearchingForLocation","globalDefaultLocationTargetsViewModel","getDefaultLocationTargetsViewModel","isCnMarket","getDefaultLanguagesViewModel","campaignLanguageStrings","None","Albanian","Arabic","Bosnian","Bulgarian","Croatian","Czech","Danish","Dutch","English","Estonian","Finnish","French","German","Greek","Hungarian","Icelandic","Italian","Japanese","Latvian","Lithuanian","Macedonian","Maltese","Norwegian","Polish","Portuguese","Romanian","Russian","Serbian","SimplifiedChinese","Slovak","Slovenian","Spanish","Swedish","TraditionalChinese","Turkish","Hebrew","Hindi","Malay","Thai","Indonesian","Tagalog","Vietnamese","entityIsCampaign","entityIs","campaignNameProp","andComp","propertyIs","ValidatedCampaignNameWithShimmer","RemainingCharsValidatedTextField","field","schema","formErrorProps","CampaignNamePanel","ValidatedFixedPanel","CAMPAIGN_NAME","LANGUAGE_TARGET","LOCATIONS","AD_SCHEDULE","BUDGET","START_END_DATES","SHORT_HEADLINES","DESCRIPTIONS","IMAGES","AUDIENCE_SIGNAL","VIDEOS","BID_STRATEGY","BID_VALUE","URL_OPTIONS","LOGOS","FINAL_URL_EXPANSION","AUTO_GEN_ASSETS","PAGE_FEEDS","CAMPAIGN_URL_OPTIONS","BRAND_EXCLUSIONS","COST_PER_SALE","SHOPPING","CONVERSIONS","PRONG_IMAGES","SPOTLIGHT_IMAGES","NEW_CUSTOMER_ACQUISITION","APP","DISCLAIMERS","LanguageTargetValidationAdapter","AdapterFactory","defaultValue","valueToInject","functionToInject","LanguageTargetValidatorFactory","defaultValidator","defaultErrors","isEmpty","SingleLanguageTargetValidator","SingleLanguageTargetValidationAdapter","ValidatedLanguageTarget","withError","withValidation","LanguageTarget","ValidatedSingleLanguageTarget","SingleLanguageTarget","campaignLanguagesProp","ServerValidatedLanguageTargetWithShimmer","withControlErrorHandling","withUnvalidatedControlErrors","LanguageTargetPanel","locale","CurrentLocale","DynamicPermissions","Permissions","dynamic","_props$data","Languages","lang","toString","LanguageImg","validator","minuteToSaveMap","ZERO","FIFTEEN","THIRTY","FORTY_FIVE","getDay","day","getMin","min","getTime","hour","is12","getAdScheduleDetails","adScheduleView","hideBidAdjustment","schedules","koModel","useCampaignSettings","campaignDayTimeRanges","dayTimeRanges","dateSettings","getDateSettings","EndDate","StartDate","to","hideAdScheduleBidAdjustments","timeDisplayType","len","schedule","dayTime","startHour","StartHour","endHour","EndHour","startMin","StartMinute","endMin","EndMinute","dateTimePart","Day","BidAdjustmentType","BidAdjustmentAmount","getDayTimeDetails","adScheduleUseSearcherTimeZone","getAdScheduleUseSearcherTimeZone","campaignDayTimeCriterions","ServerValidatedLegacyAdScheduleWithShimmer","ValidatedLegacyAdSchedule","AdSchedulePanel","setAdScheduleView","setAdScheduleViewCallback","view","adSchedules","AdScheduleImg","isCreation","entityIsAdgroup","adgroupLanguageProp","ServerValidatedLanguageTarget","SingleLanguageTargetPanel","Language","IsDomesticSimplifiedChineseEnabled","showSelectedLanguages","multiSelect","supportAllOption","additionalOptions","useLocalizeBudget","localizeBudget","budget","currency","formatCurrency","Number","toUpperCase","withSymbol","maximumFractionDigits","BudgetRange","BingAdsWebUIStaticLegacyPageContext","budgetTitle","budgetProp","ServerValidatedBudgetComponentWithShimmer","BudgetComponent","BudgetPanel","CurrencyCode","getResponsiveStyles","useResponsiveStyles","onDataChange","budgetAmount","campaignType","showBudgetSuggestion","isCampaignSetting","campaign","DailyRange","budgetSuggestion","Currency","GlobalMaximumBudget","DailyBudget","CeilingValue","GlobalMinimumBudget","FloorValue","budgetTitleDetails","onFieldChange","updatedData","prevData","onBudgetChange","newBudget","budgetAmountValue","onBudgetChangeFromBudgetSuggestion","shouldLocalize","Amount","onBudgetValidate","isValid","messages","isBudgetValid","budgetErrors","budgetSuggestionData","setBudgetSuggestionData","loadBudget","useBudgetSuggestionRepository","mode","MODE","EDITING","assetGroup","datas","finally","BudgetImg","as","headingClassName","showDropdown","onNotifyValidation","withSlider","BudgetSuggestionDialog","Budget","minBudget","maxBudget","defaultBudget","ValidatedLegacyDateSettingWithShimmer","ValidatedLegacyDateSetting","_Fragment","DateSettingsPanel","timeZone","getDateSettingDetails","StartEndDateImg","TimeZone","isCreate","initialValue","Date","ShortHeadlinesPanel","headlinesCardSummaryDetails","allAssetsExpand","featureName","setAddNewShortHeadlinesCallback","isOptional","iconAltText","HeadlineAssetCollection","showDeleteButton","DescriptionsPanel","descriptionsCardSummaryDetails","setAddNewDescriptionCallback","DescriptionAssetCollection","BaseImagePanel","panelKey","imagesData","containerRef","portalContainerState","addNewImageCallback","maxUploadNum","PermissionsContext","ImageListSummaryCardDetails","images","isLogos","ImageListPortalContainerWithControlErrorHandling","containerState","PerfMaxImageSuggestionCarousel","addImageCallback","ImagesPanel","imageExperienceAddNewImageCallback","imagesContainerRef","imageExperiencePortalContainerState","_excluded2","LogosPanel","logos","logoExperienceAddNewImageCallback","logosContainerRef","logoExperiencePortalContainerState","_excluded3","defaultProp","DEFAULT_MESSAGE","ConversionBasedBiddingBanner","conversionGoalsDetails","isCampaignCreation","usesMaxClicks","first","getUsesMaxClicks","hasActiveGoal","getHasActiveGoal","messageSettings","getTemplateToDisplay","onSetConversionTracking","save","layout","wordBreak","MessageBarBody","ReactTemplate","template","model","b","link","Link","disableShrink","DefaultButton","getBidStrategyStyles","bottomMargin","bidStrategyProp","ServerValidatedBidStrategyComponent","BidStrategyComponent","BidStrategyPanel","ScopeContext","bidRange","KeywordBidRange","options","conversionGoalDetails","bidStrategy","cpa","roas","isInitialAdditionalDetailsChecked","_options$bidStrategyC","bidStrategyComponentOptions","_options$biddingBanne","biddingBannerOptions","_options$scenario","scenario","bidStrategyOptions","hideAdditionalDetails","restBidStrategyComponentOptions","restBiddingBannerOptions","Object","assign","_objectDestructuringEmpty","bidStrategyTitleDetails","targetValue","bidStrategyText","MAX_CONVERSIONS","MAX_CONVERSIONS_VALUE","predefinedBidStrategy","BID_STRATEGY_OPTIONS_MAP","TargetCpaWarningBanner","addBottomMargin","onBidStrategyChange","newBidStrategy","onMarketingMetricChange","newMarketingMetric","isMarketingMetricValid","marketingMetricErrors","BidStrategyImg","selectedBidStrategy","defaultChecked","marketingMetricsValue","inputUnit","hideMessage","getUrlOptionsStyles","urlOptionsContainer","ValidatedUrlOptionsParameterWithShimmer","ValidatedUrlOptionsParameter","ValidatedUrlOptionsParameterWithErrorWithShimmer","ValidatedUrlOptionsParameterWithError","UrlOptionsPanel","isTrackingUrlTemplateRequired","isWithError","showDescription","urlParameterOptions","trackingUrlTemplate","TrackingUrlTemplate","finalUrlSuffix","FinalUrlSuffix","urlCustomParameters","UrlCustomParameters","urlOptions","urlOptionsDetails","getUrlOptionsDetails","UrlOptionsImg","PriceModelToRange","ManualCpa","ManualCpc","ValidatedBidValue","onBidChange","bidValueType","BiddingScheme","getBidRange","bidCeil","bidFloor","SearchBid","_getBidRange","CustomValidatedDefaultBid","placeholderText","currencyCode","properties","minimum","maximum","htmlFor","bidValueProp","ServerValidatedBidValueComponentWithShimmer","BidValuePanel","bidAmount","bidValueDetails","onBidValueChange","AppDetailsPanel","selectedApp","AppSetting","AppPanelWithShimmer","AppPanel","readOnly","AudienceSignalSection","childrenGap","src","SignalsSparkleImg","alt","modelToViewModelDayTimeTargets","targets","resetId","schedulingRows","criterion","multiplier","CriterionBid","Multiplier","FromHour","FromMinute","ToHour","ToMinute","window","Math","abs","formatDateInEntitySet","date","kendo","parseDate","dateString","useDateRangeDefault","preferenceService","PreferenceContext","waterFallDateFilters","WaterfallFilterStorage","getFilters","WaterfallFilterType","DateFilter","waterfallDateFilterProcessor","useP$DaterangeDefault","dateFilter","resolve","useDateRange","dateRange","start","RangeStartDate","end","RangeEndDate","getConversionGoalTitleDetails","conversionGoals","goalScopeSelection","goalSelection","Scopes","CAMPAIGN","join","getFinalUrlExpansionTitleDetails","isFinalUrlExpansionEnabled","selectedTargetsView","viewmodel","exactUrls","rules","conditions","WebPage","Parameter","Conditions","condition","Operator","ArgumentOperand","exactUrlsDetails","rulesDetails","getBidStrategyMap","MaxClicks","MaxConversions","MaxConversionValue","MaxImpressions","MaxReach","ManualCpm","ManualCpv","EnhancedCpc","CostPerSale","TargetRoas","TargetCpa","TargetImpressionShare","getBidTitleDetails","bid","getBidBudgetTitleDetails","amount","bidType","bidVal","formatPercent","getBudgetTitleDetails","getListingGroupDetails","isEditing","productFilter","listingGroup","operand","pluck","getStoreTitleDetails","storesData","storeContainerData","isAudience","storeId","ProviderId","countries","stores","store","salesCountry","SalesCountry","localInventoryAdsEnabled","LocalInventoryAdsEnabled","getSearchThemeDetails","searchThemes","SearchTheme","getDisclaimerTitleDetails","disclaimer","selectedDisclaimer","PercentCpc","Commission","Individual","individual","ExcludedSites","ExcludedIPs","Targeted","Computer","Desktop","Tablet","Smartphone","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday","ConversionGoalKeyToStringMapping","Campaign_Goals_Account_Level_Label","Campaign_Goals_Account_Level_Subtext","Campaign_Goals_Campaign_Level_Label","Campaign_Goals_Campaign_Level_Subtext","GoalSelector_List_Header","GoalSelector_Result_List_Header","GoalSelector_Radio_Aria_Label","GoalSelector_EmptyList_Content","EntitySelector_Search_Placeholder","UnifiedEventTracking_Goal_Creation_Type_Event_Category","GoalSelector_Result_Action_Bar","GoalSelector_TrackingStatus_Value_InactiveDueToTagUnavailable","GoalSelector_TrackingStatus_Value_NoRecentConversion","GoalSelector_TrackingStatus_Value_RecordingConversions","GoalSelector_TrackingStatus_Value_TagInactive","GoalSelector_TrackingStatus_Value_Unverified","Segment_Goal_Category_Download","Segment_Goal_Category_Purchase","Segment_Goal_Category_AddToCart","Segment_Goal_Category_BeginCheckout","Segment_Goal_Category_BookAppointment","Segment_Goal_Category_Contact","Segment_Goal_Category_GetDirections","Segment_Goal_Category_InStoreVisit","Segment_Goal_Category_Other","Segment_Goal_Category_OutboundClick","Segment_Goal_Category_PageView","Segment_Goal_Category_RequestQuote","Segment_Goal_Category_SignUp","Segment_Goal_Category_SubmitLeadForm","Segment_Goal_Category_Subscribe","Segment_Goal_Category_Unassigned","Campaign_Goals_Option_Goals","Campaign_Goals_Option_GoalSets","EntitySelector_Pagination_Page","EntitySelector_Pagination_TotalPageCountText","EntitySelector_Pagination_PreviousPageText","EntitySelector_Pagination_NextPageText","DeviceKeys","Computers","Tablets","Smartphones","ConnectedTVs","Devices","BidStrategyToDevices","iconStyle","backgroundSize","backgroundRepeat","backgroundPosition","containerStyle","borderRadius","flex","alignSelf","getStyle","computer","backgroundImage","computerIcon","tablet","tabletIcon","smartphones","smartphoneIcon","connectedTVs","connectedTVIcon","iconContainer","pickerContainer","formatDevice","device","formatDevices","devices","isCTVSupported","chain","sortBy","sortDevices","getDeviceDetails","formattedDevices","Device","deviceRestrictions","hideDeselectAll","validationPropsField","defaultSelectAll","supportedDevices","omit","isAnyDeviceSupported","difference","keys","Target","formatter","dimensions","availableDimensions","disabledDimensions","logger","targetClasses","containerClass","renderLabel","TargetInternal","GendersWithoutUnknown","Female","Male","Genders","Unknown","formatGender","gender","formatGenders","genders","sortGenders","Gender","hideUnknown","AgeRanges","EighteenToTwentyFive","TwentyFiveToThirtyFive","ThirtyFiveToFifty","FiftyToSixtyFive","SixtyFiveAndAbove","AgeRangesCampaignToAdInsight","formatAgeRange","ageRange","formatAgeRanges","ageRanges","sortAgeRanges","AgeRange","STEP_PATHS","CAMPAIGN_SETTINGS","AD_GROUP","ADS","getDefaultBudget","MinXandrDailyBudgetRangePerCurrency","getBudgetRange","Daily","Default","getInitialCampaignData","dealMinimumBid","campaignNamePrefix","xandrVideoDeal","xandrVideoCampaignType","isDisplayAds","biddingSchemeType","xandrVideoCampaignTypes","xandrVideoWeb","exchangeRateMapping","getAccountExchangeRateFromLocalStorage","getConvertedCurrencyDealMinimumBid","MinimumBid","val","generateNameSuggestionSuffix","ceil","CampaignSubType","CampaignSubTypeMapping","DisplayAds","BrandAwarenessVideoAds","CampaignType","getInitialCampaignViewModel","AddedDeviceBidAdjustment","RemovedDeviceBidAdjustment","AdGroupNegativeReferenceId","getInitialAdGroupData","deviceTypes","initialDeviceTypes","bidAdjustment","initialAgeRanges","genderTypes","initialGenderTypes","audiences","initialAudiences","FrequencyCapSettings","genreTargets","initialGenreTargets","CpmBid","getInitialAdGroupViewModel","CRITERION_LEVEL","modelToViewModelForTargetCriterions","_ref$level","_ref$campaignDeviceCr","campaignDeviceCriterions","positiveOdataType","negativeOdateType","DeviceName","negativeAgeRanges","GenderType","negativeGenderTYpes","GenreId","initialIndustryTargets","ProfileId","initialNegativeIndustryTargets","initialJobTargets","initialNegativeJobTargets","initialCompanyNameTargets","Size","Industry","CompanyName","initialNegativeCompanyNameTargets","initialContextualTargets","getSelectionFromCriterions","initialCampaignLevelDeviceTargets","campaignLevelDeviceTargets","industry","negativeIndustry","jobTargets","negativeJobTargets","companyNameTargets","negativeCompanyNameTargets","contextualTargets","deviceTargetingCampaignLevel","bulkModelToViewModelForLocationTargetsBase","locationTargetsModel","bundleCountries","_ref2$level","locations","intentId","intentOption","getLocationIntent","LocationIntentCriterion","IntentOption","shouldSelectBundleOption","modelToViewModelForLocationTargets","AdGroupCriterion","campaignLocationModel","adGroupId","_ref$overrideOriginal","overrideOriginalBidAdjustment","_ref$bidMode","_parseLocationTargets","parseLocationTargets","_parseLocationTargets2","campaignLocations","campaignIntentId","campaignIntentOption","campaignTargetOption","modelToViewModelForDayTimeTargets","modelToViewModelForAudience","audience","AudienceId","AudienceCriterion","AudienceName","AudienceType","BidMultiplier","BidType","modelToViewModelForAudienceCriterions","separateIMA","filteredAudiences","customSegmentsAudiences","interests","initialCustomSegments","initialInterests","customSegments","bulkModelToViewModelForDayTimeTargets","criterions","each","DayTimeCriterion","bulkModelToViewModelForLocationTargets","_ref6","viewModelToBulkModelForLocationTargets","_ref7","bundleLocationCriterions","adGroupViewModel","campaignViewModel","locationRestricted","convertLocationStateToLocationSchemaCampaign","viewModelToBulkModelForAdSchedules","_ref8","adSchedulesBulkUpsert","AdGroupName","viewModelToBulkModelForAudiences","_ref9","audienceRestricted","totalAudiences","initialTotalAudiences","added","initialAudience","removed","addedCustomSegments","customSegment","initialCustomSegment","removedCustomSegments","typePrefix","criterionType","viewModelToBulkModelForPlacements","_ref10","placements","initialPlacements","placement","initialPlacement","PlacementId","getTargetCriterion","_ref11","propKey","_ref11$overrideType","overrideType","_ref11$level","propValue","status","getDeviceCriterions","_adGroupViewModel$dat","deviceTypesWithBidAdjustment","deviceTargets","initialDeviceTargets","addedDevices","removedDevices","initialTarget","targetWithBid","DeviceCriterion","isBidAdjustmentSame","deviceTargetWithBid","deviceWithBid","initialDeviceTarget","DefaultDeviceBidAdjustment","targetWithBidAdjustmentList","hydrateCriterionWithBidAndId","initialTargetList","adddedCriterionList","_loop","i","matchingAgeRangeWithBid","criterionWithBidAdjustment","originalCrition","viewModelToBulkModelForTargeting","_ref14","removedDeviceCriterion","isXandrDeviceTargetEnabled","_ref14$isBoostEnabled","isBoostEnabled","_ref14$isDeviceTarget","isDeviceTargetingForDisplayEnabled","_ref14$isMultiAdForma","isMultiAdFormatEnabled","_ref14$isXandrServing","isXandrServing","_ref14$isPremiumStrea","isPremiumStreamingEnabled","addedDeviceCriterion","isXandrDisplayAdsCampaign","isNativeAds","isAudienceNativeAdsCampaign","isVideoAds","isXandrVideoAdsCampaign","isDealBasedAds","deal","isXandrDeviceTargetForOLVEnabled","isUpdate","_getDeviceCriterionsF","addedBackDevices","newlyAddedDevices","addedBackDevice","getDeviceCriterionsFull","displayAddDevices","displayRemovedDevices","_getDeviceCriterions","deviceRestricted","cpmTargets","cpvTargets","_getDeviceCriterionsV","deviceTargetsWhenNoInitialDeviceTargets","toRemoveDevices","getDeviceCriterionsVideoAds","adjustedAddedDeviceCriterion","addedCriterion","idx","ageTargets","initialAgeTargets","ageRangesWithBidAdjustment","addedAges","removedAges","addedAgeCriterion","removedAgeCriterion","removedNegativeAges","negativeAge","addedTarget","removedNegativeAgeCriterion","genderTypesWithBidAdjustment","addedGenders","removedGenders","addedGenderCriterion","removedGenderCriterion","removedNegativeGenders","negativeGenderType","removedNegativeGenderCriterion","addedGenres","removedGenres","addedGenreTargets","removedGenreCriterion","industryTargetsBidAdjustment","industryTargets","negativeIndustryTargets","addedIndustryTargets","removedIndustryTargets","addedIndustryCriterion","removedIndustryCriterion","negativeAddedIndustryTargets","negativeRemovedIndustryTargets","negativeAddedIndustryCriterion","negativeRemovedIndustryCriterion","_ref15","isIndustryTargetBidAdjustmentUpdated","jobTargetBidAdjustments","addedJobTargets","removedJobTargets","addedJobCriterion","removedJobCriterion","negativeAddedJobTargets","negativeRemovedJobTargets","negativeAddedJobCriterion","negativeRemovedJobCriterion","_ref16","isJobTargetBidAdjustmentUpdated","addedCompanyNameTargets","removedCompanyNameTargets","addedCompanyNameCriterion","removedCompanyNameCriterion","negativeAddedCompanyNameTargets","negativeRemovedCompanyNameTargets","negativeAddedCompanyNameCriterion","negativeRemovedCompanyNameCriterion","_ref17","updatedContextualTargets","getContextualTargetInfo","loadBundleCountries","_ref18","LocaleID","market","Market","getBundleCountriesAndBundleLocationCriterions","readAdGroupCriterions","_ref19","Campaigns","AdGroups","AdGroupCriterions","$cast","readPlacementCriterions","_ref20","readLocationCriterions","_ref21","readDayTimeCriterions","_ref22","readTargetingCriterions","_ref23","readAudienceCriterions","_ref24","AudienceAssociations","ServerValidatedRemainingCharsValidatedTextField","doesNeedSavingSelector","state","isCanceling","needsSaving","context","isSaving","hideStepHeaderSelector","stepInfo","hideStepHeader","serverContextSelector","stepsData","adGroupIdSelector","adGroupSelector","adGroup","scopeSelector","locationTargetsSelector","bundleCountriesSelector","bundleLocationCriterionsSelector","adSchedulesSelector","adSchedulesBulkUpsertModelSelector","genreTargetsSelector","ageRangesSelector","genderTypesSelector","deviceTypesSelector","deviceRestrictionsSelector","deviceRestrictedSelector","companyNameTargetsSelector","negativeCompanyNameTargetsSelector","jobTargetsSelector","negativeJobTargetsSelector","industrySelector","negativeIndustrySelector","locationRestrictedSelector","dealLocationListSelector","dealLocationList","genreRestrictedSelector","genreRestricted","ageRestrictedSelector","ageRestricted","genderRestrictedSelector","genderRestricted","audienceRestrictedSelector","customSegmentsSelector","campaignTimeZoneSelector","currentCampaign","campaignBiddingStrategySelector","campaignSubTypeSelector","campaignSettingsSelector","CampaignSettings","systemErrorsSelector","systemErrors","isEditingSelector","serverErrorsSelector","serverErrors","invalidSaveAttemptSelector","invalidSaveAttempt","dealDetailsSelector","permissionsSelector","placementsSelector","exclusionsSelector","exclusions","initialAdGroupSelector","formatAudience","targetedAudiences","excludedAudiences","targetedAudienceDetails","excludedAudienceDetails","navigate","siteMap","scopeService","routeId","path","getRoutePathById","history","pathname","UnstyledAudiencePicker","perfMarker","campaignSubType","campaignSettings","campaignBiddingStrategy","supportExclusion","isAudienceCreationWorkflow","isIMARedesignEnabled","hideCustomSegmentsOption","audienceAssociationRef","setAudienceAssociationRef","audienceAssociationView","associationView","AimAudienceAssociationView","isForVNext","hideExclusion","hideAssociationHeader","biddingScheme","router","navigateToAudiences","navigateToTags","canExpandAssociation","render","expandAssociation","expandExclusion","onAudienceListChanged","associationList","getAudienceCriterion","childElementCount","innerHTML","append","el","ensureLoadedAsync","compact","doubleListBoxViewModel","allAudiences","exclusionList","off","setLists","on","ref","newRef","ValidatedAudiencePicker","withDefaultStyles","withSiteMap","palette","uiblockerStyle","audienceModalStyles","modalWidth","audienceExpressionStyle","audienceCombinedListStyle","audienceAssociationSectionStyle","singleListBoxWidth","commonDoubleListBoxStyle","paginationStyle","searchboxStyle","convertToLocalStyle","glyphIconStyle","helpbuttonStyle","listStyleType","ValidatedTextField","FrequencyIntervals","FrequencyCapUnit","getKeyStringMap","formatFrequencyCapping","interval","CapValue","TimeGranularity","textStyles","dropDownStyles","dropdown","inputContainer","frequency","ValueAndInterval","onIntervalChanged","timeOptions","Dropdown","selectedKey","ValidatedValueAndInterval","ValidatedFrequencyCapping","_validationProps$data","_validationProps$data2","_validationProps$data4","_validationProps$data5","_validationProps$data6","errorMessage","setErrorMessage","onToggle","onCountValidate","_result$messages","capValue","customErrors","decimalLength","Toggle","onText","offText","onValidate","alwaysShowError","errorProcessor","oldError","DataSource","genreOptions","_useContext","DoubleListBoxContext","dispatch","slice","totalCount","propTypes","PropTypes","isRequired","GenreSelectionDoubleListBox","onSelectionChange","selectedItems","genreTarget","ThemeProvider","theme","components","ComponentSettings","ThemeFluent","DoubleListBoxContextProvider","initialSelectedItems","DoubleListBox","doubleListBox","availableItemsText","_ref$palette","backgroundColor","neutralLight","genreTargetAllOptionIds","radioOptions","formatGenreTargets","genreTargetStr","take","genreTargetId","ValidatedGenreTargets","isAllSelected","selectedOptionId","setSelectedOptionId","optionToString","onGenreTargetsChanged","selections","selectionIds","selection","onRadioGroupChange","getGenreOptions","getDealGenreOptions","getAdGroupStepStyles","collapsiblePanel","getCollapsiblePanelStyles","container","reachEstimate","reachEstimationError","getReachEstimateStyles","reachEstimateControl","estimateNote","panel","boxShadow","white","panelBody","reachEstimateTitle","impressionsCountMessage","impressionsCount","meterContainer","specificMeter","broadMeter","audienceSpecificLabel","audienceBroadLabel","right","arrow","zIndex","meterProps","AudienceMeter","estimatedImpressions","isImpressionTooSpecific","isDealEstimate","arrowRef","specificMeterRef","broadMeterRef","arrowStyles","setArrowStyles","arrowType","setArrowType","_useState5","_useState6","broadMeterStyle","setBroadMeterStyle","_useState7","_useState8","specificMeterStyle","setSpecificMeterStyle","calcBroadPos","offsetWidth","borderLeftWidth","moveAlongBroad","left","borderTopColor","totalWidth","clientWidth","estimatePos","visibility","calcSpecificPos","moveToSpecific","calcBroadMeterValue","meter","unitValueMap","unit","Thousand","Million","Billion","tooNarrowFlag","tooNarrowErrorMessage","ReachEstimate","accountId","shouldServeOnMSAN","_useFetch","useFetch","fetchReachEstimation","post","reachEstimationResponse","reachEstimationLoading","loading","currentTargets","setCurrentTargets","showPanel","setShowPanel","setIsLoading","setEstimatedImpressions","_useState9","_useState10","estimatedImpressionsText","setEstimatedImpressionsText","_useState11","_useState12","setIsImpressionTooSpecific","_useState13","_useState14","updateEstimatesOnMeter","estImpression","estImpressionsVal","estImpressionsUnit","estImpressionsUnitVal","estImpressionsText","IsAmplifyEnabled","updatePanel","currentErrorMessage","estimation","debouncedUpdateEstimate","Spinner","SpinnerSize","large","ariaLive","labelPosition","audienceMeterContainer","messageBarType","MessageBarType","warning","isMultiline","validatedReachEstimate","getDealPotentialImpression","dealImpression","DealImpressionPanel","isPanelMode","impression","_useBoolean","useBoolean","_useBoolean2","isOpen","_useBoolean2$","openPanel","setTrue","dismissPanel","setFalse","estimateLoaded","setEstimateLoaded","setEstImpression","dealDeleted","isDealDeleted","hideDealImpression","isNetflixDeal","GenreTargets","IsDealFilterEnabled","shouldShowGenre","CurrentCustomer","res","estImpressions","DealIds","Includes","bytesForHuman","BlockUi","blocking","loader","DealDetails","dealDetails","Panel","main","isLightDismiss","onDismiss","closeButtonAriaLabel","_DealImpressionPanel","getNetflixFrequencyCapping","background","NetflixTCAgreement","fetched","setFetched","accepted","setAccepted","readAccount","patchAccount","patch","NetflixTCAccepted","onAccept","small","Checkbox","href","disabled","FocusableErrorMessage","withActuation","ErrorMessages","Actuators","FocusableActuator","entityIsAdGroup","adGroupUrlOptionsProperties","notComp","anyComp","adGroupNameProp","adGroupBidProp","withLoadingShell","withStepLoadingShell","stepService","optimizedTargetingEnabled","setOptimizedTargetingEnabled","_useStepAdGroupSettin","legacyI18n","buildLegacyI18n","ValidationStringMap","subscribe","stateLoggingListener","unsubscribe","useSelector","campaignTimeZone","campaignSubtype","doesNeedSaving","initialAdGroup","_useExitWithoutSaving","useExitWithoutSavingConfirmation","navigationConfirmationPrompt","onAdGroupValidation","results","newAdGroupData","restResults","dataPatch","send","StepEvents","UPDATE_VALIDATION","_usePrevProp","usePrevProp","hasInvalidSaveAttemptChanged","_usePrevProp3","serverErrorsCompare","hasServerErrorsChanged","areBeaconsActive","useImpulse","showAllValidationErrors","setShowAllValidationErrors","getLocationIds","_locationTargets$curr","c","reduce","locationIds","cl","getExcludedLocationIds","_locationTargets$curr2","getRadiusCriterions","radiusTargets","CenterLatitude","RadiusCriterion","CenterLongitude","Radius","getAudienceIds","includeIds","getExcludedAudienceIds","getGenreTargets","getAgeRanges","ar","getDevices","XandrDeviceTarget","getCompanyNameTargets","getNegativeCompanyNameTargets","getJobTargets","getNegativeJobTargets","getIndustry","getNegativeIndustry","isAdScheduleInvalid","indexOf","getAdSchedule","a","_a$Criterion$DayTimeC","reachEstimationTargets","Age","Excludes","Job","Location","RadiusTargets","Audience","Genre","timeZoneMapper","getAccountIANATimeZone","useStepAdGroupSettingsState","_useStepAdGroupSettin2","stepState","stepApi","adGroupErrors","_serverContext$Dynami","XandrVideoCampaignsAudienceTargets","XandrNegativeTarget","ShowNetflixTCAccepted","AgeGenderDisclaimer","EnableMSANDisplayCampaigns","EnableMSANVideoCampaigns","EnableKeywordCustomSegments","ContentTargeting","ContentTargetingMSNSubcategories","CampaignLifetimeBudget","_serverContext$Netfli","NetflixEnabledCountryCodes","campaignShouldServeOnMSAN","isEnableMSANDisplayCampaignsEnabled","isEnableMSANVideoCampaignsEnabled","isMSANEnabled","isXandrServingCampaign","basicOptions","_useCollapseState","useCollapseState","_useCollapseState2","allAdGroupSettingsSections","adGroupSettingsExpandedSections","setAdGroupSettingsExpandedSections","flipAdGroupSettingsExpandAllState","_useCollapseState3","_useCollapseState4","allAdGroupSettingsTargetingSections","adGroupSettingsTargetingExpandedSections","setAdGroupSettingsTargetingExpandedSections","isDealTypeRestricted","shouldUsePredefinedFrequencyLimit","shouldHideDeviceListForDeal","VideoViewsCPMBidRange","VideoViewsCPVBidRange","KeywordCPMBidRange","shouldShowDealLocationTarget","isDealGenreRestricted","isXandrVideoCampaignsAudienceTargetsEnabled","shouldShowDeviceTarget","bidValidationProps","max","reachEstimationToNarrowErrorMessage","reachEstimation","basicSettingsExpand","collapseExpander","setActiveKeys","shouldHideAudiences","getAdScheduleDetailsCombined","adScheduleDetails","NetflixEnabledCountryCodesArr","BundleCountriesCodesArr","webExclusionsError","err","property","shouldShowNetflixTC","bundleCountry","isFCapEnabled","shouldSelectAllDeviceByDefault","CampaignSubTypes","AudienceStatic","deviceTargetingPanel","Collapse","audienceTargetingPanel","genreTargetingPanel","adScheduleTargetingPanel","hideMinuteOptions","hideUseCampaignSetting","ActuationGroup","isActive","AttentionBeaconGroup","FormErrorGroup","UnmappedFormErrors","ValidationGroup","horizontalAlign","needsActivation","allPanelItems","checkItems","skipItemsTypeCheck","activeKeys","noOverflowHidden","disableExpand","ValidatedLocationTargetSetting","SEARCH_TYPE","Boundary","hideIntent","PredictiveTargetingHeader","ServerValidatedWebExclusionsWithValidation","showSiteExclusion","parentData","ScopeLevel","exclusionData","webExclusionPropertyVal","token","ValidatedBootstrapPanel","defaultExpanded","BootstrapPanel","Heading","Title","toggle","Body","formatCompany","ValidatedCompanyPicker","formatIndustry","ValidatedIndustryPicker","formatJobFunction","ValidatedJobFunctionPicker","formatCustomSegment","headingRole","headingLevel","ValidatedCustomSegmentsPicker","getContentTargetingPlacementsSummaryText","ContentTargetingPlacements","msnSubcategoriesEnabled","PredictiveTargetingControlHeader","onToggleEnabledChanged","globalLegacyI18n","parseLoadDate","substring","parseDateFromAPIFormat","formatDateToAPIFormat","formatDate","modelToViewModelForDateSetting","bulkModelToViewModelForDateSetting","viewModelToBulkModelForDateSetting","viewModel","whitelistedSchemaPropertyKeysForModel","readonlyPropertyKeysForModel","modelToViewModelForAdGroup","adGroupModel","campaignModel","locationCriterionsModel","campaignLocationCriterionsModel","dayTimeCriterionsModel","targetCriterionsModel","audienceCriterionsModel","placementCriterionsModel","_ref$isAudienceAds","isAudienceAds","_ref$isAudienceAdGrou","isAudienceAdGroupEdit","_ref$isDisplayAds","_ref$isVideoAds","_ref$defaultAdGroupDa","defaultAdGroupData","_ref$defaultTargeting","defaultTargeting","_ref$isXandrServing","_ref$separateIMA","campaignExclusions","adgroupExclusions","ads","pick","AdRotationSettings","AdRotation","RotationType","UseOptimizedTargeting","CampaignBidStrategyName","adGroupSettings","BoostPlacementSetting","setting","BoostAdunitIds","AdUnitIds","BoostPublisherIds","PublisherIds","BoostAccountIds","AccountIds","BoostTriggerIds","TriggerIds","adGroupTargetSettings","Details","targetSetting","TargetAll","extend","modelToViewModelForPlacements","defaults","bulkModelToViewModelForAdGroup","originalAdGroupViewModel","isString","parseInt","viewModelToModelForAdGroup","_ref3$isDisplayPlus","isDisplayPlus","filteredReadonlyKeys","without","PricingModel","adUnitIds","TargetSetting","loadAdGroup","readAdGroup","adGroupResource","types","ResourceIdentifier","createOrUpdateAdGroup","bulkUpdate","bulkCreate","GENERIC_ERROR_MESSAGE_KEY","bulkUpsertAdGroupSettingsEntityErrorMap","getBulkUploadErrorType","parallelSave","_asyncToGenerator","_regeneratorRuntime","mark","_callee","modelToSave","savePromise","saveExclusionsPromise","saveExclusionsData","wrap","_context","prev","next","CampaignId","AdGroupId","AdvancedSettings","exclusionRepository","saveExtensions","t0","sent","t1","abrupt","resultExclusion","stop","_x","_x2","_x3","apply","getErrorsPlaceholders","saveAdGroup","_callee2","_ref2$customTargeting","customTargetingBulkModel","_ref2$isDisplayPlus","_ref2$flow","flow","activityLogger","adSchedulesModel","isMSANServingDNVCampaign","targetingModel","saveResult","filteredErrors","NegativeSitesResult","_serverErrors","_context2","isMSANServingDNV","DeviceTargetingForDisplay","MultiAdFormat","PremiumStreaming","AdGroupAudienceCriterions","isBulkWrappedResponse","modelConstraints","removeReferencedEntityInvalidIdErrors","modelToViewModelForBulkErrors","reject","EntityErrors","warn","stack","_x4","_x5","saveJustAdGroup","_callee3","_context3","_x6","_x7","viewModelToBulkModelForDeviceTargets","campaignDeviceTypesWithBidAdjustment","isTargetInitiallyRemoved","viewModelToModelForCampaign","CampaignSubTypeTextMapping","bulkModelToViewModelForCampaign","originalCampaignModel","bulkModelToViewModelForConversionGoals","originalCampaignViewModel","CampaignCriterions","loadCampaign","readCampaign","modelToViewModelForCampaign","_ref2$dayTimeCriterio","_ref2$isAudienceMMACT","isAudienceMMACTAOptOutEnabled","_ref2$isAudienceMMACT2","isAudienceMMACTADefaultOptOutEnabled","audienceSettings","audienceSetting","getVerifiedTrackingSettingsRead","modelToViewModelForConversionGoals","IsCallToActionOptOut","modelToViewModelForCallToActionSettings","needsLoading","getCampaignId","getAdGoupId","getCampaignSubType","getInitDeviceTypes","getBiddingScheme","loadData","_context$stepsData","loadPromises","_yield$Promise$props","locationCriterions","bundleCountriesAndLocationCriterions","dayTimeCriterions","targetCriterions","audienceCriterions","placementCriterions","_yield$Promise$props$","_yield$Promise$props$2","_yield$Promise$props$3","adGroupData","getDealDetails","load","otherErrors","hasServerErrors","patchStepsData","Boolean","hasCampaignData","clearErrors","stepAdGroupWizardConfig","StepMachine","stepStateMachine","StepMachineOptions","initialStepsData","machineId","initialContext","actions","guards","StepComponent","StepAdGroupSettings","canNavigateBackWithoutSaving","stepRepositoryConfig","saveData","scenarioName","createActivity","campaignResource","bulkUpsertCampaignSettingsEntityErrorMap","saveCampaign","_ref$viewModelToBulkM","_ref$bundleCountries","_ref$bundleLocationCr","_ref$viewModelToBulkM2","viewModelToBulkModelForDisclaimerAssociation","_ref$isAudienceMMACTA","_ref$viewModelToBulkM3","viewModelToBulkModelForVerifiedTrackingSettings","conversionGoalsAssociations","adExtensionAssociations","verifiedTrackingDataObj","CampaignConversionGoalAssociations","viewModelToBulkModelForConversionGoals","CallToActionOptOut","isDealCampaign","IsDealCampaign","dealModel","DealCriterion","DealId","campaignData","saveCampaignPromise","bulkOrSystemError","AdvanceSettings","Exclusions","savePromises","promises","wrappedPromises","p","reason","all","allSettledPromiseWrapper","_ref3$serverErrors","NegativeIPsResult","extractImpressionTrackingSetting","verifiedTrackingData","formatImpressionTrackingSetting","_extractImpressionTra","_extractImpressionTra2","advertiserEntityID","publisherEntityID","validatedImpressionTrackingSetting","impressionTrackingSettingRef","setImpressionTrackingSettingRef","impressionTrackingView1","impressionTrackingView","ImpressionTrackingView","isEnabledForVerifiedImpressionTrackingAtCampaignLevel","initialIASImpressionTrackingUrlValue","isImpressionTrackingUrlSectionVisible","isForBrandAwarenessCampaign","VerifiedTrackingData","campaignIdSelector","campaignSelector","scenarioNameSelector","getStepCampaignSettingsStyles","borderBottom","themePrimary","themeDarker","textDecoration","transform","overflow","campaignBudgetProp","campaignCampaignSettingsProp","ServerValidatedLegacyBudget","ValidatedLegacyBudget","ValidatedImpressionTrackingSetting","ImpressionTrackingSetting","campaignUrlOptionsProperties","_props$scope$values","_useStepCampaignSetti","onCampaignValidation","newCampaignData","useStepCampaignSettingsState","_useStepCampaignSetti2","campaignErrors","advertiserCustomerId","EnableDoubleVerify","IsMSANISPOTEnabled","shouldShowThirdPartyTrackginSetting","verifiedTrackingSettingsValidationProps","VerifiedTrackingSettings","allCampaignSettingsSections","campaignSettingsExpandedSections","setCampaignSettingsExpandedSections","allAdvancedCampaignSettingsSections","advancedCampaignSettingsExpandedSections","setAdvancedCampaignSettingsExpandedSections","advancedSettingsExpand","moreOptionsSectionExpanded","setNameAndTitleExpanded","onMoreOptionsSectionToggle","expanded","AudienceBudgetBidStrategy","validationDailyMinBudget","hideBudgetMinRecommendation","formatVendorSettings","ThirdPartyMeasurementV3WithValidation","ValidatedConversionGoals","showIPExclusion","hasIncomingSystemError","stepCampaignSettingsWizardConfig","withScope","StepCampaignSettings","fillLocationForDeal","_ref$exclusions","_ref$exclusions2","MmpFetchProvider","finalOptions","cachePolicy","interceptors","request","generateGuid","getDefaultOptions","getDefaultUrl","Provider","getAdsStepStyles","displayAdPanelRoot","paddingBottom","float","flexWrap","marginRight","fontFamily","addNewImageButton","selectedPanel","displayAdPanelHeader","displayAdPanelButton","cursor","displayAdPanelButtonContainer","previewContainer","emptyPreview","adPreviewRoot","adPreviewSizeHeader","adPreviewPageTitle","adPreviewSizeTitle","paddingRight","adPreviewPanel","displayAd","previewTag","previewTagText","pagination","pageControls","pageControl","pageControlPreviousIcon","pageControlNextIcon","paginationIndicatorDot","paginationButton","opacity","paginationIndicator","displayAdPanelContent","placementInfoTile","placementInfos","rowGap","enabledPlacement","enabledText","disabledPlacement","disabledText","fontStyle","placementLabel","placmentResolution","displayAdPanelFinalUrlContainer","displayImageLabel","getCreativeWorkbenchStyles","creativeWorkbenchRoot","header","copilotIcon","getImageSuggestionCarouselStyles","imageSuggestionCarouselRoot","croppedImage","getDisplayAdStepBaseStyles","displayAdsStepRoot","CropPreview","CroppedImageView","partnerTrafficString","onoTrafficString","standard","sizeText","targetText","mobile","getSupportedSize","supportedSize","sourceSize","baseSize","getStandardOnO","getStandardOthers","getMobileOnO","getMobileOthers","getOptionsTranslated","sourceWidth","sourceHeight","sourceOptions","resultOptions","getTargetOptions","standardOptions","mobileOptions","itemType","DropdownMenuItemType","Header","Divider","AdPreview","onUpdateCurrentImageIndex","disablePagination","customStyleFunction","useCustomStyleFunction","displayAds","defaultClasses","customClasses","currentPageIndex","currentImageIdx","setCurrentImageIdx","targetOptions","getPageAdjustedIndex","goToImageIndex","displayAdsInPage","currentAd","currentImage","image","resizeImageHeight","cropHeight","cropWidth","aspectRatio","currentImageTarget","targetWidth","targetHeight","adPreviewPageHeader","adPreviewTargetTitle","originalWidth","SourceX","cropX","SourceY","cropY","SourceWidth","FontIcon","iconName","tabIndex","onKeyDown","Pagination","totalPages","goToPrevPage","goToNextPage","goToPage","imageModelToViewModel","imageModel","exec","disableEdit","subType","cropSettings","SourceHeight","originalHeight","imagePlacementsToImage","crops","filtered","AspectRatiosForDisplayAds","_aspectRatio$minSize","minSize","minWidth","selectedImage","selectedIndex","findIndex","TargetWidth","TargetHeight","CropWidth","CropHeight","CropX","CropY","_ref4$cropSettings","imagePlacements","AddImage","oDataConfig","suggestionState","suggestionPoller","fullUrl","urlPrefix","onUpdateUrlPrefix","onUpdateUrlValue","dateFormat","displayImagePicker","setDisplayImagePicker","selectedMediaPanelSource","setSelectedMediaPanelSource","onNewImageSelected","isAADUser","creativeEditorProps","createChild","addImageChildPerfmarker","emptyFinalUrl","_useAssetLibraryImage","useAssetLibraryImagePicker","imagePickerError","setImagePickerError","clearImagePickerError","uploadImage","processUploadedImage","addImageByUrl","getStockImages","getInvestImages","onSelectStockImage","onImageSelected","onImagesSelected","socialMediaDataSource","customMediaSourceConfig","_suggestionState$sugg","suggestion","AddImageCrudAdComponent","setIsOpen","newOpen","imageExperienceProps","finalUrlProtocol","onUpdateFinalUrl","onUpdateFinalUrlPrefix","isMultimediaAd","imageOption","constants","defaultImageOption","managedViewSelectionState","updateManagedViewSelectionState","stockImageConfig","investImageConfig","socialImageConfig","assetLibraryConfig","preferencesService","onImageAddError","enableStockMultipleSelection","enableInvestMultipleSelection","enableWebsiteMultipleSelection","imageType","adCreatorScenario","buttonContainer","PopulateImages","instrumentation","onUpdateUrl","showAddButton","ScenarioContext","privateUrl","setPrivateUrl","validateAdUrl","urlPrefixValue","_getUrlPrefixAndDesti","getUrlPrefixAndDestination","_useWebsiteSuggestion","useWebsiteSuggestion","adContext","logActivity","hasErrorInUrl","scenarioValue","evt","newPrefix","_getUrlPrefixAndDesti3","original","newUrl","getUpdatedFullUrlOnPrefixUpdate","getUpdatedFullUrlOnTextUpdate","IsAADUser","wrapped","withPreference","withInstrumentation","NO_RECOMMENDATION","FinalURL","DEFAULT","SuperLeaderboard","Leaderboard","FullBanner","SmallLeaderboard","Banner","LargeBanner","MediumBanner","SmallBanner","HalfBanner","Billboard","LandscapeLargeBanner","Landscape","LargeRectangle","MediumRectangle","Rectangle","Square","Portrait","HalfPage","WideSkyscraper","Skyscraper","ratios","_ratios","ratioGrouping","XWide","Vertical","addPlacementToAd","ad","MTPlacement","templateName","trim","getPlacement","getRandomImageForEachRatioGroup","adsWithRatioGroups","randomImages","randomImage","group","randomAd","thumbnailUrl","suggestionId","recommendationId","processAndGroupAds","groupedAds","groupAdsByImages","imageUrls","imageUrl","groupedByPlacement","ratiosKey","groupAdsByRatio","imagesToSuggest","getItemsForListFromGroupedAds","ratioGroups","sampleAd","newItem","previewSrc","previewType","getAdsInMatchingGroup","matchingGroup","getODataConfig","document","isLocal","odataToken","oDataToken","oDataPath","DisplayAdsEditorDrawer","withComponentErrorLogging","DisplayAdsEditor","rootContainer","imageContainer","buttonContainerStyle","bottom","choiceGroupStyles","dropdownStyles","editButtonStyle","entityIsAd","Ad","imageTypeFromImage","standardDeviceType","mobileDeviceType","standardSizes","mobileSizes","CustomComponent","isLoadingImage","onRenderCustomAddImageButton","_useImagePicker","useImagePicker","isDisplayImageRegroupEnabled","IsDisplayImageRegroupEnabled","InstrumentationContext","isImageEditDisplayed","setIsImageEditDisplayed","isDisplayTemplateEditorOpen","setIsDisplayTemplateEditorOpen","deviceFormatType","setDeviceFormatType","mediaRepository","MediaRepository","cmpId","currentPlacementIndex","copilotRepository","useCopilotRepositoryContext","_useBrandKitService","useBrandKitService","brandKitDataService","brandkitApiState","shouldDirty","deviceType","_displayAd$image","findDeviceType","getImageTypeFromSize","creativeData","onEdit","creativeMeta","version","onRemoveImage","dropdownOptions","mobileOnO","mobileOnoOptions","mobileOthers","mobileOtherOptions","getMobileTargetOptions","standardOnO","standardOnoOptions","standardOthers","standardOtherOptions","getStandardTargetOptions","deviceFormatOptions","onChangeTarget","event","selectItem","currentItem","imagePlacementIndex","imageViewModel","selectedItem","imageKey","firstItem","minCropSize","getMinimumSizeForImage","baseImage","base","Src","Width","Height","onSaveEditImage","newAdData","placementTitle","_ref4$template","placementFromTemplate","getPlacementFromTemplate","resizeImageHeightForThumbnail","imageControl","IconButton","iconProps","HelpPopupInline","ChoiceGroup","AddImageButton","FinalUrls","MediaEditorPanel","onApply","aspectRatioConfig","hasRightRail","onRenderRightRailContent","previewImageUrl","_ref5$cropSettings","PreviewSingleRightRailWrapper","previewTitle","previewSettings","Preview","isThumbsUpDownEnabled","isTestEnv","isTestEnvironment","disabledPivotItemKeys","PivotItemKey","Effect","customizedDefaultSelectedPivotItemKey","Crop","containerClassName","editorContainer","hasFetchBrandKitData","useBrandKit","showNavigation","showSummaryBarControl","displayTemplatesDataService","imageData","metadata","onApplyCreative","sourceType","originalSourceType","ImageExperienceWithValidation","withServerContext","ValidatedImageExperience","ImageProp","dataObj","ValidatedFinalUrl","UrlInput","DisplayAdPanel","onUpdate","onRemovePanel","removeCloseButton","keyIndex","isSelectedPanel","i18nMerged","mergeI18n","finalUrlsObj","verifiedTrackingSettingObj","isIasTrackingEnable","isAdvancedURLOptionsForMSANDisplayEnabled","isImpressionTrackingForDisplayAndVideoEnabled","IsMOATEnabled","onValidationUpdate","advancedSettings","impressionTrackingUrls","ImpressionTrackingUrls","verifiedTrackingSettings","isDisplay","isVideo","ResponsiveAd","validateOnRender","disableRemoveAll","hideRatioLabel","ImageExperienceCircleUploadType","disableUploadTextField","ImagePickerContainerHeight","ThirdPartyMeasurementContainerWithValidation","videoAd","adType","DisplayAdsContainer","onAdsValidation","currentImageIndex","_props$ads","resetFields","isAdGridEditorMode","initialAdsCount","setDisplayAds","_usePageManager","usePageManager","currentPage","pages","onAddItem","removeItem","maxItems","onAddAd","numberOfAdsInPage","isAllValid","valid","isAllDirty","dirty","setClarityTag","shouldUpdate","vAd","rootDisplayAdsContainer","page","pageNumber","isCurrentPage","itemAtIdx","itemsBefore","itemsAfter","onImagePanelUpdate","splice","CTAInCreativeEditor","newCTA","stopPropagation","ValidatedLegacyCallToAction","CallToAction","valueText","CallToActionValue","ctaText","CallToActionText","isCustomCTAEnabled","formatBrandkitForAPI","obj","formattedObj","SubType","useDisplayAdsCopilot","RecommendationContext","setRecommendationContext","logBannerGenerated","useCopilotLoggers","isLoadingBrandKit","setIsLoadingBrandkit","brandkit","setBrandKit","isBrandKitEmpty","setIsBrandKitEmpty","isBrandKitEnabled","BrandKitUI","fetchDisplayAdsAssetRecommendations","fetchDisplayAdsTemplateDefinition","editDisplayAdsAssetRecommendations","getBrandKitDataByAccId","useBrandKitDataService","fetchBrandKit","restrictionCall","_response$BrandKits","_response$BrandKits$","_response$BrandKits$2","_response$BrandKits$3","_response$BrandKits$4","_response$BrandKits$5","isCopilotRegionRestricted","feature","accId","BrandKits","Fonts","Images","LandscapeLogos","Palettes","SquareLogos","DisplayAdsWithBrandKit","_args2","ImageAssets","Ads","_processAndGroupAds","RecommendedAssets","RecommendationId","fetchAigcTemplateDefinition","templateId","generate","updatedCreative","finalUrlForCopilot","useFluentV2Styles","makeStyles","button","addIcon","DisplayAdPanelWithCopilot","_useDisplayAdsCopilot","fluentV2Styles","isAdvancedURLOptionsForMSANVideoEnabled","onCTAUpdate","setCTA","onRenderCTA","imageObj","onGenerateCreative","creativeDataInner","AddRegular","AllRecommendationsPanel","onSelectImageSuggestion","_useContext2$","_useContext2$2","handleDismiss","handleSelectImageSuggestion","matchingAds","scrollableContent","animation","PanelType","custom","customWidth","headerText","FluentProvider","webLightTheme","ViewAllRecommendations","creatives","onFinalUrlEntered","onCreativeSelected","IMAGE_DIM","getFullyShownImagesCount","itemWidth","floor","getCarouselStyles","iconFontFamily","carouselParent","disabledCarouselParent","pointerEvents","objectFit","imageContainerLeftMargin","overflowX","overflowY","isCollapsible","imageParentContainer","imageParentLeftOffset","numberOfImages","imageClickableContainer","loadingMessageContainer","loadingText","panelHeading","panelTitle","panelIcon","panelHelpButton","imageHintRight","imageHintLeft","paddleBtn","moreIcon","themeDarkAlt","seeAll","whiteSpace","textOverflow","seeAllInHeader","useBrandKitHeader","spinner","getBlockerStyle","parentContainer","LoadingShimmer","shimmerElement","customElementsGroup","ShimmerElementsGroup","ImageView","setWidth","setHeight","resizeHeight","img","Image","onload","naturalWidth","naturalHeight","imgWidth","imgHeight","getImageDimension","DisplayAdsImageSuggestionCarousel","_ref3$maxUploadNum","_ref3$useBrandKit","setUseBrandKit","isSeeAllPanelOpen","setIsSeeAllPanelOpen","setImagesToSuggest","isCopilotEnabled","setIsCopilotEnabled","_useContext2","recommendationContext","reportRecommendations","logSuggestionsViewed","imageSuggestions","carouselState","carousel","isError","panelState","panelImages","hasMore","suggestionImages","onOffsetChange","offset","viewedImages","suggestionIds","onSelectImage","allGroupedAds","onSelectSeeAllImages","onRenderImage","classesProp","onBrandKitToggle","truncatedImages","isRestricted","ImageSuggestionCarousel","helpTopic","onSelectSeeAll","showEllipsisWhenNoMoreImages","showViewAllInHeader","enableBrandKit","stylingOverrides","initialImageContainerLeftMargin","seeAllLinkText","CreativeWorkbench","onFinalURLFocusOut","onCreateAds","isNewLogo","dataModel","setDataModel","useId","updateToast","finalUrlFromContext","finalUrlValidationProps","addingRecommendationToast","media","errorOnCreateAdsToast","DismissRegular","openRatioPicker","CopilotIcon","iconStyles","additionalProperties","onBlur","finalUrls","inline","useStyles","selectableImageContainer","shorthands","colorTransparentBackground","selectedImageContainer","colorPaletteBlueBorderActive","selectableImageList","gridTemplateColumns","ratioDescription","imageCheckbox","SelectableImage","onSelect","handleClick","imageDimension","dimensionList","maxHeightRatio","maxWidthRatio","ratio","mergeClasses","bordered","shape","fit","Badge","RatioPickerInternal","open","onOpenChange","onApplyButtonText","fill","creativeSelections","setCreativeSelections","isApplying","setIsApplying","onRatioApply","selectedCreatives","creative","onImageSelect","newSelectedCreative","Dialog","DialogSurface","DialogBody","DialogTitle","DialogTrigger","DialogContent","DialogActions","disableButtonEnhancement","RatioPicker","handleRatioPickerState","CreateAnotherAdMenu","onCreateWithAI","onCreateFromExistingImage","handleCreateWithAI","handleCreateFromExistingImage","Menu","MenuTrigger","Add20Regular","MenuPopover","MenuList","MenuItem","GlanceHorizontalSparkles20Regular","Image20Regular","CreateAdWithAiDialog","_useCopilotRepository2","initialFinalUrl","setFinalUrl","setImages","selectedImages","setSelectedImages","handleFinalUrlUpdate","handleSelectImages","ids","lastId","handleCreateAds","CreateDisplayAdDialog","onFinalUrlUpdate","onSelectedImagesUpdate","useCreateAds","addToAssetLibrary","addCreatives","creativesToAdd","savedImages","savedImage","creativeId","getProcessedCreative","DisplayAdsContainerWithCopilot","hideFooter","isEditScenario","useInitCopilotLoggers","logEnterFlow","copilotFinalUrl","setCopilotFinalUrl","isCreateAdDialogOpen","setIsCreateAdDialogOpen","onAddItemsToPage","newAds","isAdsEmpty","addCreativesToDisplayAds","currentItemCount","createAds","pageComponent","CampaignFetchProvider","CopilotRepositoryProvider","getLocale","recommendationType","AdEditor","adsModel","onUpdateCurrentVideoIndex","StepHeader","DisplayAdsWithCopilot","_ref2$data","_ref3$errors","useWizardService","_state$context$wizard","wizardData","_state$context$wizard2","editingAdId","currentStates","toStrings","PerformanceMarkerContext","setCurrentImageIndex","saveFailed","useFormService","newAdsData","removeEmptyAds","matchStepState","STEP_STATES","LOADING","SAVING","getVerifiedTrackingSettings","vendor","vendorName","keyMap","IAS_advertiserEntityId","IAS_publisherEntityId","Save","_useWizardService","isBlocking","FETCHING","onNextClicked","WIZARD_EVENTS","UPDATE_WIZARD_DATA","isCreateAnother","SAVE_AND_EXIT","buttonText","PrimaryButton","SaveAndCreateAnother","_useWizardService2","SAVE_AND_NEXT","EditAdFooter","cancelButtonText","CancelButton","DISPLAY_AD","StepConfig","Activity","scenarioContext","logSuggestionsApplied","imageRepository","ImageRepository","initialAds","savedAdModel","random","imageAsset","Asset","verifiedTrackingSetting","getImageByIdAsync","IdString","imgObjMT","imageObject","newImageFromMTObject","imageSources","Existing","croppedImagePlacements","getAutoCroppedImages","originalImageToCrop","isMultimediaAdinMSANEnabled","aspectRatioOption","defaultAspectRatioOption","metaData","uriDecodedMetaData","replace","decodedMetadata","parseSync","onSave","onSaveAndCreateAnother","isMultiAdFormatAd","saveAds","adSubType","EditDisplayAdWizardInternal","gridData","onCancel","wizardPerfMarker","config","initialStep","steps","onDone","onExited","initialWizardData","attachStepActivities","PerformanceMarkerProvider","immediateDone","Scenario","Wizard","WizardPerfMarker","wizardName","wizardMarker","LayoutContainer","DefaultTemplate","Layout","component","StepContainer","BusyBlocker","CancelWizardDialog","EditDisplayAdWizard","withLoggingContext","withRecommendationContext","adsSelector","adsErrorsSelector","adsErrors","otherErrorsSelector","useStepAdsSettingsState","StepAdsSettings","withPerformanceMarker","_useStepAdsSettingsSt","_useStepAdsSettingsSt2","imagePlacement","getBasicSettingsSection","stepAdsWizardConfig","oldAdsModel","modelToViewModelForAd","ScenarioName","STEP_INFOS","applyCommonSettingsPageSettings","XANDR_DISPLAY_ADS_CAMPAIGN_CRUD_SCENARIOS","XANDR_DISPLAY_ADS_CAMPAIGN_CREATION","stepList","XANDR_DISPLAY_ADS_AD_GROUP_CREATION","withContentFooter","XANDR_DISPLAY_ADS_CAMPAIGN_SETTINGS","XANDR_DISPLAY_ADS_AD_GROUP_SETTINGS","XandrDisplayAdsCampaignCreationPage","withTheme","routeToNavigateToWhenDone","StepWizard","wizardScenario","extraStepsData","XandrDisplayAdsCampaignSettingsPageImpl","currentAdGroup","XandrDisplayAdsCampaignSettingsPage","XandrDisplayAdsAdGroupSettingsPage","XandrDisplayAdsAdGroupCreationPage","flexShrink","withSignal","FabricPrimaryButton","CommonEventParser","FabricDefaultButton","FabricLink","FabricTextField","FabricIconButton","videoPanelRoot","videoRepairPanelRoot","videoPanelHeader","adPreviewTitle","adPreviewHeader","video","videoPanelContent","videoPanelFinalUrlContainer","starStyle","loadClipchampPlayer","videos","videoRef","currentVideoIdx","setCurrentVideoIdx","videoHeight","setVideoHeight","videoTemplateUIEnabled","VideoTemplateUI","goToVideoIndex","videosInPage","currentVideo","_currentVideo$data","_currentVideo$data$vi","ClipchampPlayer","videoUrl","controls","buttonContainerMultiple","addIconMultiple","AddVideoButton","multiVideoMode","overrideClasses","borderRadiusLarge","overlay","fontSizeBase200","qualityContainer","info","spacingVerticalXXL","borderRadiusMedium","fontSizeBase400","videoContainer","VideoSuggestionCard","videoAsset","onSelectVideoSuggestion","showQuality","_React$useState","_React$useState2","showVideo","setShowVideo","totalSeconds","duration","minutes","seconds","durationString","texts","scenes","scene","curlyTemplate","getVideoDescription","submitEvent","onMouseOver","onMouseOut","onFocus","autoPlay","loop","TimerRegular","PlacementQualityToText","quality","getPanelStyles","subtitle","neutralDark","panelHeader","contentHeading","gridContainer","VideoRecommendationsPanel","close","contentRef","videoAssets","isVideoAsAnAssetEnabled","VideoAsAnAsset","isAmplifyEnabled","currentTarget","closest","contains","onSelection","isFooterAtBottom","onRenderFooterContent","strong","VideoAdsSuggestionCarousel","_ref4$useBrandKit","videosToSuggest","setVideosToSuggest","videoSuggestions","onSelectIndex","alwaysShowViewAll","classOverrides","useVideoAdsCopilot","fetchVideoAdsAssetRecommendations","updatedResponse","taskManager","addTask","taskId","taskFn","campaignObjective","getLocalStorage","videoMetadata","sourceVideoBitRate","VideoAssets","convertBpsToKbps","bps","Kbps","pow","Placements","PlacementQualities","StarsToQuality","enabled","PlacementTitle","titleText","PlacementInfoWithStars","_videoAd$video2","_videoAd$video2$quali","numberOfStars","numberOfDisabledStars","Icon","bulkResult","curr","isEqual","entitySchema","getBulkUploadEntityType","bulkUpsertEntityErrorMap","identity","getBulkApiErrors","errorType","mappedErrorType","mapBulkUpsertErrors","ReferencedEntityInvalidIdErrors","bulkErrors","needsAttention","getDealDetailsStyle","getCountriesLocations","reqs","batch","needContentType","targetTypes","getTargetConstraints","targetType","ret","mandatory","DealTargetConstraints","devicesConstraints","TargetType","Mandatory","DealTargetRestrictionLevel","getLocationCritetions","_getLocationCritetions","locationTargetConverter","buildLocationCriterionFromSearchResult","_modelConstraints","isCreating","deviceConstraints","locationConstraints","ageConstraints","genderConstraints","audienceConstraints","dealLocationTargets","CurrencyCode2CurrencyId","AUD","BRL","ARS","CAD","CLP","COP","DKK","EUR","HKD","INR","JPY","MXN","NOK","NZD","PEN","SGD","ZAR","SEK","CHF","USD","GBP","VEF","TWD","MYR","PHP","VND","THB","IDR","DZD","BHD","EGP","IQD","JOD","KWD","LBP","MAD","QAR","OMR","SAR","TND","CNY","TRY","PLN","AED","ILS","NGN","KRW","MTCurrencyConvertor","AustralianDollar","BrazilianReal","CanadianDollar","SwissFranc","DanishKrone","EURO","UKPound","JapaneseYen","NorwegianKrone","NewZealandDollar","SwedishKrona","USDollar","SouthAfricanRand","ArgentinePeso","ChileanPeso","YuanRenminbi","ColombianPeso","UAEDirham","AlgerianDinar","EgyptianPound","HongKongDollar","IndonesianRupiah","IsraeliSheqel","IndianRupee","LebanesePound","MoroccanDirham","MexicanPeso","MalaysianRinggit","PeruvianNuevoSol","PhilippinePeso","Zloty","QatariRial","SaudiRiyal","SingaporeDollar","ThaiBaht","NewTaiwanDollar","VenezuelanBolivar","VietnamDong","NewTurkishLira","NigerianNaira","Won","minimumBid","dealCurrency","accountCurrency","dealCurrencyId","dealCurrencyToUSD","CurrencyId","accountCurrencyId","accountCurrencyToUSD","getVideoConstraintDuration","minimumDuration","isNumber","round","Seller","targetConstraintsToText","locationMap","_getTargetConstraints","uniq","dealOptions","decimal","fromFloatToString","CountryName","bytes","num","toFixed","viewModelToModelForAd","adsViewModel","isDeletedEntities","adViewModel","idString","verifiedTrackingSettingAttachmentObj","isUndefined","isNull","mapObject","Key","Value","verifiedTrackingSettingAttachment","fields","Videos","AdSubType","bulkModelToViewModelForAd","savedAdsData","oldAdsData","savedAdItem","sAd","adsWithIdsAttached","originalAdsModel","adResource","bulkUpsertAdSettingsEntityErrorMap","uploadVideo","queryParam","QueryParam","remove","getEntityFromScope","currentEntity","functionParams","postVideoByUrl","newVideoFromMTObject","_ref4$activity","videoPromises","uploadVideoIfNeeded","_splitUpdateAndCreate","adIds","adsToCreate","adsToUpdate","adsToDelete","adToSave","oldAd","adsNeededToCreate","adsNeededToUpdate","splitUpdateAndCreateAds","updateAds","updateData","updatedAds","createdAds","errorsWithPropertyIdsAttached","Property","attachUidToErrorProperty","setLocalStorageWithExpire","expire","time","now","localStorage","setItem","getKey","getFullYear","getMonth","_fetchExchangeRateMapping","baseURL","getItem","parse","expired","getLocalStorageWithExpire","fetchExchangeRateMapping","isCTVCampaign","getVideoDeal","videoDeal","supportsStorage","set","validateVideo","videoRequirementForDeal","skipQualityValidation","videoPanelButton","videoPanelButtonContainer","VideoExperienceWithValidation","withAssetLibraryServicesLoaded","renderError","copilotEnabled","isCTV","isVideoRequired","getVideo","isGoogleImportVideoAdNeedsRepair","IsGoogleImportVideoAdsEnabled","isUploading","setIsUploading","showVideoEditor","setShowVideoEditor","isFetchingVideo","setIsFetchingVideo","multiVideoList","setMultiVideoList","showMultiVideoCopilotEditor","setShowMultiVideoCopilotEditor","isVideoFetched","setIsVideoFetched","enableEdit","onErrorsUpdated","onUpdateMultiAdVideoList","list","validVideos","multiVideo","validationMessages","valVideo","aggregatedMessages","flat","onRenderItemDropdownCoPilot","validationMessage","onRenderItemDropDownForMultiModeWithCopilot","selectedVideo","selectedIdx","selectedMultiVideo","updatedVideos","getNewVideoObject","newVideo","videoObject","ImageExperienceVideo","updateWithNewVideo","_getNewVideoObject","v","updateWithNewVideoAtIdx","newVideoIdx","onChangeVideo","onChangeMultiVideo","fetchMetadata","getVideoPromises","existingVideos","UiBlocker","blockUiContainer","blockerIndicator","_createElement","VideoExperience","videoList","onVideoListUpdated","onVideoUploadStatusUpdate","showErrors","videoLabelHelpTopic","CustomAddVideoControl","onRenderItemDropdown","onReplace","enableShowingErrors","VideoTemplateEditorContextWrapper","videoMetaData","isDialog","CopilotVideoEditor","ValidatedVideoExperience","videoProp","multiAdDataObj","processingMessage","passiveMessages","updatedVideoAd","customErrorRendering","VideoExperienceWithPreference","VideoExperienceWithPreferenceRecommendationFetch","copilotFetchTaskManager","TaskManager","_useVideoAdsCopilot2","FinalUrl","validationState","setValidationState","updatedCopilotFinalUrl","setUpdatedCopilotFinalUrl","notifyCopilotFinalURLchange","handleKeyUp","onKeyUp","VideoPanel","oDataConfigProp","isForDeal","dealLoaded","isBiddingStrategyCPV","_useVideoAdsCopilot","shouldRepairGoogleImportVideoAd","VideoCopilotGeneration","allowedVideoSizes","videoExperienceCircleUploadType","videoPickerContainerHeight","EnableIASVerifiedImpressionTrackingURLsForBrandAwarenessCampaign","isMOATEnabled","isUsingVideoTemplates","enableLogoAndCTA","useClipchamp","ITEMS_PER_PAGE","addItemsToPages","lastPage","lastPageIndex","remaining","newPageItem","nextPageItem","setTotalPages","setCurrentPageIndex","totalAds","createPages","setPages","setCurrentPage","onAddPage","newPage","removeLastPage","valInt","newPages","removeItemFromLastPage","VideoAdsContainer","dealVideoRequirementText","currentVideoIndex","allowCopilotVideoGeneration","_props$biddingScheme","videoAds","setVideoAds","isAdsCopilotRegionRestricted","setIsAdsCopilotRegionRestricted","rootVideoAdsContainer","onVideoPanelUpdate","responses","EnglishName","dealId","dealDetail","filledDeal","errorCodeTarget","Deals","GetDealErrorCode","expectedError","responseErrArray","buttonStyle","AdEditorFooter","cancel","saveAndCreateAnother","setDeal","setDealLoaded","setServerErrors","setBlocking","fetchDeal","createScenario","versionForLog","getLogVersion","getLoggerWithoutPageInfo","videoRepository","createVideoRepository","folderRepository","createFolderRepository","createImageRepository","saveAd","adData","saveAnother","savedMaterial","savedLogo","uploadVideoMetadata","uploadedVideo","saveVideoAd","AdEditorWithErrorLogging","dealSelector","biddngSchemeSelector","isCTVCopilotVideoGenerationEnabled","CTVCopilotVideoGeneration","setCurrentVideoIndex","XANDR_VIDEO_CAMPAIGN_CRUD_SCENARIOS","XANDR_VIDEO_CAMPAIGN_CREATION","XANDR_VIDEO_AD_GROUP_CREATION","XANDR_VIDEO_CAMPAIGN_SETTINGS","XANDR_VIDEO_AD_GROUP_SETTINGS","XandrVideoCampaignCreationPage","getXandrVideoCampaignType","invalidate","XandrVideoCampaignSettingsPageImpl","XandrVideoCampaignSettingsPage","XandrVideoAdGroupSettingsPage","XandrVideoAdGroupCreationPage","getAdCreatorSchema","instrumentationScenarios","MMAConversion","RSA","MMA","MSAN","MSANImage","CopilotDisplayAd","CopilotVideoAd","default","adCreatorScenarios","mockTrace","startSignal","stopSignal","getAdCreatorInstrumentation","scenarioConfig","addScenario","create","fileUploadActivity","fileUpload","smartEffectActivity","smartEffect","editImageActivity","editImage","editPlacementActivity","editPlacement","saveAdActivity","websiteSuggestionActivity","websiteSuggestion","websiteSuggestionCarouselActivity","websiteSuggestionCarousel","smartCropActivity","smartCrop","manualCropActivity","manualCrop","teachingBubbleActivity","teachingBubble","viewAllPlacementsActivity","viewAllPlacements","feedbackActivity","feedback","addLogoActivity","addLogo","getListOfEffectSettings","flattenedImageList","effectList","effectSettings","effectKey","EffectChoiceKey","adDistributionContainer","outline","neutralSecondary","AdDistribution","setAdDistributionView","adDistributionReactWrapper","viewFactory","onViewCreated","_ref$managed","managed","onViewRemoved","getCreatedView","backboneView","setBackboneView","BackboneInstanceWrapper","instance","useBackboneView","AdDistributionView","LegacyAdDistributionWithValidation","newData","adDistribution","ValidatedAdDistribution","ServerValidatedAdDistribution","getLocalizationMapping","syndEnum","BingYahooOnly","SearchPartnersOnly","BingYahooAndSearchPartners","AdDistributionWithValidationSection","legacySchedulingPanelStyles","CustomParametersRealtimeView","_CustomParametersView","_classCallCheck","_callSuper","_inherits","_createClass","_this","_superPropGet","parameterArray","newVal","trigger","customParameters","CustomParametersView","CustomParameters","forceUseIncreasedCount","onCustomParametersUpdated","newCustomParameters","$el","appendTo","ErrorsContext","propertyName","propertySuffixIs","propertySuffix","endsWith","or","f1","f2","arg0","and","uniqueErrorTransform","campaignApiError","isHtmlMessage","DangerousHtmlMessage","isSchedulingError","include","unmappedError","ErrorItem","errorFilter","focusElementRef","isHandled","scrollIntoView","behavior","Consumer","onFinalUrlSuffixUpdated","newFinalUrlSuffix","FinalUrlSuffixView","editMode","showPlaceholder","InputWithExtra","InputLite","extra","LanguageSelect","withProps","enabledLanguageList","globalizationModelSetup","culture","LANGUAGES","LanguageSelectControl","subscribeToDayTimeViewModel","callback","dayTimeViewModel","startMinute","endMinute","subscribeToSchedulingViewLiveUpdates","ko_model","startDate","endDate","flattenedDayTimeRanges","changes","validateDayTimeRange","useSearcherTimeZone","Scheduling","LegacySchedulingView","hideStartAndEndDate","validate","toObject","labelClass","controlClass","buildSchedulingView","TrackingTemplate","inputExtraClass","pmaxSupportedExtentions","appSupportedExtensions","hotelSupportedExtentions","campaignType2SupportedExtensions","PerformanceMax","Hotel","App","campaignTypeExtensionTypeFilter","supportedExtensions","campaignTypeSupportedExtensions","extensionType","constant","extensionCampaignTypeCheck","allExtensions","DomesticSimplifiedChineseSupportedExtentions","mapODataErrorsForProperty","errorCodeMap","Code","mapErrorCodeForProperty","mapODataErrors","errorCodePropertyMap","compose","propertySpecificMap","mapErrorCode","mapErrorProperty","withAsyncOdataErrorForProperty","func","promise","stringifyUnexpectedError"],"sourceRoot":""}